diff options
author | Simon Rettberg | 2020-04-27 14:13:01 +0200 |
---|---|---|
committer | root | 2020-04-27 14:13:01 +0200 |
commit | 576b37ed1f5b9f9a194633672d40235c605cad70 (patch) | |
tree | 156d78614ed31e1045ae54a6274562c4b672e03c /core/rootfs | |
parent | [vmware15] Update to 15.5.2 (diff) | |
download | mltk-576b37ed1f5b9f9a194633672d40235c605cad70.tar.gz mltk-576b37ed1f5b9f9a194633672d40235c605cad70.tar.xz mltk-576b37ed1f5b9f9a194633672d40235c605cad70.zip |
[rfs-stage32] Smarter merging of user accounts from addons
Diffstat (limited to 'core/rootfs')
-rwxr-xr-x | core/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_slx_addons | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/core/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_slx_addons b/core/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_slx_addons index 610818e4..228474f2 100755 --- a/core/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_slx_addons +++ b/core/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_slx_addons @@ -63,14 +63,30 @@ mount -t squashfs -o ro "$ADDON_PATH" "$ADDON_MOUNT_POINT" || \ # Merge any passwd/group/... files merguez() { - local tmp=$(mktemp) + # checks for conflicts of entries and (uid|gid), assumes <entry>:x:<id>:... ! + if [ "$1" = "--check-conflicts" ]; then + local cc=yes + shift + fi + local tmp="$(mktemp)" cp -f -a -- "$1" "$tmp" # So we get the original perms/owner - cat "$@" | awk -F: '!n[$1]++' > "$tmp" + if [ -n "$cc" ]; then + local errors="$(mktemp)" + cat "$@" | awk -F: '{ if ($3 in n) { if (n[$3] != $1 ) { print "Conflicting entries "$1" ("$3")" > "/dev/stderr" } } else { n[$3]=$1 ; print $0} }' 2>"$errors" > "$tmp" + if [ -s "$errors" ]; then + slxlog --sync --echo "addon-merge-usergroups" "Conflicting user/groups in ${ADDON}." "$errors" + fi + rm -f -- "$errors" + else + # just merguez! + cat "$@" | awk -F: '!n[$1]++' > "$tmp" + fi mv -f -- "$tmp" "$1" } -for i in group shadow passwd; do - [ -s "${ADDON_MOUNT_POINT}/etc/$i" ] && merguez "/etc/$i" "${ADDON_MOUNT_POINT}/etc/$i" +for i in group passwd; do + [ -s "${ADDON_MOUNT_POINT}/etc/$i" ] && merguez --check-conflicts "/etc/$i" "${ADDON_MOUNT_POINT}/etc/$i" done +[ -s "${ADDON_MOUNT_POINT}/etc/shadow" ] && merguez "/etc/shadow" "${ADDON_MOUNT_POINT}/etc/shadow" # now append it to / echo "Appending ${ADDON_MOUNT_POINT} to /" |