From dea636af4d1902a081ee891f1b19ee2f8729d759 Mon Sep 17 00:00:00 2001 From: Pavel Březina Date: Tue, 29 Mar 2016 12:38:25 +0200 Subject: DP: Switch to new interface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Sumit Bose Reviewed-by: Jakub Hrozek Reviewed-by: Lukáš Slebodník --- src/responder/autofs/autofssrv_dp.c | 24 ++++------ src/responder/common/responder_dp.c | 87 +++++++++++++++---------------------- src/responder/ssh/sshsrv_dp.c | 37 +++++++--------- src/responder/sudo/sudosrv_dp.c | 15 +++++-- 4 files changed, 69 insertions(+), 94 deletions(-) (limited to 'src/responder') diff --git a/src/responder/autofs/autofssrv_dp.c b/src/responder/autofs/autofssrv_dp.c index 5793e40fc..a323d83d9 100644 --- a/src/responder/autofs/autofssrv_dp.c +++ b/src/responder/autofs/autofssrv_dp.c @@ -25,7 +25,7 @@ #include "util/util.h" #include "sbus/sbus_client.h" -#include "providers/data_provider.h" +#include "providers/data_provider/dp_responder_iface.h" #include "responder/common/responder.h" #include "responder/autofs/autofs_private.h" @@ -100,25 +100,18 @@ sss_dp_get_autofs_msg(void *pvt) DBusMessage *msg; dbus_bool_t dbret; struct sss_dp_get_autofs_info *info; - uint32_t be_type = BE_REQ_AUTOFS; - char *filter; + uint32_t dp_flags = 0; info = talloc_get_type(pvt, struct sss_dp_get_autofs_info); if (info->fast_reply) { - be_type |= BE_REQ_FAST; - } - - filter = talloc_asprintf(info, "mapname=%s", info->name); - if (!filter) { - DEBUG(SSSDBG_CRIT_FAILURE, "Out of memory?!\n"); - return NULL; + dp_flags |= DP_FAST_REPLY; } msg = dbus_message_new_method_call(NULL, DP_PATH, - DATA_PROVIDER_IFACE, - DATA_PROVIDER_IFACE_AUTOFSHANDLER); + IFACE_DP, + IFACE_DP_AUTOFSHANDLER); if (msg == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, "Out of memory?!\n"); return NULL; @@ -127,13 +120,12 @@ sss_dp_get_autofs_msg(void *pvt) /* create the message */ DEBUG(SSSDBG_TRACE_FUNC, "Creating autofs request for [%s][%u][%s]\n", - info->dom->name, be_type, filter); + info->dom->name, dp_flags, info->name); dbret = dbus_message_append_args(msg, - DBUS_TYPE_UINT32, &be_type, - DBUS_TYPE_STRING, &filter, + DBUS_TYPE_UINT32, &dp_flags, + DBUS_TYPE_STRING, &info->name, DBUS_TYPE_INVALID); - talloc_free(filter); if (!dbret) { DEBUG(SSSDBG_CRIT_FAILURE, "Failed to build message\n"); dbus_message_unref(msg); diff --git a/src/responder/common/responder_dp.c b/src/responder/common/responder_dp.c index d1c1609ca..f53c7d232 100644 --- a/src/responder/common/responder_dp.c +++ b/src/responder/common/responder_dp.c @@ -26,6 +26,7 @@ #include "responder/common/responder_packet.h" #include "responder/common/responder.h" #include "providers/data_provider.h" +#include "providers/data_provider/dp_responder_iface.h" #include "sbus/sbus_client.h" struct sss_dp_req; @@ -520,8 +521,9 @@ sss_dp_get_account_msg(void *pvt) DBusMessage *msg; dbus_bool_t dbret; struct sss_dp_account_info *info; - uint32_t be_type; - uint32_t attrs = BE_ATTR_CORE; + uint32_t dp_flags; + uint32_t entry_type; + uint32_t attrs_type = BE_ATTR_CORE; char *filter; info = talloc_get_type(pvt, struct sss_dp_account_info); @@ -529,77 +531,50 @@ sss_dp_get_account_msg(void *pvt) switch (info->type) { case SSS_DP_USER: case SSS_DP_WILDCARD_USER: - be_type = BE_REQ_USER; + entry_type = BE_REQ_USER; break; case SSS_DP_GROUP: case SSS_DP_WILDCARD_GROUP: - be_type = BE_REQ_GROUP; + entry_type = BE_REQ_GROUP; break; case SSS_DP_INITGROUPS: - be_type = BE_REQ_INITGROUPS; + entry_type = BE_REQ_INITGROUPS; break; case SSS_DP_NETGR: - be_type = BE_REQ_NETGROUP; + entry_type = BE_REQ_NETGROUP; break; case SSS_DP_SERVICES: - be_type = BE_REQ_SERVICES; + entry_type = BE_REQ_SERVICES; break; case SSS_DP_SECID: - be_type = BE_REQ_BY_SECID; + entry_type = BE_REQ_BY_SECID; break; case SSS_DP_USER_AND_GROUP: - be_type = BE_REQ_USER_AND_GROUP; + entry_type = BE_REQ_USER_AND_GROUP; break; case SSS_DP_CERT: - be_type = BE_REQ_BY_CERT; + entry_type = BE_REQ_BY_CERT; break; } - if (info->fast_reply) { - be_type |= BE_REQ_FAST; - } + dp_flags = info->fast_reply ? DP_FAST_REPLY : 0; if (info->opt_name) { if (info->type == SSS_DP_SECID) { - if (info->extra) { - filter = talloc_asprintf(info, "%s=%s:%s", DP_SEC_ID, - info->opt_name, info->extra); - } else { - filter = talloc_asprintf(info, "%s=%s", DP_SEC_ID, - info->opt_name); - } + filter = talloc_asprintf(info, "%s=%s", DP_SEC_ID, + info->opt_name); } else if (info->type == SSS_DP_CERT) { - if (info->extra) { - filter = talloc_asprintf(info, "%s=%s:%s", DP_CERT, - info->opt_name, info->extra); - } else { - filter = talloc_asprintf(info, "%s=%s", DP_CERT, - info->opt_name); - } + filter = talloc_asprintf(info, "%s=%s", DP_CERT, + info->opt_name); } else if (info->type == SSS_DP_WILDCARD_USER || info->type == SSS_DP_WILDCARD_GROUP) { - if (info->extra) { - filter = talloc_asprintf(info, "%s=%s:%s", DP_WILDCARD, - info->opt_name, info->extra); - } else { - filter = talloc_asprintf(info, "%s=%s", DP_WILDCARD, - info->opt_name); - } + filter = talloc_asprintf(info, "%s=%s", DP_WILDCARD, + info->opt_name); } else { - if (info->extra) { - filter = talloc_asprintf(info, "name=%s:%s", - info->opt_name, info->extra); - } else { - filter = talloc_asprintf(info, "name=%s", info->opt_name); - } + filter = talloc_asprintf(info, "name=%s", info->opt_name); } } else if (info->opt_id) { - if (info->extra) { - filter = talloc_asprintf(info, "idnumber=%u:%s", - info->opt_id, info->extra); - } else { - filter = talloc_asprintf(info, "idnumber=%u", info->opt_id); - } + filter = talloc_asprintf(info, "idnumber=%u", info->opt_id); } else { filter = talloc_strdup(info, ENUM_INDICATOR); } @@ -610,8 +585,8 @@ sss_dp_get_account_msg(void *pvt) msg = dbus_message_new_method_call(NULL, DP_PATH, - DATA_PROVIDER_IFACE, - DATA_PROVIDER_IFACE_GETACCOUNTINFO); + IFACE_DP, + IFACE_DP_GETACCOUNTINFO); if (msg == NULL) { talloc_free(filter); DEBUG(SSSDBG_CRIT_FAILURE, "Out of memory?!\n"); @@ -620,14 +595,22 @@ sss_dp_get_account_msg(void *pvt) /* create the message */ DEBUG(SSSDBG_TRACE_FUNC, - "Creating request for [%s][%#x][%s][%d][%s]\n", - info->dom->name, be_type, be_req2str(be_type), attrs, filter); + "Creating request for [%s][%#x][%s][%d][%s:%s]\n", + info->dom->name, entry_type, be_req2str(entry_type), attrs_type, + filter, info->extra == NULL ? "-" : info->extra); + + if (info->extra == NULL) { + /* D-Bus can't deal with NULL. */ + info->extra = ""; + } dbret = dbus_message_append_args(msg, - DBUS_TYPE_UINT32, &be_type, - DBUS_TYPE_UINT32, &attrs, + DBUS_TYPE_UINT32, &dp_flags, + DBUS_TYPE_UINT32, &entry_type, + DBUS_TYPE_UINT32, &attrs_type, DBUS_TYPE_STRING, &filter, DBUS_TYPE_STRING, &info->dom->name, + DBUS_TYPE_STRING, &info->extra, DBUS_TYPE_INVALID); talloc_free(filter); if (!dbret) { diff --git a/src/responder/ssh/sshsrv_dp.c b/src/responder/ssh/sshsrv_dp.c index b9878f8bc..f02c3f477 100644 --- a/src/responder/ssh/sshsrv_dp.c +++ b/src/responder/ssh/sshsrv_dp.c @@ -25,7 +25,7 @@ #include "util/util.h" #include "sbus/sbus_client.h" -#include "providers/data_provider.h" +#include "providers/data_provider/dp_responder_iface.h" #include "responder/common/responder.h" #include "responder/ssh/sshsrv_private.h" @@ -104,45 +104,38 @@ sss_dp_get_ssh_host_msg(void *pvt) DBusMessage *msg; dbus_bool_t dbret; struct sss_dp_get_ssh_host_info *info; - uint32_t be_type = 0; - char *filter; + uint32_t dp_flags = 0; info = talloc_get_type(pvt, struct sss_dp_get_ssh_host_info); if (info->fast_reply) { - be_type |= BE_REQ_FAST; - } - - if (info->alias) { - filter = talloc_asprintf(info, "name=%s:%s", info->name, info->alias); - } else { - filter = talloc_asprintf(info, "name=%s", info->name); - } - if (!filter) { - DEBUG(SSSDBG_CRIT_FAILURE, "Out of memory?!\n"); - return NULL; + dp_flags |= DP_FAST_REPLY; } msg = dbus_message_new_method_call(NULL, DP_PATH, - DATA_PROVIDER_IFACE, - DATA_PROVIDER_IFACE_HOSTHANDLER); + IFACE_DP, + IFACE_DP_HOSTHANDLER); if (msg == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, "Out of memory?!\n"); - talloc_free(filter); return NULL; } /* create the message */ DEBUG(SSSDBG_TRACE_FUNC, - "Creating SSH host request for [%s][%u][%s]\n", - info->dom->name, be_type, filter); + "Creating SSH host request for [%s][%u][%s][%s]\n", + info->dom->name, dp_flags, info->name, + info->alias == NULL ? "-" : info->alias); + + if (info->alias == NULL) { + info->alias = ""; + } dbret = dbus_message_append_args(msg, - DBUS_TYPE_UINT32, &be_type, - DBUS_TYPE_STRING, &filter, + DBUS_TYPE_UINT32, &dp_flags, + DBUS_TYPE_STRING, &info->name, + DBUS_TYPE_STRING, &info->alias, DBUS_TYPE_INVALID); - talloc_free(filter); if (!dbret) { DEBUG(SSSDBG_CRIT_FAILURE, "Failed to build message\n"); dbus_message_unref(msg); diff --git a/src/responder/sudo/sudosrv_dp.c b/src/responder/sudo/sudosrv_dp.c index 3c3ac8b75..3a4a79473 100644 --- a/src/responder/sudo/sudosrv_dp.c +++ b/src/responder/sudo/sudosrv_dp.c @@ -26,7 +26,8 @@ #include "util/util.h" #include "sbus/sbus_client.h" -#include "providers/data_provider.h" +#include "providers/data_provider_req.h" +#include "providers/data_provider/dp_responder_iface.h" #include "responder/common/responder.h" #include "responder/sudo/sudosrv_private.h" #include "db/sysdb.h" @@ -121,6 +122,7 @@ sss_dp_get_sudoers_msg(void *pvt) errno_t ret; struct sss_dp_get_sudoers_info *info; uint32_t be_type = 0; + uint32_t dp_flags = 0; const char *rule_name = NULL; uint32_t i; @@ -136,13 +138,13 @@ sss_dp_get_sudoers_msg(void *pvt) } if (info->fast_reply) { - be_type |= BE_REQ_FAST; + dp_flags |= DP_FAST_REPLY; } msg = dbus_message_new_method_call(NULL, DP_PATH, - DATA_PROVIDER_IFACE, - DATA_PROVIDER_IFACE_SUDOHANDLER); + IFACE_DP, + IFACE_DP_SUDOHANDLER); if (msg == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, "Out of memory?!\n"); return NULL; @@ -155,6 +157,11 @@ sss_dp_get_sudoers_msg(void *pvt) dbus_message_iter_init_append(msg, &iter); + dbret = dbus_message_iter_append_basic(&iter, DBUS_TYPE_UINT32, &dp_flags); + if (dbret == FALSE) { + goto fail; + } + /* BE TYPE */ dbret = dbus_message_iter_append_basic(&iter, DBUS_TYPE_UINT32, &be_type); if (dbret == FALSE) { -- cgit