From 2de7dab64517fcaee5198342e9b7890cdf1c7776 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Tue, 11 Aug 2009 12:03:01 -0400 Subject: Change the why DP clients identify Mirrors what we have done with the monitor. --- server/responder/common/responder.h | 8 ++- server/responder/common/responder_common.c | 8 ++- server/responder/common/responder_dp.c | 27 +++++++++- server/responder/nss/nsssrv.c | 18 +++++-- server/responder/nss/nsssrv.h | 2 - server/responder/nss/nsssrv_dp.c | 80 ------------------------------ server/responder/pam/pamsrv.c | 19 +++++-- server/responder/pam/pamsrv.h | 1 - server/responder/pam/pamsrv_dp.c | 49 ------------------ 9 files changed, 69 insertions(+), 143 deletions(-) delete mode 100644 server/responder/nss/nsssrv_dp.c (limited to 'server/responder') diff --git a/server/responder/common/responder.h b/server/responder/common/responder.h index f41876508..881c33067 100644 --- a/server/responder/common/responder.h +++ b/server/responder/common/responder.h @@ -104,8 +104,10 @@ int sss_process_init(TALLOC_CTX *mem_ctx, const char *confdb_service_path, const char *svc_name, uint16_t svc_version, - struct sbus_interface *dp_intf, struct sbus_interface *monitor_intf, + uint16_t cli_type, uint16_t cli_version, + const char *cli_name, const char *cli_domain, + struct sbus_interface *dp_intf, struct resp_ctx **responder_ctx); int sss_parse_name(TALLOC_CTX *memctx, @@ -119,7 +121,9 @@ int sss_cmd_get_version(struct cli_ctx *cctx); struct cli_protocol_version *register_cli_protocol_version(void); /* responder_dp.c */ -int sss_dp_init(struct resp_ctx *rctx, struct sbus_interface *intf); +int sss_dp_init(struct resp_ctx *rctx, struct sbus_interface *intf, + uint16_t cli_type, uint16_t cli_version, + const char *cli_name, const char *cli_domain); #define NSS_DP_USER 1 #define NSS_DP_GROUP 2 diff --git a/server/responder/common/responder_common.c b/server/responder/common/responder_common.c index 75e721030..cf06c3ca1 100644 --- a/server/responder/common/responder_common.c +++ b/server/responder/common/responder_common.c @@ -455,8 +455,10 @@ int sss_process_init(TALLOC_CTX *mem_ctx, const char *confdb_service_path, const char *svc_name, uint16_t svc_version, - struct sbus_interface *dp_intf, struct sbus_interface *monitor_intf, + uint16_t cli_type, uint16_t cli_version, + const char *cli_name, const char *cli_domain, + struct sbus_interface *dp_intf, struct resp_ctx **responder_ctx) { struct resp_ctx *rctx; @@ -486,7 +488,9 @@ int sss_process_init(TALLOC_CTX *mem_ctx, return ret; } - ret = sss_dp_init(rctx, dp_intf); + ret = sss_dp_init(rctx, dp_intf, + cli_type, cli_version, + cli_name, cli_domain); if (ret != EOK) { DEBUG(0, ("fatal error setting up backend connector\n")); return ret; diff --git a/server/responder/common/responder_dp.c b/server/responder/common/responder_dp.c index dc810fd99..fd13208fc 100644 --- a/server/responder/common/responder_dp.c +++ b/server/responder/common/responder_dp.c @@ -11,6 +11,12 @@ struct sss_dp_pvt_ctx { struct resp_ctx *rctx; struct sbus_interface *intf; + + uint16_t cli_type; + uint16_t cli_version; + const char *cli_name; + const char *cli_domain; + time_t last_retry; int retries; }; @@ -52,6 +58,17 @@ static void sss_dp_conn_reconnect(struct sss_dp_pvt_ctx *pvt) ret = sbus_client_init(rctx, rctx->ev, sbus_address, pvt->intf, &rctx->dp_conn, sss_dp_conn_destructor, pvt); + + if (ret == EOK) { + /* Identify ourselves to the data provider */ + ret = dp_common_send_id(rctx->dp_conn, + pvt->cli_type, pvt->cli_version, + pvt->cli_name, pvt->cli_domain); + if (ret != EOK) { + DEBUG(0, ("Failed to identify to the data provider!\n")); + } + } + if (ret != EOK) { DEBUG(4, ("Failed to reconnect [%d(%s)]!\n", ret, strerror(ret))); @@ -97,7 +114,9 @@ int sss_dp_conn_destructor(void *data) return 0; } -int sss_dp_init(struct resp_ctx *rctx, struct sbus_interface *dp_intf) +int sss_dp_init(struct resp_ctx *rctx, struct sbus_interface *dp_intf, + uint16_t cli_type, uint16_t cli_version, + const char *cli_name, const char *cli_domain) { struct sss_dp_pvt_ctx *pvt; @@ -106,6 +125,12 @@ int sss_dp_init(struct resp_ctx *rctx, struct sbus_interface *dp_intf) pvt->rctx = rctx; pvt->intf = dp_intf; + pvt->cli_type = cli_type; + pvt->cli_version = cli_version; + pvt->cli_name = talloc_strdup(pvt, cli_name); + if (!pvt->cli_name) return ENOMEM; + pvt->cli_domain = talloc_strdup(pvt, cli_domain); + if (!pvt->cli_domain) return ENOMEM; sss_dp_conn_reconnect(pvt); diff --git a/server/responder/nss/nsssrv.c b/server/responder/nss/nsssrv.c index e4b121bf2..456c62929 100644 --- a/server/responder/nss/nsssrv.c +++ b/server/responder/nss/nsssrv.c @@ -203,12 +203,22 @@ static void nss_dp_reconnect_init(struct sbus_connection *conn, int status, void nss_shutdown(rctx); } +static struct sbus_method nss_dp_methods[] = { + { NULL, NULL } +}; + +struct sbus_interface nss_dp_interface = { + DP_CLI_INTERFACE, + DP_CLI_PATH, + SBUS_DEFAULT_VTABLE, + nss_dp_methods, + NULL +}; int nss_process_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev, struct confdb_ctx *cdb) { - struct sbus_interface *nss_dp_interface; struct sss_cmd_table *nss_cmds; struct nss_ctx *nctx; int ret, max_retries; @@ -225,7 +235,6 @@ int nss_process_init(TALLOC_CTX *mem_ctx, return ret; } - nss_dp_interface = get_nss_dp_interface(); nss_cmds = get_nss_cmds(); ret = sss_process_init(nctx, ev, cdb, @@ -234,8 +243,11 @@ int nss_process_init(TALLOC_CTX *mem_ctx, NSS_SRV_CONFIG, NSS_SBUS_SERVICE_NAME, NSS_SBUS_SERVICE_VERSION, - nss_dp_interface, &monitor_nss_interface, + DP_CLI_FRONTEND, + DATA_PROVIDER_VERSION, + "NSS", "", + &nss_dp_interface, &nctx->rctx); if (ret != EOK) { return ret; diff --git a/server/responder/nss/nsssrv.h b/server/responder/nss/nsssrv.h index f34456f4f..0d3124c72 100644 --- a/server/responder/nss/nsssrv.h +++ b/server/responder/nss/nsssrv.h @@ -66,8 +66,6 @@ struct nss_packet; int nss_cmd_execute(struct cli_ctx *cctx); -/* from nsssrv_dp.c */ -struct sbus_interface *get_nss_dp_interface(void); struct sss_cmd_table *get_nss_cmds(void); #endif /* __NSSSRV_H__ */ diff --git a/server/responder/nss/nsssrv_dp.c b/server/responder/nss/nsssrv_dp.c deleted file mode 100644 index 92a2d4415..000000000 --- a/server/responder/nss/nsssrv_dp.c +++ /dev/null @@ -1,80 +0,0 @@ -/* - SSSD - - NSS Responder - Data Provider Interfaces - - Copyright (C) Simo Sorce 2008 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include -#include -#include "util/util.h" -#include "responder/common/responder_packet.h" -#include "responder/nss/nsssrv.h" -#include "providers/data_provider.h" -#include "sbus/sbus_client.h" -#include "providers/dp_sbus.h" - -static int nss_dp_identity(DBusMessage *message, struct sbus_connection *conn) -{ - dbus_uint16_t version = DATA_PROVIDER_VERSION; - dbus_uint16_t clitype = DP_CLI_FRONTEND; - const char *cliname = "NSS"; - const char *nullname = ""; - DBusMessage *reply; - dbus_bool_t ret; - - DEBUG(4,("Sending ID reply: (%d,%d,%s)\n", - clitype, version, cliname)); - - reply = dbus_message_new_method_return(message); - if (!reply) return ENOMEM; - - ret = dbus_message_append_args(reply, - DBUS_TYPE_UINT16, &clitype, - DBUS_TYPE_UINT16, &version, - DBUS_TYPE_STRING, &cliname, - DBUS_TYPE_STRING, &nullname, - DBUS_TYPE_INVALID); - if (!ret) { - dbus_message_unref(reply); - return EIO; - } - - /* send reply back */ - sbus_conn_send_reply(conn, reply); - dbus_message_unref(reply); - - return EOK; -} - -static struct sbus_method nss_dp_methods[] = { - { DP_CLI_METHOD_IDENTITY, nss_dp_identity }, - { NULL, NULL } -}; - -struct sbus_interface nss_dp_interface = { - DATA_PROVIDER_INTERFACE, - DATA_PROVIDER_PATH, - SBUS_DEFAULT_VTABLE, - nss_dp_methods, - NULL -}; - -struct sbus_interface *get_nss_dp_interface(void) -{ - return &nss_dp_interface; -} diff --git a/server/responder/pam/pamsrv.c b/server/responder/pam/pamsrv.c index c0f0ca40e..6f92eb96f 100644 --- a/server/responder/pam/pamsrv.c +++ b/server/responder/pam/pamsrv.c @@ -125,13 +125,24 @@ static int pam_process_init(struct main_context *main_ctx, return EOK; } +static struct sbus_method pam_dp_methods[] = { + { NULL, NULL } +}; + +struct sbus_interface pam_dp_interface = { + DP_CLI_INTERFACE, + DP_CLI_PATH, + SBUS_DEFAULT_VTABLE, + pam_dp_methods, + NULL +}; + int main(int argc, const char *argv[]) { int opt; poptContext pc; struct main_context *main_ctx; int ret; - struct sbus_interface *pam_dp_interface; struct sss_cmd_table *sss_cmds; struct resp_ctx *rctx; @@ -164,7 +175,6 @@ int main(int argc, const char *argv[]) DEBUG(2, ("Could not set up to exit when parent process does\n")); } - pam_dp_interface = get_pam_dp_interface(); sss_cmds = register_sss_cmds(); ret = sss_process_init(main_ctx, main_ctx->event_ctx, @@ -175,8 +185,11 @@ int main(int argc, const char *argv[]) PAM_SRV_CONFIG, PAM_SBUS_SERVICE_NAME, PAM_SBUS_SERVICE_VERSION, - pam_dp_interface, &monitor_pam_interface, + DP_CLI_FRONTEND, + DATA_PROVIDER_VERSION, + "PAM", "", + &pam_dp_interface, &rctx); if (ret != EOK) return 3; diff --git a/server/responder/pam/pamsrv.h b/server/responder/pam/pamsrv.h index 1de1cee8d..672611574 100644 --- a/server/responder/pam/pamsrv.h +++ b/server/responder/pam/pamsrv.h @@ -22,7 +22,6 @@ struct pam_auth_req { void *data; }; -struct sbus_interface *get_pam_dp_interface(void); struct sss_cmd_table *register_sss_cmds(void); int pam_dp_send_req(struct pam_auth_req *preq, int timeout); diff --git a/server/responder/pam/pamsrv_dp.c b/server/responder/pam/pamsrv_dp.c index c0a286b22..3696d3d6a 100644 --- a/server/responder/pam/pamsrv_dp.c +++ b/server/responder/pam/pamsrv_dp.c @@ -137,52 +137,3 @@ int pam_dp_send_req(struct pam_auth_req *preq, int timeout) return EOK; } -static int pam_dp_identity(DBusMessage *message, struct sbus_connection *conn) -{ - dbus_uint16_t version = DATA_PROVIDER_VERSION; - dbus_uint16_t clitype = DP_CLI_FRONTEND; - const char *cliname = "PAM"; - const char *nullname = ""; - DBusMessage *reply; - dbus_bool_t ret; - - DEBUG(4,("Sending ID reply: (%d,%d,%s)\n", clitype, version, cliname)); - - reply = dbus_message_new_method_return(message); - if (!reply) return ENOMEM; - - ret = dbus_message_append_args(reply, - DBUS_TYPE_UINT16, &clitype, - DBUS_TYPE_UINT16, &version, - DBUS_TYPE_STRING, &cliname, - DBUS_TYPE_STRING, &nullname, - DBUS_TYPE_INVALID); - if (!ret) { - dbus_message_unref(reply); - return EIO; - } - - /* send reply back */ - sbus_conn_send_reply(conn, reply); - dbus_message_unref(reply); - - return EOK; -} - -static struct sbus_method pam_dp_methods[] = { - { DP_CLI_METHOD_IDENTITY, pam_dp_identity }, - { NULL, NULL } -}; - -struct sbus_interface pam_dp_interface = { - DATA_PROVIDER_INTERFACE, - DATA_PROVIDER_PATH, - SBUS_DEFAULT_VTABLE, - pam_dp_methods, - NULL -}; - -struct sbus_interface *get_pam_dp_interface(void) -{ - return &pam_dp_interface; -} -- cgit