From owner-dev-commits-ports-all@freebsd.org Tue May 25 08:28:40 2021 Return-Path: Delivered-To: dev-commits-ports-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8128F6474DA; Tue, 25 May 2021 08:28:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Fq6fw30w8z3DXT; Tue, 25 May 2021 08:28:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4EF661A352; Tue, 25 May 2021 08:28:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 14P8SeSr053556; Tue, 25 May 2021 08:28:40 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 14P8SedM053555; Tue, 25 May 2021 08:28:40 GMT (envelope-from git) Date: Tue, 25 May 2021 08:28:40 GMT Message-Id: <202105250828.14P8SedM053555@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Mateusz Piotrowski <0mp@FreeBSD.org> Subject: git: ffb1311e5672 - main - sysutils/accountsservice: Update to 0.6.55 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: 0mp X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ffb1311e56725702208e807cfc63c8163c6b4a52 Auto-Submitted: auto-generated X-BeenThere: dev-commits-ports-all@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for all branches of the ports repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 25 May 2021 08:28:40 -0000 The branch main has been updated by 0mp: URL: https://cgit.FreeBSD.org/ports/commit/?id=ffb1311e56725702208e807cfc63c8163c6b4a52 commit ffb1311e56725702208e807cfc63c8163c6b4a52 Author: Olivier Duchateau AuthorDate: 2021-05-24 15:38:38 +0000 Commit: Mateusz Piotrowski <0mp@FreeBSD.org> CommitDate: 2021-05-25 08:28:07 +0000 sysutils/accountsservice: Update to 0.6.55 This update also fixes the userdel functionality. PR: 249445 Reviewed by: 0mp Approved by: maintainer timeout MFH: 2021Q2 Security: 75aae50b-9e3c-11eb-9bc3-8c164582fbac Security: CVE-2018-14036 --- sysutils/accountsservice/Makefile | 30 +-- sysutils/accountsservice/distinfo | 6 +- sysutils/accountsservice/files/patch-configure | 21 -- sysutils/accountsservice/files/patch-meson.build | 16 ++ .../files/patch-meson__post__install.py | 13 + sysutils/accountsservice/files/patch-src_daemon.c | 282 ++++++++++++++++++++- .../files/patch-src_libaccountsservice_act-user.c | 11 + .../accountsservice/files/patch-src_meson.build | 13 + sysutils/accountsservice/files/patch-src_user.c | 190 ++++++++++---- sysutils/accountsservice/files/patch-src_user.h | 27 ++ .../accountsservice/files/patch-src_wtmp-helper.h | 10 + sysutils/accountsservice/pkg-descr | 6 +- sysutils/accountsservice/pkg-install | 9 - sysutils/accountsservice/pkg-plist | 51 ++-- 14 files changed, 540 insertions(+), 145 deletions(-) diff --git a/sysutils/accountsservice/Makefile b/sysutils/accountsservice/Makefile index 86751efc375b..04c8893a3d36 100644 --- a/sysutils/accountsservice/Makefile +++ b/sysutils/accountsservice/Makefile @@ -1,7 +1,7 @@ # Created by: Koop Mast PORTNAME= accountsservice -PORTVERSION= 0.6.42 +PORTVERSION= 0.6.55 CATEGORIES= sysutils devel MASTER_SITES= http://www.freedesktop.org/software/${PORTNAME}/ @@ -11,28 +11,18 @@ COMMENT= D-Bus interface for user account query and manipulation LICENSE= GPLv3+ LICENSE_FILE= ${WRKSRC}/COPYING -LIB_DEPENDS= libdbus-glib-1.so:devel/dbus-glib \ - libpolkit-gobject-1.so:sysutils/polkit +BUILD_DEPENDS= dbus>0:devel/dbus +LIB_DEPENDS= libpolkit-gobject-1.so:sysutils/polkit -USE_GNOME= glib20 intlhack introspection:build libxslt -USES= cpe gettext gmake gnome libtool localbase:ldflags pathfix \ +USE_GNOME= glib20 intltool introspection:build libxslt +USES= cpe gettext gnome localbase:ldflags meson \ pkgconfig tar:xz CPE_VENDOR= ray_stode -GNU_CONFIGURE= yes USE_LDCONFIG= yes -CONFIGURE_ARGS= --disable-systemd --localstatedir=/var/ -INSTALL_TARGET= install-strip - -# XXX HACK! this file isn't present on the pristine jails of the builders -# and configure breaks without it. Beter solutions welcome. -.if defined(PACKAGE_BUILDING) -CONFIGURE_ENV+= ac_cv_file__var_log_utx_log=yes -.endif - -post-patch: - @${REINPLACE_CMD} -e 's|/etc/gdm/custom.conf|${LOCALBASE}/etc/gdm/custom.conf|g' \ - ${WRKSRC}/src/daemon.c - @${REINPLACE_CMD} -e 's|/lib/AccountsService|/db/AccountsService|g' \ - ${WRKSRC}/src/user.c ${WRKSRC}/src/Makefile.in +MESON_ARGS= -Dsystemdsystemunitdir=no \ + -Dgdmconffile=${LOCALBASE}/etc/gdm/custom.conf \ + -Dsystemd=false \ + -Delogind=false \ + -Dlocalstatedir=/var .include diff --git a/sysutils/accountsservice/distinfo b/sysutils/accountsservice/distinfo index c933d57be71f..71694a1bde05 100644 --- a/sysutils/accountsservice/distinfo +++ b/sysutils/accountsservice/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1468052689 -SHA256 (accountsservice-0.6.42.tar.xz) = e56494c2f18627900b57234e5628923cc16a37bf8fd16b06c46118d6ae9c007e -SIZE (accountsservice-0.6.42.tar.xz) = 380500 +TIMESTAMP = 1600462353 +SHA256 (accountsservice-0.6.55.tar.xz) = ff2b2419a7e06bd9cb335ffe391c7409b49a0f0130b890bd54692a3986699c9b +SIZE (accountsservice-0.6.55.tar.xz) = 97972 diff --git a/sysutils/accountsservice/files/patch-configure b/sysutils/accountsservice/files/patch-configure deleted file mode 100644 index cbf3790afc2b..000000000000 --- a/sysutils/accountsservice/files/patch-configure +++ /dev/null @@ -1,21 +0,0 @@ ---- configure.orig 2014-03-15 15:02:28.000000000 +0100 -+++ configure 2014-03-15 15:03:01.000000000 +0100 -@@ -14527,6 +14527,18 @@ - done - - -+for ac_func in fgetpwent -+do : -+ ac_fn_c_check_func "$LINENO" "fgetpwent" "ac_cv_func_fgetpwent" -+if test "x$ac_cv_func_fgetpwent" = xyes; then : -+ cat >>confdefs.h <<_ACEOF -+#define HAVE_FGETPWENT 1 -+_ACEOF -+ -+fi -+done -+ -+ - - - diff --git a/sysutils/accountsservice/files/patch-meson.build b/sysutils/accountsservice/files/patch-meson.build new file mode 100644 index 000000000000..13ecb2d1e712 --- /dev/null +++ b/sysutils/accountsservice/files/patch-meson.build @@ -0,0 +1,16 @@ +--- meson.build.orig 2018-09-29 12:54:53 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') + 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 diff --git a/sysutils/accountsservice/files/patch-meson__post__install.py b/sysutils/accountsservice/files/patch-meson__post__install.py new file mode 100644 index 000000000000..e0d71f5e7c41 --- /dev/null +++ b/sysutils/accountsservice/files/patch-meson__post__install.py @@ -0,0 +1,13 @@ +--- meson_post_install.py.orig 2019-04-23 15:16:09 UTC ++++ meson_post_install.py +@@ -9,8 +9,8 @@ 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', '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: diff --git a/sysutils/accountsservice/files/patch-src_daemon.c b/sysutils/accountsservice/files/patch-src_daemon.c index 29226ddd111f..3a7131000a89 100644 --- a/sysutils/accountsservice/files/patch-src_daemon.c +++ b/sysutils/accountsservice/files/patch-src_daemon.c @@ -1,15 +1,227 @@ ---- src/daemon.c.orig 2014-03-23 09:36:37.194365289 +0000 -+++ src/daemon.c 2014-03-23 09:36:39.836364714 +0000 -@@ -48,7 +48,7 @@ - #define PATH_PASSWD "/etc/passwd" - #define PATH_SHADOW "/etc/shadow" - #define PATH_GROUP "/etc/group" --#define PATH_GDM_CUSTOM "/etc/gdm/custom.conf" -+#define PATH_GDM_CUSTOM "/usr/local/etc/gdm/custom.conf" - - enum { - PROP_0, -@@ -892,20 +892,18 @@ +--- src/daemon.c.orig 2018-09-26 13:20:49 UTC ++++ src/daemon.c +@@ -79,7 +79,11 @@ typedef struct { + 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 + + static void daemon_accounts_accounts_iface_init (AccountsAccountsIface *iface); + +@@ -154,17 +158,25 @@ remove_cache_files (const gchar *user_name) + } + + 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; +@@ -175,6 +187,7 @@ entry_generator_fgetpwent (Daemon *daemon, + if (*state == NULL) { + GHashTable *shadow_users = 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, + 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, + 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 + } + } + +@@ -248,10 +267,16 @@ entry_generator_fgetpwent (Daemon *daemon, + } + + 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; +@@ -293,7 +318,9 @@ entry_generator_cachedir (Daemon *daemon, + 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) { +@@ -329,10 +356,16 @@ entry_generator_cachedir (Daemon *daemon, + } + + 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; +@@ -360,7 +393,9 @@ entry_generator_requested_users (Daemon *daemon, + 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; + } +@@ -383,19 +418,29 @@ load_entries (Daemon *daemon, + 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; + } +@@ -417,7 +462,11 @@ load_entries (Daemon *daemon, + + /* 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)); +@@ -823,15 +872,24 @@ throw_error (GDBusMethodInvocation *context, + } + + 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, +@@ -860,9 +918,13 @@ daemon_local_find_user_by_id (Daemon *daemon, + 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)); +@@ -888,9 +950,13 @@ daemon_local_find_user_by_name (Daemon *daemon, + 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)); +@@ -1095,10 +1161,12 @@ daemon_create_user_authorized_cb (Daemon sys_log (context, "create user '%s'", cd->user_name); @@ -24,12 +236,18 @@ + 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); + - argv[4] = "-G"; -- argv[5] = ADMIN_GROUP; +- argv[5] = admin_groups; - argv[6] = "--"; - argv[7] = cd->user_name; + argv[6] = "-G"; -+ argv[7] = ADMIN_GROUP; ++ argv[7] = admin_groups; argv[8] = NULL; } else if (cd->account_type == ACCOUNT_TYPE_STANDARD) { @@ -38,3 +256,39 @@ argv[6] = NULL; } else { +@@ -1281,7 +1345,7 @@ daemon_delete_user_authorized_cb (Daemon + 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); +@@ -1307,19 +1371,16 @@ daemon_delete_user_authorized_cb (Daemon + + 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)) { diff --git a/sysutils/accountsservice/files/patch-src_libaccountsservice_act-user.c b/sysutils/accountsservice/files/patch-src_libaccountsservice_act-user.c new file mode 100644 index 000000000000..f8b4dfae0ce7 --- /dev/null +++ b/sysutils/accountsservice/files/patch-src_libaccountsservice_act-user.c @@ -0,0 +1,11 @@ +--- src/libaccountsservice/act-user.c.orig 2018-04-04 13:59:42 UTC ++++ src/libaccountsservice/act-user.c +@@ -26,8 +26,6 @@ + #include + #include + +-#include +- + #include + #include + #include diff --git a/sysutils/accountsservice/files/patch-src_meson.build b/sysutils/accountsservice/files/patch-src_meson.build new file mode 100644 index 000000000000..9687666febae --- /dev/null +++ b/sysutils/accountsservice/files/patch-src_meson.build @@ -0,0 +1,13 @@ +--- src/meson.build.orig 2018-09-29 12:54:53 UTC ++++ src/meson.build +@@ -26,8 +26,8 @@ deps = [ + 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( diff --git a/sysutils/accountsservice/files/patch-src_user.c b/sysutils/accountsservice/files/patch-src_user.c index 9a5dd9a588af..bf8b2708e969 100644 --- a/sysutils/accountsservice/files/patch-src_user.c +++ b/sysutils/accountsservice/files/patch-src_user.c @@ -1,93 +1,155 @@ ---- src/user.c.orig 2014-03-15 15:16:49.000000000 +0100 -+++ src/user.c 2014-03-15 15:31:57.000000000 +0100 -@@ -873,11 +873,11 @@ - "change real name of user '%s' (%d) to '%s'", - user->user_name, user->uid, name); +--- src/user.c.orig 2018-04-20 20:52:07 UTC ++++ src/user.c +@@ -138,9 +138,14 @@ user_reset_icon_file (User *user) + } + + 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 @@ user_update_from_pwent (User *user, + 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 @@ user_update_from_pwent (User *user, + 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_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; ++#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); - argv[0] = "/usr/sbin/usermod"; - argv[1] = "-c"; - argv[2] = name; - argv[3] = "--"; -- argv[4] = user->user_name; +- argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[0] = "/usr/sbin/pw"; + argv[1] = "usermod"; -+ argv[2] = user->user_name; ++ argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[3] = "-c"; + argv[4] = name; argv[5] = NULL; - error = NULL; -@@ -947,11 +947,11 @@ - "change name of user '%s' (%d) to '%s'", - old_name, user->uid, name); + if (!spawn_with_login_uid (context, argv, &error)) { +@@ -882,11 +893,11 @@ user_change_user_name_authorized_cb (Daemon + accounts_user_get_uid (ACCOUNTS_USER (user)), + name); - argv[0] = "/usr/sbin/usermod"; - argv[1] = "-l"; - argv[2] = name; - argv[3] = "--"; -- argv[4] = user->user_name; +- argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[0] = "/usr/sbin/pw"; + argv[1] = "usermod"; -+ argv[2] = user->user_name; ++ argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[3] = "-n"; + argv[4] = name; argv[5] = NULL; - error = NULL; -@@ -1229,13 +1229,12 @@ - "change home directory of user '%s' (%d) to '%s'", - user->user_name, user->uid, home_dir); + if (!spawn_with_login_uid (context, argv, &error)) { +@@ -1183,7 +1194,7 @@ user_change_home_dir_authorized_cb (Daemon + { + 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, +@@ -1192,13 +1203,12 @@ user_change_home_dir_authorized_cb (Daemon + 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] = user->user_name; +- 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] = user->user_name; ++ argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[5] = NULL; - error = NULL; if (!spawn_with_login_uid (context, argv, &error)) { -@@ -1291,11 +1290,11 @@ - "change shell of user '%s' (%d) to '%s'", - user->user_name, user->uid, shell); + throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); +@@ -1249,11 +1259,11 @@ user_change_shell_authorized_cb (Daemon + accounts_user_get_uid (ACCOUNTS_USER (user)), + shell); - argv[0] = "/usr/sbin/usermod"; - argv[1] = "-s"; - argv[2] = shell; - argv[3] = "--"; -- argv[4] = user->user_name; +- argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[0] = "/usr/sbin/pw"; + argv[1] = "usermod"; -+ argv[2] = user->user_name; ++ argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[3] = "-s"; + argv[4] = shell; argv[5] = NULL; - error = NULL; -@@ -1551,11 +1550,10 @@ + 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, - "%s account of user '%s' (%d)", - locked ? "locking" : "unlocking", user->user_name, user->uid); +@@ -1464,11 +1474,10 @@ 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] = user->user_name; +- 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] = user->user_name; ++ argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[3] = NULL; - error = NULL; if (!spawn_with_login_uid (context, argv, &error)) { -@@ -1664,11 +1662,11 @@ + throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); +@@ -1589,11 +1598,11 @@ user_change_account_type_authorized_cb (Daemon g_free (groups); @@ -95,29 +157,38 @@ - argv[1] = "-G"; - argv[2] = str->str; - argv[3] = "--"; -- argv[4] = user->user_name; +- argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[0] = "/usr/sbin/pw"; + argv[1] = "usermod"; -+ argv[2] = user->user_name; ++ argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[3] = "-G"; + argv[4] = str->str; argv[5] = NULL; - g_string_free (str, FALSE); -@@ -1735,10 +1733,8 @@ + if (!spawn_with_login_uid (context, argv, &error)) { +@@ -1643,7 +1652,7 @@ user_change_password_mode_authorized_cb (Daemon + { + 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, +@@ -1658,10 +1667,8 @@ user_change_password_mode_authorized_cb (Daemon mode == PASSWORD_MODE_NONE) { argv[0] = "/usr/bin/passwd"; - argv[1] = "-d"; - argv[2] = "--"; -- argv[3] = user->user_name; +- argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); - argv[4] = NULL; -+ argv[1] = user->user_name; ++ argv[1] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[2] = NULL; - error = NULL; if (!spawn_with_login_uid (context, argv, &error)) { -@@ -1748,12 +1744,11 @@ + throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); +@@ -1669,12 +1676,11 @@ user_change_password_mode_authorized_cb (Daemon } if (mode == PASSWORD_MODE_SET_AT_LOGIN) { @@ -127,42 +198,51 @@ + argv[1] = "-e"; argv[2] = "0"; - argv[3] = "--"; -- argv[4] = user->user_name; +- argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); - argv[5] = NULL; -+ argv[3] = user->user_name; ++ argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[4] = NULL; - error = NULL; if (!spawn_with_login_uid (context, argv, &error)) { -@@ -1777,11 +1772,10 @@ - } + throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); +@@ -1690,11 +1696,10 @@ user_change_password_mode_authorized_cb (Daemon + accounts_user_set_locked (ACCOUNTS_USER (user), FALSE); } - else if (user->locked) { + else if (accounts_user_get_locked (ACCOUNTS_USER (user))) { - argv[0] = "/usr/sbin/usermod"; - argv[1] = "-U"; - argv[2] = "--"; -- argv[3] = user->user_name; +- argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); - argv[4] = NULL; + argv[0] = "/usr/sbin/pw"; + argv[1] = "unlock"; -+ argv[2] = user->user_name; ++ argv[2] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[3] = NULL; - error = NULL; if (!spawn_with_login_uid (context, argv, &error)) { -@@ -1852,12 +1846,11 @@ + 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]; + + 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[0] = "/usr/sbin/chpass"; argv[1] = "-p"; argv[2] = strings[0]; - argv[3] = "--"; -- argv[4] = user->user_name; +- argv[4] = accounts_user_get_user_name (ACCOUNTS_USER (user)); - argv[5] = NULL; -+ argv[3] = user->user_name; ++ argv[3] = accounts_user_get_user_name (ACCOUNTS_USER (user)); + argv[4] = NULL; - error = NULL; if (!spawn_with_login_uid (context, argv, &error)) { + throw_error (context, ERROR_FAILED, "running '%s' failed: %s", argv[0], error->message); diff --git a/sysutils/accountsservice/files/patch-src_user.h b/sysutils/accountsservice/files/patch-src_user.h new file mode 100644 index 000000000000..fa8454f7518c --- /dev/null +++ b/sysutils/accountsservice/files/patch-src_user.h @@ -0,0 +1,27 @@ +--- src/user.h.orig 2016-09-06 17:31:50 UTC ++++ src/user.h +@@ -22,7 +22,9 @@ + + #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); ++#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, diff --git a/sysutils/accountsservice/files/patch-src_wtmp-helper.h b/sysutils/accountsservice/files/patch-src_wtmp-helper.h new file mode 100644 index 000000000000..ab14253510ac --- /dev/null +++ b/sysutils/accountsservice/files/patch-src_wtmp-helper.h @@ -0,0 +1,10 @@ +--- 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-descr b/sysutils/accountsservice/pkg-descr index afd9fd7e3dac..f18aadd89c52 100644 --- a/sysutils/accountsservice/pkg-descr +++ b/sysutils/accountsservice/pkg-descr @@ -3,7 +3,7 @@ The AccountsService project provides o A set of D-Bus interfaces for querying and manipulating user account information. - o An implementation of these interfaces based on the usermod(8), - useradd(8) and userdel(8) commands. + o An implementation of these interfaces based on the pw(8) + command. -WWW: https://cgit.freedesktop.org/accountsservice/ +WWW: https://gitlab.freedesktop.org/accountsservice/accountsservice diff --git a/sysutils/accountsservice/pkg-install b/sysutils/accountsservice/pkg-install deleted file mode 100644 index 65319d21350f..000000000000 --- a/sysutils/accountsservice/pkg-install +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -case $2 in -POST-INSTALL) - /bin/mkdir -p /var/db/AccountsService/users/ - /bin/mkdir -p /var/db/AccountsService/icons/ - exit 0 - ;; -esac diff --git a/sysutils/accountsservice/pkg-plist b/sysutils/accountsservice/pkg-plist index cb362dad0f43..c9b64a57e942 100644 --- a/sysutils/accountsservice/pkg-plist +++ b/sysutils/accountsservice/pkg-plist @@ -4,7 +4,6 @@ include/accountsservice-1.0/act/act-user-manager.h include/accountsservice-1.0/act/act-user.h include/accountsservice-1.0/act/act.h lib/girepository-1.0/AccountsService-1.0.typelib -lib/libaccountsservice.a lib/libaccountsservice.so lib/libaccountsservice.so.0 lib/libaccountsservice.so.0.0.0 @@ -14,40 +13,38 @@ 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/gir-1.0/AccountsService-1.0.gir -share/gtk-doc/html/libaccountsservice/ActUser.html -share/gtk-doc/html/libaccountsservice/ActUserManager.html -share/gtk-doc/html/libaccountsservice/annotation-glossary.html -share/gtk-doc/html/libaccountsservice/api-index-full.html -share/gtk-doc/html/libaccountsservice/ch01.html -share/gtk-doc/html/libaccountsservice/home.png -share/gtk-doc/html/libaccountsservice/index.html -share/gtk-doc/html/libaccountsservice/left-insensitive.png -share/gtk-doc/html/libaccountsservice/left.png -share/gtk-doc/html/libaccountsservice/libaccountsservice.devhelp2 -share/gtk-doc/html/libaccountsservice/right-insensitive.png -share/gtk-doc/html/libaccountsservice/right.png -share/gtk-doc/html/libaccountsservice/style.css -share/gtk-doc/html/libaccountsservice/up-insensitive.png -share/gtk-doc/html/libaccountsservice/up.png +share/locale/af/LC_MESSAGES/accounts-service.mo share/locale/ar/LC_MESSAGES/accounts-service.mo -share/locale/bg_BG/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/fa_IR/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 @@ -55,28 +52,42 @@ 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 *** 19 LINES SKIPPED ***