URL:
https://github.com/SSSD/sssd/pull/601
Title: #601: sbus: integrate sssd with sbus2
pbrezina commented:
"""
The old sbus implementation had quite a few tests that were
generating some interface and then calling it. I also liked the tests because they were
useful as a documentation. Do you plan on adding some unit tests for the new sbus library
as well?
I do plan to provide tests (and much broader set of tests) but it will not be done before
the patches are merged as I need to focus elsewhere.
So far I fixed the coverity issues and squashed the changes in. Here is the diff:
```diff
diff --git a/src/providers/data_provider/dp_iface_backend.c
b/src/providers/data_provider/dp_iface_backend.c
index 4066909..25a00f3 100644
--- a/src/providers/data_provider/dp_iface_backend.c
+++ b/src/providers/data_provider/dp_iface_backend.c
@@ -37,7 +37,6 @@ dp_backend_is_online(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain;
if (SBUS_REQ_STRING_IS_EMPTY(domname)) {
- domain = be_ctx->domain;
*_is_online = be_is_offline(be_ctx);
return EOK;
}
diff --git a/src/providers/data_provider/dp_target_sudo.c
b/src/providers/data_provider/dp_target_sudo.c
index bc5f9c8..db14039 100644
--- a/src/providers/data_provider/dp_target_sudo.c
+++ b/src/providers/data_provider/dp_target_sudo.c
@@ -56,6 +56,7 @@ static errno_t dp_sudo_parse_message(TALLOC_CTX *mem_ctx,
switch (sudo_type) {
case BE_REQ_SUDO_FULL:
/* no arguments required */
+ rules = NULL;
break;
case BE_REQ_SUDO_RULES:
/* additional arguments:
diff --git a/src/responder/ifp/ifp_groups.c b/src/responder/ifp/ifp_groups.c
index b6fae92..353f3a7 100644
--- a/src/responder/ifp/ifp_groups.c
+++ b/src/responder/ifp/ifp_groups.c
@@ -994,8 +994,6 @@ ifp_groups_group_get_members(TALLOC_CTX *mem_ctx,
if (num_members == 0) {
users = NULL;
groups = NULL;
- num_users = 0;
- num_groups = 0;
ret = EOK;
goto done;
}
diff --git a/src/sbus/codegen/sbus_Generator.py b/src/sbus/codegen/sbus_Generator.py
index 4e5e8bb..e950843 100644
--- a/src/sbus/codegen/sbus_Generator.py
+++ b/src/sbus/codegen/sbus_Generator.py
@@ -764,10 +764,14 @@ class Generator:
type = DataType.Find(
invoker.input.arguments['value'].signature
)
- if self.hasAny(invoker.output):
+ elif self.hasAny(invoker.output):
type = DataType.Find(
invoker.output.arguments['value'].signature
)
+ else:
+ raise ValueError(
+ 'Invoker has no input nor output argument\n'
+ )
tpl.show("if-use-talloc", type.RequireTalloc)
diff --git a/src/sbus/interface/sbus_introspection.c
b/src/sbus/interface/sbus_introspection.c
index d4daedc..b2de9a9 100644
--- a/src/sbus/interface/sbus_introspection.c
+++ b/src/sbus/interface/sbus_introspection.c
@@ -248,8 +248,6 @@ sbus_introspect_property_mode(struct sbus_introspect_property
*property)
default:
return "readwrite";
}
-
- return "invalid";
}
static errno_t
diff --git a/src/sbus/request/sbus_request_hash.c b/src/sbus/request/sbus_request_hash.c
index 68dc79c..441fce2 100644
--- a/src/sbus/request/sbus_request_hash.c
+++ b/src/sbus/request/sbus_request_hash.c
@@ -265,6 +265,11 @@ void
sbus_requests_finish(struct sbus_request_list *item,
errno_t error)
{
+ if (item == NULL) {
+ DEBUG(SSSDBG_MINOR_FAILURE, "Bug: item is NULL\n");
+ return;
+ }
+
if (item->is_invalid) {
return;
}
diff --git a/src/sbus/router/sbus_router_hash.c b/src/sbus/router/sbus_router_hash.c
index 41111bc..186dc61 100644
--- a/src/sbus/router/sbus_router_hash.c
+++ b/src/sbus/router/sbus_router_hash.c
@@ -337,7 +337,8 @@ sbus_listener_list_lookup(struct sbus_listener_list *list,
struct sbus_listener_list *item;
struct sbus_listener *b;
- /* We know that interface and signal name already match. */
+ /* We know that interface and signal name already match. We need to check
+ * handlers and object paths. */
DLIST_FOR_EACH(item, list) {
b = item->listener;
@@ -345,6 +346,10 @@ sbus_listener_list_lookup(struct sbus_listener_list *list,
continue;
}
+ if (a->object_path == NULL && b->object_path == NULL) {
+ return b;
+ }
+
if (a->object_path == NULL && b->object_path != NULL) {
continue;
}
diff --git a/src/sbus/server/sbus_server_match.c b/src/sbus/server/sbus_server_match.c
index 6a65328..07bdf5b 100644
--- a/src/sbus/server/sbus_server_match.c
+++ b/src/sbus/server/sbus_server_match.c
@@ -312,7 +312,7 @@ sbus_match_rule_parse(TALLOC_CTX *mem_ctx,
ret = split_on_separator(NULL, dbus_rule, ',', true, true, &tokens,
&count);
if (ret != EOK) {
- return ret;
+ goto done;
}
ret = sbus_match_rule_parse_keys(mem_ctx, tokens, &sbus_rule);
@@ -323,6 +323,7 @@ sbus_match_rule_parse(TALLOC_CTX *mem_ctx,
ret = sbus_match_rule_parse_check(sbus_rule);
if (ret != EOK) {
+ talloc_free(sbus_rule);
goto done;
}
@@ -332,9 +333,8 @@ sbus_match_rule_parse(TALLOC_CTX *mem_ctx,
done:
if (ret != EOK) {
- talloc_free(sbus_rule);
DEBUG(SSSDBG_OP_FAILURE, "Unable to parse rule [%s] [%d]: %s\n",
- dbus_rule, ret, sss_strerror(ret));
+ dbus_rule, ret, sss_strerror(ret));
}
diff --git a/src/sss_iface/sss_iface_types.c b/src/sss_iface/sss_iface_types.c
index bb4fd02..3c0bbc0 100644
--- a/src/sss_iface/sss_iface_types.c
+++ b/src/sss_iface/sss_iface_types.c
@@ -375,7 +375,6 @@ errno_t sbus_iterator_write_pam_response(DBusMessageIter *iterator,
goto done;
}
- resp = pd->resp_list;
for (resp = pd->resp_list; resp != NULL; resp = resp->next) {
dbret = dbus_message_iter_open_container(&array_iter, DBUS_TYPE_STRUCT,
NULL, &struct_iter);
```
"""
See the full comment at
https://github.com/SSSD/sssd/pull/601#issuecomment-409511174