diff options
author | Michal Zidek <mzidek@redhat.com> | 2014-10-15 18:01:55 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2014-10-22 15:44:39 +0200 |
commit | 8bccd95e275fae760a991da394235e4e70e57bbd (patch) | |
tree | 1ecb2c372b0626c1feb1465cf7ae26626d3c1763 /src/responder/common | |
parent | 4a5cced91df68a85ef0b30de8efe104c8a0aab7a (diff) | |
download | sssd-8bccd95e275fae760a991da394235e4e70e57bbd.tar.gz sssd-8bccd95e275fae760a991da394235e4e70e57bbd.tar.xz sssd-8bccd95e275fae760a991da394235e4e70e57bbd.zip |
responders: Do not initialize pipe fd if already present
Allow to skip initialization of pipe file descriptor
if the responder context already has one.
Reviewed-by: Pavel Reichl <preichl@redhat.com>
Reviewed-by: Simo Sorce <simo@redhat.com>
Diffstat (limited to 'src/responder/common')
-rw-r--r-- | src/responder/common/responder.h | 2 | ||||
-rw-r--r-- | src/responder/common/responder_common.c | 20 |
2 files changed, 16 insertions, 6 deletions
diff --git a/src/responder/common/responder.h b/src/responder/common/responder.h index d23371078..8837e1142 100644 --- a/src/responder/common/responder.h +++ b/src/responder/common/responder.h @@ -159,7 +159,9 @@ int sss_process_init(TALLOC_CTX *mem_ctx, struct confdb_ctx *cdb, struct sss_cmd_table sss_cmds[], const char *sss_pipe_name, + int pipe_fd, const char *sss_priv_pipe_name, + int priv_pipe_fd, const char *confdb_service_path, const char *svc_name, uint16_t svc_version, diff --git a/src/responder/common/responder_common.c b/src/responder/common/responder_common.c index a262a2c14..85aa04335 100644 --- a/src/responder/common/responder_common.c +++ b/src/responder/common/responder_common.c @@ -689,9 +689,11 @@ static int set_unix_socket(struct resp_ctx *rctx) if (rctx->sock_name != NULL ) { /* Set the umask so that permissions are set right on the socket. * It must be readable and writable by anybody on the system. */ - ret = create_pipe_fd(rctx->sock_name, &rctx->lfd, 0111); - if (ret != EOK) { - return ret; + if (rctx->lfd == -1) { + ret = create_pipe_fd(rctx->sock_name, &rctx->lfd, 0111); + if (ret != EOK) { + return ret; + } } accept_ctx = talloc_zero(rctx, struct accept_fd_ctx); @@ -710,9 +712,11 @@ static int set_unix_socket(struct resp_ctx *rctx) if (rctx->priv_sock_name != NULL ) { /* create privileged pipe */ - ret = create_pipe_fd(rctx->priv_sock_name, &rctx->priv_lfd, 0177); - if (ret != EOK) { - goto failed; + if (rctx->priv_lfd == -1) { + ret = create_pipe_fd(rctx->priv_sock_name, &rctx->priv_lfd, 0177); + if (ret != EOK) { + goto failed; + } } accept_ctx = talloc_zero(rctx, struct accept_fd_ctx); @@ -755,7 +759,9 @@ int sss_process_init(TALLOC_CTX *mem_ctx, struct confdb_ctx *cdb, struct sss_cmd_table sss_cmds[], const char *sss_pipe_name, + int pipe_fd, const char *sss_priv_pipe_name, + int priv_pipe_fd, const char *confdb_service_path, const char *svc_name, uint16_t svc_version, @@ -779,6 +785,8 @@ int sss_process_init(TALLOC_CTX *mem_ctx, rctx->sss_cmds = sss_cmds; rctx->sock_name = sss_pipe_name; rctx->priv_sock_name = sss_priv_pipe_name; + rctx->lfd = pipe_fd; + rctx->priv_lfd = priv_pipe_fd; rctx->confdb_service_path = confdb_service_path; rctx->shutting_down = false; |