#77 [DRAFT] [epel8] Backport changes to sysusers macros from rawhide.
Opened 4 months ago by gotmax23. Modified 4 months ago
rpms/ gotmax23/epel-rpm-macros epel8-sysusers-backports  into  epel8

file modified
+6 -2
@@ -1,6 +1,6 @@ 

  Name:           epel-rpm-macros

  Version:        8

- Release:        41

+ Release:        42

  Summary:        Extra Packages for Enterprise Linux RPM macros

  

  # import_all_modules.py: MIT
@@ -15,7 +15,7 @@ 

  Source3:        pythondist.attr

  Source9:        GPL

  

- # sysusers https://src.fedoraproject.org/rpms/systemd/c/ced9237a14d6775a98e1a2f93880990417b4ae6e

+ # sysusers https://src.fedoraproject.org/rpms/systemd/c/7e62bd076202062d951a58e0f0a31b1ae902e0de

  Source21:       macros.sysusers

  Source22:       sysusers.attr

  Source23:       sysusers.prov
@@ -138,6 +138,10 @@ 

  

  

  %changelog

+ * Mon Jan 22 2024 Maxwell G <maxwell@gtmx.me> - 8-42

+ - Backport changes to sysusers macros from rawhide.

+ - Fixes: rhbz#2259606.

+ 

  * Wed Jan 03 2024 Miro Hrončok <mhroncok@redhat.com> - 8-41

  - Prepare support for Python 3.12

  

file modified
+75 -58
@@ -1,79 +1,96 @@ 

  #!/bin/bash

+ # -*- mode: shell-script; indent-tabs-mode: true; tab-width: 4; -*-

  

  # This script turns sysuser.d files into scriptlets mandated by Fedora

  # packaging guidelines. The general idea is to define users using the

  # declarative syntax but to turn this into traditional scriptlets.

  

  user() {

-     user="$1"

-     uid="$2"

-     desc="$3"

-     group="$4"

-     home="$5"

-     shell="$6"

+ 	user="$1"

+ 	uid="$2"

+ 	desc="$3"

+ 	group="$4"

+ 	home="$5"

+ 	shell="$6"

  

-     [ "$desc" = '-' ] && desc=

-     { [ "$home" = '-' ] || [ "$home" = '' ]; } && home=/

-     { [ "$shell" = '-' ] || [ "$shell" = '' ]; } && shell=/sbin/nologin

+ 	[ "$desc" = '-' ] && desc=

+ 	{ [ "$home" = '-' ] || [ "$home" = '' ]; } && home=/

+ 	{ [ "$shell" = '-' ] || [ "$shell" = '' ]; } && shell=/usr/sbin/nologin

  

-     if [ "$uid" = '-' ] || [ "$uid" = '' ]; then

-         cat <<EOF

- getent passwd '$user' >/dev/null || \\

-     useradd -r -g '$group' -d '$home' -s '$shell' -c '$desc' '$user'

- EOF

-     else

-         cat <<EOF

- if ! getent passwd '$user' >/dev/null ; then

-     if ! getent passwd '$uid' >/dev/null ; then

-         useradd -r -u '$uid' -g '$group' -d '$home' -s /sbin/nologin -c '$desc' '$user'

-     else

-         useradd -r -g '$group' -d '$home' -s /sbin/nologin -c '$desc' '$user'

-     fi

- fi

+ 	if [ "$uid" = '-' ] || [ "$uid" = '' ]; then

+ 		cat <<-EOF

+ 		getent passwd '$user' >/dev/null || \\

+ 		    useradd -r -g ${group@Q} -d ${home@Q} -s ${shell@Q} -c ${desc@Q} ${user@Q} || :

+ 		EOF

+ 	else

+ 		cat <<-EOF

+ 		if ! getent passwd ${user@Q} >/dev/null; then

+ 		    if ! getent passwd ${uid@Q} >/dev/null; then

+ 		        useradd -r -u ${uid@Q} -g ${group@Q} -d ${home@Q} -s ${shell@Q} -c ${desc@Q} ${user@Q} || :

+ 		    else

+ 		        useradd -r -g ${group@Q} -d ${home@Q} -s ${shell@Q} -c ${desc@Q} ${user@Q} || :

+ 		    fi

+ 		fi

  

- EOF

-     fi

+ 		EOF

+ 	fi

  }

  

  group() {

-     group="$1"

-     gid="$2"

-     if [ "$gid" = '-' ]; then

-         cat <<-EOF

- 	getent group '$group' >/dev/null || groupadd -r '$group'

- 	EOF

-     else

-         cat <<-EOF

- 	getent group '$group' >/dev/null || groupadd -f -g '$gid' -r '$group'

+ 	group="$1"

+ 	gid="$2"

+ 

+ 	if [ "$gid" = '-' ]; then

+ 		cat <<-EOF

+ 		getent group ${group@Q} >/dev/null || groupadd -r ${group@Q} || :

+ 		EOF

+ 	else

+ 		cat <<-EOF

+ 		getent group ${group@Q} >/dev/null || groupadd -f -g ${gid@Q} -r ${group@Q} || :

+ 		EOF

+ 	fi

+ }

