# Buildsheet autogenerated by ravenadm tool -- Do not edit. NAMEBASE= accountsservice VERSION= 0.6.55 KEYWORDS= sysutils VARIANTS= standard SDESC[standard]= D-Bus service for user account query/manipulation HOMEPAGE= https://www.freedesktop.org/wiki/Software/AccountsService/ CONTACT= Michael_Reim[kraileth@elderlinux.org] DOWNLOAD_GROUPS= main SITES[main]= https://www.freedesktop.org/software/accountsservice/ DISTFILE[1]= accountsservice-0.6.55.tar.xz:main DF_INDEX= 1 SPKGS[standard]= complete primary nls docs OPTIONS_AVAILABLE= none OPTIONS_STANDARD= none BUILD_DEPENDS= xmlto:single:standard BUILDRUN_DEPENDS= polkit:primary:standard USES= cpe gettext-runtime gettext-tools:build meson pkgconfig GNOME_COMPONENTS= glib introspection LICENSE= GPLv3+:primary LICENSE_TERMS= primary:{{WRKDIR}}/TERMS LICENSE_FILE= GPLv3+:{{WRKSRC}}/COPYING LICENSE_AWK= TERMS:"^$$" LICENSE_SOURCE= TERMS:{{WRKSRC}}/src/accounts-daemon.h LICENSE_SCHEME= solo CPE_VENDOR= freedesktop FPC_EQUIVALENT= sysutils/accountsservice MESON_ARGS= -Dsystemd=false -Dsystemdsystemunitdir=no -Delogind=false -Dintrospection=true -Ddocbook=true -Dgtk_doc=false [FILE:235:descriptions/desc.primary] AccountsService is a D-Bus service for accessing the list of user accounts and information attached to those accounts. It has been developed in and is used by the GNOME project but is usable with other desktop environments as well. [FILE:108:distinfo] ff2b2419a7e06bd9cb335ffe391c7409b49a0f0130b890bd54692a3986699c9b 97972 accountsservice-0.6.55.tar.xz [FILE:646:manifests/plist.primary.standard] etc/dbus-1/system.d/org.freedesktop.Accounts.conf include/accountsservice-1.0/act/ act-user-enum-types.h act-user-manager.h act-user.h act.h lib/ libaccountsservice.so libaccountsservice.so.0 libaccountsservice.so.0.0.0 lib/girepository-1.0/AccountsService-1.0.typelib lib/pkgconfig/accountsservice.pc libexec/accounts-daemon share/dbus-1/interfaces/ org.freedesktop.Accounts.User.xml org.freedesktop.Accounts.xml share/dbus-1/system-services/org.freedesktop.Accounts.service share/gir-1.0/AccountsService-1.0.gir share/polkit-1/actions/org.freedesktop.accounts.policy @dir var/db/AccountsService/icons @dir var/db/AccountsService/users [FILE:3587:manifests/plist.nls.standard] share/locale/af/LC_MESSAGES/accounts-service.mo share/locale/ar/LC_MESSAGES/accounts-service.mo share/locale/as/LC_MESSAGES/accounts-service.mo share/locale/ast/LC_MESSAGES/accounts-service.mo share/locale/az/LC_MESSAGES/accounts-service.mo share/locale/be/LC_MESSAGES/accounts-service.mo share/locale/bg/LC_MESSAGES/accounts-service.mo share/locale/bn_IN/LC_MESSAGES/accounts-service.mo share/locale/ca/LC_MESSAGES/accounts-service.mo share/locale/ca@valencia/LC_MESSAGES/accounts-service.mo share/locale/cs/LC_MESSAGES/accounts-service.mo share/locale/cy/LC_MESSAGES/accounts-service.mo share/locale/da/LC_MESSAGES/accounts-service.mo share/locale/de/LC_MESSAGES/accounts-service.mo share/locale/el/LC_MESSAGES/accounts-service.mo share/locale/en/LC_MESSAGES/accounts-service.mo share/locale/en_GB/LC_MESSAGES/accounts-service.mo share/locale/eo/LC_MESSAGES/accounts-service.mo share/locale/es/LC_MESSAGES/accounts-service.mo share/locale/et/LC_MESSAGES/accounts-service.mo share/locale/eu/LC_MESSAGES/accounts-service.mo share/locale/fa/LC_MESSAGES/accounts-service.mo share/locale/fi/LC_MESSAGES/accounts-service.mo share/locale/fo/LC_MESSAGES/accounts-service.mo share/locale/fr/LC_MESSAGES/accounts-service.mo share/locale/fur/LC_MESSAGES/accounts-service.mo share/locale/ga/LC_MESSAGES/accounts-service.mo share/locale/gl/LC_MESSAGES/accounts-service.mo share/locale/gu/LC_MESSAGES/accounts-service.mo share/locale/he/LC_MESSAGES/accounts-service.mo share/locale/hi/LC_MESSAGES/accounts-service.mo share/locale/hr/LC_MESSAGES/accounts-service.mo share/locale/hu/LC_MESSAGES/accounts-service.mo share/locale/ia/LC_MESSAGES/accounts-service.mo share/locale/id/LC_MESSAGES/accounts-service.mo share/locale/it/LC_MESSAGES/accounts-service.mo share/locale/ja/LC_MESSAGES/accounts-service.mo share/locale/ka/LC_MESSAGES/accounts-service.mo share/locale/kk/LC_MESSAGES/accounts-service.mo share/locale/kn/LC_MESSAGES/accounts-service.mo share/locale/ko/LC_MESSAGES/accounts-service.mo share/locale/ky/LC_MESSAGES/accounts-service.mo share/locale/lt/LC_MESSAGES/accounts-service.mo share/locale/lv/LC_MESSAGES/accounts-service.mo share/locale/ml/LC_MESSAGES/accounts-service.mo share/locale/mr/LC_MESSAGES/accounts-service.mo share/locale/ms/LC_MESSAGES/accounts-service.mo share/locale/nb/LC_MESSAGES/accounts-service.mo share/locale/nl/LC_MESSAGES/accounts-service.mo share/locale/nn/LC_MESSAGES/accounts-service.mo share/locale/oc/LC_MESSAGES/accounts-service.mo share/locale/or/LC_MESSAGES/accounts-service.mo share/locale/pa/LC_MESSAGES/accounts-service.mo share/locale/pl/LC_MESSAGES/accounts-service.mo share/locale/pt/LC_MESSAGES/accounts-service.mo share/locale/pt_BR/LC_MESSAGES/accounts-service.mo share/locale/ro/LC_MESSAGES/accounts-service.mo share/locale/ru/LC_MESSAGES/accounts-service.mo share/locale/sk/LC_MESSAGES/accounts-service.mo share/locale/sl/LC_MESSAGES/accounts-service.mo share/locale/sq/LC_MESSAGES/accounts-service.mo share/locale/sr/LC_MESSAGES/accounts-service.mo share/locale/sr@latin/LC_MESSAGES/accounts-service.mo share/locale/sv/LC_MESSAGES/accounts-service.mo share/locale/ta/LC_MESSAGES/accounts-service.mo share/locale/te/LC_MESSAGES/accounts-service.mo share/locale/th/LC_MESSAGES/accounts-service.mo share/locale/tr/LC_MESSAGES/accounts-service.mo share/locale/uk/LC_MESSAGES/accounts-service.mo share/locale/vi/LC_MESSAGES/accounts-service.mo share/locale/wa/LC_MESSAGES/accounts-service.mo 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 [FILE:52:manifests/plist.docs.standard] share/doc/accountsservice/spec/AccountsService.html [FILE:424:patches/patch-meson.build] --- meson.build.orig 2019-04-23 15:16:09 UTC +++ meson.build @@ -79,6 +79,8 @@ endforeach if cc.has_header_symbol('utmpx.h', 'WTMPX_FILENAME', prefix: '#define _GNU_SOURCE') config_h.set('PATH_WTMP', 'WTMPX_FILENAME') +elif cc.has_header_symbol('utmpx.h', '_PATH_WTMPX') + config_h.set('PATH_WTMP', '_PATH_WTMPX') elif cc.has_header_symbol('paths.h', '_PATH_WTMPX') config_h.set('PATH_WTMP', '_PATH_WTMPX') else [FILE:667:patches/patch-meson__post__install.py] --- meson_post_install.py.orig 2019-04-23 17:16:09.000000000 +0200 +++ meson_post_install.py 2021-06-03 15:47:58.660402000 +0200 @@ -9,8 +9,8 @@ # 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', 'AccountsService', 'icons'), 0o775), - (os.path.join(localstatedir, 'lib', 'AccountsService', 'users'), 0o700), + (os.path.join(localstatedir, 'db', 'AccountsService', 'icons'), 0o775), + (os.path.join(localstatedir, 'db', 'AccountsService', 'users'), 0o700), ] for (dst_dir, dst_dir_mode) in dst_dirs: [FILE:9951:patches/patch-src_daemon.c] --- src/daemon.c.orig 2019-04-23 17:16:09.000000000 +0200 +++ src/daemon.c 2021-06-03 15:49:31.681945000 +0200 @@ -81,7 +81,11 @@ GHashTable *extension_ifaces; } DaemonPrivate; +#ifdef HAVE_SHADOW_H typedef struct passwd * (* EntryGeneratorFunc) (Daemon *, GHashTable *, gpointer *, struct spwd **shadow_entry); +#else +typedef struct passwd * (* EntryGeneratorFunc) (Daemon *, GHashTable *, gpointer *); +#endif typedef struct { Daemon *daemon; @@ -165,17 +169,25 @@ } static struct passwd * +#ifdef HAVE_SHADOW_H entry_generator_fgetpwent (Daemon *daemon, GHashTable *users, gpointer *state, struct spwd **spent) +#else +entry_generator_fgetpwent (Daemon *daemon, + GHashTable *users, + gpointer *state) +#endif { struct passwd *pwent; +#ifdef HAVE_SHADOW_H struct { struct spwd spbuf; char buf[1024]; } *shadow_entry_buffers; +#endif struct { FILE *fp; @@ -186,6 +198,7 @@ if (*state == NULL) { GHashTable *shadow_users = NULL; FILE *fp; +#ifdef HAVE_SHADOW_H struct spwd *shadow_entry; fp = fopen (PATH_SHADOW, "r"); @@ -219,6 +232,7 @@ g_clear_pointer (&shadow_users, g_hash_table_unref); return NULL; } +#endif fp = fopen (PATH_PASSWD, "r"); if (fp == NULL) { @@ -240,12 +254,17 @@ 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); if (shadow_entry_buffers != NULL) { *spent = &shadow_entry_buffers->spbuf; } return pwent; +#else + if (!generator_state->users || g_hash_table_lookup (generator_state->users, pwent->pw_name)) + return pwent; +#endif } } @@ -259,10 +278,16 @@ } static struct passwd * +#ifdef HAVE_SHADOW_H entry_generator_cachedir (Daemon *daemon, GHashTable *users, gpointer *state, struct spwd **shadow_entry) +#else +entry_generator_cachedir (Daemon *daemon, + GHashTable *users, + gpointer *state) +#endif { struct passwd *pwent; g_autoptr(GError) error = NULL; @@ -304,7 +329,9 @@ errno = 0; pwent = getpwnam (name); if (pwent != NULL) { +#ifdef HAVE_SHADOW_H *shadow_entry = getspnam (pwent->pw_name); +#endif return pwent; } else if (errno == 0) { @@ -340,10 +367,16 @@ } static struct passwd * +#ifdef HAVE_SHADOW_H entry_generator_requested_users (Daemon *daemon, GHashTable *users, gpointer *state, struct spwd **shadow_entry) +#else +entry_generator_requested_users (Daemon *daemon, + GHashTable *users, + gpointer *state) +#endif { DaemonPrivate *priv = daemon_get_instance_private (daemon); struct passwd *pwent; @@ -371,7 +404,9 @@ if (pwent == NULL) { g_debug ("user '%s' requested previously but not present on system", name); } else { +#ifdef HAVE_SHADOW_H *shadow_entry = getspnam (pwent->pw_name); +#endif return pwent; } @@ -394,19 +429,29 @@ DaemonPrivate *priv = daemon_get_instance_private (daemon); gpointer generator_state = NULL; struct passwd *pwent; +#ifdef HAVE_SHADOW_H struct spwd *spent = NULL; +#endif User *user = NULL; g_assert (entry_generator != NULL); for (;;) { +#ifdef HAVE_SHADOW_H spent = NULL; pwent = entry_generator (daemon, users, &generator_state, &spent); +#else + pwent = entry_generator (daemon, 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; } @@ -428,7 +473,11 @@ /* freeze & update users not already in the new list */ g_object_freeze_notify (G_OBJECT (user)); +#ifdef HAVE_SHADOW_H user_update_from_pwent (user, pwent, spent); +#else + user_update_from_pwent (user, pwent); +#endif g_hash_table_insert (users, g_strdup (user_get_user_name (user)), user); g_debug ("loaded user: %s", user_get_user_name (user)); @@ -843,15 +892,24 @@ } static User * +#ifdef HAVE_SHADOW_H add_new_user_for_pwent (Daemon *daemon, struct passwd *pwent, struct spwd *spent) +#else +add_new_user_for_pwent (Daemon *daemon, + struct passwd *pwent) +#endif { DaemonPrivate *priv = daemon_get_instance_private (daemon); User *user; user = user_new (daemon, pwent->pw_uid); +#ifdef HAVE_SHADOW_H user_update_from_pwent (user, pwent, spent); +#else + user_update_from_pwent (user, pwent); +#endif user_register (user); g_hash_table_insert (priv->users, @@ -880,9 +938,13 @@ user = g_hash_table_lookup (priv->users, pwent->pw_name); if (user == NULL) { +#ifdef HAVE_SHADOW_H struct spwd *spent; spent = getspnam (pwent->pw_name); user = add_new_user_for_pwent (daemon, pwent, spent); +#else + user = add_new_user_for_pwent (daemon, pwent); +#endif priv->explicitly_requested_users = g_list_append (priv->explicitly_requested_users, g_strdup (pwent->pw_name)); @@ -908,9 +970,13 @@ user = g_hash_table_lookup (priv->users, pwent->pw_name); if (user == NULL) { +#ifdef HAVE_SHADOW_H struct spwd *spent; spent = getspnam (pwent->pw_name); user = add_new_user_for_pwent (daemon, pwent, spent); +#else + user = add_new_user_for_pwent (daemon, pwent); +#endif priv->explicitly_requested_users = g_list_append (priv->explicitly_requested_users, g_strdup (pwent->pw_name)); @@ -1106,10 +1172,12 @@ sys_log (context, "create user '%s'", cd->user_name); - argv[0] = "/usr/sbin/useradd"; - argv[1] = "-m"; - argv[2] = "-c"; - argv[3] = cd->real_name; + argv[0] = "/usr/sbin/pw"; + argv[1] = "useradd"; + argv[2] = cd->user_name; + argv[3] = "-m"; + 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, ",", @@ -1117,15 +1185,11 @@ else admin_groups = g_strdup (ADMIN_GROUP); - argv[4] = "-G"; - argv[5] = admin_groups; - argv[6] = "--"; - argv[7] = cd->user_name; + argv[6] = "-G"; + argv[7] = admin_groups; argv[8] = NULL; } else if (cd->account_type == ACCOUNT_TYPE_STANDARD) { - argv[4] = "--"; - argv[5] = cd->user_name; argv[6] = NULL; } else { @@ -1292,7 +1356,7 @@ DeleteUserData *ud = data; g_autoptr(GError) error = NULL; struct passwd *pwent; - const gchar *argv[6]; + const gchar *argv[5]; User *user; pwent = getpwuid (ud->uid); @@ -1318,19 +1382,16 @@ user_set_saved (user, FALSE); - argv[0] = "/usr/sbin/userdel"; + argv[0] = "/usr/sbin/pw"; + argv[1] = "userdel"; if (ud->remove_files) { - argv[1] = "-f"; - argv[2] = "-r"; - argv[3] = "--"; - argv[4] = pwent->pw_name; - argv[5] = NULL; + argv[2] = pwent->pw_name; + argv[3] = "-r"; + argv[4] = NULL; } else { - argv[1] = "-f"; - argv[2] = "--"; - argv[3] = pwent->pw_name; - argv[4] = NULL; + argv[2] = pwent->pw_name; + argv[3] = NULL; } if (!spawn_with_login_uid (context, argv, &error)) { [FILE:287:patches/patch-src_libaccountsservice_act-user.c] --- src/libaccountsservice/act-user.c.orig 2019-04-23 15:16:09 UTC +++ src/libaccountsservice/act-user.c @@ -26,7 +26,9 @@ #include #include +#if defined(__linux__) || defined(__sun__) #include +#endif #include #include [FILE:667:patches/patch-src_meson.build] --- src/meson.build.orig 2019-04-23 17:16:09.000000000 +0200 +++ src/meson.build 2021-06-03 15:53:08.752594000 +0200 @@ -26,8 +26,8 @@ cflags = [ '-DLOCALSTATEDIR="@0@"'.format(act_localstatedir), '-DDATADIR="@0@"'.format(act_datadir), - '-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')), + '-DUSERDIR="@0@"'.format(join_paths(act_localstatedir, 'db', 'AccountsService', 'users')), ] libaccounts_generated = static_library( [FILE:408:patches/patch-src_user-classify.c] --- src/user-classify.c.orig 2019-04-23 17:16:09.000000000 +0200 +++ src/user-classify.c 2021-06-03 15:54:58.188003000 +0200 @@ -41,6 +41,7 @@ "uucp", "nobody", "postgres", + "pgsql", "pvm", "rpm", "nfsnobody", @@ -50,6 +51,7 @@ "games", "man", "at", + "saned", "gdm", "gnome-initial-setup" }; [FILE:10117:patches/patch-src_user.c] --- src/user.c.orig 2019-04-23 17:16:09.000000000 +0200 +++ src/user.c 2021-06-03 15:56:17.985242000 +0200 @@ -138,9 +138,14 @@ } void +#ifdef HAVE_SHADOW_H user_update_from_pwent (User *user, struct passwd *pwent, struct spwd *spent) +#else +user_update_from_pwent (User *user, + struct passwd *pwent) +#endif { g_autofree gchar *real_name = NULL; gboolean is_system_account; @@ -199,8 +204,10 @@ accounts_user_set_shell (ACCOUNTS_USER (user), pwent->pw_shell); passwd = NULL; +#ifdef HAVE_SHADOW_H if (spent) passwd = spent->sp_pwdp; +#endif if (passwd && passwd[0] == '!') { locked = TRUE; @@ -218,6 +225,7 @@ mode = PASSWORD_MODE_NONE; } +#ifdef HAVE_SHADOW_H if (spent) { if (spent->sp_lstchg == 0) { mode = PASSWORD_MODE_SET_AT_LOGIN; @@ -231,6 +239,9 @@ user->days_after_expiration_until_lock = spent->sp_inact; user->account_expiration_policy_known = TRUE; } +#else + user->expiration_time = 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)), @@ -844,11 +855,11 @@ accounts_user_get_uid (ACCOUNTS_USER (user)), name); - argv[0] = "/usr/sbin/usermod"; - argv[1] = "-c"; - argv[2] = name; - 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[5] = NULL; if (!spawn_with_login_uid (context, argv, &error)) { @@ -913,11 +924,11 @@ accounts_user_get_uid (ACCOUNTS_USER (user)), name); - argv[0] = "/usr/sbin/usermod"; - argv[1] = "-l"; - argv[2] = name; - 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] = "-n"; + argv[4] = name; argv[5] = NULL; if (!spawn_with_login_uid (context, argv, &error)) { @@ -1312,7 +1323,7 @@ { gchar *home_dir = data; g_autoptr(GError) error = NULL; - const gchar *argv[7]; + const gchar *argv[6]; if (g_strcmp0 (accounts_user_get_home_directory (ACCOUNTS_USER (user)), home_dir) != 0) { sys_log (context, @@ -1321,13 +1332,12 @@ accounts_user_get_uid (ACCOUNTS_USER (user)), home_dir); - argv[0] = "/usr/sbin/usermod"; - argv[1] = "-m"; - argv[2] = "-d"; - argv[3] = home_dir; - argv[4] = "--"; - 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)) { throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); @@ -1378,11 +1388,11 @@ accounts_user_get_uid (ACCOUNTS_USER (user)), shell); - argv[0] = "/usr/sbin/usermod"; - argv[1] = "-s"; - argv[2] = shell; - 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] = "-s"; + argv[4] = shell; argv[5] = NULL; if (!spawn_with_login_uid (context, argv, &error)) { @@ -1593,7 +1603,7 @@ { 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, @@ -1601,11 +1611,10 @@ 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; if (!spawn_with_login_uid (context, argv, &error)) { throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); @@ -1726,11 +1735,11 @@ g_free (groups); - argv[0] = "/usr/sbin/usermod"; - argv[1] = "-G"; - argv[2] = str->str; - 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] = "-G"; + argv[4] = str->str; argv[5] = NULL; if (!spawn_with_login_uid (context, argv, &error)) { @@ -1780,7 +1789,7 @@ { PasswordMode mode = GPOINTER_TO_INT (data); 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, @@ -1795,10 +1804,8 @@ mode == PASSWORD_MODE_NONE) { argv[0] = "/usr/bin/passwd"; - argv[1] = "-d"; - argv[2] = "--"; - argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); - argv[4] = NULL; + argv[1] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[2] = NULL; if (!spawn_with_login_uid (context, argv, &error)) { throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); @@ -1806,12 +1813,11 @@ } if (mode == PASSWORD_MODE_SET_AT_LOGIN) { - argv[0] = "/usr/bin/chage"; - argv[1] = "-d"; + argv[0] = "/usr/bin/chpass"; + argv[1] = "-e"; argv[2] = "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); @@ -1827,11 +1833,10 @@ accounts_user_set_locked (ACCOUNTS_USER (user), FALSE); } 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; if (!spawn_with_login_uid (context, argv, &error)) { throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); @@ -1896,7 +1901,7 @@ { gchar **strings = data; g_autoptr(GError) error = NULL; - const gchar *argv[6]; + const gchar *argv[5]; sys_log (context, "set password and hint of user '%s' (%d)", @@ -1905,12 +1910,11 @@ g_object_freeze_notify (G_OBJECT (user)); - argv[0] = "/usr/sbin/usermod"; + argv[0] = "/usr/sbin/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); [FILE:1008:patches/patch-src_user.h] --- src/user.h.orig 2019-04-23 17:16:09.000000000 +0200 +++ src/user.h 2021-06-03 16:07:13.902776000 +0200 @@ -22,7 +22,9 @@ #include #include +#ifdef HAVE_SHADOW_H #include +#endif #include #include @@ -54,9 +56,14 @@ 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); +#else +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, [FILE:375:patches/patch-src_wtmp-helper.c] --- src/wtmp-helper.c.orig 2019-04-23 15:16:09 UTC +++ src/wtmp-helper.c @@ -51,7 +51,7 @@ user_previous_login_free (UserPreviousLo static gboolean wtmp_helper_start (void) { -#if defined(HAVE_SETUTXDB) +#if defined(HAVE_SETUTXDB) && !defined(__DragonFly__) if (setutxdb (UTXDB_LOG, NULL) != 0) { return FALSE; } [FILE:358:patches/patch-src_wtmp-helper.h] --- src/wtmp-helper.h.orig 2019-04-23 15:16:09 UTC +++ src/wtmp-helper.h @@ -23,7 +23,9 @@ #include #include +#ifdef HAVE_SHADOW_H #include +#endif const gchar * wtmp_helper_get_path_for_monitor (void); void wtmp_helper_update_login_frequencies (GHashTable *users); [FILE:627:freebsd/patch-meson.build] --- meson.build.orig 2019-04-23 17:16:09.000000000 +0200 +++ meson.build 2021-06-03 15:45:38.526501000 +0200 @@ -82,8 +82,11 @@ 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 endif # compiler flags