*
*/
#include <config.h>
+#include <unistd.h>
#define DBUS_USERDB_INCLUDES_PRIVATE 1
#include "dbus-userdb.h"
#include "dbus-test.h"
#include "dbus-protocol.h"
#include <string.h>
+#if HAVE_SYSTEMD
+#include <systemd/sd-login.h>
+#endif
+
/**
* @addtogroup DBusInternalsUtils
* @{
DBusUserDatabase *db;
const DBusUserInfo *info;
- dbus_bool_t result = FALSE;
+ dbus_bool_t result = FALSE;
+
+#ifdef HAVE_SYSTEMD
+ /* check if we have logind */
+ if (access ("/run/systemd/seats/", F_OK) >= 0)
+ {
+ int r;
+
+ /* Check whether this user is logged in on at least one physical
+ seat */
+ r = sd_uid_get_seats (uid, 0, NULL);
+ if (r < 0)
+ {
+ dbus_set_error (error, _dbus_error_from_errno (-r),
+ "Failed to determine seats of user \"" DBUS_UID_FORMAT "\": %s",
+ uid,
+ _dbus_strerror (-r));
+ return FALSE;
+ }
+
+ return (r > 0);
+ }
+#endif
#ifdef HAVE_CONSOLE_OWNER_FILE
#endif /* HAVE_CONSOLE_OWNER_FILE */
- _dbus_user_database_lock_system ();
+ if (!_dbus_user_database_lock_system ())
+ {
+ _DBUS_SET_OOM (error);
+ return FALSE;
+ }
db = _dbus_user_database_get_system ();
if (db == NULL)
{
DBusUserDatabase *db;
const DBusGroupInfo *info;
- _dbus_user_database_lock_system ();
+
+ /* FIXME: this can't distinguish ENOMEM from other errors */
+ if (!_dbus_user_database_lock_system ())
+ return FALSE;
db = _dbus_user_database_get_system ();
if (db == NULL)
{
DBusUserDatabase *db;
const DBusUserInfo *info;
- _dbus_user_database_lock_system ();
+
+ /* FIXME: this can't distinguish ENOMEM from other errors */
+ if (!_dbus_user_database_lock_system ())
+ return FALSE;
db = _dbus_user_database_get_system ();
if (db == NULL)
*group_ids = NULL;
*n_group_ids = 0;
- _dbus_user_database_lock_system ();
+ /* FIXME: this can't distinguish ENOMEM from other errors */
+ if (!_dbus_user_database_lock_system ())
+ return FALSE;
db = _dbus_user_database_get_system ();
if (db == NULL)
}
/** @} */
-#ifdef DBUS_BUILD_TESTS
+#ifdef DBUS_ENABLE_EMBEDDED_TESTS
#include <stdio.h>
/**
dbus_uid_t uid;
unsigned long *group_ids;
int n_group_ids, i;
+ DBusError error;
if (!_dbus_username_from_current_process (&username))
_dbus_assert_not_reached ("didn't get username");
printf(" %ld", group_ids[i]);
printf ("\n");
-
+
+ dbus_error_init (&error);
+ printf ("Is Console user: %i\n",
+ _dbus_is_console_user (uid, &error));
+ printf ("Invocation was OK: %s\n", error.message ? error.message : "yes");
+ dbus_error_free (&error);
+ printf ("Is Console user 4711: %i\n",
+ _dbus_is_console_user (4711, &error));
+ printf ("Invocation was OK: %s\n", error.message ? error.message : "yes");
+ dbus_error_free (&error);
+
dbus_free (group_ids);
return TRUE;
}
-#endif /* DBUS_BUILD_TESTS */
+#endif /* DBUS_ENABLE_EMBEDDED_TESTS */