+ 

+ usermod() {

+ 	user="$1"

+ 	group="$2"

+ 

+ 	cat <<-EOF

+ 	if getent group ${group@Q} >/dev/null; then

+ 	    usermod -a -G ${group@Q} '$user' || :

+ 	fi

  	EOF

-     fi

  }

  

  parse() {

-     while read -r line || [ -n "$line" ] ; do

-         { [ "${line:0:1}" = '#' ] || [ "${line:0:1}" = ';' ]; } && continue

-         line="${line## *}"

-         [ -z "$line" ] && continue

-         eval "arr=( $line )"

-         case "${arr[0]}" in

-             ('u')

-                 group "${arr[1]}" "${arr[2]}"

-                 user "${arr[1]}" "${arr[2]}" "${arr[3]}" "${arr[1]}" "${arr[4]}" "${arr[5]}"

-                 # TODO: user:group support

-                 ;;

-             ('g')

-                 group "${arr[1]}" "${arr[2]}"

-                 ;;

-             ('m')

-                 group "${arr[2]}" "-"

-                 user "${arr[1]}" "-" "" "${arr[2]}"

-                 ;;

-         esac

-     done

+ 	while read -r line || [ -n "$line" ] ; do

+ 		{ [ "${line:0:1}" = '#' ] || [ "${line:0:1}" = ';' ]; } && continue

+ 		line="${line## *}"

+ 		[ -z "$line" ] && continue

+ 		eval "arr=( $line )"

+ 		case "${arr[0]}" in

+ 			('u')

+ 				if [[ "${arr[2]}" == *":"* ]]; then

+ 					user "${arr[1]}" "${arr[2]%:*}" "${arr[3]}" "${arr[2]#*:}" "${arr[4]}" "${arr[5]}"

+ 				else

+ 					group "${arr[1]}" "${arr[2]}"

+ 					user "${arr[1]}" "${arr[2]}" "${arr[3]}" "${arr[1]}" "${arr[4]}" "${arr[5]}"

+ 				fi

+ 				;;

+ 			('g')

+ 				group "${arr[1]}" "${arr[2]}"

+ 				;;

+ 			('m')

+ 				group "${arr[2]}" "-"

+ 				user "${arr[1]}" "-" "" "${arr[1]}" "" ""

+ 				usermod "${arr[1]}" "${arr[2]}"

+ 				;;

+ 		esac

+ 	done

  }

  

  for fn in "$@"; do

-     [ -e "$fn" ] || continue

-     echo "# generated from $(basename "$fn")"

-     parse <"$fn"

+ 	[ -e "$fn" ] || continue

+ 	echo "# generated from $(basename "$fn")"

+ 	parse <"$fn"

  done

Fixes: https://bugzilla.redhat.com/2259606


This is a WIP. It needs testing (likely a rebuild of all packages in epel8 that use the sysusers macros -- grepping https://src.fedoraproject.org/lookaside/rpm-specs-epel8-20240122.tar.xz will come in handy) before we merge it.

1 new commit added

  • Backport changes to sysusers macros from rawhide.
4 months ago

Build succeeded.
https://fedora.softwarefactory-project.io/zuul/buildset/37750ec7b2284c6dbf2ee2d12c9ff39f