From: Jens Maus Date: Mon, 12 Jun 2017 13:35:54 +0000 (+0200) Subject: support/scripts: allow /etc/shadow to be symlinked X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=82f64203a8f017d50b754323194694374f92add5;p=buildroot.git support/scripts: allow /etc/shadow to be symlinked This commit fixes a problem where it was not possible to replace /etc/shadow with a symlink to a e.g. a user partition where the shadow file is placed. This is required, e.g. for systems where the rootfs is mounted read-only but users should still be able to be added. Thus, if within an filesystem overlay setup a user tries to replace /etc/shadow with a symlink to the real file on a user partition a buildroot build stops with an error message because sed is called on the symlink instead of following the symlink. This commit fixes this shortcoming. Signed-off-by: Jens Maus Reviewed-by: "Yann E. MORIN" Signed-off-by: Thomas Petazzoni --- diff --git a/support/scripts/mkusers b/support/scripts/mkusers index 2ac76f9863..5bbec3e10f 100755 --- a/support/scripts/mkusers +++ b/support/scripts/mkusers @@ -219,12 +219,12 @@ add_one_group() { fi # Remove any previous instance of this group, and re-add the new one - sed -i -e '/^'"${group}"':.*/d;' "${GROUP}" + sed -i --follow-symlinks -e '/^'"${group}"':.*/d;' "${GROUP}" printf "%s:x:%d:\n" "${group}" "${gid}" >>"${GROUP}" # Ditto for /etc/gshadow if it exists if [ -f "${GSHADOW}" ]; then - sed -i -e '/^'"${group}"':.*/d;' "${GSHADOW}" + sed -i --follow-symlinks -e '/^'"${group}"':.*/d;' "${GSHADOW}" printf "%s:*::\n" "${group}" >>"${GSHADOW}" fi } @@ -263,7 +263,8 @@ add_user_to_group() { for _f in "${GROUP}" "${GSHADOW}"; do [ -f "${_f}" ] || continue - sed -r -i -e 's/^('"${group}"':.*:)(([^:]+,)?)'"${username}"'(,[^:]+*)?$/\1\2\4/;' \ + sed -r -i --follow-symlinks \ + -e 's/^('"${group}"':.*:)(([^:]+,)?)'"${username}"'(,[^:]+*)?$/\1\2\4/;' \ -e 's/^('"${group}"':.*)$/\1,'"${username}"'/;' \ -e 's/,+/,/' \ -e 's/:,/:/' \ @@ -303,7 +304,7 @@ add_one_user() { # Remove any previous instance of this user for _f in "${PASSWD}" "${SHADOW}"; do - sed -r -i -e '/^'"${username}"':.*/d;' "${_f}" + sed -r -i --follow-symlinks -e '/^'"${username}"':.*/d;' "${_f}" done _gid="$( get_gid "${group}" )"