init
This commit is contained in:
commit
f2c19a6996
63
make.sh
Executable file
63
make.sh
Executable file
|
@ -0,0 +1,63 @@
|
||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Functions
|
||||||
|
set_vars() {
|
||||||
|
printf 'Setting vars...\n' >&2
|
||||||
|
|
||||||
|
sed -r \
|
||||||
|
-e "s%@CONFIG@%${CONFIG}%" \
|
||||||
|
-r "s%@LOGDIR@%${LOGDIR}%"
|
||||||
|
}
|
||||||
|
|
||||||
|
do_tell() {
|
||||||
|
printf 'Executing: %s\n' "$*"
|
||||||
|
"$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Targets
|
||||||
|
target_userrc() {
|
||||||
|
declare target='userrc'
|
||||||
|
|
||||||
|
printf '%s\n' "Building $target..."
|
||||||
|
set_vars < "$target".in > "$target"
|
||||||
|
do_tell chmod 755 "$target"
|
||||||
|
ls -l "$target"
|
||||||
|
}
|
||||||
|
|
||||||
|
target_clean() {
|
||||||
|
do_tell rm -f userrc
|
||||||
|
}
|
||||||
|
|
||||||
|
target_install() {
|
||||||
|
mkdir -p "$BINDIR"
|
||||||
|
|
||||||
|
do_tell cp userrc "${BINDIR}/userrc"
|
||||||
|
do_tell chmod 755 "${BINDIR}/userrc"
|
||||||
|
}
|
||||||
|
|
||||||
|
target_all() {
|
||||||
|
target_userrc
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
while [ -n "$1" ]; do
|
||||||
|
case "$1" in
|
||||||
|
*=*) export "${1%%=*}=${1#*=}";;
|
||||||
|
--) shift; break;;
|
||||||
|
*) break;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
target="${1:-all}"
|
||||||
|
|
||||||
|
# Build configuration
|
||||||
|
. './config.mk.sh'
|
||||||
|
|
||||||
|
printf '%s\n' "Building target: $target"
|
||||||
|
|
||||||
|
"target_$target"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
120
userrc.in
Normal file
120
userrc.in
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
msg() { printf '%s\n' "$*"; }
|
||||||
|
err() { printf '%s\n' "$*" >&2; }
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
msg "Usage: userrc [-c config] [-l logdir]"
|
||||||
|
}
|
||||||
|
|
||||||
|
rc_run_wait() {
|
||||||
|
su "$username" -s "$SHELL" -c "$homedir/.config/rc.local" &>"$logdir/${username}.log" &
|
||||||
|
wait "$!"
|
||||||
|
|
||||||
|
if (( $? )); then
|
||||||
|
msg "$homedir/.config/rc.local has returned a non-zero exit code."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
is_blacklisted() {
|
||||||
|
declare u target=$1
|
||||||
|
|
||||||
|
for u in "${users_deny[@]}"; do
|
||||||
|
if [[ "$u" == "$target" ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
is_whitelisted() {
|
||||||
|
declare u target=$1
|
||||||
|
|
||||||
|
for u in "${users_allow[@]}"; do
|
||||||
|
if [[ "$u" == "$target" ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
get_allowed_users() {
|
||||||
|
if ! [[ "$access_mode" ]]; then
|
||||||
|
access_mode='blacklist'
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg "Running in $access_mode access mode."
|
||||||
|
|
||||||
|
case "${access_mode:-freeforall}" in
|
||||||
|
explicit)
|
||||||
|
while IFS=':' read -r username pass uid gid description homedir shell; do
|
||||||
|
if is_whitelisted "$username"; then
|
||||||
|
users+=( "$username:$homedir" )
|
||||||
|
fi
|
||||||
|
done < /etc/passwd
|
||||||
|
;;
|
||||||
|
|
||||||
|
blacklist)
|
||||||
|
while IFS=':' read -r username pass uid gid description homedir shell; do
|
||||||
|
if ! is_blacklisted "$username"; then
|
||||||
|
users+=( "$username:$homedir" )
|
||||||
|
fi
|
||||||
|
done < /etc/passwd
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
runtime_config() {
|
||||||
|
config='/etc/userrc.conf'
|
||||||
|
cfg_logdir='/tmp/userrc'
|
||||||
|
|
||||||
|
while (( $# )); do
|
||||||
|
case "$1" in
|
||||||
|
(-c) config="$2"; shift;;
|
||||||
|
(-l) logdir="$2"; shift;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -f "$config" ]]; then
|
||||||
|
source "$config" || { return $?; }
|
||||||
|
else
|
||||||
|
msg "Config not found at $config. Using defaults."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [[ "$logdir" ]]; then
|
||||||
|
logdir="$cfg_logdir"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -d "$logdir" ]]; then
|
||||||
|
mkdir -p "$logdir" || {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
|
||||||
|
chmod 700 "$logdir"
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
runtime_config
|
||||||
|
get_allowed_users
|
||||||
|
|
||||||
|
for u in "${users[@]}"; do
|
||||||
|
IFS=':' read -r username homedir <<< "$u"
|
||||||
|
|
||||||
|
if [[ "$homedir" && "$homedir" != '/' ]]; then
|
||||||
|
if [[ -f "$homedir/.config/rc.local" ]]; then
|
||||||
|
if [[ -x "$homedir/.config/rc.local" ]]; then
|
||||||
|
msg "Executing $homedir/.config/rc.local"
|
||||||
|
rc_run_wait
|
||||||
|
else
|
||||||
|
msg "$homedir/.config/rc.local exists, but is not executable"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
Loading…
Reference in New Issue
Block a user