Merge pull request #6058 from keszybz/chrooted-test-fixes

Chrooted test fixes
This commit is contained in:
Martin Pitt
2017-06-01 09:37:13 +02:00
committed by GitHub
5 changed files with 63 additions and 32 deletions

View File

@@ -81,8 +81,10 @@
<title>Description</title>
<para><function>sd_get_seats()</function> may be used to determine
all currently available local seats. Returns a
<constant>NULL</constant> terminated array of seat identifiers.
all currently available local seats. Returns the number of seat
identifiers and if the input pointer is non-NULL, a
<constant>NULL</constant>-terminated array of seat identifiers
is stored at the address.
The returned array and all strings it references need to be freed
with the libc
<citerefentry project='man-pages'><refentrytitle>free</refentrytitle><manvolnum>3</manvolnum></citerefentry>
@@ -123,13 +125,6 @@
<variablelist>
<varlistentry>
<term><constant>-EINVAL</constant></term>
<listitem><para>An input parameter was invalid (out of range,
or NULL, where that is not accepted).</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>-ENOMEM</constant></term>

View File

@@ -285,7 +285,7 @@
</varlistentry>
<varlistentry>
<term><constant>-BADF</constant></term>
<term><constant>-EBADF</constant></term>
<listitem><para>The specified socket file descriptor was
invalid.</para></listitem>

View File

