AC_ARG_ENABLE(console-owner-file, AS_HELP_STRING([--enable-console-owner-file],[enable console owner file]),enable_console_owner_file=$enableval,enable_console_owner_file=auto)
AC_ARG_ENABLE(userdb-cache, AS_HELP_STRING([--enable-userdb-cache],[build with userdb-cache support]),enable_userdb_cache=$enableval,enable_userdb_cache=yes)
AC_ARG_ENABLE(launchd, AS_HELP_STRING([--enable-launchd],[build with launchd auto-launch support]),enable_launchd=$enableval,enable_launchd=auto)
+AC_ARG_ENABLE(systemd, AS_HELP_STRING([--enable-systemd],[build with systemd at_console support]),enable_systemd=$enableval,enable_systemd=auto)
AC_ARG_WITH(xml, AS_HELP_STRING([--with-xml=[libxml/expat]],[XML library to use (libxml may be named libxml2 on some systems)]))
AC_ARG_WITH(init-scripts, AS_HELP_STRING([--with-init-scripts=[redhat]],[Style of init scripts to install]))
AM_CONDITIONAL(HAVE_CONSOLE_OWNER_FILE, test x$have_console_owner_file = xyes)
+dnl systemd detection
+if test x$enable_systemd = xno ; then
+ have_systemd=no;
+else
+ PKG_CHECK_MODULES(SYSTEMD,
+ [ libsystemd-login libsystemd-daemon ],
+ have_systemd=yes,
+ have_systemd=no)
+ AC_SUBST(SYSTEMD_CFLAGS)
+ AC_SUBST(SYSTEMD_LIBS)
+fi
+
+if test x$have_systemd = xyes; then
+ AC_DEFINE(HAVE_SYSTEMD,1,[Have systemd])
+fi
+
+if test x$enable_systemd = xyes -a x$have_systemd != xyes ; then
+ AC_MSG_ERROR([Explicitly requested systemd support, but systemd not found])
+fi
+
# libaudit detection
if test x$enable_libaudit = xno ; then
have_libaudit=no;
Building inotify support: ${have_inotify}
Building dnotify support: ${have_dnotify}
Building kqueue support: ${have_kqueue}
+ Building systemd support: ${have_systemd}
Building X11 code: ${enable_x11}
Building Doxygen docs: ${enable_doxygen_docs}
Building XML docs: ${enable_xml_docs}
#include "dbus-protocol.h"
#include <string.h>
+#if HAVE_SYSTEMD
+#include <systemd/sd-daemon.h>
+#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
+ if (sd_booted () > 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
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;