summaryrefslogtreecommitdiff
path: root/src/userdb
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2021-11-08 17:20:16 +0100
committerLennart Poettering <lennart@poettering.net>2021-11-08 21:40:30 +0100
commit0595ff1680e2f283a8223c142a24b0e5fd628274 (patch)
tree866fdedc9c509816ce556b00d2a6d4a040d7a751 /src/userdb
parente908961d2eba7adb335e7f36c37c39e2e96773d2 (diff)
downloadsystemd-0595ff1680e2f283a8223c142a24b0e5fd628274.tar.gz
userdbctl: explicitly handle ESRCH/ENOLINK from userdb_all()
Similar in style to previous commit, let's handle these two errors properly, i.e. as equivalent to no entries found. Let's debug log about them, to make things either to deal with when debugging (after all userdbctl to a large degree are debugging tools).
Diffstat (limited to 'src/userdb')
-rw-r--r--src/userdb/userdbctl.c112
1 files changed, 63 insertions, 49 deletions
diff --git a/src/userdb/userdbctl.c b/src/userdb/userdbctl.c
index b0ee3ce258..a4b498751a 100644
--- a/src/userdb/userdbctl.c
+++ b/src/userdb/userdbctl.c
@@ -152,28 +152,33 @@ static int display_user(int argc, char *argv[], void *userdata) {
_cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
r = userdb_all(arg_userdb_flags, &iterator);
- if (r < 0)
+ if (r == -ENOLINK) /* ENOLINK → Didn't find answer without Varlink, and didn't try Varlink because was configured to off. */
+ log_debug_errno(r, "No entries found. (Didn't check via Varlink.)");
+ else if (r == -ESRCH) /* ESRCH → Couldn't find any suitable entry, but we checked all sources */
+ log_debug_errno(r, "No entries found.");
+ else if (r < 0)
return log_error_errno(r, "Failed to enumerate users: %m");
+ else {
+ for (;;) {
+ _cleanup_(user_record_unrefp) UserRecord *ur = NULL;
- for (;;) {
- _cleanup_(user_record_unrefp) UserRecord *ur = NULL;
-
- r = userdb_iterator_get(iterator, &ur);
- if (r == -ESRCH)
- break;
- if (r == -EHOSTDOWN)
- return log_error_errno(r, "Selected user database service is not available for this request.");
- if (r < 0)
- return log_error_errno(r, "Failed acquire next user: %m");
+ r = userdb_iterator_get(iterator, &ur);
+ if (r == -ESRCH)
+ break;
+ if (r == -EHOSTDOWN)
+ return log_error_errno(r, "Selected user database service is not available for this request.");
+ if (r < 0)
+ return log_error_errno(r, "Failed acquire next user: %m");
- if (draw_separator && arg_output == OUTPUT_FRIENDLY)
- putchar('\n');
+ if (draw_separator && arg_output == OUTPUT_FRIENDLY)
+ putchar('\n');
- r = show_user(ur, table);
- if (r < 0)
- return r;
+ r = show_user(ur, table);
+ if (r < 0)
+ return r;
- draw_separator = true;
+ draw_separator = true;
+ }
}
}
@@ -303,30 +308,34 @@ static int display_group(int argc, char *argv[], void *userdata) {
_cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
r = groupdb_all(arg_userdb_flags, &iterator);
- if (r < 0)
+ if (r == -ENOLINK)
+ log_debug_errno(r, "No entries found. (Didn't check via Varlink.)");
+ else if (r == -ESRCH)
+ log_debug_errno(r, "No entries found.");
+ else if (r < 0)
return log_error_errno(r, "Failed to enumerate groups: %m");
+ else {
+ for (;;) {
+ _cleanup_(group_record_unrefp) GroupRecord *gr = NULL;
- for (;;) {
- _cleanup_(group_record_unrefp) GroupRecord *gr = NULL;
-
- r = groupdb_iterator_get(iterator, &gr);
- if (r == -ESRCH)
- break;
- if (r == -EHOSTDOWN)
- return log_error_errno(r, "Selected group database service is not available for this request.");
- if (r < 0)
- return log_error_errno(r, "Failed acquire next group: %m");
+ r = groupdb_iterator_get(iterator, &gr);
+ if (r == -ESRCH)
+ break;
+ if (r == -EHOSTDOWN)
+ return log_error_errno(r, "Selected group database service is not available for this request.");
+ if (r < 0)
+ return log_error_errno(r, "Failed acquire next group: %m");
- if (draw_separator && arg_output == OUTPUT_FRIENDLY)
- putchar('\n');
+ if (draw_separator && arg_output == OUTPUT_FRIENDLY)
+ putchar('\n');
- r = show_group(gr, table);
- if (r < 0)
- return r;
+ r = show_group(gr, table);
+ if (r < 0)
+ return r;
- draw_separator = true;
+ draw_separator = true;
+ }
}
-
}
if (table) {
@@ -442,23 +451,28 @@ static int display_memberships(int argc, char *argv[], void *userdata) {
_cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
r = membershipdb_all(arg_userdb_flags, &iterator);
- if (r < 0)
+ if (r == -ENOLINK)
+ log_debug_errno(r, "No entries found. (Didn't check via Varlink.)");
+ else if (r == -ESRCH)
+ log_debug_errno(r, "No entries found.");
+ else if (r < 0)
return log_error_errno(r, "Failed to enumerate memberships: %m");
+ else {
+ for (;;) {
+ _cleanup_free_ char *user = NULL, *group = NULL;
- for (;;) {
- _cleanup_free_ char *user = NULL, *group = NULL;
-
- r = membershipdb_iterator_get(iterator, &user, &group);
- if (r == -ESRCH)
- break;
- if (r == -EHOSTDOWN)
- return log_error_errno(r, "Selected membership database service is not available for this request.");
- if (r < 0)
- return log_error_errno(r, "Failed acquire next membership: %m");
+ r = membershipdb_iterator_get(iterator, &user, &group);
+ if (r == -ESRCH)
+ break;
+ if (r == -EHOSTDOWN)
+ return log_error_errno(r, "Selected membership database service is not available for this request.");
+ if (r < 0)
+ return log_error_errno(r, "Failed acquire next membership: %m");
- r = show_membership(user, group, table);
- if (r < 0)
- return r;
+ r = show_membership(user, group, table);
+ if (r < 0)
+ return r;
+ }
}
}