summaryrefslogtreecommitdiffstats
path: root/src/responder
diff options
context:
space:
mode:
authorPavel Březina <pbrezina@redhat.com>2016-03-29 12:38:25 +0200
committerJakub Hrozek <jhrozek@redhat.com>2016-06-20 14:48:47 +0200
commitdea636af4d1902a081ee891f1b19ee2f8729d759 (patch)
treea4d66ceb2b32ddf3b69bee1f1e2412568eae655e /src/responder
parent62370340092503baeaf6587d7ffe4fe25bd9582d (diff)
downloadsssd-dea636af4d1902a081ee891f1b19ee2f8729d759.tar.gz
sssd-dea636af4d1902a081ee891f1b19ee2f8729d759.tar.xz
sssd-dea636af4d1902a081ee891f1b19ee2f8729d759.zip
DP: Switch to new interface
Reviewed-by: Sumit Bose <sbose@redhat.com> Reviewed-by: Jakub Hrozek <jhrozek@redhat.com> Reviewed-by: Lukáš Slebodník <lslebodn@redhat.com>
Diffstat (limited to 'src/responder')
-rw-r--r--src/responder/autofs/autofssrv_dp.c24
-rw-r--r--src/responder/common/responder_dp.c87
-rw-r--r--src/responder/ssh/sshsrv_dp.c37
-rw-r--r--src/responder/sudo/sudosrv_dp.c15
4 files changed, 69 insertions, 94 deletions
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) {