Files

22 lines
1.1 KiB
Bash

# A login shell's umask, and the mode of something it creates.
um() { runuser -l "$1" -c umask 2>/dev/null; }
made() {
local u=$1 kind=$2 f m
f=$(runuser -l "$u" -c 'd=$(mktemp -d); echo $d' 2>/dev/null)
[ -n "$f" ] || return 1
if [ "$kind" = file ]; then runuser -l "$u" -c "touch $f/t"; m=$(stat -c %A "$f/t"); else runuser -l "$u" -c "mkdir $f/d"; m=$(stat -c %A "$f/d"); fi
rm -rf "$f"
echo "$m"
}
task 1 "alice's new files are rw------- (umask 0077)"
need "su - alice -c umask prints 0077" '[ "$(um alice)" = 0077 ]'
need "a file alice creates is -rw-------" '[ "$(made alice file)" = -rw------- ]'
need "the umask is set in one of alice's own files" 'grep -Eqs "^[[:space:]]*umask[[:space:]]+0?077" /home/alice/.bashrc /home/alice/.bash_profile /home/alice/.profile'
task 2 "Everyone's new directories are rwxr-x--- (umask 0027)"
need "su - bob -c umask prints 0027" '[ "$(um bob)" = 0027 ]'
need "a directory bob creates is drwxr-x---" '[ "$(made bob dir)" = drwxr-x--- ]'
need "the umask is in a file in /etc/profile.d/" 'grep -Eqs "^[[:space:]]*umask[[:space:]]+0?027" /etc/profile.d/*.sh'
need "alice still has 0077" '[ "$(um alice)" = 0077 ]'