#!/bin/sh
##
## Setup a supervised logger(1) service directory
## Copyright (c) 2009 SATOH Fumiyasu @ OSS Technology, Inc.
##               <http://www.osstech.co.jp/>
##
## License: GNU General Public License version 2 or later
## Date: 2009-08-13, since 2009-08-13
##

set -u
umask 0022

pdie()
{
  echo "$0: ERROR: $*" 1>&2
  exit 1
}

## Options
## ======================================================================

log_env="
  ARGV0
  USER
  PRIORITY
  TAG
"

if [ $# -ne 2 ]; then
  echo "Usage: $0 /LOGDIR LOGUSER" 1>&2
  exit 1
fi

log_dir="$1"; shift
log_user="$1"; shift

## ======================================================================

log_id=`id "$log_user"`
if [ -z "$log_id" ]; then
  pdie "Log user not found: $log_user"
fi
log_group=`echo "$log_id" |sed -n 's/^[^=]*=[^=]*=[0-9]*(\([^)]*\)).*$/\1/p'`
if [ -z "$log_group" ]; then
  pdie "Primary group name not found for log user: $log_user"
fi

## Create multilog directory
## ======================================================================

[ -d "$log_dir" ] || mkdir "$log_dir" || exit 1
[ -d "$log_dir/env" ] || mkdir "$log_dir/env" || exit 1
[ -f "$log_dir/status" ] || {
  touch "$log_dir/status" || exit 1
  chown "$log_user:$log_group" "$log_dir/status" || exit 1
}

for env in $log_env; do
  [ -f "$log_dir/env/$env" ] || touch "$log_dir/env/$env" || exit 1
done
[ -s "$log_dir/env/USER" ] \
  || echo "$log_user" >"$log_dir/env/USER" || exit 1
[ -s "$log_dir/env/PRIORITY" ] \
  || echo "daemon.notice" >"$log_dir/env/PRIORITY" || exit 1

cat <<'EOT_LOG_RUN' >"$log_dir/run" || exit 1
#!/bin/sh
exec 2>&1
exec envdir ./env sh -c '
  exec \
    setuidgid "$USER" \
    argv0 \
    logger \
      "${ARGV0:-logger:`pwd`}" \
      ${PRIORITY:+"-p$PRIORITY"} \
      -t ${TAG:-`cd ..; pwd`} \
'
EOT_LOG_RUN
chmod 0755 "$log_dir/run" || exit 1

exit 0

