123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- #!/bin/sh
- ##
- ## pamtool -- PAM Auxiliary Tool
- ## Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH
- ## Copyright (c) 2000-2002 The OpenPKG Project <http://www.openpkg.org/>
- ## Copyright (c) 2000-2002 Ralf S. Engelschall <rse@engelschall.com>
- ##
- ## Permission to use, copy, modify, and distribute this software for
- ## any purpose with or without fee is hereby granted, provided that
- ## the above copyright notice and this permission notice appear in all
- ## copies.
- ##
- ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
- ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- ## SUCH DAMAGE.
- ##
- # program name, version and date
- progname="pamtool"
- progvers="0.9.0"
- progdate="11-Mar-2002"
- # the OpenPKG instance information
- l_prefix="@l_prefix@"
- l_target="@l_target@"
- # default parameters
- verbose=no
- help=no
- add=no
- remove=no
- smart=no
- name=""
- id=""
- # iterate over argument line
- while [ $# -gt 0 ]; do
- opt=$1
- case $opt in
- -*=*) arg=`echo "$opt" | sed 's/^[-_a-zA-Z0-9]*=//'` ;;
- *) arg='' ;;
- esac
- case $opt in
- -v|--verbose ) verbose=yes ;;
- -h|--help ) help=yes ;;
- -a|--add ) add=yes ;;
- -r|--remove ) remove=yes ;;
- -s|--smart ) smart=yes ;;
- --name=* ) name=$arg ;;
- --id=* ) id=$arg ;;
- -* ) help="Invalid option \`$opt'"; break ;;
- * ) break ;;
- esac
- shift
- done
- if [ ".$help" = .yes ]; then
- echo "$progname --add|--remove --name=NAME [--smart] [--id=ID]";
- exit 0
- fi
- if [ ".$add" = .no -a ".$remove" = .no ]; then
- echo "$progname:ERROR: either option -a/--add or -r/--remove have to be specified" 1>&2
- exit 1
- fi
- if [ ".$add" = .yes -a ".$remove" = .yes ]; then
- echo "$progname:ERROR: option -a/--add and -r/--remove cannot be specified in parallel" 1>&2
- exit 1
- fi
- if [ ".$name" = . ]; then
- echo "$progname:ERROR: option --name has to be specified" 1>&2
- exit 1
- fi
- if [ ".$id" = . ]; then
- id="$l_prefix:$name"
- fi
- # find a reasonable temporary location
- if [ ".$TMPDIR" != . ]; then
- tmpdir="$TMPDIR"
- elif [ ".$TEMPDIR" != . ]; then
- tmpdir="$TEMPDIR"
- else
- tmpdir="/tmp"
- fi
- tmpfile="$tmpdir/pamtool.$$.tmp"
- # determine PAM information from OpenPKG configuration
- if [ ! -f "$l_prefix/etc/rc" ]; then
- echo "$progname:$ERROR: OpenPKG run-command facility not found under $l_prefix" 1>&2
- exit 1
- fi
- pam_enable=`$l_prefix/etc/rc --query pam_enable`
- pam_cfgloc=`$l_prefix/etc/rc --query pam_cfgloc`
- pam_modpfx=`$l_prefix/etc/rc --query pam_modpfx`
- # perform operation
- if [ ! -f "$l_prefix/sbin/rpmtool" ]; then
- echo "$progname:$ERROR: OpenPKG rpmtool not found under $l_prefix/sbin/" 1>&2
- exit 1
- fi
- rpmtool_config="$l_prefix/sbin/rpmtool config"
- if [ ".$smart" = .yes ]; then
- $rpmtool_config="$rpmtool_config -s"
- fi
- if [ ".$add" = .yes ]; then
- #
- # add a PAM entry
- #
- # determine platform specific PAM entries
- ( case "$l_target" in
- *-freebsd* )
- echo "auth sufficient ${pam_modpfx}pam_skey.so"
- echo "auth required ${pam_modpfx}pam_unix.so try_first_pass"
- echo "account required ${pam_modpfx}pam_unix.so"
- echo "password required ${pam_modpfx}pam_permit.so"
- echo "session required ${pam_modpfx}pam_permit.so"
- ;;
- *-linux* )
- echo "auth required ${pam_modpfx}pam_unix_auth.so shadow nodelay"
- echo "auth required ${pam_modpfx}pam_nologin.so"
- echo "account required ${pam_modpfx}pam_unix_acct.so"
- echo "password required ${pam_modpfx}pam_unix_passwd.so shadow nullok use_authtok"
- echo "session required ${pam_modpfx}pam_unix_session.so"
- echo "session required ${pam_modpfx}pam_limits.so"
- ;;
- *-solaris* )
- echo "auth required ${pam_modpfx}pam_unix.so try_first_pass"
- echo "account required ${pam_modpfx}pam_unix.so"
- echo "password required ${pam_modpfx}pam_unix.so"
- echo "session required ${pam_modpfx}pam_unix.so"
- ;;
- * )
- echo "auth required ${pam_modpfx}pam_unix.so try_first_pass"
- echo "account required ${pam_modpfx}pam_unix.so"
- echo "password required ${pam_modpfx}pam_unix.so"
- echo "session required ${pam_modpfx}pam_unix.so"
- ;;
- esac
- ) >$tmpfile
-
- # add application name prefix if using combined configuration
- if [ -f $pam_cfgloc ]; then
- sed -e "s;^;$name ;" <$tmpfile >$tmpfile.n
- mv $tmpfile.n $tmpfile
- fi
-
- # create entry
- if [ -f $pam_cfgloc ]; then
- if [ ".$verbose" = .yes ]; then
- echo "++ adding entry to $pam_cfgloc"
- fi
- $rpmtool_config -a -i $id $pam_cfgloc <$tmpfile || exit $?
- elif [ -d $pam_cfgloc ]; then
- if [ ".$verbose" = .yes ]; then
- echo "++ adding entry to $pam_cfgloc/$name"
- fi
- $rpmtool_config -a -i $id $pam_cfgloc/$name <$tmpfile || exit $?
- fi
- elif [ ".$remove" = .yes ]; then
- #
- # remove a PAM entry
- #
- # remove entry
- if [ -f $pam_cfgloc ]; then
- if [ ".$verbose" = .yes ]; then
- echo "++ removing entry from $pam_cfgloc"
- fi
- $rpmtool_config -r -i $id $pam_cfgloc || exit $?
- elif [ -d $pam_cfgloc ]; then
- if [ ".$verbose" = .yes ]; then
- echo "++ removing entry from $pam_cfgloc/$name"
- fi
- $rpmtool_config -r -i $id $pam_cfgloc/$name || exit $?
- if [ ! -s $pam_cfgloc/$name ]; then
- rm -f $pam_cfgloc/$name >/dev/null 2>&1 || true
- fi
- fi
- fi
- # cleanup
- rm -f $tmpfile
- exit 0
|