summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/responder/ifp/ifp_components.c25
-rw-r--r--src/responder/ifp/ifp_domains.c10
-rw-r--r--src/sbus/sssd_dbus.h5
-rw-r--r--src/sbus/sssd_dbus_interface.c20
-rw-r--r--src/tests/cmocka/test_sbus_opath.c33
5 files changed, 67 insertions, 26 deletions
diff --git a/src/responder/ifp/ifp_components.c b/src/responder/ifp/ifp_components.c
index 5847a767d..fbccc7e4b 100644
--- a/src/responder/ifp/ifp_components.c
+++ b/src/responder/ifp/ifp_components.c
@@ -85,8 +85,7 @@ static errno_t check_and_get_component_from_path(TALLOC_CTX *mem_ctx,
char **_name)
{
enum component_type type;
- const char *name = NULL;
- char *safe_name = NULL;
+ char *name = NULL;
errno_t ret;
if (confdb == NULL || path == NULL) {
@@ -95,13 +94,17 @@ static errno_t check_and_get_component_from_path(TALLOC_CTX *mem_ctx,
if (strcmp(path, PATH_MONITOR) == 0) {
type = COMPONENT_MONITOR;
- name = "monitor";
+ name = talloc_strdup(mem_ctx, "monitor");
+ if (name == NULL) {
+ ret = ENOMEM;
+ goto done;
+ }
} else {
- name = sbus_opath_strip_prefix(path, PATH_RESPONDERS "/");
+ name = sbus_opath_get_object_name(mem_ctx, path, PATH_RESPONDERS);
if (name != NULL) {
type = COMPONENT_RESPONDER;
} else {
- name = sbus_opath_strip_prefix(path, PATH_BACKENDS "/");
+ name = sbus_opath_get_object_name(mem_ctx, path, PATH_BACKENDS);
if (name != NULL) {
type = COMPONENT_BACKEND;
} else {
@@ -116,24 +119,18 @@ static errno_t check_and_get_component_from_path(TALLOC_CTX *mem_ctx,
goto done;
}
- safe_name = sbus_opath_unescape_part(mem_ctx, name);
- if (safe_name == NULL) {
- ret = ENOMEM;
- goto done;
- }
-
switch (type) {
case COMPONENT_MONITOR:
/* noop */
break;
case COMPONENT_RESPONDER:
- if (!responder_exists(safe_name)) {
+ if (!responder_exists(name)) {
ret = ENOENT;
goto done;
}
break;
case COMPONENT_BACKEND:
- if (!backend_exists(confdb, safe_name)) {
+ if (!backend_exists(confdb, name)) {
ret = ENOENT;
goto done;
}
@@ -145,7 +142,7 @@ static errno_t check_and_get_component_from_path(TALLOC_CTX *mem_ctx,
}
if (_name != NULL) {
- *_name = safe_name;
+ *_name = name;
}
ret = EOK;
diff --git a/src/responder/ifp/ifp_domains.c b/src/responder/ifp/ifp_domains.c
index 0af81af81..7cddb2ebc 100644
--- a/src/responder/ifp/ifp_domains.c
+++ b/src/responder/ifp/ifp_domains.c
@@ -254,7 +254,6 @@ get_domain_info_from_req(struct sbus_request *dbus_req, void *data)
struct ifp_ctx *ctx = NULL;
struct sss_domain_info *domains = NULL;
struct sss_domain_info *iter = NULL;
- const char *raw_name = NULL;
char *name = NULL;
ctx = talloc_get_type(data, struct ifp_ctx);
@@ -263,13 +262,8 @@ get_domain_info_from_req(struct sbus_request *dbus_req, void *data)
return NULL;
}
- raw_name = sbus_opath_strip_prefix(dbus_req->path,
- INFOPIPE_DOMAIN_PATH_PFX "/");
- if (raw_name == NULL) {
- return NULL;
- }
-
- name = sbus_opath_unescape_part(dbus_req, raw_name);
+ name = sbus_opath_get_object_name(dbus_req, dbus_req->path,
+ INFOPIPE_DOMAIN_PATH_PFX);
if (name == NULL) {
return NULL;
}
diff --git a/src/sbus/sssd_dbus.h b/src/sbus/sssd_dbus.h
index 355d617fe..0f7562e6b 100644
--- a/src/sbus/sssd_dbus.h
+++ b/src/sbus/sssd_dbus.h
@@ -193,6 +193,11 @@ const char *
sbus_opath_strip_prefix(const char *object_path,
const char *prefix);
+char *
+sbus_opath_get_object_name(TALLOC_CTX *mem_ctx,
+ const char *object_path,
+ const char *base_path);
+
bool sbus_conn_disconnecting(struct sbus_connection *conn);
/* max_retries < 0: retry forever
diff --git a/src/sbus/sssd_dbus_interface.c b/src/sbus/sssd_dbus_interface.c
index 09e160227..d4ddce0ac 100644
--- a/src/sbus/sssd_dbus_interface.c
+++ b/src/sbus/sssd_dbus_interface.c
@@ -365,6 +365,26 @@ sbus_opath_strip_prefix(const char *object_path,
return NULL;
}
+char *
+sbus_opath_get_object_name(TALLOC_CTX *mem_ctx,
+ const char *object_path,
+ const char *base_path)
+{
+ const char *name;
+
+ name = sbus_opath_strip_prefix(object_path, base_path);
+ if (name == NULL || name[0] == '\0') {
+ return NULL;
+ }
+
+ /* if base_path did not end with / */
+ if (name[0] == '/') {
+ name = name + 1;
+ }
+
+ return sbus_opath_unescape_part(mem_ctx, name);
+}
+
static void
sbus_opath_hash_delete_cb(hash_entry_t *item,
hash_destroy_enum deltype,
diff --git a/src/tests/cmocka/test_sbus_opath.c b/src/tests/cmocka/test_sbus_opath.c
index b526c8873..a91a3e2f6 100644
--- a/src/tests/cmocka/test_sbus_opath.c
+++ b/src/tests/cmocka/test_sbus_opath.c
@@ -27,6 +27,8 @@
#include "tests/cmocka/common_mock.h"
#include "tests/common.h"
+#define BASE_PATH "/some/path"
+
void test_sbus_opath_strip_prefix(void **state)
{
const char *prefix = "/org/freedesktop/sssd/";
@@ -102,9 +104,9 @@ void test_sbus_opath_compose(void **state)
char *path;
/* Doesn't need escaping */
- path = sbus_opath_compose(NULL, "/base/path", "domname");
+ path = sbus_opath_compose(NULL, BASE_PATH, "domname");
assert_non_null(path);
- assert_string_equal(path, "/base/path/domname");
+ assert_string_equal(path, BASE_PATH "/domname");
talloc_free(path);
}
@@ -113,12 +115,34 @@ void test_sbus_opath_compose_escape(void **state)
char *path;
/* A dot needs escaping */
- path = sbus_opath_compose(NULL, "/base/path", "redhat.com", NULL);
+ path = sbus_opath_compose(NULL, BASE_PATH, "redhat.com", NULL);
assert_non_null(path);
- assert_string_equal(path, "/base/path/redhat_2ecom");
+ assert_string_equal(path, BASE_PATH "/redhat_2ecom");
talloc_free(path);
}
+void test_sbus_opath_get_object_name(void **state)
+{
+ const char *path = BASE_PATH "/redhat_2ecom";
+ char *name;
+
+ name = sbus_opath_get_object_name(NULL, path, BASE_PATH);
+ assert_non_null(name);
+ assert_string_equal(name, "redhat.com");
+ talloc_free(name);
+
+ name = sbus_opath_get_object_name(NULL, path, BASE_PATH "/");
+ assert_non_null(name);
+ assert_string_equal(name, "redhat.com");
+ talloc_free(name);
+
+ name = sbus_opath_get_object_name(NULL, BASE_PATH, BASE_PATH);
+ assert_null(name);
+
+ name = sbus_opath_get_object_name(NULL, "invalid", BASE_PATH);
+ assert_null(name);
+}
+
int main(int argc, const char *argv[])
{
poptContext pc;
@@ -134,6 +158,7 @@ int main(int argc, const char *argv[])
unit_test(test_sbus_opath_escape_unescape),
unit_test(test_sbus_opath_compose),
unit_test(test_sbus_opath_compose_escape),
+ unit_test(test_sbus_opath_get_object_name)
};
/* Set debug level to invalid value so we can deside if -d 0 was used. */