Browse Source

New package: pam This is the new wrapper package for PAM in the same style as our x11 package.

Ralf S. Engelschall 24 years ago
parent
commit
290a2a6ad8
3 changed files with 381 additions and 0 deletions
  1. 167 0
      pam/pam.spec
  2. 195 0
      pam/pamtool
  3. 19 0
      pam/rc.pam

+ 167 - 0
pam/pam.spec

@@ -0,0 +1,167 @@
+##
+##  pam.spec -- OpenPKG RPM Specification
+##  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. 
+##  
+
+#   package information
+Name:         pam
+Summary:      Information Resource for PAM
+URL:          -
+Vendor:       The OpenPKG Project
+Packager:     The OpenPKG Project
+Distribution: OpenPKG [EXP]
+Group:        Meta
+License:      PD
+Version:      20011228
+Release:      20020206
+
+#   list of sources
+Source0:      pamtool
+Source1:      rc.pam
+
+#   build information
+Prefix:       %{l_prefix}
+BuildRoot:    %{l_buildroot}
+BuildPreReq:  OpenPKG, openpkg >= 20020206
+PreReq:       OpenPKG, openpkg >= 20020206
+AutoReq:      no
+AutoReqProv:  no
+Provides:     X11
+
+%description
+    This is the information resource package for PAM.
+
+%prep
+
+%build
+
+%install
+    rm -rf $RPM_BUILD_ROOT
+
+    pam_cfgloc=""
+    pam_modpfx=""
+    pam_incdir=""
+    pam_libdir=""
+
+    #    search for configuration location
+    for cfgloc in \
+        /etc/pam.d \
+        /etc/pam.conf \
+    ; do
+        if [ -f $cfgloc -o -d $cfgloc ]; then
+            pam_cfgloc="$cfgloc"
+            break
+        fi
+    done
+
+    #   search for module prefix
+    if [ -d $pam_cfgloc ]; then
+        mod=`cat $pam_cfgloc/* 2>/dev/null | grep '^#*[ 	]*other' | head -1 | awk '{ print $3; }'`
+    elif [ -f $pam_cfgloc ]; then
+        mod=`cat $pam_cfgloc 2>/dev/null | grep '^#*[ 	]*other' | head -1 | awk '{ print $4; }'`
+    else
+        mod=""
+    fi
+    case $mod in
+        pam_*    ) pam_modpfx="" ;;
+        /*/pam_* ) pam_modpfx=`echo $mod | sed 's;^\(/.*/\)pam_[^/]*$;\1;'` ;;
+    esac
+
+    #   search for include directory
+    for incdir in \
+        /usr/include \
+        /usr/local/include \
+        /opt/include \
+    ; do
+        if [ -f "$incdir/security/pam_appl.h" ]; then
+            pam_incdir="$incdir"
+            break
+        fi
+    done
+
+    #   search for library directory
+    for libdir in \
+        /lib \
+        /usr/lib \
+        /usr/local/lib \
+        /opt/lib \
+    ; do
+        for ext in a so sl; do
+            if [ -f "$libdir/libpam.$ext" ]; then
+                pam_libdir="$libdir"
+                break
+            fi
+        done
+        if [ ".$pam_libdir" != . ]; then
+            break
+        fi
+    done
+
+    #   make sure everything was found
+    if [ ".$pam_cfgloc" = . ] ||\
+       [ ".$pam_incdir" = . ] ||\
+       [ ".$pam_libdir" = . ]; then
+       echo "************************************************************"
+       echo "**  ERROR: SOME PAM INFORMATION COULD NOT BE DETERMINED!!"
+       echo "**  ERROR: SOME PAM INFORMATION COULD NOT BE DETERMINED!!"
+       echo "**"
+       echo "**  We found out:"
+       echo "**    PAM Config  Location:  \"${pam_cfgloc}\""
+       echo "**    PAM Module  Prefix:    \"${pam_modpfx}\""
+       echo "**    PAM Include Directory: \"${pam_incdir}\""
+       echo "**    PAM Library Directory: \"${pam_libdir}\""
+       echo "**"
+       echo "**  Unfortunately, some information is missing here."
+       echo "**"
+       echo "**  ERROR: SOME PAM INFORMATION COULD NOT BE DETERMINED!!"
+       echo "**  ERROR: SOME PAM INFORMATION COULD NOT BE DETERMINED!!"
+       echo "************************************************************"
+       exit 1
+    fi
+
+    #   install PAM tool
+    %{l_shtool} mkdir -f -p -m 755 \
+        $RPM_BUILD_ROOT%{l_prefix}/sbin
+    %{l_shtool} install -c -m 755 \
+        -e 's;@l_prefix@;%{l_prefix};g' \
+        -e 's;@l_target@;%{l_target};g' \
+        %{SOURCE pamtool} $RPM_BUILD_ROOT%{l_prefix}/sbin/
+
+    #   install rc file
+    %{l_shtool} mkdir -f -p -m 755 \
+        $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/
+    %{l_shtool} install -c -m 755 \
+        -e 's;@l_prefix@;%{l_prefix};g' \
+        -e "s;@pam_cfgloc@;${pam_cfgloc};g" \
+        -e "s;@pam_modpfx@;${pam_modpfx};g" \
+        -e "s;@pam_incdir@;${pam_incdir};g" \
+        -e "s;@pam_libdir@;${pam_libdir};g" \
+        %{SOURCE rc.pam} $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/
+
+    %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT %{l_files_std}
+
+%files -f files
+
+%clean
+    rm -rf $RPM_BUILD_ROOT
+

+ 195 - 0
pam/pamtool

@@ -0,0 +1,195 @@
+#!/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
+

+ 19 - 0
pam/rc.pam

@@ -0,0 +1,19 @@
+#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc
+##
+##  rc.pam -- Run-Commands for PAM
+##
+
+%config
+    pam_enable="yes"
+    pam_cfgloc='@pam_cfgloc@'
+    pam_modpfx='@pam_modpfx@'
+    pam_incdir='@pam_incdir@'
+    pam_libdir='@pam_libdir@'
+
+%info
+    echo "PAM Enabled:           ${pam_enable}"
+    echo "PAM Config  Location:  ${pam_cfgloc}"
+    echo "PAM Module  Prefix:    ${pam_modpfx}"
+    echo "PAM Include Directory: ${pam_incdir}"
+    echo "PAM Library Directory: ${pam_libdir}"
+