#!/bin/sh
# @(#)popdom 0.14 -- virtual pop domain query/update utility
# 27 november 1997
# jbackus@plex.nl

PROG=`basename $0`
MAILHOME=/var/mailhome
V=$MAILHOME/virtualpopdomains
POPDB=poppasswd
POP_USER=alias
BREAK="-"

usage() {
echo 1>&2 "usage: $PROG domains [virtual]|list (a|u|c|q)|dirs|dbs|update"
echo 1>&2 \
"The list,dirs,dbs,update commands optionally take a list of domains."
exit 2
}

domains() {
T=$1
case $T in
  virtual) awk -F: "\$4 != \"\" {print \$1\":$POP_USER$BREAK\"\$4}" $V;;
  *)       awk -F: '{print $1}' $V;;
esac
}

dirs() {
D=$@
if test -z "$D"
then awk -F: '{print $3}' $V
else for d in $D; do awk -F: "\$1 == \"$d\" {print \$3}" $V; done
fi
}

list() {
T=$1; test -z "$T" && usage; shift
D=$@; test -z "$D" && D=`domains`
for d in $D; do mkpopdb -q -l $T $d; done
}

dbs() {
D=$@; test -z "$D" && D=`domains`
for d in $D; do echo $MAILHOME/`dirs $d`/$POPDB.db; done
}

update() {
D=$@; test -z "$D" && D=`domains`
cd $MAILHOME || exit 1
for d in $D; do
  (cd `dirs $d` &&
  (list c $d; echo "") | (umask 077; cdbmake $POPDB.cdb $POPDB.tmp))
done
}

test $# -eq 0 && usage
while test $# -gt 0
do
  ARG=$1; shift
  case $ARG in
    domains) domains $@; break;;
    dirs)    dirs $@; break;;
    list)    list $@;    break;;
    dbs)     dbs $@;     break;;
    update)  update $@;  break;;
    *) echo "$PROG: $ARG: invalid command"; usage;;
  esac
done

exit 0
