From 8bccd95e275fae760a991da394235e4e70e57bbd Mon Sep 17 00:00:00 2001 From: Michal Zidek Date: Wed, 15 Oct 2014 18:01:55 +0200 Subject: 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 Reviewed-by: Simo Sorce --- src/responder/autofs/autofssrv.c | 2 +- src/responder/common/responder.h | 2 ++ src/responder/common/responder_common.c | 20 ++++++++++++++------ src/responder/ifp/ifpsrv.c | 2 +- src/responder/nss/nsssrv.c | 2 +- src/responder/pac/pacsrv.c | 2 +- src/responder/pam/pamsrv.c | 4 ++-- src/responder/ssh/sshsrv.c | 2 +- src/responder/sudo/sudosrv.c | 2 +- 9 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/responder/autofs/autofssrv.c b/src/responder/autofs/autofssrv.c index 931cf018b..12a7a777e 100644 --- a/src/responder/autofs/autofssrv.c +++ b/src/responder/autofs/autofssrv.c @@ -132,7 +132,7 @@ autofs_process_init(TALLOC_CTX *mem_ctx, autofs_cmds = get_autofs_cmds(); ret = sss_process_init(mem_ctx, ev, cdb, autofs_cmds, - SSS_AUTOFS_SOCKET_NAME, NULL, + SSS_AUTOFS_SOCKET_NAME, -1, NULL, -1, CONFDB_AUTOFS_CONF_ENTRY, SSS_AUTOFS_SBUS_SERVICE_NAME, SSS_AUTOFS_SBUS_SERVICE_VERSION, 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; diff --git a/src/responder/ifp/ifpsrv.c b/src/responder/ifp/ifpsrv.c index 8d8fe885a..eddeec981 100644 --- a/src/responder/ifp/ifpsrv.c +++ b/src/responder/ifp/ifpsrv.c @@ -310,7 +310,7 @@ int ifp_process_init(TALLOC_CTX *mem_ctx, ifp_cmds = get_ifp_cmds(); ret = sss_process_init(mem_ctx, ev, cdb, ifp_cmds, - NULL, NULL, + NULL, -1, NULL, -1, CONFDB_IFP_CONF_ENTRY, SSS_IFP_SBUS_SERVICE_NAME, SSS_IFP_SBUS_SERVICE_VERSION, diff --git a/src/responder/nss/nsssrv.c b/src/responder/nss/nsssrv.c index dbbdb4f84..cfb146464 100644 --- a/src/responder/nss/nsssrv.c +++ b/src/responder/nss/nsssrv.c @@ -392,7 +392,7 @@ int nss_process_init(TALLOC_CTX *mem_ctx, ret = sss_process_init(mem_ctx, ev, cdb, nss_cmds, - SSS_NSS_SOCKET_NAME, NULL, + SSS_NSS_SOCKET_NAME, -1, NULL, -1, CONFDB_NSS_CONF_ENTRY, NSS_SBUS_SERVICE_NAME, NSS_SBUS_SERVICE_VERSION, diff --git a/src/responder/pac/pacsrv.c b/src/responder/pac/pacsrv.c index b76691de8..e427cd756 100644 --- a/src/responder/pac/pacsrv.c +++ b/src/responder/pac/pacsrv.c @@ -119,7 +119,7 @@ int pac_process_init(TALLOC_CTX *mem_ctx, ret = sss_process_init(mem_ctx, ev, cdb, pac_cmds, - SSS_PAC_SOCKET_NAME, NULL, + SSS_PAC_SOCKET_NAME, -1, NULL, -1, CONFDB_PAC_CONF_ENTRY, PAC_SBUS_SERVICE_NAME, PAC_SBUS_SERVICE_VERSION, diff --git a/src/responder/pam/pamsrv.c b/src/responder/pam/pamsrv.c index 91b395080..a3f866273 100644 --- a/src/responder/pam/pamsrv.c +++ b/src/responder/pam/pamsrv.c @@ -194,8 +194,8 @@ static int pam_process_init(TALLOC_CTX *mem_ctx, pam_cmds = get_pam_cmds(); ret = sss_process_init(mem_ctx, ev, cdb, pam_cmds, - SSS_PAM_SOCKET_NAME, - SSS_PAM_PRIV_SOCKET_NAME, + SSS_PAM_SOCKET_NAME, -1, + SSS_PAM_PRIV_SOCKET_NAME, -1, CONFDB_PAM_CONF_ENTRY, SSS_PAM_SBUS_SERVICE_NAME, SSS_PAM_SBUS_SERVICE_VERSION, diff --git a/src/responder/ssh/sshsrv.c b/src/responder/ssh/sshsrv.c index 1328d1746..b154ee1ba 100644 --- a/src/responder/ssh/sshsrv.c +++ b/src/responder/ssh/sshsrv.c @@ -92,7 +92,7 @@ int ssh_process_init(TALLOC_CTX *mem_ctx, ssh_cmds = get_ssh_cmds(); ret = sss_process_init(mem_ctx, ev, cdb, ssh_cmds, - SSS_SSH_SOCKET_NAME, NULL, + SSS_SSH_SOCKET_NAME, -1, NULL, -1, CONFDB_SSH_CONF_ENTRY, SSS_SSH_SBUS_SERVICE_NAME, SSS_SSH_SBUS_SERVICE_VERSION, diff --git a/src/responder/sudo/sudosrv.c b/src/responder/sudo/sudosrv.c index 30752c9da..038e3fd7d 100644 --- a/src/responder/sudo/sudosrv.c +++ b/src/responder/sudo/sudosrv.c @@ -93,7 +93,7 @@ int sudo_process_init(TALLOC_CTX *mem_ctx, sudo_cmds = get_sudo_cmds(); ret = sss_process_init(mem_ctx, ev, cdb, sudo_cmds, - SSS_SUDO_SOCKET_NAME, NULL, + SSS_SUDO_SOCKET_NAME, -1, NULL, -1, CONFDB_SUDO_CONF_ENTRY, SSS_SUDO_SBUS_SERVICE_NAME, SSS_SUDO_SBUS_SERVICE_VERSION, -- cgit