summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2020-04-27 14:13:01 +0200
committerroot2020-04-27 14:13:01 +0200
commit576b37ed1f5b9f9a194633672d40235c605cad70 (patch)
tree156d78614ed31e1045ae54a6274562c4b672e03c
parent[vmware15] Update to 15.5.2 (diff)
downloadmltk-576b37ed1f5b9f9a194633672d40235c605cad70.tar.gz
mltk-576b37ed1f5b9f9a194633672d40235c605cad70.tar.xz
mltk-576b37ed1f5b9f9a194633672d40235c605cad70.zip
[rfs-stage32] Smarter merging of user accounts from addons
-rwxr-xr-xcore/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_slx_addons24
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 /"