Skip to content

Commit

Permalink
Release 7.10.11 - See CHANGELOG.md
Browse files Browse the repository at this point in the history
  • Loading branch information
tiredofit committed Aug 22, 2024
1 parent 89a9252 commit 1bfa414
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 33 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
## 7.10.11 2024-08-22 <dave at tiredofit dot ca>

### Changed
- Allow for changing CONTAINER_USER and CONTAINER_GROUP names with hyphens in them


## 7.10.10 2024-08-19 <dave at tiredofit dot ca>

### Added
Expand Down
92 changes: 59 additions & 33 deletions install/etc/cont-init.d/02-permissions
Original file line number Diff line number Diff line change
Expand Up @@ -25,53 +25,79 @@ if var_true "${CONTAINER_ENABLE_PERMISSIONS}" ; then
unames="$(set -o posix ; set | sort | grep -e '^USER_' | sed "s|^USER_||g" | tr '[:upper:]' '[:lower:]' | tr ' ' '\n') "
unames+="$(set -o posix ; set | sort | grep -e '^CONTAINER_USER_' | sed "s|^CONTAINER_USER_||g" | tr '[:upper:]' '[:lower:]' | tr ' ' '\n')"

for uname in $unames; do
u=$(echo $uname | cut -d = -f 1)
uid=$(echo $uname | cut -d = -f 2)
ouid=$(grep -e "^${u}" /etc/passwd | awk -F: '{print $3}')
for upair in $unames; do
uname=$(echo $upair | cut -d = -f 1)
uid=$(echo $upair | cut -d = -f 2)
if grep -e "^${uname}" /etc/passwd > /dev/null; then
_userexists=true
elif grep -e "^${uname/_/-}" /etc/passwd > /dev/null; then
_userexists=true
uname=${uname/_/-}
fi
if [ "${_userexists}" = true ] ; then
ouid=$(grep -e "^${uname}" /etc/passwd | awk -F: '{print $3}')

print_debug "Changing user '${u}' to uid '${uid}' from '${ouid}'"
sed -i "s|${u}:x:${ouid}:|${u}:x:${uid}:|g" /etc/passwd
print_debug "Changing user '${u}' to uid '${uid}' from '${ouid}'"
sed -i "s|${uname}:x:${ouid}:|${uname}:x:${uid}:|g" /etc/passwd
fi
done

# Change gid in /etc/group and /etc/passwd with the ones defined in Docker's environment settings
groups="$(set -o posix ; set | sort | grep -e '^GROUP_' | sed "s|^GROUP_||g" | tr '[:upper:]' '[:lower:]' | tr ' ' '\n' | sed '/add_.*/d' ) "
groups+="$(set -o posix ; set | sort | grep -e '^CONTAINER_GROUP_' | sed "s|^CONTAINER_GROUP_||g" | tr '[:upper:]' '[:lower:]' | tr ' ' '\n' | sed '/add_.*/d' ) "

g=$(echo $groups | cut -d = -f 1)
for group in $groups; do
gid=$(echo $group | cut -d = -f 2)
opu=$(grep -e "^${g}" /etc/passwd | awk -F: '{print $1}')
opuid=$(grep -e "^${g}" /etc/passwd | awk -F: '{print $3}')
opgid=$(grep -e "^${g}" /etc/passwd | awk -F: '{print $4}')
og=$(grep -e "^${g}" /etc/group | awk -F: '{print $1}')
oggid=$(grep -e "^${g}" /etc/group | awk -F: '{print $3}')

print_debug "Changing group '${g}' to gid '${gid}' from '${oggid}'"
sed -i "s|${opu}:x:${opuid}:${opgid}:|${opu}:x:${opuid}:${gid}:|g" /etc/passwd
sed -i "s|${og}:x:${oggid}|${og}:x:${gid}|g" /etc/group
for gpair in $groups; do
gname=$(echo $gpair | cut -d = -f 1)
gid=$(echo $gpair | cut -d = -f 2)
if grep -e "^${gname}" /etc/group > /dev/null; then
_groupexists=true
elif grep -e "^${gname/_/-}" /etc/group > /dev/null; then
_groupexists=true
gname=${gname/_/-}
fi

if [ "${_groupexists}" = true ] ; then
opu=$(grep -e "^${gname}" /etc/passwd | awk -F: '{print $1}')
opuid=$(grep -e "^${gname}" /etc/passwd | awk -F: '{print $3}')
opgid=$(grep -e "^${gname}" /etc/passwd | awk -F: '{print $4}')
og=$(grep -e "^${gname}" /etc/group | awk -F: '{print $1}')
oggid=$(grep -e "^${gname}" /etc/group | awk -F: '{print $3}')

print_debug "Changing group '${gname}' to gid '${gid}' from '${oggid}'"
sed -i "s|\(.*\):\(.*\):\(.*\):${opgid}:|\1:\2:\3:${gid}:|g" /etc/passwd
sed -i "s|${og}:x:${oggid}|${og}:x:${gid}|g" /etc/group
fi
done

# Add users defined in Docker's environment settings to groups in /etc/group
groupsadd="$(set -o posix ; set | sort | grep -e '^GROUP_ADD_' | sed 's|^GROUP_ADD_||g' | tr '[:upper:]' '[:lower:]' ) "
groupsadd+="$(set -o posix ; set | sort | grep -e '^CONTAINER_GROUP_ADD_' | sed 's|^CONTAINER_GROUP_ADD_||g' | tr '[:upper:]' '[:lower:]' )"

for gau in $groupsadd; do
g=$(echo ${gau} | cut -d = -f1 )
uta=$(echo ${gau} | cut -d = -f2 | tr ',' '\n')

for userstogroup in ${uta} ; do
print_debug "Adding user '${userstogroup}' to '${g}'"
os=$(cat /etc/os-release |grep ^ID= | cut -d = -f2)
case ${os,,} in
"alpine" )
silent addgroup ${userstogroup} ${g}
;;
"debian" | "ubuntu" )
silent usermod -a -G ${g} ${userstogroup}
;;
esac
done
gname=$(echo ${gau} | cut -d = -f1 )
if grep -e "^${gname}" /etc/group > /dev/null; then
_groupexists=true
elif grep -e "^${gname/_/-}" /etc/group > /dev/null; then
_groupexists=true
gname=${gname/_/-}
fi

if [ "${_groupexists}" = true ] ; then
uta=$(echo ${gau} | cut -d = -f2 | tr ',' '\n')

for userstogroup in ${uta} ; do
print_debug "Adding user '${userstogroup}' to '${gname}'"
os=$(cat /etc/os-release |grep ^ID= | cut -d = -f2)
case ${os,,} in
"alpine" )
silent addgroup ${userstogroup} ${gname}
;;
"debian" | "ubuntu" )
silent usermod -a -G ${gname} ${userstogroup}
;;
esac
done
fi
done
fi

Expand Down

0 comments on commit 1bfa414

Please sign in to comment.