summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Reichl <preichl@redhat.com>2014-10-23 15:05:05 +0100
committerJakub Hrozek <jhrozek@redhat.com>2014-10-27 19:08:49 +0100
commitf3b9a5b3cf62124bdb5fc11ae2fe6a89ff921539 (patch)
tree999e93af0069384ecc9f056e1bb08e3cc759a514
parenta859ef56cf6c0df732d022b66819caf4d401a0a2 (diff)
downloadsssd-f3b9a5b3cf62124bdb5fc11ae2fe6a89ff921539.tar.gz
sssd-f3b9a5b3cf62124bdb5fc11ae2fe6a89ff921539.tar.xz
sssd-f3b9a5b3cf62124bdb5fc11ae2fe6a89ff921539.zip
RESPONDERS: refactor create_pipe_fd()
Resolves: https://fedorahosted.org/sssd/ticket/2470 Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
-rw-r--r--src/responder/common/responder.h2
-rw-r--r--src/responder/common/responder_common.c21
2 files changed, 13 insertions, 10 deletions
diff --git a/src/responder/common/responder.h b/src/responder/common/responder.h
index 8837e1142..cd2b3232c 100644
--- a/src/responder/common/responder.h
+++ b/src/responder/common/responder.h
@@ -178,7 +178,7 @@ responder_get_domain(struct resp_ctx *rctx, const char *domain);
errno_t responder_get_domain_by_id(struct resp_ctx *rctx, const char *id,
struct sss_domain_info **_ret_dom);
-int create_pipe_fd(const char *sock_name, int *fd, mode_t umaskval);
+int create_pipe_fd(const char *sock_name, int *_fd, mode_t umaskval);
/* responder_cmd.c */
int sss_cmd_empty_packet(struct sss_packet *packet);
diff --git a/src/responder/common/responder_common.c b/src/responder/common/responder_common.c
index 85aa04335..9a13c95d6 100644
--- a/src/responder/common/responder_common.c
+++ b/src/responder/common/responder_common.c
@@ -584,24 +584,25 @@ static int sss_dp_init(struct resp_ctx *rctx,
return EOK;
}
-int create_pipe_fd(const char *sock_name, int *fd, mode_t umaskval)
+int create_pipe_fd(const char *sock_name, int *_fd, mode_t umaskval)
{
struct sockaddr_un addr;
errno_t ret;
+ int fd;
- *fd = socket(AF_UNIX, SOCK_STREAM, 0);
- if (*fd == -1) {
+ fd = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (fd == -1) {
return EIO;
}
umask(umaskval);
- ret = set_nonblocking(*fd);
+ ret = set_nonblocking(fd);
if (ret != EOK) {
goto done;
}
- ret = set_close_on_exec(*fd);
+ ret = set_close_on_exec(fd);
if (ret != EOK) {
goto done;
}
@@ -619,13 +620,13 @@ int create_pipe_fd(const char *sock_name, int *fd, mode_t umaskval)
"Cannot remove old socket (errno=%d), bind might fail!\n", ret);
}
- if (bind(*fd, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
+ if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
DEBUG(SSSDBG_FATAL_FAILURE,
"Unable to bind on socket '%s'\n", sock_name);
ret = EIO;
goto done;
}
- if (listen(*fd, 10) != 0) {
+ if (listen(fd, 10) == -1) {
DEBUG(SSSDBG_FATAL_FAILURE,
"Unable to listen on socket '%s'\n", sock_name);
ret = EIO;
@@ -638,8 +639,10 @@ done:
/* we want default permissions on created files to be very strict,
so set our umask to 0177 */
umask(0177);
- if (ret != EOK) {
- close(*fd);
+ if (ret == EOK) {
+ *_fd = fd;
+ } else {
+ close(fd);
}
return ret;
}