@@ -4,6 +4,7 @@
/* We use system assert.h here, because we don't want to keep macro.h and log.h C++ compatible */
#undef NDEBUG
#include <assert.h>
#include <errno.h>
#include "sd-bus-vtable.h"
@@ -58,6 +59,7 @@ static const sd_bus_vtable vtable[] = {
static void test_vtable(void) {
sd_bus *bus = NULL;
struct context c = {};
int r;
assert(sd_bus_new(&bus) >= 0);
@@ -65,7 +67,9 @@ static void test_vtable(void) {
assert(sd_bus_add_object_vtable(bus, NULL, "/foo", "org.freedesktop.systemd.testVtable2", vtable, &c) >= 0);
assert(sd_bus_set_address(bus, DEFAULT_BUS_PATH) >= 0);
assert(sd_bus_start(bus) >= 0);
r = sd_bus_start(bus);
assert(r == 0 || /* success */
r == -ENOENT /* dbus is inactive */ );
sd_bus_unref(bus);
}

View File

@@ -62,7 +62,7 @@ _public_ int sd_pid_get_session(pid_t pid, char **session) {
assert_return(session, -EINVAL);
r = cg_pid_get_session(pid, session);
return r == -ENXIO ? -ENODATA : r;
return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r;
}
_public_ int sd_pid_get_unit(pid_t pid, char **unit) {
@@ -72,7 +72,7 @@ _public_ int sd_pid_get_unit(pid_t pid, char **unit) {
assert_return(unit, -EINVAL);
r = cg_pid_get_unit(pid, unit);
return r == -ENXIO ? -ENODATA : r;
return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r;
}
_public_ int sd_pid_get_user_unit(pid_t pid, char **unit) {
@@ -82,39 +82,47 @@ _public_ int sd_pid_get_user_unit(pid_t pid, char **unit) {
assert_return(unit, -EINVAL);
r = cg_pid_get_user_unit(pid, unit);
return r == -ENXIO ? -ENODATA : r;
return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r;
}
_public_ int sd_pid_get_machine_name(pid_t pid, char **name) {
int r;
assert_return(pid >= 0, -EINVAL);
assert_return(name, -EINVAL);
return cg_pid_get_machine_name(pid, name);
r = cg_pid_get_machine_name(pid, name);
return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r;
}
_public_ int sd_pid_get_slice(pid_t pid, char **slice) {
int r;
assert_return(pid >= 0, -EINVAL);
assert_return(slice, -EINVAL);
return cg_pid_get_slice(pid, slice);
r = cg_pid_get_slice(pid, slice);
return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r;
}
_public_ int sd_pid_get_user_slice(pid_t pid, char **slice) {
int r;
assert_return(pid >= 0, -EINVAL);
assert_return(slice, -EINVAL);
return cg_pid_get_user_slice(pid, slice);
r = cg_pid_get_user_slice(pid, slice);
return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r;
}
_public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) {
int r;
assert_return(pid >= 0, -EINVAL);
assert_return(uid, -EINVAL);
return cg_pid_get_owner_uid(pid, uid);
r = cg_pid_get_owner_uid(pid, uid);
return IN_SET(r, -ENXIO, -ENOMEDIUM) ? -ENODATA : r;
}
_public_ int sd_pid_get_cgroup(pid_t pid, char **cgroup) {
@@ -790,11 +798,27 @@ _public_ int sd_seat_can_graphical(const char *seat) {
}
_public_ int sd_get_seats(char ***seats) {
return get_files_in_directory("/run/systemd/seats/", seats);
int r;
r = get_files_in_directory("/run/systemd/seats/", seats);
if (r == -ENOENT) {
if (seats)
*seats = NULL;
return 0;
}
return r;
}
_public_ int sd_get_sessions(char ***sessions) {
return get_files_in_directory("/run/systemd/sessions/", sessions);
int r;
r = get_files_in_directory("/run/systemd/sessions/", sessions);
if (r == -ENOENT) {
if (sessions)
*sessions = NULL;
return 0;
}
return r;
}
_public_ int sd_get_uids(uid_t **users) {
@@ -805,8 +829,14 @@ _public_ int sd_get_uids(uid_t **users) {
_cleanup_free_ uid_t *l = NULL;
d = opendir("/run/systemd/users/");
if (!d)
if (!d) {
if (errno == ENOENT) {
if (users)
*users = NULL;
return 0;
}
return -errno;
}
FOREACH_DIRENT_ALL(de, d, return -errno) {
int k;
@@ -848,14 +878,13 @@ _public_ int sd_get_uids(uid_t **users) {
}
_public_ int sd_get_machine_names(char ***machines) {
char **l = NULL, **a, **b;
char **l, **a, **b;
int r;
assert_return(machines, -EINVAL);
r = get_files_in_directory("/run/systemd/machines/", &l);
if (r == -ENOENT) {
*machines = NULL;
if (machines)
*machines = NULL;
return 0;
}
if (r < 0)
@@ -865,7 +894,7 @@ _public_ int sd_get_machine_names(char ***machines) {
r = 0;
/* Filter out the unit: symlinks */
for (a = l, b = l; *a; a++) {
for (a = b = l; *a; a++) {
if (startswith(*a, "unit:") || !machine_name_is_valid(*a))
free(*a);
else {
@@ -878,7 +907,8 @@ _public_ int sd_get_machine_names(char ***machines) {
*b = NULL;
}
*machines = l;
if (machines)
*machines = l;
return r;
}

View File

@@ -61,14 +61,15 @@ static void test_login(void) {
r = sd_pid_get_unit(0, &unit);
assert_se(r >= 0 || r == -ENODATA);
log_info("sd_pid_get_unit(0, …) → \"%s\"", unit);
log_info("sd_pid_get_unit(0, …) → \"%s\"", strna(unit));
r = sd_pid_get_user_unit(0, &user_unit);
assert_se(r >= 0 || r == -ENODATA);
log_info("sd_pid_get_user_unit(0, …) → \"%s\"", user_unit);
log_info("sd_pid_get_user_unit(0, …) → \"%s\"", strna(user_unit));
assert_se(sd_pid_get_slice(0, &slice) >= 0);
log_info("sd_pid_get_slice(0, …) → \"%s\"", slice);
r = sd_pid_get_slice(0, &slice);
assert_se(r >= 0 || r == -ENODATA);
log_info("sd_pid_get_slice(0, …) → \"%s\"", strna(slice));
r = sd_pid_get_session(0, &session);
if (r < 0) {
@@ -248,8 +249,9 @@ static void test_login(void) {
assert_se(r >= 0);
assert_se(r == (int) strv_length(machines));
assert_se(buf = strv_join(machines, " "));
log_info("sd_get_machines(…) → [%i] \"%s\"", r, buf);
assert_se(sd_get_machine_names(NULL) == r);
}
}