diff --git a/sysutils/accountsservice/Makefile b/sysutils/accountsservice/Makefile index 719111dd5..70723e50f 100644 --- a/sysutils/accountsservice/Makefile +++ b/sysutils/accountsservice/Makefile @@ -1,13 +1,9 @@ PORTNAME= accountsservice -PORTVERSION= 0.6.55 -PORTREVISION= 4 +PORTVERSION= 23.13.9 CATEGORIES= sysutils devel -MASTER_SITES= http://www.freedesktop.org/software/${PORTNAME}/ +MASTER_SITES= https://www.freedesktop.org/software/${PORTNAME}/ -PATCH_SITES= https://gitlab.freedesktop.org/${PORTNAME}/${PORTNAME}/-/commit/ -PATCHFILES+= ac9b14f1c1bb.patch:-p1 # https://gitlab.freedesktop.org/accountsservice/accountsservice/-/merge_requests/82 - -MAINTAINER= kwm@FreeBSD.org +MAINTAINER= desktop@FreeBSD.org COMMENT= D-Bus interface for user account query and manipulation WWW= https://gitlab.freedesktop.org/accountsservice/accountsservice @@ -15,16 +11,16 @@ LICENSE= GPLv3+ LICENSE_FILE= ${WRKSRC}/COPYING BUILD_DEPENDS= dbus>0:devel/dbus -LIB_DEPENDS= libpolkit-gobject-1.so:sysutils/polkit +LIB_DEPENDS= libpolkit-gobject-1.so:sysutils/polkit \ + libconsolekit.so:sysutils/consolekit2 USES= cpe gettext gnome localbase:ldflags meson pkgconfig tar:xz CPE_VENDOR= freedesktop USE_GNOME= glib20 intltool libxslt introspection:build USE_LDCONFIG= yes -MESON_ARGS= -Delogind=false \ - -Dgdmconffile=${LOCALBASE}/etc/gdm/custom.conf \ +MESON_ARGS= -Dgdmconffile=${LOCALBASE}/etc/gdm/custom.conf \ + -Dlightdmconffile=${LOCALBASE}/etc/lightdm/lightdm.conf \ -Dlocalstatedir=/var \ - -Dsystemd=false \ -Dsystemdsystemunitdir=no .include diff --git a/sysutils/accountsservice/distinfo b/sysutils/accountsservice/distinfo index 85de866bd..6f00fc371 100644 --- a/sysutils/accountsservice/distinfo +++ b/sysutils/accountsservice/distinfo @@ -1,5 +1,3 @@ -TIMESTAMP = 1600462353 -SHA256 (accountsservice-0.6.55.tar.xz) = ff2b2419a7e06bd9cb335ffe391c7409b49a0f0130b890bd54692a3986699c9b -SIZE (accountsservice-0.6.55.tar.xz) = 97972 -SHA256 (ac9b14f1c1bb.patch) = 2a369203c0f9d091ab1d6ff46c3b9ab88c345ed27e314f04a867ccc4b33e2be2 -SIZE (ac9b14f1c1bb.patch) = 723 +TIMESTAMP = 1681654345 +SHA256 (accountsservice-23.13.9.tar.xz) = adda4cdeae24fa0992e7df3ffff9effa7090be3ac233a3edfdf69d5a9c9b924f +SIZE (accountsservice-23.13.9.tar.xz) = 636064 diff --git a/sysutils/accountsservice/files/patch-meson.build b/sysutils/accountsservice/files/patch-meson.build index 13ecb2d1e..3bfd57ee7 100644 --- a/sysutils/accountsservice/files/patch-meson.build +++ b/sysutils/accountsservice/files/patch-meson.build @@ -1,16 +1,40 @@ ---- meson.build.orig 2018-09-29 12:54:53 UTC +--- meson.build.orig 2023-03-15 15:09:35 UTC +++ meson.build -@@ -82,8 +82,11 @@ if cc.has_header_symbol('utmpx.h', 'WTMPX_FILENAME', p - elif cc.has_header_symbol('paths.h', '_PATH_WTMPX') +@@ -60,6 +60,7 @@ check_headers = [ + 'paths.h', + 'shadow.h', + 'utmpx.h', ++ 'crypt.h', + ] + + foreach header: check_headers +@@ -104,7 +105,6 @@ elif cc.has_header_symbol('paths.h', '_PATH_WTMPX') config_h.set('PATH_WTMP', '_PATH_WTMPX') else -- assert(run_command('test', '-e', '/var/log/utx.log').returncode() == 0, 'Do not know which filename to watch for wtmp changes') -- config_h.set_quoted('PATH_WTMP', '/var/log/utx.log') -+ # Ugly hack for jails builders! -+ _system = host_machine.system().to_lower() -+ if _system.contains('freebsd') -+ config_h.set_quoted('PATH_WTMP', '/var/log/utx.log') -+ endif + path_wtmp = '/var/log/utx.log' +- assert(run_command('test', '-e', path_wtmp, check: false).returncode() == 0, 'Do not know which filename to watch for wtmp changes') + config_h.set_quoted('PATH_WTMP', path_wtmp) + endif + +@@ -213,11 +213,7 @@ config_h.set_quoted('PATH_GDM_CUSTOM', gdm_conf_file) + lightdm_conf_file = get_option('lightdmconffile') + config_h.set_quoted('PATH_LIGHTDM_CONF', lightdm_conf_file) + +-if get_option('elogind') +- logind_dep = dependency('libelogind', version: '>= 229.4') +-else +- logind_dep = dependency('libsystemd', version: '>= 186') +-endif ++logind_dep = dependency('libconsolekit', version: '>= 1.2.0') + + subdir('data') + subdir('src') +@@ -232,7 +228,7 @@ if get_option('gtk_doc') + subdir('doc/libaccountsservice') endif - # compiler flags +-subdir('tests') ++#subdir('tests') + + configure_file( + output: 'config.h', diff --git a/sysutils/accountsservice/files/patch-meson__post__install.py b/sysutils/accountsservice/files/patch-meson__post__install.py index e0d71f5e7..26da68052 100644 --- a/sysutils/accountsservice/files/patch-meson__post__install.py +++ b/sysutils/accountsservice/files/patch-meson__post__install.py @@ -1,11 +1,13 @@ ---- meson_post_install.py.orig 2019-04-23 15:16:09 UTC +--- meson_post_install.py.orig 2022-02-15 21:53:55 UTC +++ meson_post_install.py -@@ -9,8 +9,8 @@ localstatedir = os.path.normpath(destdir + os.sep + sy +@@ -9,9 +9,9 @@ localstatedir = os.path.normpath(destdir + os.sep + sy # FIXME: meson will not track the creation of these directories # https://github.com/mesonbuild/meson/blob/master/mesonbuild/scripts/uninstall.py#L39 dst_dirs = [ +- (os.path.join(localstatedir, 'lib'), 0o755), - (os.path.join(localstatedir, 'lib', 'AccountsService', 'icons'), 0o775), - (os.path.join(localstatedir, 'lib', 'AccountsService', 'users'), 0o700), ++ (os.path.join(localstatedir, 'db'), 0o755), + (os.path.join(localstatedir, 'db', 'AccountsService', 'icons'), 0o775), + (os.path.join(localstatedir, 'db', 'AccountsService', 'users'), 0o700), ] diff --git a/sysutils/accountsservice/files/patch-src_daemon.c b/sysutils/accountsservice/files/patch-src_daemon.c index 3a7131000..687793d5e 100644 --- a/sysutils/accountsservice/files/patch-src_daemon.c +++ b/sysutils/accountsservice/files/patch-src_daemon.c @@ -1,95 +1,111 @@ ---- src/daemon.c.orig 2018-09-26 13:20:49 UTC +--- src/daemon.c.orig 2023-04-15 16:00:14 UTC +++ src/daemon.c -@@ -79,7 +79,11 @@ typedef struct { - GHashTable *extension_ifaces; +@@ -95,11 +95,18 @@ typedef struct + GHashTable *extension_ifaces; } DaemonPrivate; +#ifdef HAVE_SHADOW_H - typedef struct passwd * (* EntryGeneratorFunc) (Daemon *, GHashTable *, gpointer *, struct spwd **shadow_entry); + typedef struct passwd * (* EntryGeneratorFunc) (Daemon *, + GHashTable *, + GHashTable *, + gpointer *, + struct spwd **shadow_entry); +#else -+typedef struct passwd * (* EntryGeneratorFunc) (Daemon *, GHashTable *, gpointer *); ++typedef struct passwd * (* EntryGeneratorFunc) (Daemon *, ++ GHashTable *, ++ GHashTable *, ++ gpointer *); +#endif - static void daemon_accounts_accounts_iface_init (AccountsAccountsIface *iface); - -@@ -154,17 +158,25 @@ remove_cache_files (const gchar *user_name) + typedef struct + { +@@ -206,19 +213,28 @@ remove_cache_files (const gchar *user_name) } static struct passwd * +#ifdef HAVE_SHADOW_H entry_generator_fgetpwent (Daemon *daemon, GHashTable *users, + GHashTable *local_users, gpointer *state, struct spwd **spent) +#else +entry_generator_fgetpwent (Daemon *daemon, + GHashTable *users, ++ GHashTable *local_users, + gpointer *state) +#endif { struct passwd *pwent; +#ifdef HAVE_SHADOW_H - struct { + struct + { struct spwd spbuf; - char buf[1024]; + char buf[1024]; } *shadow_entry_buffers; +#endif - struct { - FILE *fp; -@@ -175,6 +187,7 @@ entry_generator_fgetpwent (Daemon *daemon, - if (*state == NULL) { - GHashTable *shadow_users = NULL; + struct + { +@@ -236,6 +252,7 @@ entry_generator_fgetpwent (Daemon *daemon, + g_autofree char *shadow_path = NULL; + g_autofree char *passwd_path = NULL; FILE *fp; +#ifdef HAVE_SHADOW_H struct spwd *shadow_entry; - fp = fopen (PATH_SHADOW, "r"); -@@ -208,6 +221,7 @@ entry_generator_fgetpwent (Daemon *daemon, + shadow_path = g_build_filename (get_sysconfdir (), PATH_SHADOW, NULL); +@@ -271,6 +288,7 @@ entry_generator_fgetpwent (Daemon *daemon, g_clear_pointer (&shadow_users, g_hash_table_unref); return NULL; } +#endif - fp = fopen (PATH_PASSWD, "r"); - if (fp == NULL) { -@@ -229,12 +243,17 @@ entry_generator_fgetpwent (Daemon *daemon, + passwd_path = g_build_filename (get_sysconfdir (), PATH_PASSWD, NULL); + fp = fopen (passwd_path, "r"); +@@ -293,6 +311,7 @@ entry_generator_fgetpwent (Daemon *daemon, if (g_hash_table_size (users) < MAX_LOCAL_USERS) { pwent = fgetpwent (generator_state->fp); if (pwent != NULL) { +#ifdef HAVE_SHADOW_H - shadow_entry_buffers = g_hash_table_lookup (generator_state->users, pwent->pw_name); + shadow_entry_buffers = g_hash_table_lookup (generator_state->shadow_users, pwent->pw_name); if (shadow_entry_buffers != NULL) { - *spent = &shadow_entry_buffers->spbuf; +@@ -305,6 +324,13 @@ entry_generator_fgetpwent (Daemon *daemon, + + return entry_generator_fgetpwent (daemon, users, local_users, state, spent); } - return pwent; +#else -+ if (!generator_state->users || g_hash_table_lookup (generator_state->users, pwent->pw_name)) -+ return pwent; ++ /* Skip system users... */ ++ if (!user_classify_is_human (pwent->pw_uid, pwent->pw_name, pwent->pw_shell)) { ++ g_debug ("skipping user: %s", pwent->pw_name); ++ return entry_generator_fgetpwent (daemon, users, local_users, state); ++ } +#endif - } - } -@@ -248,10 +267,16 @@ entry_generator_fgetpwent (Daemon *daemon, + return pwent; + } +@@ -319,11 +345,18 @@ entry_generator_fgetpwent (Daemon *daemon, } static struct passwd * +#ifdef HAVE_SHADOW_H entry_generator_cachedir (Daemon *daemon, GHashTable *users, + GHashTable *local_users, gpointer *state, struct spwd **shadow_entry) +#else +entry_generator_cachedir (Daemon *daemon, + GHashTable *users, ++ GHashTable *local_users, + gpointer *state) +#endif { struct passwd *pwent; - g_autoptr(GError) error = NULL; -@@ -293,7 +318,9 @@ entry_generator_cachedir (Daemon *daemon, + +@@ -366,7 +399,9 @@ entry_generator_cachedir (Daemon *daemon, errno = 0; pwent = getpwnam (name); if (pwent != NULL) { @@ -99,24 +115,26 @@ return pwent; } else if (errno == 0) { -@@ -329,10 +356,16 @@ entry_generator_cachedir (Daemon *daemon, +@@ -405,11 +440,18 @@ entry_generator_cachedir (Daemon *daemon, } static struct passwd * +#ifdef HAVE_SHADOW_H entry_generator_requested_users (Daemon *daemon, GHashTable *users, + GHashTable *local_users, gpointer *state, struct spwd **shadow_entry) +#else +entry_generator_requested_users (Daemon *daemon, + GHashTable *users, ++ GHashTable *local_users, + gpointer *state) +#endif { DaemonPrivate *priv = daemon_get_instance_private (daemon); struct passwd *pwent; -@@ -360,7 +393,9 @@ entry_generator_requested_users (Daemon *daemon, +@@ -437,7 +479,9 @@ entry_generator_requested_users (Daemon *daemon, if (pwent == NULL) { g_debug ("user '%s' requested previously but not present on system", name); } else { @@ -126,7 +144,7 @@ return pwent; } -@@ -383,19 +418,29 @@ load_entries (Daemon *daemon, +@@ -461,14 +505,20 @@ load_entries (Daemon *daemon, DaemonPrivate *priv = daemon_get_instance_private (daemon); gpointer generator_state = NULL; struct passwd *pwent; @@ -140,23 +158,14 @@ for (;;) { +#ifdef HAVE_SHADOW_H spent = NULL; - pwent = entry_generator (daemon, users, &generator_state, &spent); + pwent = entry_generator (daemon, users, local_users, &generator_state, &spent); +#else -+ pwent = entry_generator (daemon, users, &generator_state); ++ pwent = entry_generator (daemon, users, local_users, &generator_state); +#endif if (pwent == NULL) break; - /* Skip system users... */ -+#ifdef HAVE_SHADOW_H - if (!explicitly_requested && !user_classify_is_human (pwent->pw_uid, pwent->pw_name, pwent->pw_shell, spent? spent->sp_pwdp : NULL)) { -+#else -+ if (!explicitly_requested && !user_classify_is_human (pwent->pw_uid, pwent->pw_name, pwent->pw_shell, NULL)) { -+#endif - g_debug ("skipping user: %s", pwent->pw_name); - continue; - } -@@ -417,7 +462,11 @@ load_entries (Daemon *daemon, +@@ -489,7 +539,11 @@ load_entries (Daemon *daemon, /* freeze & update users not already in the new list */ g_object_freeze_notify (G_OBJECT (user)); @@ -168,7 +177,7 @@ g_hash_table_insert (users, g_strdup (user_get_user_name (user)), user); g_debug ("loaded user: %s", user_get_user_name (user)); -@@ -823,15 +872,24 @@ throw_error (GDBusMethodInvocation *context, +@@ -952,15 +1006,24 @@ throw_error (GDBusMethodInvocation *context, } static User * @@ -193,7 +202,7 @@ user_register (user); g_hash_table_insert (priv->users, -@@ -860,9 +918,13 @@ daemon_local_find_user_by_id (Daemon *daemon, +@@ -989,9 +1052,13 @@ daemon_local_find_user_by_id (Daemon *daemon, user = g_hash_table_lookup (priv->users, pwent->pw_name); if (user == NULL) { @@ -207,7 +216,7 @@ priv->explicitly_requested_users = g_list_append (priv->explicitly_requested_users, g_strdup (pwent->pw_name)); -@@ -888,9 +950,13 @@ daemon_local_find_user_by_name (Daemon *daemon, +@@ -1017,9 +1084,13 @@ daemon_local_find_user_by_name (Daemon *daemon, user = g_hash_table_lookup (priv->users, pwent->pw_name); if (user == NULL) { @@ -221,7 +230,7 @@ priv->explicitly_requested_users = g_list_append (priv->explicitly_requested_users, g_strdup (pwent->pw_name)); -@@ -1095,10 +1161,12 @@ daemon_create_user_authorized_cb (Daemon +@@ -1294,10 +1365,12 @@ daemon_create_user_authorized_cb (Daemon sys_log (context, "create user '%s'", cd->user_name); @@ -236,11 +245,11 @@ + argv[4] = "-c"; + argv[5] = cd->real_name; if (cd->account_type == ACCOUNT_TYPE_ADMINISTRATOR) { - if (EXTRA_ADMIN_GROUPS != NULL && EXTRA_ADMIN_GROUPS[0] != '\0') - admin_groups = g_strconcat (ADMIN_GROUP, ",", -@@ -1106,15 +1174,11 @@ daemon_create_user_authorized_cb (Daemon - else - admin_groups = g_strdup (ADMIN_GROUP); + g_auto (GStrv) admin_groups_array = NULL; + g_autoptr (GStrvBuilder) admin_groups_builder = g_strv_builder_new (); +@@ -1318,14 +1391,10 @@ daemon_create_user_authorized_cb (Daemon + admin_groups_array = g_strv_builder_end (admin_groups_builder); + admin_groups = g_strjoinv (",", admin_groups_array); - argv[4] = "-G"; - argv[5] = admin_groups; @@ -249,25 +258,24 @@ + argv[6] = "-G"; + argv[7] = admin_groups; argv[8] = NULL; - } - else if (cd->account_type == ACCOUNT_TYPE_STANDARD) { + } else if (cd->account_type == ACCOUNT_TYPE_STANDARD) { - argv[4] = "--"; - argv[5] = cd->user_name; argv[6] = NULL; - } - else { -@@ -1281,7 +1345,7 @@ daemon_delete_user_authorized_cb (Daemon - DeleteUserData *ud = data; - g_autoptr(GError) error = NULL; + } else { + throw_error (context, ERROR_FAILED, "Don't know how to add user of type %d", cd->account_type); +@@ -1490,7 +1559,7 @@ daemon_delete_user_authorized_cb (Daemon + + g_autoptr (GError) error = NULL; struct passwd *pwent; - const gchar *argv[6]; + const gchar *argv[5]; + const gchar *homedir; + gchar *resolved_homedir; User *user; - - pwent = getpwuid (ud->uid); -@@ -1307,19 +1371,16 @@ daemon_delete_user_authorized_cb (Daemon - - user_set_saved (user, FALSE); +@@ -1527,18 +1596,15 @@ daemon_delete_user_authorized_cb (Daemon + } + free (resolved_homedir); - argv[0] = "/usr/sbin/userdel"; + argv[0] = "/usr/sbin/pw"; @@ -278,17 +286,16 @@ - argv[3] = "--"; - argv[4] = pwent->pw_name; - argv[5] = NULL; -+ argv[2] = pwent->pw_name; -+ argv[3] = "-r"; -+ argv[4] = NULL; - } - else { +- } else { - argv[1] = "-f"; - argv[2] = "--"; - argv[3] = pwent->pw_name; -- argv[4] = NULL; ++ argv[2] = pwent->pw_name; ++ argv[3] = "-r"; + argv[4] = NULL; ++ } else { + argv[2] = pwent->pw_name; + argv[3] = NULL; } - if (!spawn_with_login_uid (context, argv, &error)) { + if (!spawn_sync (argv, &error)) { diff --git a/sysutils/accountsservice/files/patch-src_libaccountsservice_act-user-manager.c b/sysutils/accountsservice/files/patch-src_libaccountsservice_act-user-manager.c index 9026883f2..85a5c6cc2 100644 --- a/sysutils/accountsservice/files/patch-src_libaccountsservice_act-user-manager.c +++ b/sysutils/accountsservice/files/patch-src_libaccountsservice_act-user-manager.c @@ -1,18 +1,166 @@ -Obtained from: - https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/ports/sysutils/accountsservice/patches/patch-src_libaccountsservice_act-user-manager_c - -$OpenBSD: patch-src_libaccountsservice_act-user-manager_c,v 1.2 2021/08/30 19:15:24 ajacoutot Exp $ - -REVERT: (breaks listing users in gdm and gnome-cc and unlocking screenshield) -From c7fa612023a163e8b2352e1170c6df3fceb19b27 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Thu, 19 Jul 2018 13:14:09 -0400 -Subject: [PATCH] lib: don't set loaded state until seat is fetched - -Index: src/libaccountsservice/act-user-manager.c ---- src/libaccountsservice/act-user-manager.c.orig +--- src/libaccountsservice/act-user-manager.c.orig 2023-03-15 15:09:35 UTC +++ src/libaccountsservice/act-user-manager.c -@@ -2547,7 +2547,7 @@ maybe_set_is_loaded (ActUserManager *manager) +@@ -40,7 +40,8 @@ + #include + #include + #include +-#include ++#include ++#include + + #include "act-user-manager.h" + #include "act-user-private.h" +@@ -100,9 +101,6 @@ typedef struct + char *id; + char *session_id; + guint load_idle_id; +- sd_login_monitor *session_monitor; +- GInputStream *session_monitor_stream; +- guint session_monitor_source_id; + } ActUserManagerSeat; + + typedef enum +@@ -165,6 +163,8 @@ typedef struct + + ActUserManagerSeat seat; + ++ LibConsoleKit *ck; ++ + GSList *new_sessions; + GSList *new_users; /* (element-type ActUser) (owned) */ + GSList *new_users_inhibiting_load; /* (element-type ActUser) (unowned) */ +@@ -271,9 +271,9 @@ activate_systemd_session_id (ActUserManager *manager, + } + + reply = g_dbus_connection_call_sync (connection, +- "org.freedesktop.login1", +- "/org/freedesktop/login1", +- "org.freedesktop.login1.Manager", ++ "org.freedesktop.ConsoleKit", ++ "/org/freedesktop/ConsoleKit/Manager", ++ "org.freedesktop.ConsoleKit.Manager", + "ActivateSessionOnSeat", + g_variant_new ("(ss)", + seat_id, +@@ -318,9 +318,7 @@ session_is_on_our_seat (ActUserManager *manager, + g_autofree gchar *session_seat = NULL; + + res = sd_session_get_seat (session_id, &session_seat); +- if (res == -ENODATA) { +- return FALSE; +- } else if (res < 0) { ++ if (res < 0) { + g_debug ("failed to determine seat of session %s: %s", + session_id, + strerror (-res)); +@@ -521,7 +519,7 @@ queue_load_seat_incrementally (ActUserManager *manager + static gboolean + _systemd_session_is_graphical (const char *session_id) + { +- const gchar * const graphical_session_types[] = { "wayland", "x11", "mir", NULL }; ++ const gchar * const graphical_session_types[] = { "wayland", "x11", NULL }; + int saved_errno; + g_autofree gchar *type = NULL; + +@@ -637,9 +635,7 @@ get_seat_id_for_current_session (ActUserManager *manag + + res = sd_session_get_seat (priv->seat.session_id, &seat_id); + +- if (res == -ENODATA) { +- seat_id = NULL; +- } else if (res < 0) { ++ if (res < 0) { + g_warning ("Could not get current seat: %s", + strerror (-res)); + unload_seat (manager); +@@ -1340,15 +1336,24 @@ get_x11_display_for_new_session (ActUserManagerNewSess + session_type, + new_session->id); + x11_display = NULL; +- goto done; ++ //goto done; + } + +- res = sd_session_get_display (new_session->id, +- &x11_display); +- if (res < 0) { +- g_debug ("ActUserManager: Failed to get the x11 display of session '%s': %s", +- new_session->id, +- strerror (-res)); ++ ActUserManager *manager; ++ g_autoptr(GError) error = NULL; ++ ++ manager = ACT_USER_MANAGER (new_session->manager); ++ ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); ++ if (!lib_consolekit_session_get_display (priv->ck, ++ new_session->id, ++ &x11_display, &error)) { ++ if (error != NULL) { ++ g_debug ("ActUserManager: Failed to get the x11 display of session '%s': %s", ++ new_session->id, error->message); ++ } else { ++ g_debug ("ActUserManager: Failed to get the x11 display of session '%s'", ++ new_session->id); ++ } + g_debug ("ActUserManager: Treating X11 display as blank"); + x11_display = strdup (""); + } else { +@@ -1356,7 +1361,7 @@ get_x11_display_for_new_session (ActUserManagerNewSess + new_session->id, x11_display); + } + +-done: ++//done: + new_session->x11_display = g_strdup (x11_display); + new_session->state++; + +@@ -1627,10 +1632,6 @@ static gboolean + on_session_monitor_event (GPollableInputStream *stream, + ActUserManager *manager) + { +- ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); +- +- sd_login_monitor_flush (priv->seat.session_monitor); +- reload_systemd_sessions (manager); + return TRUE; + } + +@@ -1638,31 +1639,13 @@ static void + _monitor_for_systemd_session_changes (ActUserManager *manager) + { + ActUserManagerPrivate *priv = act_user_manager_get_instance_private (manager); +- int res; +- int fd; +- GSource *source; ++ priv->ck = lib_consolekit_new (); + +- res = sd_login_monitor_new ("session", &priv->seat.session_monitor); +- +- if (res < 0) { +- g_warning ("Failed to monitor logind session changes: %s", +- strerror (-res)); ++ if (priv->ck == NULL) { ++ g_warning ("Failed to connect to the ConsoleKit daemon"); + unload_seat (manager); + return; + } +- +- fd = sd_login_monitor_get_fd (priv->seat.session_monitor); +- +- priv->seat.session_monitor_stream = g_unix_input_stream_new (fd, FALSE); +- source = g_pollable_input_stream_create_source (G_POLLABLE_INPUT_STREAM (priv->seat.session_monitor_stream), +- NULL); +- g_source_set_callback (source, +- (GSourceFunc) +- on_session_monitor_event, +- manager, +- NULL); +- priv->seat.session_monitor_source_id = g_source_attach (source, NULL); +- g_source_unref (source); + } + + static void +@@ -2046,7 +2029,7 @@ maybe_set_is_loaded (ActUserManager *manager) /* Don't set is_loaded yet unless the seat is already loaded enough * or failed to load. */ @@ -21,4 +169,22 @@ Index: src/libaccountsservice/act-user-manager.c g_debug ("ActUserManager: Seat loaded, so now setting loaded property"); } else if (priv->seat.state == ACT_USER_MANAGER_SEAT_STATE_UNLOADED) { g_debug ("ActUserManager: Seat wouldn't load, so giving up on it and setting loaded property"); - +@@ -2528,16 +2511,8 @@ act_user_manager_finalize (GObject *object) + g_source_remove (priv->seat.load_idle_id); + } + +- if (priv->seat.session_monitor != NULL) { +- sd_login_monitor_unref (priv->seat.session_monitor); +- } +- +- if (priv->seat.session_monitor_stream != NULL) { +- g_object_unref (priv->seat.session_monitor_stream); +- } +- +- if (priv->seat.session_monitor_source_id != 0) { +- g_source_remove (priv->seat.session_monitor_source_id); ++ if (priv->ck != NULL) { ++ g_object_unref (priv->ck); + } + + if (priv->accounts_proxy != NULL) { diff --git a/sysutils/accountsservice/files/patch-src_libaccountsservice_act-user.c b/sysutils/accountsservice/files/patch-src_libaccountsservice_act-user.c index f8b4dfae0..602409aca 100644 --- a/sysutils/accountsservice/files/patch-src_libaccountsservice_act-user.c +++ b/sysutils/accountsservice/files/patch-src_libaccountsservice_act-user.c @@ -1,11 +1,12 @@ ---- src/libaccountsservice/act-user.c.orig 2018-04-04 13:59:42 UTC +--- src/libaccountsservice/act-user.c.orig 2022-01-28 20:47:34 UTC +++ src/libaccountsservice/act-user.c -@@ -26,8 +26,6 @@ +@@ -26,7 +26,9 @@ #include #include --#include -- ++#ifdef HAVE_CRYPT_H + #include ++#endif + #include #include - #include diff --git a/sysutils/accountsservice/files/patch-src_meson.build b/sysutils/accountsservice/files/patch-src_meson.build index 9687666fe..6370fd7be 100644 --- a/sysutils/accountsservice/files/patch-src_meson.build +++ b/sysutils/accountsservice/files/patch-src_meson.build @@ -1,9 +1,9 @@ ---- src/meson.build.orig 2018-09-29 12:54:53 UTC +--- src/meson.build.orig 2022-01-28 20:47:34 UTC +++ src/meson.build -@@ -26,8 +26,8 @@ deps = [ - cflags = [ +@@ -28,8 +28,8 @@ cflags = [ '-DLOCALSTATEDIR="@0@"'.format(act_localstatedir), '-DDATADIR="@0@"'.format(act_datadir), + '-DSYSCONFDIR="@0@"'.format(act_sysconfdir), - '-DICONDIR="@0@"'.format(join_paths(act_localstatedir, 'lib', 'AccountsService', 'icons')), - '-DUSERDIR="@0@"'.format(join_paths(act_localstatedir, 'lib', 'AccountsService', 'users')), + '-DICONDIR="@0@"'.format(join_paths(act_localstatedir, 'db', 'AccountsService', 'icons')), diff --git a/sysutils/accountsservice/files/patch-src_user.c b/sysutils/accountsservice/files/patch-src_user.c index 97de2d32f..baf5692cc 100644 --- a/sysutils/accountsservice/files/patch-src_user.c +++ b/sysutils/accountsservice/files/patch-src_user.c @@ -1,6 +1,6 @@ ---- src/user.c.orig 2018-04-20 20:52:07 UTC +--- src/user.c.orig 2023-03-15 15:09:35 UTC +++ src/user.c -@@ -138,9 +138,14 @@ user_reset_icon_file (User *user) +@@ -407,9 +407,14 @@ user_update_from_template (User *user) } void @@ -15,7 +15,7 @@ { g_autofree gchar *real_name = NULL; gboolean is_system_account; -@@ -199,8 +204,10 @@ user_update_from_pwent (User *user, +@@ -468,8 +473,10 @@ user_update_from_pwent (User *user, accounts_user_set_shell (ACCOUNTS_USER (user), pwent->pw_shell); passwd = NULL; @@ -26,7 +26,7 @@ if (passwd && passwd[0] == '!') { locked = TRUE; -@@ -218,6 +225,7 @@ user_update_from_pwent (User *user, +@@ -485,6 +492,7 @@ user_update_from_pwent (User *user, mode = PASSWORD_MODE_NONE; } @@ -34,34 +34,34 @@ if (spent) { if (spent->sp_lstchg == 0) { mode = PASSWORD_MODE_SET_AT_LOGIN; -@@ -231,6 +239,9 @@ user_update_from_pwent (User *user, +@@ -504,6 +512,9 @@ user_update_from_pwent (User *user, user->days_after_expiration_until_lock = spent->sp_inact; user->account_expiration_policy_known = TRUE; } +#else -+ user->expiration_time = pwent->pw_expire; ++ user->user_expiration_time = g_date_time_new_from_unix_utc (pwent->pw_expire); +#endif accounts_user_set_password_mode (ACCOUNTS_USER (user), mode); is_system_account = !user_classify_is_human (accounts_user_get_uid (ACCOUNTS_USER (user)), -@@ -813,11 +824,11 @@ user_change_real_name_authorized_cb (Daemon - accounts_user_get_uid (ACCOUNTS_USER (user)), - name); +@@ -1193,11 +1204,11 @@ user_change_real_name_authorized_cb (Daemon + new_gecos = g_strdup (name); + } - argv[0] = "/usr/sbin/usermod"; - argv[1] = "-c"; -- argv[2] = name; +- argv[2] = new_gecos; - argv[3] = "--"; - argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[0] = "/usr/sbin/pw"; + argv[1] = "usermod"; + argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[3] = "-c"; -+ argv[4] = name; ++ argv[4] = new_gecos; argv[5] = NULL; - if (!spawn_with_login_uid (context, argv, &error)) { -@@ -882,11 +893,11 @@ user_change_user_name_authorized_cb (Daemon + if (!spawn_sync (argv, &error)) { +@@ -1267,11 +1278,11 @@ user_change_user_name_authorized_cb (Daemon accounts_user_get_uid (ACCOUNTS_USER (user)), name); @@ -77,17 +77,17 @@ + argv[4] = name; argv[5] = NULL; - if (!spawn_with_login_uid (context, argv, &error)) { -@@ -1183,7 +1194,7 @@ user_change_home_dir_authorized_cb (Daemon - { + if (!spawn_sync (argv, &error)) { +@@ -1910,7 +1921,7 @@ user_change_home_dir_authorized_cb (Daemon gchar *home_dir = data; - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; - const gchar *argv[7]; -+ const gchar *argv[6]; ++ const gchar *argv[8]; if (g_strcmp0 (accounts_user_get_home_directory (ACCOUNTS_USER (user)), home_dir) != 0) { sys_log (context, -@@ -1192,13 +1203,12 @@ user_change_home_dir_authorized_cb (Daemon +@@ -1919,13 +1930,14 @@ user_change_home_dir_authorized_cb (Daemon accounts_user_get_uid (ACCOUNTS_USER (user)), home_dir); @@ -99,15 +99,17 @@ - argv[5] = accounts_user_get_user_name (ACCOUNTS_USER (user)); - argv[6] = NULL; + argv[0] = "/usr/sbin/pw"; -+ argv[1] = "-d"; -+ argv[2] = home_dir; -+ argv[3] = "-n"; -+ argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); -+ argv[5] = NULL; - - if (!spawn_with_login_uid (context, argv, &error)) { ++ argv[1] = "usermod"; ++ argv[2] = "-n"; ++ argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); ++ argv[4] = "-d"; ++ argv[5] = home_dir; ++ argv[6] = "-m"; ++ argv[7] = NULL; + + if (!spawn_sync (argv, &error)) { throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); -@@ -1249,11 +1259,11 @@ user_change_shell_authorized_cb (Daemon +@@ -1977,11 +1989,11 @@ user_change_shell_authorized_cb (Daemon accounts_user_get_uid (ACCOUNTS_USER (user)), shell); @@ -123,33 +125,30 @@ + argv[4] = shell; argv[5] = NULL; - if (!spawn_with_login_uid (context, argv, &error)) { -@@ -1456,7 +1466,7 @@ user_change_locked_authorized_cb (Daemon - { - gboolean locked = GPOINTER_TO_INT (data); - g_autoptr(GError) error = NULL; -- const gchar *argv[5]; -+ const gchar *argv[4]; - - if (accounts_user_get_locked (ACCOUNTS_USER (user)) != locked) { - sys_log (context, -@@ -1464,11 +1474,10 @@ user_change_locked_authorized_cb (Daemon + if (!spawn_sync (argv, &error)) { +@@ -2201,9 +2213,9 @@ user_change_locked_authorized_cb (Daemon locked ? "locking" : "unlocking", accounts_user_get_user_name (ACCOUNTS_USER (user)), accounts_user_get_uid (ACCOUNTS_USER (user))); - argv[0] = "/usr/sbin/usermod"; - argv[1] = locked ? "-L" : "-U"; - argv[2] = "--"; -- argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); -- argv[4] = NULL; + argv[0] = "/usr/sbin/pw"; + argv[1] = locked ? "lock" : "unlock"; -+ argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user)); -+ argv[3] = NULL; ++ argv[2] = "-n"; + argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[4] = NULL; + +@@ -2281,7 +2293,7 @@ user_change_account_type_authorized_cb (Daemon + gsize n_extra_admin_groups_gids = 0; + gid_t admin_gid; + gint i; +- const gchar *argv[6]; ++ const gchar *argv[7]; - if (!spawn_with_login_uid (context, argv, &error)) { - throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); -@@ -1589,11 +1598,11 @@ user_change_account_type_authorized_cb (Daemon + if (((AccountType) accounts_user_get_account_type (ACCOUNTS_USER (user))) != account_type) { + sys_log (context, +@@ -2328,11 +2340,11 @@ user_change_account_type_authorized_cb (Daemon g_free (groups); @@ -165,19 +164,19 @@ + argv[4] = str->str; argv[5] = NULL; - if (!spawn_with_login_uid (context, argv, &error)) { -@@ -1643,7 +1652,7 @@ user_change_password_mode_authorized_cb (Daemon - { + if (!spawn_sync (argv, &error)) { +@@ -2383,7 +2395,7 @@ user_change_password_mode_authorized_cb (Daemon PasswordMode mode = GPOINTER_TO_INT (data); - g_autoptr(GError) error = NULL; + + g_autoptr (GError) error = NULL; - const gchar *argv[6]; + const gchar *argv[5]; if (((PasswordMode) accounts_user_get_password_mode (ACCOUNTS_USER (user))) != mode) { sys_log (context, -@@ -1658,10 +1667,8 @@ user_change_password_mode_authorized_cb (Daemon +@@ -2397,10 +2409,8 @@ user_change_password_mode_authorized_cb (Daemon + if (mode == PASSWORD_MODE_SET_AT_LOGIN || mode == PASSWORD_MODE_NONE) { - argv[0] = "/usr/bin/passwd"; - argv[1] = "-d"; - argv[2] = "--"; @@ -186,9 +185,9 @@ + argv[1] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[2] = NULL; - if (!spawn_with_login_uid (context, argv, &error)) { + if (!spawn_sync (argv, &error)) { throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); -@@ -1669,12 +1676,11 @@ user_change_password_mode_authorized_cb (Daemon +@@ -2408,12 +2418,11 @@ user_change_password_mode_authorized_cb (Daemon } if (mode == PASSWORD_MODE_SET_AT_LOGIN) { @@ -203,46 +202,27 @@ + argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[4] = NULL; - if (!spawn_with_login_uid (context, argv, &error)) { + if (!spawn_sync (argv, &error)) { throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); -@@ -1690,11 +1696,10 @@ user_change_password_mode_authorized_cb (Daemon +@@ -2428,9 +2437,9 @@ user_change_password_mode_authorized_cb (Daemon + */ accounts_user_set_locked (ACCOUNTS_USER (user), FALSE); - } - else if (accounts_user_get_locked (ACCOUNTS_USER (user))) { + } else if (accounts_user_get_locked (ACCOUNTS_USER (user))) { - argv[0] = "/usr/sbin/usermod"; - argv[1] = "-U"; - argv[2] = "--"; -- argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); -- argv[4] = NULL; + argv[0] = "/usr/sbin/pw"; + argv[1] = "unlock"; -+ argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user)); -+ argv[3] = NULL; ++ argv[2] = "-n"; + argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[4] = NULL; - if (!spawn_with_login_uid (context, argv, &error)) { - throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); -@@ -1759,7 +1764,7 @@ user_change_password_authorized_cb (Daemon - { - gchar **strings = data; - g_autoptr(GError) error = NULL; -- const gchar *argv[6]; -+ const gchar *argv[5]; +@@ -2505,7 +2514,7 @@ user_change_password_authorized_cb (Daemon + + g_autoptr (GError) error = NULL; + g_autoptr (GSubprocess) process = NULL; +- const char *argv[] = { "/usr/sbin/chpasswd", "-e", NULL }; ++ const char *argv[] = { "/usr/bin/passwd", NULL }; sys_log (context, - "set password and hint of user '%s' (%d)", -@@ -1768,12 +1773,11 @@ user_change_password_authorized_cb (Daemon - - g_object_freeze_notify (G_OBJECT (user)); - -- argv[0] = "/usr/sbin/usermod"; -+ argv[0] = "/usr/bin/chpass"; - argv[1] = "-p"; - argv[2] = strings[0]; -- argv[3] = "--"; -- argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); -- argv[5] = NULL; -+ argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); -+ argv[4] = NULL; - - if (!spawn_with_login_uid (context, argv, &error)) { - throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); + "set password and hint of user '%s' (%" G_GUINT64_FORMAT ")", diff --git a/sysutils/accountsservice/files/patch-src_user.h b/sysutils/accountsservice/files/patch-src_user.h index fa8454f75..9f4c61894 100644 --- a/sysutils/accountsservice/files/patch-src_user.h +++ b/sysutils/accountsservice/files/patch-src_user.h @@ -1,27 +1,17 @@ ---- src/user.h.orig 2016-09-06 17:31:50 UTC +--- src/user.h.orig 2023-03-15 15:09:35 UTC +++ src/user.h -@@ -22,7 +22,9 @@ +@@ -55,9 +55,14 @@ GType user_get_type (void) G_GNUC_CONST; + User * user_new (Daemon *daemon, + uid_t uid); - #include - #include +#ifdef HAVE_SHADOW_H - #include -+#endif - - #include - #include -@@ -54,9 +56,14 @@ GType user_get_type (void) G_G - User * user_new (Daemon *daemon, - uid_t uid); - -+#ifdef HAVE_SHADOW_H - void user_update_from_pwent (User *user, - struct passwd *pwent, - struct spwd *spent); + void user_update_from_pwent (User *user, + struct passwd *pwent, + struct spwd *spent); +#else -+void user_update_from_pwent (User *user, -+ struct passwd *pwent); ++void user_update_from_pwent (User *user, ++ struct passwd *pwent); +#endif - void user_update_from_keyfile (User *user, - GKeyFile *keyfile); - void user_update_local_account_property (User *user, + void user_update_from_cache (User *user); + void user_update_local_account_property (User *user, + gboolean local); diff --git a/sysutils/accountsservice/files/patch-src_wtmp-helper.h b/sysutils/accountsservice/files/patch-src_wtmp-helper.h deleted file mode 100644 index ab1425351..000000000 --- a/sysutils/accountsservice/files/patch-src_wtmp-helper.h +++ /dev/null @@ -1,10 +0,0 @@ ---- src/wtmp-helper.h.orig 2016-09-06 19:48:50 UTC -+++ src/wtmp-helper.h -@@ -23,7 +23,6 @@ - - #include - #include --#include - - const gchar * wtmp_helper_get_path_for_monitor (void); - void wtmp_helper_update_login_frequencies (GHashTable *users); diff --git a/sysutils/accountsservice/pkg-plist b/sysutils/accountsservice/pkg-plist index c9b64a57e..3bca97065 100644 --- a/sysutils/accountsservice/pkg-plist +++ b/sysutils/accountsservice/pkg-plist @@ -1,4 +1,3 @@ -etc/dbus-1/system.d/org.freedesktop.Accounts.conf include/accountsservice-1.0/act/act-user-enum-types.h include/accountsservice-1.0/act/act-user-manager.h include/accountsservice-1.0/act/act-user.h @@ -9,9 +8,12 @@ lib/libaccountsservice.so.0 lib/libaccountsservice.so.0.0.0 libdata/pkgconfig/accountsservice.pc libexec/accounts-daemon +%%DATADIR%%/user-templates/administrator +%%DATADIR%%/user-templates/standard share/dbus-1/interfaces/org.freedesktop.Accounts.User.xml share/dbus-1/interfaces/org.freedesktop.Accounts.xml share/dbus-1/system-services/org.freedesktop.Accounts.service +share/dbus-1/system.d/org.freedesktop.Accounts.conf share/gir-1.0/AccountsService-1.0.gir share/locale/af/LC_MESSAGES/accounts-service.mo share/locale/ar/LC_MESSAGES/accounts-service.mo @@ -88,6 +90,8 @@ share/locale/zh_CN/LC_MESSAGES/accounts-service.mo share/locale/zh_HK/LC_MESSAGES/accounts-service.mo share/locale/zh_TW/LC_MESSAGES/accounts-service.mo share/polkit-1/actions/org.freedesktop.accounts.policy +share/vala/vapi/accountsservice.deps +share/vala/vapi/accountsservice.vapi @dir(,,0775) /var/db/AccountsService/icons @dir(,,0700) /var/db/AccountsService/users @dir /var/db/AccountsService