pam/pamtool

changeset 480
332ec562ab2e
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/pam/pamtool	Sun Aug 05 22:52:01 2012 +0200
     1.3 @@ -0,0 +1,201 @@
     1.4 +#!/bin/sh
     1.5 +##
     1.6 +##  pamtool -- OpenPKG PAM Auxiliary Tool
     1.7 +##  Copyright (c) 2000-2007 OpenPKG Foundation e.V. <http://openpkg.net/>
     1.8 +##  Copyright (c) 2000-2007 Ralf S. Engelschall <http://engelschall.com/>
     1.9 +##
    1.10 +##  Permission to use, copy, modify, and distribute this software for
    1.11 +##  any purpose with or without fee is hereby granted, provided that
    1.12 +##  the above copyright notice and this permission notice appear in all
    1.13 +##  copies.
    1.14 +##
    1.15 +##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    1.16 +##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    1.17 +##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
    1.18 +##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
    1.19 +##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    1.20 +##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    1.21 +##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    1.22 +##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    1.23 +##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    1.24 +##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    1.25 +##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    1.26 +##  SUCH DAMAGE.
    1.27 +##
    1.28 +
    1.29 +#   program name, version and date
    1.30 +progname="pamtool"
    1.31 +progvers="0.9.0"
    1.32 +progdate="11-Mar-2002"
    1.33 +
    1.34 +#   the OpenPKG instance information
    1.35 +l_prefix="@l_prefix@"
    1.36 +l_platform="@l_platform@"
    1.37 +
    1.38 +#   default parameters
    1.39 +verbose=no
    1.40 +help=no
    1.41 +add=no
    1.42 +remove=no
    1.43 +smart=no
    1.44 +name=""
    1.45 +id=""
    1.46 +
    1.47 +#   iterate over argument line
    1.48 +while [ $# -gt 0 ]; do
    1.49 +    opt=$1
    1.50 +    case $opt in
    1.51 +        -*=*) arg=`echo "$opt" | sed 's/^[-_a-zA-Z0-9]*=//'` ;;
    1.52 +           *) arg='' ;;
    1.53 +    esac
    1.54 +    case $opt in
    1.55 +        -v|--verbose ) verbose=yes   ;;
    1.56 +        -h|--help    ) help=yes      ;;
    1.57 +        -a|--add     ) add=yes       ;;
    1.58 +        -r|--remove  ) remove=yes    ;;
    1.59 +        -s|--smart   ) smart=yes     ;;
    1.60 +        --name=*     ) name=$arg     ;;
    1.61 +        --id=*       ) id=$arg       ;;
    1.62 +        -*           ) help="Invalid option \`$opt'"; break ;;
    1.63 +        *            ) break         ;;
    1.64 +    esac
    1.65 +    shift
    1.66 +done
    1.67 +if [ ".$help" = .yes ]; then
    1.68 +    echo "$progname --add|--remove --name=NAME [--smart] [--id=ID]";
    1.69 +    exit 0
    1.70 +fi
    1.71 +if [ ".$add" = .no -a ".$remove" = .no ]; then
    1.72 +    echo "$progname:ERROR: either option -a/--add or -r/--remove have to be specified" 1>&2
    1.73 +    exit 1
    1.74 +fi
    1.75 +if [ ".$add" = .yes -a ".$remove" = .yes ]; then
    1.76 +    echo "$progname:ERROR: option -a/--add and -r/--remove cannot be specified in parallel" 1>&2
    1.77 +    exit 1
    1.78 +fi
    1.79 +if [ ".$name" = . ]; then
    1.80 +    echo "$progname:ERROR: option --name has to be specified" 1>&2
    1.81 +    exit 1
    1.82 +fi
    1.83 +if [ ".$id" = . ]; then
    1.84 +    id="$l_prefix:$name"
    1.85 +fi
    1.86 +
    1.87 +
    1.88 +#   find a reasonable temporary location
    1.89 +if [ ".$TMPDIR" != . ]; then
    1.90 +    tmpdir="$TMPDIR"
    1.91 +elif [ ".$TEMPDIR" != . ]; then
    1.92 +    tmpdir="$TEMPDIR"
    1.93 +else
    1.94 +    tmpdir="/tmp"
    1.95 +fi
    1.96 +tmpfile="$tmpdir/pamtool.$$.tmp"
    1.97 +
    1.98 +#   determine PAM information from OpenPKG configuration
    1.99 +if [ ! -f "$l_prefix/etc/rc" ]; then
   1.100 +    echo "$progname:$ERROR: OpenPKG run-command facility not found under $l_prefix" 1>&2
   1.101 +    exit 1
   1.102 +fi
   1.103 +pam_enable=`$l_prefix/bin/openpkg rc --query pam_enable`
   1.104 +pam_cfgloc=`$l_prefix/bin/openpkg rc --query pam_cfgloc`
   1.105 +pam_modpfx=`$l_prefix/bin/openpkg rc --query pam_modpfx`
   1.106 +
   1.107 +#   perform operation
   1.108 +if [ ! -f "$l_prefix/lib/openpkg/rpmtool" ]; then
   1.109 +    echo "$progname:$ERROR: OpenPKG rpmtool not found under $l_prefix/sbin/" 1>&2
   1.110 +    exit 1
   1.111 +fi
   1.112 +rpmtool_config="$l_prefix/lib/openpkg/rpmtool config"
   1.113 +if [ ".$smart" = .yes ]; then
   1.114 +    rpmtool_config="$rpmtool_config -s"
   1.115 +fi
   1.116 +if [ ".$add" = .yes ]; then
   1.117 +    #
   1.118 +    #   add a PAM entry
   1.119 +    #
   1.120 +
   1.121 +    #   determine platform specific PAM entries
   1.122 +    ( case "$l_platform" in
   1.123 +          *-freebsd* ) 
   1.124 +              echo "auth     sufficient ${pam_modpfx}pam_opie.so no_warn no_fake_prompts"
   1.125 +              echo "auth     requisite  ${pam_modpfx}pam_opieaccess.so no_warn allow_local"
   1.126 +              echo "auth     required   ${pam_modpfx}pam_unix.so try_first_pass"
   1.127 +              echo "account  required   ${pam_modpfx}pam_unix.so"
   1.128 +              echo "password required   ${pam_modpfx}pam_permit.so"
   1.129 +              echo "session  required   ${pam_modpfx}pam_permit.so"
   1.130 +              ;;
   1.131 +          *-linux* ) 
   1.132 +              echo "auth     required   ${pam_modpfx}pam_unix_auth.so shadow nodelay"
   1.133 +              echo "auth     required   ${pam_modpfx}pam_nologin.so"
   1.134 +              echo "account  required   ${pam_modpfx}pam_unix_acct.so"
   1.135 +              echo "password required   ${pam_modpfx}pam_unix_passwd.so shadow nullok use_authtok" 
   1.136 +              echo "session  required   ${pam_modpfx}pam_unix_session.so" 
   1.137 +              echo "session  required   ${pam_modpfx}pam_limits.so"
   1.138 +              ;;
   1.139 +          *-sunos* ) 
   1.140 +              echo "auth     required   ${pam_modpfx}pam_unix.so try_first_pass"
   1.141 +              echo "account  required   ${pam_modpfx}pam_unix.so"
   1.142 +              echo "password required   ${pam_modpfx}pam_unix.so" 
   1.143 +              echo "session  required   ${pam_modpfx}pam_unix.so" 
   1.144 +              ;;
   1.145 +          *-aix* ) 
   1.146 +              echo "auth     required   ${pam_modpfx}pam_aix try_first_pass"
   1.147 +              echo "account  required   ${pam_modpfx}pam_aix"
   1.148 +              echo "password required   ${pam_modpfx}pam_aix" 
   1.149 +              echo "session  required   ${pam_modpfx}pam_aix" 
   1.150 +              ;;
   1.151 +          * ) 
   1.152 +              echo "auth     required   ${pam_modpfx}pam_unix.so try_first_pass"
   1.153 +              echo "account  required   ${pam_modpfx}pam_unix.so"
   1.154 +              echo "password required   ${pam_modpfx}pam_unix.so" 
   1.155 +              echo "session  required   ${pam_modpfx}pam_unix.so" 
   1.156 +              ;;
   1.157 +      esac
   1.158 +    ) >$tmpfile
   1.159 +     
   1.160 +    #   add application name prefix if using combined configuration
   1.161 +    if [ -f $pam_cfgloc ]; then
   1.162 +        sed -e "s;^;$name ;" <$tmpfile >$tmpfile.n
   1.163 +        mv $tmpfile.n $tmpfile
   1.164 +    fi
   1.165 +    
   1.166 +    #   create entry
   1.167 +    if [ -f $pam_cfgloc ]; then
   1.168 +        if [ ".$verbose" = .yes ]; then
   1.169 +            echo "++ adding entry to $pam_cfgloc"
   1.170 +        fi
   1.171 +        $rpmtool_config -a -i $id $pam_cfgloc <$tmpfile || exit $?
   1.172 +    elif [ -d $pam_cfgloc ]; then
   1.173 +        if [ ".$verbose" = .yes ]; then
   1.174 +            echo "++ adding entry to $pam_cfgloc/$name"
   1.175 +        fi
   1.176 +        $rpmtool_config -a -i $id $pam_cfgloc/$name <$tmpfile || exit $?
   1.177 +    fi
   1.178 +
   1.179 +elif [ ".$remove" = .yes ]; then
   1.180 +    #
   1.181 +    #   remove a PAM entry
   1.182 +    #
   1.183 +
   1.184 +    #   remove entry
   1.185 +    if [ -f $pam_cfgloc ]; then
   1.186 +        if [ ".$verbose" = .yes ]; then
   1.187 +            echo "++ removing entry from $pam_cfgloc"
   1.188 +        fi
   1.189 +        $rpmtool_config -r -i $id $pam_cfgloc || exit $?
   1.190 +    elif [ -d $pam_cfgloc ]; then
   1.191 +        if [ ".$verbose" = .yes ]; then
   1.192 +            echo "++ removing entry from $pam_cfgloc/$name"
   1.193 +        fi
   1.194 +        $rpmtool_config -r -i $id $pam_cfgloc/$name || exit $?
   1.195 +        if [ ! -s $pam_cfgloc/$name ]; then
   1.196 +            rm -f $pam_cfgloc/$name >/dev/null 2>&1 || true
   1.197 +        fi
   1.198 +    fi
   1.199 +fi
   1.200 +
   1.201 +#   cleanup
   1.202 +rm -f $tmpfile
   1.203 +exit 0
   1.204 +

mercurial