Commit 505bbfe4 authored by Simon McVittie's avatar Simon McVittie

tests: Skip system bus test if we are root but messagebus does not exist

Some CI systems do the build as root in a disposable container, and
run tests without ever having installed dbus. This means we can't
expect to be able to drop privileges from root to the DBUS_USER (usually
named messagebus or dbus) unless we have checked that the
DBUS_USER exists.
Signed-off-by: Simon McVittie's avatarSimon McVittie <smcv@collabora.com>
parent 0b887813
......@@ -2653,7 +2653,7 @@ static Config as_another_user_config = {
NULL, 1, "valid-config-files/as-another-user.conf",
/* We start the dbus-daemon as root and drop privileges, like the
* real system bus does */
TEST_USER_ROOT, SPECIFY_ADDRESS
TEST_USER_ROOT_DROP_TO_MESSAGEBUS, SPECIFY_ADDRESS
};
#ifdef ENABLE_TRADITIONAL_ACTIVATION
......
......@@ -126,6 +126,7 @@ spawn_dbus_daemon (const gchar *binary,
case TEST_USER_ROOT:
break;
case TEST_USER_ROOT_DROP_TO_MESSAGEBUS:
case TEST_USER_MESSAGEBUS:
pwd = getpwnam (DBUS_USER);
......@@ -139,6 +140,13 @@ spawn_dbus_daemon (const gchar *binary,
return NULL;
}
if (user == TEST_USER_ROOT_DROP_TO_MESSAGEBUS)
{
/* Let the dbus-daemon start as root and drop privileges
* itself */
pwd = NULL;
}
break;
case TEST_USER_OTHER:
......@@ -399,6 +407,11 @@ become_other_user (TestUser user,
username = DBUS_TEST_USER;
break;
/* TEST_USER_ROOT_DROP_TO_MESSAGEBUS is only meaningful for
* test_get_dbus_daemon(), not as a client */
case TEST_USER_ROOT_DROP_TO_MESSAGEBUS:
g_return_val_if_reached (FALSE);
case TEST_USER_ME:
default:
g_return_val_if_reached (FALSE);
......@@ -445,6 +458,11 @@ become_other_user (TestUser user,
"credentials-passing semantics on this platform");
return FALSE;
/* TEST_USER_ROOT_DROP_TO_MESSAGEBUS is only meaningful for
* test_get_dbus_daemon(), not as a client */
case TEST_USER_ROOT_DROP_TO_MESSAGEBUS:
g_return_val_if_reached (FALSE);
case TEST_USER_ME:
default:
g_return_val_if_reached (FALSE);
......
......@@ -45,8 +45,8 @@
* be run as an arbitrary non-root user, as above.
*
* Certain tests can usefully be run again, as root. When this is done,
* tests using TEST_USER_ROOT, TEST_USER_MESSAGEBUS and/or TEST_USER_OTHER
* can exercise situations that only arise when there's more than one uid.
* tests using a TestUser other than TEST_USER_ME can exercise situations
* that only arise when there's more than one uid.
*/
typedef enum {
/* Whatever user happens to be running the regression test;
......@@ -58,6 +58,11 @@ typedef enum {
* from configure.ac, usually 'messagebus' but perhaps 'dbus' or
* '_dbus'. */
TEST_USER_MESSAGEBUS,
/* Run as uid 0, expecting to drop privileges to the user who would
* normally run the system bus (so we must skip the test if that user
* doesn't exist). Only valid for test_get_dbus_daemon(), not for
* test_connect_to_bus_as_user(). */
TEST_USER_ROOT_DROP_TO_MESSAGEBUS,
/* An unprivileged user who is neither root nor DBUS_USER.
* This is DBUS_TEST_USER from configure.ac, usually 'nobody'. */
TEST_USER_OTHER
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment