فهرست منبع

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

Ralf S. Engelschall 24 سال پیش
والد
کامیت
290a2a6ad8
3فایلهای تغییر یافته به همراه381 افزوده شده و 0 حذف شده
  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}"
+