1 # Buildsheet autogenerated by ravenadm tool -- Do not edit.
3 NAMEBASE= accountsservice
7 SDESC[standard]= D-Bus service for user account query/manipulation
8 HOMEPAGE= https://www.freedesktop.org/wiki/Software/AccountsService/
9 CONTACT= Michael_Reim[kraileth@elderlinux.org]
12 SITES[main]= https://www.freedesktop.org/software/accountsservice/
13 DISTFILE[1]= accountsservice-0.6.55.tar.xz:main
15 SPKGS[standard]= complete
20 OPTIONS_AVAILABLE= none
21 OPTIONS_STANDARD= none
23 BUILD_DEPENDS= xmlto:single:standard
24 BUILDRUN_DEPENDS= polkit:primary:standard
26 USES= cpe gettext-runtime gettext-tools:build meson
28 GNOME_COMPONENTS= glib introspection
30 LICENSE= GPLv3+:primary
31 LICENSE_TERMS= primary:{{WRKDIR}}/TERMS
32 LICENSE_FILE= GPLv3+:{{WRKSRC}}/COPYING
33 LICENSE_AWK= TERMS:"^$$"
34 LICENSE_SOURCE= TERMS:{{WRKSRC}}/src/accounts-daemon.h
37 CPE_VENDOR= freedesktop
38 FPC_EQUIVALENT= sysutils/accountsservice
39 MESON_ARGS= -Dsystemd=false
40 -Dsystemdsystemunitdir=no
46 [FILE:235:descriptions/desc.primary]
47 AccountsService is a D-Bus service for accessing the list of user accounts
48 and information attached to those accounts. It has been developed in and
49 is used by the GNOME project but is usable with other desktop environments
54 ff2b2419a7e06bd9cb335ffe391c7409b49a0f0130b890bd54692a3986699c9b 97972 accountsservice-0.6.55.tar.xz
57 [FILE:646:manifests/plist.primary.standard]
58 etc/dbus-1/system.d/org.freedesktop.Accounts.conf
59 include/accountsservice-1.0/act/
66 libaccountsservice.so.0
67 libaccountsservice.so.0.0.0
68 lib/girepository-1.0/AccountsService-1.0.typelib
69 lib/pkgconfig/accountsservice.pc
70 libexec/accounts-daemon
71 share/dbus-1/interfaces/
72 org.freedesktop.Accounts.User.xml
73 org.freedesktop.Accounts.xml
74 share/dbus-1/system-services/org.freedesktop.Accounts.service
75 share/gir-1.0/AccountsService-1.0.gir
76 share/polkit-1/actions/org.freedesktop.accounts.policy
77 @dir var/db/AccountsService/icons
78 @dir var/db/AccountsService/users
81 [FILE:3587:manifests/plist.nls.standard]
82 share/locale/af/LC_MESSAGES/accounts-service.mo
83 share/locale/ar/LC_MESSAGES/accounts-service.mo
84 share/locale/as/LC_MESSAGES/accounts-service.mo
85 share/locale/ast/LC_MESSAGES/accounts-service.mo
86 share/locale/az/LC_MESSAGES/accounts-service.mo
87 share/locale/be/LC_MESSAGES/accounts-service.mo
88 share/locale/bg/LC_MESSAGES/accounts-service.mo
89 share/locale/bn_IN/LC_MESSAGES/accounts-service.mo
90 share/locale/ca/LC_MESSAGES/accounts-service.mo
91 share/locale/ca@valencia/LC_MESSAGES/accounts-service.mo
92 share/locale/cs/LC_MESSAGES/accounts-service.mo
93 share/locale/cy/LC_MESSAGES/accounts-service.mo
94 share/locale/da/LC_MESSAGES/accounts-service.mo
95 share/locale/de/LC_MESSAGES/accounts-service.mo
96 share/locale/el/LC_MESSAGES/accounts-service.mo
97 share/locale/en/LC_MESSAGES/accounts-service.mo
98 share/locale/en_GB/LC_MESSAGES/accounts-service.mo
99 share/locale/eo/LC_MESSAGES/accounts-service.mo
100 share/locale/es/LC_MESSAGES/accounts-service.mo
101 share/locale/et/LC_MESSAGES/accounts-service.mo
102 share/locale/eu/LC_MESSAGES/accounts-service.mo
103 share/locale/fa/LC_MESSAGES/accounts-service.mo
104 share/locale/fi/LC_MESSAGES/accounts-service.mo
105 share/locale/fo/LC_MESSAGES/accounts-service.mo
106 share/locale/fr/LC_MESSAGES/accounts-service.mo
107 share/locale/fur/LC_MESSAGES/accounts-service.mo
108 share/locale/ga/LC_MESSAGES/accounts-service.mo
109 share/locale/gl/LC_MESSAGES/accounts-service.mo
110 share/locale/gu/LC_MESSAGES/accounts-service.mo
111 share/locale/he/LC_MESSAGES/accounts-service.mo
112 share/locale/hi/LC_MESSAGES/accounts-service.mo
113 share/locale/hr/LC_MESSAGES/accounts-service.mo
114 share/locale/hu/LC_MESSAGES/accounts-service.mo
115 share/locale/ia/LC_MESSAGES/accounts-service.mo
116 share/locale/id/LC_MESSAGES/accounts-service.mo
117 share/locale/it/LC_MESSAGES/accounts-service.mo
118 share/locale/ja/LC_MESSAGES/accounts-service.mo
119 share/locale/ka/LC_MESSAGES/accounts-service.mo
120 share/locale/kk/LC_MESSAGES/accounts-service.mo
121 share/locale/kn/LC_MESSAGES/accounts-service.mo
122 share/locale/ko/LC_MESSAGES/accounts-service.mo
123 share/locale/ky/LC_MESSAGES/accounts-service.mo
124 share/locale/lt/LC_MESSAGES/accounts-service.mo
125 share/locale/lv/LC_MESSAGES/accounts-service.mo
126 share/locale/ml/LC_MESSAGES/accounts-service.mo
127 share/locale/mr/LC_MESSAGES/accounts-service.mo
128 share/locale/ms/LC_MESSAGES/accounts-service.mo
129 share/locale/nb/LC_MESSAGES/accounts-service.mo
130 share/locale/nl/LC_MESSAGES/accounts-service.mo
131 share/locale/nn/LC_MESSAGES/accounts-service.mo
132 share/locale/oc/LC_MESSAGES/accounts-service.mo
133 share/locale/or/LC_MESSAGES/accounts-service.mo
134 share/locale/pa/LC_MESSAGES/accounts-service.mo
135 share/locale/pl/LC_MESSAGES/accounts-service.mo
136 share/locale/pt/LC_MESSAGES/accounts-service.mo
137 share/locale/pt_BR/LC_MESSAGES/accounts-service.mo
138 share/locale/ro/LC_MESSAGES/accounts-service.mo
139 share/locale/ru/LC_MESSAGES/accounts-service.mo
140 share/locale/sk/LC_MESSAGES/accounts-service.mo
141 share/locale/sl/LC_MESSAGES/accounts-service.mo
142 share/locale/sq/LC_MESSAGES/accounts-service.mo
143 share/locale/sr/LC_MESSAGES/accounts-service.mo
144 share/locale/sr@latin/LC_MESSAGES/accounts-service.mo
145 share/locale/sv/LC_MESSAGES/accounts-service.mo
146 share/locale/ta/LC_MESSAGES/accounts-service.mo
147 share/locale/te/LC_MESSAGES/accounts-service.mo
148 share/locale/th/LC_MESSAGES/accounts-service.mo
149 share/locale/tr/LC_MESSAGES/accounts-service.mo
150 share/locale/uk/LC_MESSAGES/accounts-service.mo
151 share/locale/vi/LC_MESSAGES/accounts-service.mo
152 share/locale/wa/LC_MESSAGES/accounts-service.mo
153 share/locale/zh_CN/LC_MESSAGES/accounts-service.mo
154 share/locale/zh_HK/LC_MESSAGES/accounts-service.mo
155 share/locale/zh_TW/LC_MESSAGES/accounts-service.mo
158 [FILE:52:manifests/plist.docs.standard]
159 share/doc/accountsservice/spec/AccountsService.html
162 [FILE:424:patches/patch-meson.build]
163 --- meson.build.orig 2019-04-23 15:16:09 UTC
165 @@ -79,6 +79,8 @@ endforeach
167 if cc.has_header_symbol('utmpx.h', 'WTMPX_FILENAME', prefix: '#define _GNU_SOURCE')
168 config_h.set('PATH_WTMP', 'WTMPX_FILENAME')
169 +elif cc.has_header_symbol('utmpx.h', '_PATH_WTMPX')
170 + config_h.set('PATH_WTMP', '_PATH_WTMPX')
171 elif cc.has_header_symbol('paths.h', '_PATH_WTMPX')
172 config_h.set('PATH_WTMP', '_PATH_WTMPX')
176 [FILE:667:patches/patch-meson__post__install.py]
177 --- meson_post_install.py.orig 2019-04-23 17:16:09.000000000 +0200
178 +++ meson_post_install.py 2021-06-03 15:47:58.660402000 +0200
180 # FIXME: meson will not track the creation of these directories
181 # https://github.com/mesonbuild/meson/blob/master/mesonbuild/scripts/uninstall.py#L39
183 - (os.path.join(localstatedir, 'lib', 'AccountsService', 'icons'), 0o775),
184 - (os.path.join(localstatedir, 'lib', 'AccountsService', 'users'), 0o700),
185 + (os.path.join(localstatedir, 'db', 'AccountsService', 'icons'), 0o775),
186 + (os.path.join(localstatedir, 'db', 'AccountsService', 'users'), 0o700),
189 for (dst_dir, dst_dir_mode) in dst_dirs:
192 [FILE:9951:patches/patch-src_daemon.c]
193 --- src/daemon.c.orig 2019-04-23 17:16:09.000000000 +0200
194 +++ src/daemon.c 2021-06-03 15:49:31.681945000 +0200
196 GHashTable *extension_ifaces;
199 +#ifdef HAVE_SHADOW_H
200 typedef struct passwd * (* EntryGeneratorFunc) (Daemon *, GHashTable *, gpointer *, struct spwd **shadow_entry);
202 +typedef struct passwd * (* EntryGeneratorFunc) (Daemon *, GHashTable *, gpointer *);
207 @@ -165,17 +169,25 @@
210 static struct passwd *
211 +#ifdef HAVE_SHADOW_H
212 entry_generator_fgetpwent (Daemon *daemon,
217 +entry_generator_fgetpwent (Daemon *daemon,
222 struct passwd *pwent;
224 +#ifdef HAVE_SHADOW_H
228 } *shadow_entry_buffers;
234 if (*state == NULL) {
235 GHashTable *shadow_users = NULL;
237 +#ifdef HAVE_SHADOW_H
238 struct spwd *shadow_entry;
240 fp = fopen (PATH_SHADOW, "r");
242 g_clear_pointer (&shadow_users, g_hash_table_unref);
247 fp = fopen (PATH_PASSWD, "r");
249 @@ -240,12 +254,17 @@
250 if (g_hash_table_size (users) < MAX_LOCAL_USERS) {
251 pwent = fgetpwent (generator_state->fp);
253 +#ifdef HAVE_SHADOW_H
254 shadow_entry_buffers = g_hash_table_lookup (generator_state->users, pwent->pw_name);
256 if (shadow_entry_buffers != NULL) {
257 *spent = &shadow_entry_buffers->spbuf;
261 + if (!generator_state->users || g_hash_table_lookup (generator_state->users, pwent->pw_name))
267 @@ -259,10 +278,16 @@
270 static struct passwd *
271 +#ifdef HAVE_SHADOW_H
272 entry_generator_cachedir (Daemon *daemon,
275 struct spwd **shadow_entry)
277 +entry_generator_cachedir (Daemon *daemon,
282 struct passwd *pwent;
283 g_autoptr(GError) error = NULL;
286 pwent = getpwnam (name);
288 +#ifdef HAVE_SHADOW_H
289 *shadow_entry = getspnam (pwent->pw_name);
293 } else if (errno == 0) {
294 @@ -340,10 +367,16 @@
297 static struct passwd *
298 +#ifdef HAVE_SHADOW_H
299 entry_generator_requested_users (Daemon *daemon,
302 struct spwd **shadow_entry)
304 +entry_generator_requested_users (Daemon *daemon,
309 DaemonPrivate *priv = daemon_get_instance_private (daemon);
310 struct passwd *pwent;
313 g_debug ("user '%s' requested previously but not present on system", name);
315 +#ifdef HAVE_SHADOW_H
316 *shadow_entry = getspnam (pwent->pw_name);
321 @@ -394,19 +429,29 @@
322 DaemonPrivate *priv = daemon_get_instance_private (daemon);
323 gpointer generator_state = NULL;
324 struct passwd *pwent;
325 +#ifdef HAVE_SHADOW_H
326 struct spwd *spent = NULL;
330 g_assert (entry_generator != NULL);
333 +#ifdef HAVE_SHADOW_H
335 pwent = entry_generator (daemon, users, &generator_state, &spent);
337 + pwent = entry_generator (daemon, users, &generator_state);
342 /* Skip system users... */
343 +#ifdef HAVE_SHADOW_H
344 if (!explicitly_requested && !user_classify_is_human (pwent->pw_uid, pwent->pw_name, pwent->pw_shell, spent? spent->sp_pwdp : NULL)) {
346 + if (!explicitly_requested && !user_classify_is_human (pwent->pw_uid, pwent->pw_name, pwent->pw_shell, NULL)) {
348 g_debug ("skipping user: %s", pwent->pw_name);
353 /* freeze & update users not already in the new list */
354 g_object_freeze_notify (G_OBJECT (user));
355 +#ifdef HAVE_SHADOW_H
356 user_update_from_pwent (user, pwent, spent);
358 + user_update_from_pwent (user, pwent);
361 g_hash_table_insert (users, g_strdup (user_get_user_name (user)), user);
362 g_debug ("loaded user: %s", user_get_user_name (user));
363 @@ -843,15 +892,24 @@
367 +#ifdef HAVE_SHADOW_H
368 add_new_user_for_pwent (Daemon *daemon,
369 struct passwd *pwent,
372 +add_new_user_for_pwent (Daemon *daemon,
373 + struct passwd *pwent)
376 DaemonPrivate *priv = daemon_get_instance_private (daemon);
379 user = user_new (daemon, pwent->pw_uid);
380 +#ifdef HAVE_SHADOW_H
381 user_update_from_pwent (user, pwent, spent);
383 + user_update_from_pwent (user, pwent);
385 user_register (user);
387 g_hash_table_insert (priv->users,
389 user = g_hash_table_lookup (priv->users, pwent->pw_name);
392 +#ifdef HAVE_SHADOW_H
394 spent = getspnam (pwent->pw_name);
395 user = add_new_user_for_pwent (daemon, pwent, spent);
397 + user = add_new_user_for_pwent (daemon, pwent);
400 priv->explicitly_requested_users = g_list_append (priv->explicitly_requested_users,
401 g_strdup (pwent->pw_name));
403 user = g_hash_table_lookup (priv->users, pwent->pw_name);
406 +#ifdef HAVE_SHADOW_H
408 spent = getspnam (pwent->pw_name);
409 user = add_new_user_for_pwent (daemon, pwent, spent);
411 + user = add_new_user_for_pwent (daemon, pwent);
414 priv->explicitly_requested_users = g_list_append (priv->explicitly_requested_users,
415 g_strdup (pwent->pw_name));
416 @@ -1106,10 +1172,12 @@
418 sys_log (context, "create user '%s'", cd->user_name);
420 - argv[0] = "/usr/sbin/useradd";
423 - argv[3] = cd->real_name;
424 + argv[0] = "/usr/sbin/pw";
425 + argv[1] = "useradd";
426 + argv[2] = cd->user_name;
429 + argv[5] = cd->real_name;
430 if (cd->account_type == ACCOUNT_TYPE_ADMINISTRATOR) {
431 if (EXTRA_ADMIN_GROUPS != NULL && EXTRA_ADMIN_GROUPS[0] != '\0')
432 admin_groups = g_strconcat (ADMIN_GROUP, ",",
433 @@ -1117,15 +1185,11 @@
435 admin_groups = g_strdup (ADMIN_GROUP);
438 - argv[5] = admin_groups;
440 - argv[7] = cd->user_name;
442 + argv[7] = admin_groups;
445 else if (cd->account_type == ACCOUNT_TYPE_STANDARD) {
447 - argv[5] = cd->user_name;
451 @@ -1292,7 +1356,7 @@
452 DeleteUserData *ud = data;
453 g_autoptr(GError) error = NULL;
454 struct passwd *pwent;
455 - const gchar *argv[6];
456 + const gchar *argv[5];
459 pwent = getpwuid (ud->uid);
460 @@ -1318,19 +1382,16 @@
462 user_set_saved (user, FALSE);
464 - argv[0] = "/usr/sbin/userdel";
465 + argv[0] = "/usr/sbin/pw";
466 + argv[1] = "userdel";
467 if (ud->remove_files) {
471 - argv[4] = pwent->pw_name;
473 + argv[2] = pwent->pw_name;
480 - argv[3] = pwent->pw_name;
482 + argv[2] = pwent->pw_name;
486 if (!spawn_with_login_uid (context, argv, &error)) {
489 [FILE:287:patches/patch-src_libaccountsservice_act-user.c]
490 --- src/libaccountsservice/act-user.c.orig 2019-04-23 15:16:09 UTC
491 +++ src/libaccountsservice/act-user.c
493 #include <sys/stat.h>
496 +#if defined(__linux__) || defined(__sun__)
501 #include <glib/gi18n.h>
504 [FILE:667:patches/patch-src_meson.build]
505 --- src/meson.build.orig 2019-04-23 17:16:09.000000000 +0200
506 +++ src/meson.build 2021-06-03 15:53:08.752594000 +0200
509 '-DLOCALSTATEDIR="@0@"'.format(act_localstatedir),
510 '-DDATADIR="@0@"'.format(act_datadir),
511 - '-DICONDIR="@0@"'.format(join_paths(act_localstatedir, 'lib', 'AccountsService', 'icons')),
512 - '-DUSERDIR="@0@"'.format(join_paths(act_localstatedir, 'lib', 'AccountsService', 'users')),
513 + '-DICONDIR="@0@"'.format(join_paths(act_localstatedir, 'db', 'AccountsService', 'icons')),
514 + '-DUSERDIR="@0@"'.format(join_paths(act_localstatedir, 'db', 'AccountsService', 'users')),
517 libaccounts_generated = static_library(
520 [FILE:408:patches/patch-src_user-classify.c]
521 --- src/user-classify.c.orig 2019-04-23 17:16:09.000000000 +0200
522 +++ src/user-classify.c 2021-06-03 15:54:58.188003000 +0200
537 "gnome-initial-setup"
541 [FILE:10117:patches/patch-src_user.c]
542 --- src/user.c.orig 2019-04-23 17:16:09.000000000 +0200
543 +++ src/user.c 2021-06-03 15:56:17.985242000 +0200
548 +#ifdef HAVE_SHADOW_H
549 user_update_from_pwent (User *user,
550 struct passwd *pwent,
553 +user_update_from_pwent (User *user,
554 + struct passwd *pwent)
557 g_autofree gchar *real_name = NULL;
558 gboolean is_system_account;
560 accounts_user_set_shell (ACCOUNTS_USER (user), pwent->pw_shell);
563 +#ifdef HAVE_SHADOW_H
565 passwd = spent->sp_pwdp;
568 if (passwd && passwd[0] == '!') {
571 mode = PASSWORD_MODE_NONE;
574 +#ifdef HAVE_SHADOW_H
576 if (spent->sp_lstchg == 0) {
577 mode = PASSWORD_MODE_SET_AT_LOGIN;
579 user->days_after_expiration_until_lock = spent->sp_inact;
580 user->account_expiration_policy_known = TRUE;
583 + user->expiration_time = pwent->pw_expire;
586 accounts_user_set_password_mode (ACCOUNTS_USER (user), mode);
587 is_system_account = !user_classify_is_human (accounts_user_get_uid (ACCOUNTS_USER (user)),
588 @@ -844,11 +855,11 @@
589 accounts_user_get_uid (ACCOUNTS_USER (user)),
592 - argv[0] = "/usr/sbin/usermod";
596 - argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user));
597 + argv[0] = "/usr/sbin/pw";
598 + argv[1] = "usermod";
599 + argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user));
604 if (!spawn_with_login_uid (context, argv, &error)) {
605 @@ -913,11 +924,11 @@
606 accounts_user_get_uid (ACCOUNTS_USER (user)),
609 - argv[0] = "/usr/sbin/usermod";
613 - argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user));
614 + argv[0] = "/usr/sbin/pw";
615 + argv[1] = "usermod";
616 + argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user));
621 if (!spawn_with_login_uid (context, argv, &error)) {
622 @@ -1312,7 +1323,7 @@
624 gchar *home_dir = data;
625 g_autoptr(GError) error = NULL;
626 - const gchar *argv[7];
627 + const gchar *argv[6];
629 if (g_strcmp0 (accounts_user_get_home_directory (ACCOUNTS_USER (user)), home_dir) != 0) {
631 @@ -1321,13 +1332,12 @@
632 accounts_user_get_uid (ACCOUNTS_USER (user)),
635 - argv[0] = "/usr/sbin/usermod";
638 - argv[3] = home_dir;
640 - argv[5] = accounts_user_get_user_name (ACCOUNTS_USER (user));
642 + argv[0] = "/usr/sbin/pw";
644 + argv[2] = home_dir;
646 + argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user));
649 if (!spawn_with_login_uid (context, argv, &error)) {
650 throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message);
651 @@ -1378,11 +1388,11 @@
652 accounts_user_get_uid (ACCOUNTS_USER (user)),
655 - argv[0] = "/usr/sbin/usermod";
659 - argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user));
660 + argv[0] = "/usr/sbin/pw";
661 + argv[1] = "usermod";
662 + argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user));
667 if (!spawn_with_login_uid (context, argv, &error)) {
668 @@ -1593,7 +1603,7 @@
670 gboolean locked = GPOINTER_TO_INT (data);
671 g_autoptr(GError) error = NULL;
672 - const gchar *argv[5];
673 + const gchar *argv[4];
675 if (accounts_user_get_locked (ACCOUNTS_USER (user)) != locked) {
677 @@ -1601,11 +1611,10 @@
678 locked ? "locking" : "unlocking",
679 accounts_user_get_user_name (ACCOUNTS_USER (user)),
680 accounts_user_get_uid (ACCOUNTS_USER (user)));
681 - argv[0] = "/usr/sbin/usermod";
682 - argv[1] = locked ? "-L" : "-U";
684 - argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user));
686 + argv[0] = "/usr/sbin/pw";
687 + argv[1] = locked ? "lock" : "unlock";
688 + argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user));
691 if (!spawn_with_login_uid (context, argv, &error)) {
692 throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message);
693 @@ -1726,11 +1735,11 @@
697 - argv[0] = "/usr/sbin/usermod";
699 - argv[2] = str->str;
701 - argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user));
702 + argv[0] = "/usr/sbin/pw";
703 + argv[1] = "usermod";
704 + argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user));
706 + argv[4] = str->str;
709 if (!spawn_with_login_uid (context, argv, &error)) {
710 @@ -1780,7 +1789,7 @@
712 PasswordMode mode = GPOINTER_TO_INT (data);
713 g_autoptr(GError) error = NULL;
714 - const gchar *argv[6];
715 + const gchar *argv[5];
717 if (((PasswordMode) accounts_user_get_password_mode (ACCOUNTS_USER (user))) != mode) {
719 @@ -1795,10 +1804,8 @@
720 mode == PASSWORD_MODE_NONE) {
722 argv[0] = "/usr/bin/passwd";
725 - argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user));
727 + argv[1] = accounts_user_get_user_name (ACCOUNTS_USER (user));
730 if (!spawn_with_login_uid (context, argv, &error)) {
731 throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message);
732 @@ -1806,12 +1813,11 @@
735 if (mode == PASSWORD_MODE_SET_AT_LOGIN) {
736 - argv[0] = "/usr/bin/chage";
738 + argv[0] = "/usr/bin/chpass";
742 - argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user));
744 + argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user));
747 if (!spawn_with_login_uid (context, argv, &error)) {
748 throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message);
749 @@ -1827,11 +1833,10 @@
750 accounts_user_set_locked (ACCOUNTS_USER (user), FALSE);
752 else if (accounts_user_get_locked (ACCOUNTS_USER (user))) {
753 - argv[0] = "/usr/sbin/usermod";
756 - argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user));
758 + argv[0] = "/usr/sbin/pw";
759 + argv[1] = "unlock";
760 + argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user));
763 if (!spawn_with_login_uid (context, argv, &error)) {
764 throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message);
765 @@ -1896,7 +1901,7 @@
767 gchar **strings = data;
768 g_autoptr(GError) error = NULL;
769 - const gchar *argv[6];
770 + const gchar *argv[5];
773 "set password and hint of user '%s' (%d)",
774 @@ -1905,12 +1910,11 @@
776 g_object_freeze_notify (G_OBJECT (user));
778 - argv[0] = "/usr/sbin/usermod";
779 + argv[0] = "/usr/sbin/chpass";
781 argv[2] = strings[0];
783 - argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user));
785 + argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user));
788 if (!spawn_with_login_uid (context, argv, &error)) {
789 throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message);
792 [FILE:1008:patches/patch-src_user.h]
793 --- src/user.h.orig 2019-04-23 17:16:09.000000000 +0200
794 +++ src/user.h 2021-06-03 16:07:13.902776000 +0200
797 #include <sys/types.h>
799 +#ifdef HAVE_SHADOW_H
806 User * user_new (Daemon *daemon,
809 +#ifdef HAVE_SHADOW_H
810 void user_update_from_pwent (User *user,
811 struct passwd *pwent,
814 +void user_update_from_pwent (User *user,
815 + struct passwd *pwent);
817 void user_update_from_keyfile (User *user,
819 void user_update_local_account_property (User *user,
822 [FILE:375:patches/patch-src_wtmp-helper.c]
823 --- src/wtmp-helper.c.orig 2019-04-23 15:16:09 UTC
824 +++ src/wtmp-helper.c
825 @@ -51,7 +51,7 @@ user_previous_login_free (UserPreviousLo
827 wtmp_helper_start (void)
829 -#if defined(HAVE_SETUTXDB)
830 +#if defined(HAVE_SETUTXDB) && !defined(__DragonFly__)
831 if (setutxdb (UTXDB_LOG, NULL) != 0) {
836 [FILE:358:patches/patch-src_wtmp-helper.h]
837 --- src/wtmp-helper.h.orig 2019-04-23 15:16:09 UTC
838 +++ src/wtmp-helper.h
843 +#ifdef HAVE_SHADOW_H
847 const gchar * wtmp_helper_get_path_for_monitor (void);
848 void wtmp_helper_update_login_frequencies (GHashTable *users);
851 [FILE:627:freebsd/patch-meson.build]
852 --- meson.build.orig 2019-04-23 17:16:09.000000000 +0200
853 +++ meson.build 2021-06-03 15:45:38.526501000 +0200
855 elif cc.has_header_symbol('paths.h', '_PATH_WTMPX')
856 config_h.set('PATH_WTMP', '_PATH_WTMPX')
858 - assert(run_command('test', '-e', '/var/log/utx.log').returncode() == 0, 'Do not know which filename to watch for wtmp changes')
859 - config_h.set_quoted('PATH_WTMP', '/var/log/utx.log')
860 + # Ugly hack for jails builders!
861 + _system = host_machine.system().to_lower()
862 + if _system.contains('freebsd')
863 + config_h.set_quoted('PATH_WTMP', '/var/log/utx.log')