Browse Source

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

master
parent
commit
290a2a6ad8
  1. 167
      pam/pam.spec
  2. 195
      pam/pamtool
  3. 19
      pam/rc.pam

167
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
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
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}"
Loading…
Cancel
Save