summaryrefslogtreecommitdiff
path: root/src/nss-systemd
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2018-03-06 21:31:16 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2018-03-21 13:11:17 +0900
commit2458541961425473a17468682014d3898886879a (patch)
tree4604ae0ea216ddb734d8b14752c2df22685e9086 /src/nss-systemd
parentf9bfa6962d3689acf50b3e51d5d4af3642d849d8 (diff)
downloadsystemd-2458541961425473a17468682014d3898886879a.tar.gz
nss-systemd: cleanup bypassing dbus logic
Diffstat (limited to 'src/nss-systemd')
-rw-r--r--src/nss-systemd/nss-systemd.c111
1 files changed, 48 insertions, 63 deletions
diff --git a/src/nss-systemd/nss-systemd.c b/src/nss-systemd/nss-systemd.c
index c502b5f5fd..d64fa2521b 100644
--- a/src/nss-systemd/nss-systemd.c
+++ b/src/nss-systemd/nss-systemd.c
@@ -115,6 +115,9 @@ enum nss_status _nss_systemd_getpwnam_r(
char *buffer, size_t buflen,
int *errnop) {
+ _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+ _cleanup_(sd_bus_message_unrefp) sd_bus_message* reply = NULL;
+ _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
uint32_t translated;
size_t l;
int bypass, r;
@@ -150,16 +153,18 @@ enum nss_status _nss_systemd_getpwnam_r(
bypass = getenv_bool_secure("SYSTEMD_NSS_BYPASS_BUS");
if (bypass <= 0) {
- _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
- _cleanup_(sd_bus_message_unrefp) sd_bus_message* reply = NULL;
- _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-
r = sd_bus_open_system(&bus);
- if (r < 0) {
+ if (r < 0)
bypass = 1;
- goto direct_lookup;
- }
+ }
+ if (bypass > 0) {
+ r = direct_lookup_name(name, (uid_t*) &translated);
+ if (r == -ENOENT)
+ goto not_found;
+ if (r < 0)
+ goto fail;
+ } else {
r = sd_bus_call_method(bus,
"org.freedesktop.systemd1",
"/org/freedesktop/systemd1",
@@ -181,16 +186,6 @@ enum nss_status _nss_systemd_getpwnam_r(
goto fail;
}
-direct_lookup:
- if (bypass > 0) {
- /* Access the dynamic UID allocation directly if we are called from dbus-daemon, see above. */
- r = direct_lookup_name(name, (uid_t*) &translated);
- if (r == -ENOENT)
- goto not_found;
- if (r < 0)
- goto fail;
- }
-
l = strlen(name);
if (buflen < l+1) {
*errnop = ERANGE;
@@ -262,11 +257,20 @@ enum nss_status _nss_systemd_getpwuid_r(
bypass = getenv_bool_secure("SYSTEMD_NSS_BYPASS_BUS");
if (bypass <= 0) {
r = sd_bus_open_system(&bus);
- if (r < 0) {
+ if (r < 0)
bypass = 1;
- goto direct_lookup;
- }
+ }
+
+ if (bypass > 0) {
+ r = direct_lookup_uid(uid, &direct);
+ if (r == -ENOENT)
+ goto not_found;
+ if (r < 0)
+ goto fail;
+
+ translated = direct;
+ } else {
r = sd_bus_call_method(bus,
"org.freedesktop.systemd1",
"/org/freedesktop/systemd1",
@@ -288,18 +292,6 @@ enum nss_status _nss_systemd_getpwuid_r(
goto fail;
}
-direct_lookup:
- if (bypass > 0) {
- r = direct_lookup_uid(uid, &direct);
- if (r == -ENOENT)
- goto not_found;
- if (r < 0)
- goto fail;
-
- translated = direct;
-
- }
-
l = strlen(translated) + 1;
if (buflen < l) {
*errnop = ERANGE;
@@ -336,6 +328,9 @@ enum nss_status _nss_systemd_getgrnam_r(
char *buffer, size_t buflen,
int *errnop) {
+ _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+ _cleanup_(sd_bus_message_unrefp) sd_bus_message* reply = NULL;
+ _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
uint32_t translated;
size_t l;
int bypass, r;
@@ -368,16 +363,18 @@ enum nss_status _nss_systemd_getgrnam_r(
bypass = getenv_bool_secure("SYSTEMD_NSS_BYPASS_BUS");
if (bypass <= 0) {
- _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
- _cleanup_(sd_bus_message_unrefp) sd_bus_message* reply = NULL;
- _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-
r = sd_bus_open_system(&bus);
- if (r < 0) {
+ if (r < 0)
bypass = 1;
- goto direct_lookup;
- }
+ }
+ if (bypass > 0) {
+ r = direct_lookup_name(name, (uid_t*) &translated);
+ if (r == -ENOENT)
+ goto not_found;
+ if (r < 0)
+ goto fail;
+ } else {
r = sd_bus_call_method(bus,
"org.freedesktop.systemd1",
"/org/freedesktop/systemd1",
@@ -399,16 +396,6 @@ enum nss_status _nss_systemd_getgrnam_r(
goto fail;
}
-direct_lookup:
- if (bypass > 0) {
- /* Access the dynamic GID allocation directly if we are called from dbus-daemon, see above. */
- r = direct_lookup_name(name, (uid_t*) &translated);
- if (r == -ENOENT)
- goto not_found;
- if (r < 0)
- goto fail;
- }
-
l = sizeof(char*) + strlen(name) + 1;
if (buflen < l) {
*errnop = ERANGE;
@@ -478,11 +465,20 @@ enum nss_status _nss_systemd_getgrgid_r(
bypass = getenv_bool_secure("SYSTEMD_NSS_BYPASS_BUS");
if (bypass <= 0) {
r = sd_bus_open_system(&bus);
- if (r < 0) {
+ if (r < 0)
bypass = 1;
- goto direct_lookup;
- }
+ }
+
+ if (bypass > 0) {
+ r = direct_lookup_uid(gid, &direct);
+ if (r == -ENOENT)
+ goto not_found;
+ if (r < 0)
+ goto fail;
+
+ translated = direct;
+ } else {
r = sd_bus_call_method(bus,
"org.freedesktop.systemd1",
"/org/freedesktop/systemd1",
@@ -504,17 +500,6 @@ enum nss_status _nss_systemd_getgrgid_r(
goto fail;
}
-direct_lookup:
- if (bypass > 0) {
- r = direct_lookup_uid(gid, &direct);
- if (r == -ENOENT)
- goto not_found;
- if (r < 0)
- goto fail;
-
- translated = direct;
- }
-
l = sizeof(char*) + strlen(translated) + 1;
if (buflen < l) {
*errnop = ERANGE;