Ravenports generated: 05 Dec 2021 03:19
[ravenports.git] / bucket_CA / accountsservice
1 # Buildsheet autogenerated by ravenadm tool -- Do not edit.
2
3 NAMEBASE=               accountsservice
4 VERSION=                0.6.55
5 KEYWORDS=               sysutils
6 VARIANTS=               standard
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]
10
11 DOWNLOAD_GROUPS=        main
12 SITES[main]=            https://www.freedesktop.org/software/accountsservice/
13 DISTFILE[1]=            accountsservice-0.6.55.tar.xz:main
14 DF_INDEX=               1
15 SPKGS[standard]=        complete
16                         primary
17                         nls
18                         docs
19
20 OPTIONS_AVAILABLE=      none
21 OPTIONS_STANDARD=       none
22
23 BUILD_DEPENDS=          xmlto:single:standard
24 BUILDRUN_DEPENDS=       polkit:primary:standard
25
26 USES=                   cpe gettext-runtime gettext-tools:build meson
27                         pkgconfig
28 GNOME_COMPONENTS=       glib introspection
29
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
35 LICENSE_SCHEME=         solo
36
37 CPE_VENDOR=             freedesktop
38 FPC_EQUIVALENT=         sysutils/accountsservice
39 MESON_ARGS=             -Dsystemd=false
40                         -Dsystemdsystemunitdir=no
41                         -Delogind=false
42                         -Dintrospection=true
43                         -Ddocbook=true
44                         -Dgtk_doc=false
45
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 
50 as well.
51
52
53 [FILE:108:distinfo]
54 ff2b2419a7e06bd9cb335ffe391c7409b49a0f0130b890bd54692a3986699c9b        97972 accountsservice-0.6.55.tar.xz
55
56
57 [FILE:646:manifests/plist.primary.standard]
58 etc/dbus-1/system.d/org.freedesktop.Accounts.conf
59 include/accountsservice-1.0/act/
60  act-user-enum-types.h
61  act-user-manager.h
62  act-user.h
63  act.h
64 lib/
65  libaccountsservice.so
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
79
80
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
156
157
158 [FILE:52:manifests/plist.docs.standard]
159 share/doc/accountsservice/spec/AccountsService.html
160
161
162 [FILE:424:patches/patch-meson.build]
163 --- meson.build.orig    2019-04-23 15:16:09 UTC
164 +++ meson.build
165 @@ -79,6 +79,8 @@ endforeach
166  
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')
173  else
174
175
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
179 @@ -9,8 +9,8 @@
180  # FIXME: meson will not track the creation of these directories
181  #        https://github.com/mesonbuild/meson/blob/master/mesonbuild/scripts/uninstall.py#L39
182  dst_dirs = [
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),
187  ]
188  
189  for (dst_dir, dst_dir_mode) in dst_dirs:
190
191
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
195 @@ -81,7 +81,11 @@
196          GHashTable *extension_ifaces;
197  } DaemonPrivate;
198  
199 +#ifdef HAVE_SHADOW_H
200  typedef struct passwd * (* EntryGeneratorFunc) (Daemon *, GHashTable *, gpointer *, struct spwd **shadow_entry);
201 +#else
202 +typedef struct passwd * (* EntryGeneratorFunc) (Daemon *, GHashTable *, gpointer *);
203 +#endif
204  
205  typedef struct {
206          Daemon *daemon;
207 @@ -165,17 +169,25 @@
208  }
209  
210  static struct passwd *
211 +#ifdef HAVE_SHADOW_H
212  entry_generator_fgetpwent (Daemon       *daemon,
213                             GHashTable   *users,
214                             gpointer     *state,
215                             struct spwd **spent)
216 +#else
217 +entry_generator_fgetpwent (Daemon       *daemon,
218 +                           GHashTable   *users,
219 +                           gpointer     *state)
220 +#endif
221  {
222          struct passwd *pwent;
223  
224 +#ifdef HAVE_SHADOW_H
225          struct {
226                  struct spwd spbuf;
227                  char buf[1024];
228          } *shadow_entry_buffers;
229 +#endif
230  
231          struct {
232                  FILE *fp;
233 @@ -186,6 +198,7 @@
234          if (*state == NULL) {
235                  GHashTable *shadow_users = NULL;
236                  FILE *fp;
237 +#ifdef HAVE_SHADOW_H
238                  struct spwd *shadow_entry;
239  
240                  fp = fopen (PATH_SHADOW, "r");
241 @@ -219,6 +232,7 @@
242                          g_clear_pointer (&shadow_users, g_hash_table_unref);
243                          return NULL;
244                  }
245 +#endif
246  
247                  fp = fopen (PATH_PASSWD, "r");
248                  if (fp == NULL) {
249 @@ -240,12 +254,17 @@
250          if (g_hash_table_size (users) < MAX_LOCAL_USERS) {
251                  pwent = fgetpwent (generator_state->fp);
252                  if (pwent != NULL) {
253 +#ifdef HAVE_SHADOW_H
254                          shadow_entry_buffers = g_hash_table_lookup (generator_state->users, pwent->pw_name);
255  
256                          if (shadow_entry_buffers != NULL) {
257                              *spent = &shadow_entry_buffers->spbuf;
258                          }
259                          return pwent;
260 +#else
261 +                        if (!generator_state->users || g_hash_table_lookup (generator_state->users, pwent->pw_name))
262 +                            return pwent;
263 +#endif
264                  }
265          }
266  
267 @@ -259,10 +278,16 @@
268  }
269  
270  static struct passwd *
271 +#ifdef HAVE_SHADOW_H
272  entry_generator_cachedir (Daemon       *daemon,
273                            GHashTable   *users,
274                            gpointer     *state,
275                            struct spwd **shadow_entry)
276 +#else
277 +entry_generator_cachedir (Daemon       *daemon,
278 +                          GHashTable   *users,
279 +                          gpointer     *state)
280 +#endif
281  {
282          struct passwd *pwent;
283          g_autoptr(GError) error = NULL;
284 @@ -304,7 +329,9 @@
285                          errno = 0;
286                          pwent = getpwnam (name);
287                          if (pwent != NULL) {
288 +#ifdef HAVE_SHADOW_H
289                                  *shadow_entry = getspnam (pwent->pw_name);
290 +#endif
291  
292                                  return pwent;
293                          } else if (errno == 0) {
294 @@ -340,10 +367,16 @@
295  }
296  
297  static struct passwd *
298 +#ifdef HAVE_SHADOW_H
299  entry_generator_requested_users (Daemon       *daemon,
300                                   GHashTable   *users,
301                                   gpointer     *state,
302                                   struct spwd **shadow_entry)
303 +#else
304 +entry_generator_requested_users (Daemon       *daemon,
305 +                                 GHashTable   *users,
306 +                                 gpointer     *state)
307 +#endif
308  {
309          DaemonPrivate *priv = daemon_get_instance_private (daemon);
310          struct passwd *pwent;
311 @@ -371,7 +404,9 @@
312                                  if (pwent == NULL) {
313                                          g_debug ("user '%s' requested previously but not present on system", name);
314                                  } else {
315 +#ifdef HAVE_SHADOW_H
316                                          *shadow_entry = getspnam (pwent->pw_name);
317 +#endif
318  
319                                          return pwent;
320                                  }
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;
327 +#endif
328          User *user = NULL;
329  
330          g_assert (entry_generator != NULL);
331  
332          for (;;) {
333 +#ifdef HAVE_SHADOW_H
334                  spent = NULL;
335                  pwent = entry_generator (daemon, users, &generator_state, &spent);
336 +#else
337 +                pwent = entry_generator (daemon, users, &generator_state);
338 +#endif
339                  if (pwent == NULL)
340                          break;
341  
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)) {
345 +#else
346 +                if (!explicitly_requested && !user_classify_is_human (pwent->pw_uid, pwent->pw_name, pwent->pw_shell, NULL)) {
347 +#endif
348                          g_debug ("skipping user: %s", pwent->pw_name);
349                          continue;
350                  }
351 @@ -428,7 +473,11 @@
352  
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);
357 +#else
358 +                        user_update_from_pwent (user, pwent);
359 +#endif
360  
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 @@
364  }
365  
366  static User *
367 +#ifdef HAVE_SHADOW_H
368  add_new_user_for_pwent (Daemon        *daemon,
369                          struct passwd *pwent,
370                          struct spwd   *spent)
371 +#else
372 +add_new_user_for_pwent (Daemon        *daemon,
373 +                        struct passwd *pwent)
374 +#endif
375  {
376          DaemonPrivate *priv = daemon_get_instance_private (daemon);
377          User *user;
378  
379          user = user_new (daemon, pwent->pw_uid);
380 +#ifdef HAVE_SHADOW_H
381          user_update_from_pwent (user, pwent, spent);
382 +#else
383 +        user_update_from_pwent (user, pwent);
384 +#endif
385          user_register (user);
386  
387          g_hash_table_insert (priv->users,
388 @@ -880,9 +938,13 @@
389          user = g_hash_table_lookup (priv->users, pwent->pw_name);
390  
391          if (user == NULL) {
392 +#ifdef HAVE_SHADOW_H
393                  struct spwd *spent;
394                  spent = getspnam (pwent->pw_name);
395                  user = add_new_user_for_pwent (daemon, pwent, spent);
396 +#else
397 +                user = add_new_user_for_pwent (daemon, pwent);
398 +#endif
399  
400                  priv->explicitly_requested_users = g_list_append (priv->explicitly_requested_users,
401                                                                    g_strdup (pwent->pw_name));
402 @@ -908,9 +970,13 @@
403          user = g_hash_table_lookup (priv->users, pwent->pw_name);
404  
405          if (user == NULL) {
406 +#ifdef HAVE_SHADOW_H
407                  struct spwd *spent;
408                  spent = getspnam (pwent->pw_name);
409                  user = add_new_user_for_pwent (daemon, pwent, spent);
410 +#else
411 +                user = add_new_user_for_pwent (daemon, pwent);
412 +#endif
413  
414                  priv->explicitly_requested_users = g_list_append (priv->explicitly_requested_users,
415                                                                    g_strdup (pwent->pw_name));
416 @@ -1106,10 +1172,12 @@
417  
418          sys_log (context, "create user '%s'", cd->user_name);
419  
420 -        argv[0] = "/usr/sbin/useradd";
421 -        argv[1] = "-m";
422 -        argv[2] = "-c";
423 -        argv[3] = cd->real_name;
424 +        argv[0] = "/usr/sbin/pw";
425 +        argv[1] = "useradd";
426 +        argv[2] = cd->user_name;
427 +        argv[3] = "-m";
428 +        argv[4] = "-c";
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 @@
434                  else
435                          admin_groups = g_strdup (ADMIN_GROUP);
436  
437 -                argv[4] = "-G";
438 -                argv[5] = admin_groups;
439 -                argv[6] = "--";
440 -                argv[7] = cd->user_name;
441 +                argv[6] = "-G";
442 +                argv[7] = admin_groups;
443                  argv[8] = NULL;
444          }
445          else if (cd->account_type == ACCOUNT_TYPE_STANDARD) {
446 -                argv[4] = "--";
447 -                argv[5] = cd->user_name;
448                  argv[6] = NULL;
449          }
450          else {
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];
457          User *user;
458  
459          pwent = getpwuid (ud->uid);
460 @@ -1318,19 +1382,16 @@
461  
462          user_set_saved (user, FALSE);
463  
464 -        argv[0] = "/usr/sbin/userdel";
465 +        argv[0] = "/usr/sbin/pw";
466 +        argv[1] = "userdel";
467          if (ud->remove_files) {
468 -                argv[1] = "-f";
469 -                argv[2] = "-r";
470 -                argv[3] = "--";
471 -                argv[4] = pwent->pw_name;
472 -                argv[5] = NULL;
473 +                argv[2] = pwent->pw_name;
474 +                argv[3] = "-r";
475 +                argv[4] = NULL;
476          }
477          else {
478 -                argv[1] = "-f";
479 -                argv[2] = "--";
480 -                argv[3] = pwent->pw_name;
481 -                argv[4] = NULL;
482 +                argv[2] = pwent->pw_name;
483 +                argv[3] = NULL;
484          }
485  
486          if (!spawn_with_login_uid (context, argv, &error)) {
487
488
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
492 @@ -26,7 +26,9 @@
493  #include <sys/stat.h>
494  #include <unistd.h>
495  
496 +#if defined(__linux__) || defined(__sun__)
497  #include <crypt.h>
498 +#endif
499  
500  #include <glib.h>
501  #include <glib/gi18n.h>
502
503
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
507 @@ -26,8 +26,8 @@
508  cflags = [
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')),
515  ]
516  
517  libaccounts_generated = static_library(
518
519
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
523 @@ -41,6 +41,7 @@
524          "uucp",
525          "nobody",
526          "postgres",
527 +        "pgsql",
528          "pvm",
529          "rpm",
530          "nfsnobody",
531 @@ -50,6 +51,7 @@
532          "games",
533          "man",
534          "at",
535 +        "saned",
536          "gdm",
537          "gnome-initial-setup"
538  };
539
540
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
544 @@ -138,9 +138,14 @@
545  }
546  
547  void
548 +#ifdef HAVE_SHADOW_H
549  user_update_from_pwent (User          *user,
550                          struct passwd *pwent,
551                          struct spwd   *spent)
552 +#else
553 +user_update_from_pwent (User          *user,
554 +                        struct passwd *pwent)
555 +#endif
556  {
557          g_autofree gchar *real_name = NULL;
558          gboolean is_system_account;
559 @@ -199,8 +204,10 @@
560          accounts_user_set_shell (ACCOUNTS_USER (user), pwent->pw_shell);
561  
562          passwd = NULL;
563 +#ifdef HAVE_SHADOW_H
564          if (spent)
565                  passwd = spent->sp_pwdp;
566 +#endif
567  
568          if (passwd && passwd[0] == '!') {
569                  locked = TRUE;
570 @@ -218,6 +225,7 @@
571                  mode = PASSWORD_MODE_NONE;
572          }
573  
574 +#ifdef HAVE_SHADOW_H
575          if (spent) {
576                  if (spent->sp_lstchg == 0) {
577                          mode = PASSWORD_MODE_SET_AT_LOGIN;
578 @@ -231,6 +239,9 @@
579                  user->days_after_expiration_until_lock = spent->sp_inact;
580                  user->account_expiration_policy_known = TRUE;
581          }
582 +#else
583 +        user->expiration_time = pwent->pw_expire;
584 +#endif
585  
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)),
590                           name);
591  
592 -                argv[0] = "/usr/sbin/usermod";
593 -                argv[1] = "-c";
594 -                argv[2] = name;
595 -                argv[3] = "--";
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));
600 +                argv[3] = "-c";
601 +                argv[4] = name;
602                  argv[5] = NULL;
603  
604                  if (!spawn_with_login_uid (context, argv, &error)) {
605 @@ -913,11 +924,11 @@
606                           accounts_user_get_uid (ACCOUNTS_USER (user)),
607                           name);
608  
609 -                argv[0] = "/usr/sbin/usermod";
610 -                argv[1] = "-l";
611 -                argv[2] = name;
612 -                argv[3] = "--";
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));
617 +                argv[3] = "-n";
618 +                argv[4] = name;
619                  argv[5] = NULL;
620  
621                  if (!spawn_with_login_uid (context, argv, &error)) {
622 @@ -1312,7 +1323,7 @@
623  {
624          gchar *home_dir = data;
625          g_autoptr(GError) error = NULL;
626 -        const gchar *argv[7];
627 +        const gchar *argv[6];
628  
629          if (g_strcmp0 (accounts_user_get_home_directory (ACCOUNTS_USER (user)), home_dir) != 0) {
630                  sys_log (context,
631 @@ -1321,13 +1332,12 @@
632                           accounts_user_get_uid (ACCOUNTS_USER (user)),
633                           home_dir);
634  
635 -                argv[0] = "/usr/sbin/usermod";
636 -                argv[1] = "-m";
637 -                argv[2] = "-d";
638 -                argv[3] = home_dir;
639 -                argv[4] = "--";
640 -                argv[5] = accounts_user_get_user_name (ACCOUNTS_USER (user));
641 -                argv[6] = NULL;
642 +                argv[0] = "/usr/sbin/pw";
643 +                argv[1] = "-d";
644 +                argv[2] = home_dir;
645 +                argv[3] = "-n";
646 +                argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user));
647 +                argv[5] = NULL;
648  
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)),
653                           shell);
654  
655 -                argv[0] = "/usr/sbin/usermod";
656 -                argv[1] = "-s";
657 -                argv[2] = shell;
658 -                argv[3] = "--";
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));
663 +                argv[3] = "-s";
664 +                argv[4] = shell;
665                  argv[5] = NULL;
666  
667                  if (!spawn_with_login_uid (context, argv, &error)) {
668 @@ -1593,7 +1603,7 @@
669  {
670          gboolean locked = GPOINTER_TO_INT (data);
671          g_autoptr(GError) error = NULL;
672 -        const gchar *argv[5];
673 +        const gchar *argv[4];
674  
675          if (accounts_user_get_locked (ACCOUNTS_USER (user)) != locked) {
676                  sys_log (context,
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";
683 -                argv[2] = "--";
684 -                argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user));
685 -                argv[4] = NULL;
686 +                argv[0] = "/usr/sbin/pw";
687 +                argv[1] = locked ? "lock" : "unlock";
688 +                argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user));
689 +                argv[3] = NULL;
690  
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 @@
694  
695                  g_free (groups);
696  
697 -                argv[0] = "/usr/sbin/usermod";
698 -                argv[1] = "-G";
699 -                argv[2] = str->str;
700 -                argv[3] = "--";
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));
705 +                argv[3] = "-G";
706 +                argv[4] = str->str;
707                  argv[5] = NULL;
708  
709                  if (!spawn_with_login_uid (context, argv, &error)) {
710 @@ -1780,7 +1789,7 @@
711  {
712          PasswordMode mode = GPOINTER_TO_INT (data);
713          g_autoptr(GError) error = NULL;
714 -        const gchar *argv[6];
715 +        const gchar *argv[5];
716  
717          if (((PasswordMode) accounts_user_get_password_mode (ACCOUNTS_USER (user))) != mode) {
718                  sys_log (context,
719 @@ -1795,10 +1804,8 @@
720                      mode == PASSWORD_MODE_NONE) {
721  
722                          argv[0] = "/usr/bin/passwd";
723 -                        argv[1] = "-d";
724 -                        argv[2] = "--";
725 -                        argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user));
726 -                        argv[4] = NULL;
727 +                        argv[1] = accounts_user_get_user_name (ACCOUNTS_USER (user));
728 +                        argv[2] = NULL;
729  
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 @@
733                          }
734  
735                          if (mode == PASSWORD_MODE_SET_AT_LOGIN) {
736 -                                argv[0] = "/usr/bin/chage";
737 -                                argv[1] = "-d";
738 +                                argv[0] = "/usr/bin/chpass";
739 +                                argv[1] = "-e";
740                                  argv[2] = "0";
741 -                                argv[3] = "--";
742 -                                argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user));
743 -                                argv[5] = NULL;
744 +                                argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user));
745 +                                argv[4] = NULL;
746  
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);
751                  }
752                  else if (accounts_user_get_locked (ACCOUNTS_USER (user))) {
753 -                        argv[0] = "/usr/sbin/usermod";
754 -                        argv[1] = "-U";
755 -                        argv[2] = "--";
756 -                        argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user));
757 -                        argv[4] = NULL;
758 +                        argv[0] = "/usr/sbin/pw";
759 +                        argv[1] = "unlock";
760 +                        argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user));
761 +                        argv[3] = NULL;
762  
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 @@
766  {
767          gchar **strings = data;
768          g_autoptr(GError) error = NULL;
769 -        const gchar *argv[6];
770 +        const gchar *argv[5];
771  
772          sys_log (context,
773                   "set password and hint of user '%s' (%d)",
774 @@ -1905,12 +1910,11 @@
775  
776          g_object_freeze_notify (G_OBJECT (user));
777  
778 -        argv[0] = "/usr/sbin/usermod";
779 +        argv[0] = "/usr/sbin/chpass";
780          argv[1] = "-p";
781          argv[2] = strings[0];
782 -        argv[3] = "--";
783 -        argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user));
784 -        argv[5] = NULL;
785 +        argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user));
786 +        argv[4] = NULL;
787  
788          if (!spawn_with_login_uid (context, argv, &error)) {
789                  throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message);
790
791
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
795 @@ -22,7 +22,9 @@
796  
797  #include <sys/types.h>
798  #include <pwd.h>
799 +#ifdef HAVE_SHADOW_H
800  #include <shadow.h>
801 +#endif
802  
803  #include <glib.h>
804  #include <gio/gio.h>
805 @@ -54,9 +56,14 @@
806  User *         user_new                     (Daemon        *daemon,
807                                               uid_t          uid);
808  
809 +#ifdef HAVE_SHADOW_H
810  void           user_update_from_pwent       (User          *user,
811                                               struct passwd *pwent,
812                                               struct spwd   *spent);
813 +#else
814 +void           user_update_from_pwent       (User          *user,
815 +                                             struct passwd *pwent);
816 +#endif
817  void           user_update_from_keyfile     (User          *user,
818                                               GKeyFile      *keyfile);
819  void           user_update_local_account_property (User          *user,
820
821
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
826  static gboolean
827  wtmp_helper_start (void)
828  {
829 -#if defined(HAVE_SETUTXDB)
830 +#if defined(HAVE_SETUTXDB) && !defined(__DragonFly__)
831                  if (setutxdb (UTXDB_LOG, NULL) != 0) {
832                          return FALSE;
833                  }
834
835
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
839 @@ -23,7 +23,9 @@
840  
841  #include <glib.h>
842  #include <pwd.h>
843 +#ifdef HAVE_SHADOW_H
844  #include <shadow.h>
845 +#endif
846  
847  const gchar *           wtmp_helper_get_path_for_monitor                (void);
848  void                    wtmp_helper_update_login_frequencies            (GHashTable *users);
849
850
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
854 @@ -82,8 +82,11 @@
855  elif cc.has_header_symbol('paths.h', '_PATH_WTMPX')
856    config_h.set('PATH_WTMP', '_PATH_WTMPX')
857  else
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')
864 +  endif
865  endif
866  
867  # compiler flags
868