X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Floginctl.c;h=53058d07a730f47b36b82dd624c84dd3ffb9aa98;hb=9b7115360516f2b6ec1eef1523157ff528878880;hp=08ee804f438937e23c22242967080d290a2a01a1;hpb=ddd88763921a1534081ed28e36f6712a85449005;p=elogind.git diff --git a/src/loginctl.c b/src/loginctl.c index 08ee804f4..53058d07a 100644 --- a/src/loginctl.c +++ b/src/loginctl.c @@ -1061,17 +1061,11 @@ static int show(DBusConnection *bus, char **args, unsigned n) { uid_t uid; uint32_t u; - if (parse_uid(args[i], &uid) < 0) { - struct passwd *pw; - - pw = getpwnam(args[i]); - if (!pw) { - log_error("User %s unknown.", args[i]); - ret = -ENOENT; - goto finish; - } - - uid = pw->pw_uid; + r = get_user_creds((const char**) (args+i), &uid, NULL, NULL); + if (r < 0) { + log_error("User %s unknown.", args[i]); + r = -ENOENT; + goto finish; } m = dbus_message_new_method_call( @@ -1298,18 +1292,10 @@ static int enable_linger(DBusConnection *bus, char **args, unsigned n) { goto finish; } - if (parse_uid(args[i], &uid) < 0) { - struct passwd *pw; - - errno = 0; - pw = getpwnam(args[i]); - if (!pw) { - ret = errno ? -errno : -ENOENT; - log_error("Failed to resolve user %s: %s", args[i], strerror(-ret)); - goto finish; - } - - uid = pw->pw_uid; + ret = get_user_creds((const char**) (args+i), &uid, NULL, NULL); + if (ret < 0) { + log_error("Failed to resolve user %s: %s", args[i], strerror(-ret)); + goto finish; } u = (uint32_t) uid; @@ -1335,6 +1321,8 @@ static int enable_linger(DBusConnection *bus, char **args, unsigned n) { m = reply = NULL; } + ret = 0; + finish: if (m) dbus_message_unref(m); @@ -1373,18 +1361,10 @@ static int terminate_user(DBusConnection *bus, char **args, unsigned n) { goto finish; } - if (parse_uid(args[i], &uid) < 0) { - struct passwd *pw; - - errno = 0; - pw = getpwnam(args[i]); - if (!pw) { - ret = errno ? -errno : -ENOENT; - log_error("Failed to look up user %s: %s", args[i], strerror(-ret)); - goto finish; - } - - uid = pw->pw_uid; + ret = get_user_creds((const char**) (args+i), &uid, NULL, NULL); + if (ret < 0) { + log_error("Failed to look up user %s: %s", args[i], strerror(-ret)); + goto finish; } u = (uint32_t) uid; @@ -1408,6 +1388,8 @@ static int terminate_user(DBusConnection *bus, char **args, unsigned n) { m = reply = NULL; } + ret = 0; + finish: if (m) dbus_message_unref(m); @@ -1449,18 +1431,10 @@ static int kill_user(DBusConnection *bus, char **args, unsigned n) { goto finish; } - if (parse_uid(args[i], &uid) < 0) { - struct passwd *pw; - - errno = 0; - pw = getpwnam(args[i]); - if (!pw) { - ret = errno ? -errno : -ENOENT; - log_error("Failed to look up user %s: %s", args[i], strerror(-ret)); - goto finish; - } - - uid = pw->pw_uid; + ret = get_user_creds((const char**) (args+i), &uid, NULL, NULL); + if (ret < 0) { + log_error("Failed to look up user %s: %s", args[i], strerror(-ret)); + goto finish; } u = (uint32_t) uid; @@ -1485,6 +1459,8 @@ static int kill_user(DBusConnection *bus, char **args, unsigned n) { m = reply = NULL; } + ret = 0; + finish: if (m) dbus_message_unref(m);