diff options
| author | Timo Weingärtner <timo@tiwe.de> | 2014-05-09 22:21:52 +0200 | 
|---|---|---|
| committer | Timo Weingärtner <timo@tiwe.de> | 2014-05-09 23:13:57 +0200 | 
| commit | 655b6084a5133d01a513c976b8b2567a71ba30c4 (patch) | |
| tree | 707f3a17c773b60fe76d84087b55789c1ccd4094 /ssh-agent-filter.C | |
| parent | 823dba2ac91f84a4ae75372c5636ad49d6cef1ba (diff) | |
| download | ssh-agent-filter-655b6084a5133d01a513c976b8b2567a71ba30c4.tar.gz | |
throw system_error instead of calling perror, exit
Diffstat (limited to 'ssh-agent-filter.C')
| -rw-r--r-- | ssh-agent-filter.C | 50 | 
1 files changed, 20 insertions, 30 deletions
| diff --git a/ssh-agent-filter.C b/ssh-agent-filter.C index 36677f9..e2777c7 100644 --- a/ssh-agent-filter.C +++ b/ssh-agent-filter.C @@ -48,6 +48,10 @@ using std::flush;  #include <stdexcept>  using std::runtime_error; +#include <system_error> +using std::system_error; +using std::system_category; +  #include <utility>  using std::pair;  using std::move; @@ -57,6 +61,7 @@ using std::count;  #include <thread> +#include <cerrno>  #include <csignal>  #include <cstdlib>  #include <fcntl.h> @@ -113,10 +118,8 @@ string base64_encode (string const & s) {  }  void cloexec (int fd) { -	if (fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC)) { -		perror("fcntl"); -		exit(EX_UNAVAILABLE); -	} +	if (fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC)) +		throw system_error(errno, system_category(), "fcntl");  }  void arm(std::ios & stream) { @@ -133,10 +136,8 @@ int make_upstream_agent_conn () {  		exit(EX_UNAVAILABLE);  	} -	if ((sock = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0)) == -1) { -		perror("socket"); -		exit(EX_UNAVAILABLE); -	} +	if ((sock = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0)) == -1) +		throw system_error(errno, system_category(), "socket");  	cloexec(sock);  	addr.sun_family = AF_UNIX; @@ -148,10 +149,8 @@ int make_upstream_agent_conn () {  	strcpy(addr.sun_path, path); -	if (connect(sock, reinterpret_cast<struct sockaddr const *>(&addr), sizeof(addr))) { -		perror("connect"); -		exit(EX_UNAVAILABLE); -	} +	if (connect(sock, reinterpret_cast<struct sockaddr const *>(&addr), sizeof(addr))) +		throw system_error(errno, system_category(), "connect");  	return sock;  } @@ -160,10 +159,8 @@ int make_listen_sock () {  	int sock;  	struct sockaddr_un addr; -	if ((sock = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0)) == -1) { -		perror("socket"); -		exit(EX_UNAVAILABLE); -	} +	if ((sock = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0)) == -1) +		throw system_error(errno, system_category(), "socket");  	cloexec(sock);  	addr.sun_family = AF_UNIX; @@ -175,15 +172,11 @@ int make_listen_sock () {  	strcpy(addr.sun_path, path.c_str()); -	if (bind(sock, reinterpret_cast<struct sockaddr const *>(&addr), sizeof(addr))) { -		perror("bind"); -		exit(EX_UNAVAILABLE); -	} +	if (bind(sock, reinterpret_cast<struct sockaddr const *>(&addr), sizeof(addr))) +		throw system_error(errno, system_category(), "bind"); -	if (listen(sock, 0)) { -		perror("listen"); -		exit(EX_UNAVAILABLE); -	} +	if (listen(sock, 0)) +		throw system_error(errno, system_category(), "listen");  	return sock;  } @@ -308,8 +301,7 @@ bool confirm (string const & question) {  		char const * args[3] = { sap, question.c_str(), nullptr };  		// see execvp(3p) for cast rationale  		execvp(sap, const_cast<char * const *>(args)); -		perror("exec"); -		exit(EX_UNAVAILABLE); +		throw system_error(errno, system_category(), "exec");  	} else {  		// parent  		int status; @@ -470,10 +462,8 @@ int main (int const argc, char const * const * const argv) {  	if (not debug) {  		pid_t pid = fork(); -		if (pid == -1) { -			perror("fork"); -			exit(EX_OSERR); -		} +		if (pid == -1) +			throw system_error(errno, system_category(), "fork");  		if (pid > 0) {  			cout << "SSH_AUTH_SOCK='" << path.native() << "'; export SSH_AUTH_SOCK;" << endl;  			cout << "SSH_AGENT_PID='" << pid << "'; export SSH_AGENT_PID;" << endl; | 
