From 4c2cc8b588e9b6a0e6a245d99f2ee6da71cac37a Mon Sep 17 00:00:00 2001 From: Juan RP Date: Fri, 11 Dec 2009 12:03:21 +0100 Subject: [PATCH] Add a trigger to (un)register system user/groups. The following vars can be used for this: - system_accounts="foo blah" - foo_homedir, foo_shell, foo_descr, foo_groups. --HG-- extra : convert_revision : bc7d002e00abc5c84f83a3716a8ecf97f9c9ff24 --- TODO | 1 - xbps-src/shutils/metadata.sh | 4 +- xbps-src/shutils/metadata_scripts.sh | 31 +++++++++- xbps-src/shutils/tmpl_funcs.sh | 3 +- xbps-src/triggers/Makefile | 1 + xbps-src/triggers/initramfs-tools | 2 +- xbps-src/triggers/openrc-service | 2 +- xbps-src/triggers/system-accounts | 84 ++++++++++++++++++++++++++++ 8 files changed, 120 insertions(+), 8 deletions(-) create mode 100755 xbps-src/triggers/system-accounts diff --git a/TODO b/TODO index 6228f456d14..85917179c26 100644 --- a/TODO +++ b/TODO @@ -3,4 +3,3 @@ - Use binary pkgs for required build dependencies. - Make src packages self contained, without requiring to download the whole repository. -- Add a trigger to (un)register system user/groups. diff --git a/xbps-src/shutils/metadata.sh b/xbps-src/shutils/metadata.sh index abbfa9ed9a4..02bfc2729c6 100644 --- a/xbps-src/shutils/metadata.sh +++ b/xbps-src/shutils/metadata.sh @@ -275,11 +275,9 @@ xbps_write_metadata_pkg_real() $long_desc _EOF # - # If package sets $openrc_services, add the openrc-service - # trigger and OpenRC run dependency. + # If package sets $openrc_services, add the OpenRC rundep. # if [ -n "$openrc_services" ]; then - triggers="$triggers openrc-service" Add_dependency run OpenRC fi diff --git a/xbps-src/shutils/metadata_scripts.sh b/xbps-src/shutils/metadata_scripts.sh index f22621467d0..27bca7c5314 100644 --- a/xbps-src/shutils/metadata_scripts.sh +++ b/xbps-src/shutils/metadata_scripts.sh @@ -38,7 +38,7 @@ xbps_write_metadata_scripts_pkg() local action="$1" local tmpf=$(mktemp -t xbps-install.XXXXXXXXXX) || exit 1 local fpattern="s|${DESTDIR}||g;s|^\./$||g;/^$/d" - local targets f info_files + local targets f info_files home shell descr groups case "$action" in install) ;; @@ -97,10 +97,39 @@ _EOF fi fi + # + # Handle system accounts. + # + if [ -n "${system_accounts}" ]; then + _add_trigger system-accounts + echo "export system_accounts=\"${system_accounts}\"" >> $tmpf + for f in ${system_accounts}; do + eval homedir="\$${f}_homedir" + eval shell="\$${f}_shell" + eval descr="\$${f}_descr" + eval groups="\$${f}_groups" + if [ -n "$homedir" ]; then + echo "export ${f}_homedir=\"$homedir\"" >> $tmpf + fi + if [ -n "$shell" ]; then + echo "export ${f}_shell=\"$shell\"" >> $tmpf + fi + if [ -n "$descr" ]; then + echo "export ${f}_descr=\"$descr\"" >> $tmpf + fi + if [ -n "$groups" ]; then + echo "export ${f}_groups=\"${groups}\"" >> $tmpf + fi + unset homedir shell descr groups + done + echo >> $tmpf + fi + # # Handle OpenRC services. # if [ -n "${openrc_services}" ]; then + _add_trigger openrc-service echo "export openrc_services=\"${openrc_services}\"" >> $tmpf echo >> $tmpf fi diff --git a/xbps-src/shutils/tmpl_funcs.sh b/xbps-src/shutils/tmpl_funcs.sh index b21c2a0ad31..ac5ce477172 100644 --- a/xbps-src/shutils/tmpl_funcs.sh +++ b/xbps-src/shutils/tmpl_funcs.sh @@ -75,7 +75,8 @@ reset_tmpl_vars() only_for_archs conf_files keep_libtool_archives \ noarch subpackages sourcepkg gtk_iconcache_dirs \ abi_depends api_depends triggers openrc_services \ - replaces XBPS_EXTRACT_DONE XBPS_CONFIGURE_DONE \ + replaces system_accounts \ + XBPS_EXTRACT_DONE XBPS_CONFIGURE_DONE \ XBPS_BUILD_DONE XBPS_INSTALL_DONE FILESDIR DESTDIR \ SRCPKGDESTDIR PATCHESDIR" diff --git a/xbps-src/triggers/Makefile b/xbps-src/triggers/Makefile index 2f4f1a14132..2c3d4264eb5 100644 --- a/xbps-src/triggers/Makefile +++ b/xbps-src/triggers/Makefile @@ -3,6 +3,7 @@ include ../vars.mk TRIGGERS= gtk-icon-cache info-files mimedb register-shell TRIGGERS+= xml-catalog gtk-immodules initramfs-tools openrc-service TRIGGERS+= update-desktopdb gtk-pixbuf-loaders pango-modules x11-fonts +TRIGGERS+= system-accounts .PHONY: all all: diff --git a/xbps-src/triggers/initramfs-tools b/xbps-src/triggers/initramfs-tools index e9b399dbe07..37d71c6bad6 100755 --- a/xbps-src/triggers/initramfs-tools +++ b/xbps-src/triggers/initramfs-tools @@ -1,4 +1,4 @@ -#!/bin/sh -e -e +#!/bin/sh -e # # Runs update-initramfs(8) to create/update an initramfs for specified # version (if the pkg that is triggering it) or for the currently diff --git a/xbps-src/triggers/openrc-service b/xbps-src/triggers/openrc-service index 256215e31c7..7267d329e2d 100755 --- a/xbps-src/triggers/openrc-service +++ b/xbps-src/triggers/openrc-service @@ -1,4 +1,4 @@ -#!/bin/sh -e -e +#!/bin/sh # # Registers or unregisters OpenRC services into the specified # runlevel. diff --git a/xbps-src/triggers/system-accounts b/xbps-src/triggers/system-accounts new file mode 100755 index 00000000000..ec2d21da301 --- /dev/null +++ b/xbps-src/triggers/system-accounts @@ -0,0 +1,84 @@ +#!/bin/sh -e +# +# (Un)registers systems accounts (users/groups). +# +# Arguments: $ACTION = [run/targets] +# $TARGET = [post-install/pre-remove] +# $PKGNAME +# $VERSION +# $UPDATE = [yes/no] +# +ACTION="$1" +TARGET="$2" +PKGNAME="$3" +VERSION="$4" +UPDATE="$5" + +useradd_cmd=usr/sbin/useradd +userdel_cmd=usr/sbin/userdel +groupadd_cmd=usr/sbin/groupadd +passwd_cmd=usr/bin/passwd +getent_cmd=usr/bin/getent + +case "$ACTION" in +targets) + echo "post-install pre-remove" + ;; +run) + if [ ! -x $useradd_cmd -a ! -x $groupadd_cmd -a ! -x $passwd_cmd \ + -a ! -x $getent_cmd ]; then + exit 0 + fi + + if [ -z "$system_accounts" ]; then + exit 0 + fi + + case "$TARGET" in + post-install) + for acct in ${system_accounts}; do + eval homedir="\$${acct}_homedir" + eval shell="\$${acct}_shell" + eval descr="\$${acct}_descr" + eval groups="\$${acct}_groups" + [ -z "$homedir" ] && homedir="/" + [ -z "$shell" ] && shell="/sbin/nologin" + [ -z "$descr" ] && descr="$acct unpriviledged user" + [ -n "$groups" ] && groups="-G $groups" + + if ! $getent_cmd group ${acct} >/dev/null; then + $groupadd_cmd -r ${acct} \ + 2>&1 >/dev/null || exit $? + echo "Created ${acct} system group." + fi + if ! $getent_cmd passwd ${acct} >/dev/null; then + $useradd_cmd -c "$descr" -d "$homedir" \ + -s "$shell" -g ${acct} $groups \ + -r ${acct} && \ + $passwd_cmd -l ${acct} \ + 2>&1 >/dev/null || exit $? + echo "Created ${acct} system user." + fi + done + ;; + pre-remove) + # + # Only unregister if we aren't updating a package. + # + if [ "$UPDATE" = "no" ]; then + for acct in ${system_accounts}; do + $userdel_cmd ${acct} 2>&1 >/dev/null + if [ $? -eq 0 ]; then + echo "Removed ${acct} system user/group." + fi + done + fi + ;; + esac + ;; +*) + exit 1 + ;; +esac + +exit 0