Add the sysusers compat parts
This commit is contained in:
		
							parent
							
								
									9434e617a6
								
							
						
					
					
						commit
						ced9237a14
					
				
							
								
								
									
										10
									
								
								macros.sysusers
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								macros.sysusers
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| # RPM macros for packages creating system accounts | ||||
| # | ||||
| # Turn a sysusers.d file into macros specified by | ||||
| # https://docs.fedoraproject.org/en-US/packaging-guidelines/UsersAndGroups/#_dynamic_allocation | ||||
| 
 | ||||
| %sysusers_requires_compat Requires(pre): shadow-utils | ||||
| 
 | ||||
| %sysusers_create_compat() \ | ||||
| %(%{_rpmconfigdir}/sysusers.generate-pre.sh %{?*}) \ | ||||
| %{nil} | ||||
| @ -48,7 +48,7 @@ for file in files(buildroot): | ||||
|         continue | ||||
|     if '/security/pam_' in n: | ||||
|         o = o_pam | ||||
|     elif 'rpm/macros' in n: | ||||
|     elif '/rpm/' in n: | ||||
|         o = o_rpm_macros | ||||
|     elif re.search(r'/lib.*\.pc|/man3/|/usr/include|(?<!/libsystemd-shared-...).so$', n): | ||||
|         o = o_devel | ||||
|  | ||||
							
								
								
									
										17
									
								
								systemd.spec
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								systemd.spec
									
									
									
									
									
								
							| @ -54,6 +54,11 @@ Source12:       systemd-user | ||||
| # https://src.fedoraproject.org/rpms/fedora-release/pull-request/80 is merged. | ||||
| Source13:       99-default-disable-fallback.preset | ||||
| 
 | ||||
| Source21:       macros.sysusers | ||||
| Source22:       sysusers.attr | ||||
| Source23:       sysusers.prov | ||||
| Source24:       sysusers.generate-pre.sh | ||||
| 
 | ||||
| %if 0 | ||||
| GIT_DIR=../../src/systemd/.git git format-patch-ab --no-signature -M -N v235..v235-stable | ||||
| i=1; for j in 00*patch; do printf "Patch%04d:      %s\n" $i $j; i=$((i+1));done|xclip | ||||
| @ -461,6 +466,11 @@ sed -i 's|#!/usr/bin/env python3|#!%{__python3}|' %{buildroot}/usr/lib/systemd/t | ||||
| 
 | ||||
| install -D -t %{buildroot}/usr/lib/systemd/user-preset/ %{SOURCE13} | ||||
| 
 | ||||
| install -m 0644 -D -t %{buildroot}%{_rpmconfigdir}/macros.d/ %{SOURCE21} | ||||
| install -m 0644 -D -t %{buildroot}%{_rpmconfigdir}/fileattrs/ %{SOURCE22} | ||||
| install -m 0755 -D -t %{buildroot}%{_rpmconfigdir}/ %{SOURCE23} | ||||
| install -m 0755 -D -t %{buildroot}%{_rpmconfigdir}/ %{SOURCE24} | ||||
| 
 | ||||
| %find_lang %{name} | ||||
| 
 | ||||
| # Split files in build root into rpms. See split-files.py for the | ||||
| @ -728,8 +738,11 @@ fi | ||||
| 
 | ||||
| %changelog | ||||
| * Fri Feb  7 2020 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 245~rc1-2 | ||||
| - Add default 'disable *' preset for user units | ||||
|   (see https://fedoraproject.org/wiki/Changes/Systemd_presets_for_user_units). | ||||
| - Add default 'disable *' preset for user units (#1792474), | ||||
|   see https://fedoraproject.org/wiki/Changes/Systemd_presets_for_user_units. | ||||
| - Add macro to generate "compat" scriptlets based off sysusers.d format | ||||
|   and autogenerate user() and group() virtual provides (#1792462), | ||||
|   see https://fedoraproject.org/wiki/Changes/Adopting_sysusers.d_format. | ||||
| 
 | ||||
| * Wed Feb  5 2020 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 245~rc1-1 | ||||
| - New upstream release, see | ||||
|  | ||||
							
								
								
									
										2
									
								
								sysusers.attr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								sysusers.attr
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| %__sysusers_provides	%{_rpmconfigdir}/sysusers.prov | ||||
| %__sysusers_path	^%{_sysusersdir}/.*\\.conf$ | ||||
							
								
								
									
										79
									
								
								sysusers.generate-pre.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										79
									
								
								sysusers.generate-pre.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,79 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| # 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" | ||||
| 
 | ||||
| [ "$desc" = '-' ] && desc= | ||||
| [ "$home" = '-' -o "$home" = '' ] && home=/ | ||||
| [ "$shell" = '-' -o "$shell" = '' ] && shell=/sbin/nologin | ||||
| 
 | ||||
| if [ "$uid" = '-' -o "$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 | ||||
| 
 | ||||
| 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' | ||||
| EOF | ||||
| fi | ||||
| } | ||||
| 
 | ||||
| parse() { | ||||
|     while read line; do | ||||
|         [ "${line:0:1}" = '#' -o "${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 | ||||
| } | ||||
| 
 | ||||
| for fn in "$@"; do | ||||
|     [ -e "$fn" ] || continue | ||||
|     echo "# generated from $(basename $fn)" | ||||
|     parse < "$fn" | ||||
| done | ||||
							
								
								
									
										28
									
								
								sysusers.prov
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										28
									
								
								sysusers.prov
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,28 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| parse() { | ||||
|     while read line; do | ||||
|         [ "${line:0:1}" = '#' -o "${line:0:1}" = ';' ] && continue | ||||
|         line="${line## *}" | ||||
|         [ -z "$line" ] && continue | ||||
|         set -- $line | ||||
|         case "$1" in | ||||
|             ('u') | ||||
|                 echo "user($2)" | ||||
|                 echo "group($2)" | ||||
|                 # TODO: user:group support | ||||
|                 ;; | ||||
|             ('g') | ||||
|                 echo "group($2)" | ||||
|                 ;; | ||||
|             ('m') | ||||
|                 echo "user($2)" | ||||
|                 echo "group($3)" | ||||
|                 ;; | ||||
|         esac | ||||
|     done | ||||
| } | ||||
| 
 | ||||
| while read fn; do | ||||
|     parse < "$fn" | ||||
| done | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user