#!/bin/sh
#
# Copyright 2005 Paul Blazejowski and Zach Borgerding <zborgerd@gmail.com>
# Available under the terms of the GNU GPL.
#

NAME="pam"
VERSION="0.80"
REVISION="2"
REDHAT_VERSION="1"
PKG_SOURCEURL='http://www.kernel.org/pub/linux/libs/pam/pre/library/Linux-PAM-0.80.tar.bz2'
PKG_SOURCEMD5=''
PKG_PATCH[0]="pam-0.77-lastlog-utmp.patch"
PKG_PATCH[1]="pam-0.75-sgml2latex.patch"
PKG_PATCH[2]="pam-0.77-dbpam.patch"
PKG_PATCH[3]="pam-0.77-audit.patch"
PKG_PATCH[4]="pam-0.80-install-perms.patch"
PKG_PATCH[5]="pam-0.80-pie.patch"
PKG_PATCH[6]="pam-0.80-cleanup.patch"
PKG_PATCH[7]="pam-0.79-userdb-test-null.patch"
PKG_PATCH[8]="pam-0.78-pam_console-static-glib.patch"
PKG_PATCH[9]="pam-0.79-loginuid-req-audit.patch"
PKG_PATCH[10]="50-default.perms.patch"
PKG_PATCH[11]="console.handlers.patch"

. $DLG_ROOT/config
. $DLG_ROOT/SCRIPTS/dropline-functions.sh

cflags
cxxflags
export CFLAGS="-fPIC"
PKG_NEEDSTATIC=1
prepare

spewdo "cd $PKG_SRCROOT"
findpatch filename pam-redhat-$VERSION-$REDHAT_VERSION.tar.bz2
spewdo "tar xjf $filename"

echo "Yay for patches!"

applypatch 0 1
applypatch 1 1
applypatch 2 1
applypatch 3 1
applypatch 4 1
applypatch 5 1
applypatch 6 1
applypatch 7 1
applypatch 8 1
applypatch 9 1
applypatch 10 1
applypatch 11 1



for readme in modules/pam_*/README ; do
        cp -f ${readme} doc/txts/README.`dirname ${readme} | sed -e 's|^modules/||'`
done

analyzesource

# Non threaded build of BDB
(
TOPDIR=$DLG_WORKROOT/pam-instroot
createdir $TOPDIR
PKG_BUILDDIR="build_unix"
PKG_SRCREL="../dist"

NAME="db"
VERSION="4.3.27"
PKG_SOURCEURL='http://downloads.sleepycat.com/$NAME-$VERSION.tar.gz'
PKG_PATCH[0]="http://www.sleepycat.com/update/4.3.27/patch.4.3.27.1"
PKG_PATCH[1]="http://www.sleepycat.com/update/4.3.27/patch.4.3.27.2"
PKG_PATCH[2]="http://www.sleepycat.com/update/4.3.27/patch.4.3.27.3"

. $DLG_ROOT/config
. $DLG_ROOT/SCRIPTS/dropline-functions.sh

cflags
cxxflags
PKG_NEEDSTATIC=1
prepare
applypatch 0 0
applypatch 1 0
applypatch 2 0
analyzesource
spewdo "echo db_cv_mutex=UNIX/fcntl > $PKG_WORKROOT/$NAME-$VERSION/$PKG_BUILDDIR/config.cache"
configure -C \
	--disable-compat185 \
        --disable-cxx \
        --disable-diagnostic \
        --disable-dump185 \
        --disable-java \
        --disable-rpc \
        --disable-tcl \
        --disable-shared \
        --with-pic \
        --with-uniquename=_pam \
        --with-mutex="UNIX/fcntl" \
        --prefix=$TOPDIR \
        --includedir=$TOPDIR/include \
        --libdir=$TOPDIR/lib	
make
PKG_DESTDIRVAR=$TOPDIR
makeinstall
cleanup
)

# libpwdb
(
TOPDIR=$DLG_WORKROOT/pam-instroot

NAME="pwdb"
VERSION="0.62"
PKG_SOURCEURL='http://gentoo.osuosl.org/distfiles/$NAME-$VERSION.tar.gz'

. $DLG_ROOT/config
. $DLG_ROOT/SCRIPTS/dropline-functions.sh

cflags
cxxflags
PKG_NEEDSTATIC=1
prepare
analyzesource
# a cheat to get it installed in $TOPDIR
make DESTDIR=$TOPDIR INCLUDED=$TOPDIR/include/pwdb LIBDIR=$TOPDIR/lib LDCONFIG=: install

# oh yeah, get rid of the shared libs in $TOPDIR/lib coz we're not using them
spewdo "rm $TOPDIR/lib/*.so*"

# Install the pwdb configuration file.
install -m644 $PKG_WORKROOT/$NAME-$VERSION/conf/pwdb.conf $TOPDIR
cleanup
)

# And finally we're building PAM, yay!

TOPDIR=$DLG_WORKROOT/pam-instroot
CPPFLAGS=-I$TOPDIR/include ; export CPPFLAGS
export LIBNAME="lib"
LDFLAGS=-L$TOPDIR/lib ; export LDFLAGS
# autoconf is needed due to our pacheroos
autoconf
configure --libdir=/lib \
        --prefix=/ \
        --enable-static-libpam \
        --enable-fakeroot=$PKG_STAGEROOT \
        --enable-isadir=../../lib/security
        
# Python stuff in docs gives sandbox problems
sed -i -e 's|modules doc examples|modules|' Makefile
	
sed -i -e "s:^HAVE_NDBM_H=yes:HAVE_NDBM_H=no:" \
			-e "s:^HAVE_LIBNDBM=yes:HAVE_LIBNDBM=no:" \
			Make.Rules
make
make FAKEROOT=$PKG_STAGEROOT LDCONFIG="" install

# Forcibly strip binaries.
#spewdo "mv $PKG_STAGEROOT$PKG_PREFIX/sbin $PKG_STAGEROOT" #We can't do this because it causes some of the modules to flip out.
spewdo "strip $PKG_STAGEROOT$PKG_PREFIX/sbin/*"

createdir $PKG_STAGEROOT/etc/pam.d
findpatch filename other.pamd
spewdo "cp $filename $PKG_STAGEROOT/etc/pam.d/other"

findpatch filename system-auth.pamd
spewdo "cp $filename $PKG_STAGEROOT/etc/pam.d/system-auth"

# Install man pages.
install -d -m 755 $PKG_STAGEROOT$PKG_PREFIX/man/man{3,5,8}
install -m 644 doc/man/*.3 $PKG_STAGEROOT$PKG_PREFIX/man/man3
install -m 644 doc/man/*.8 $PKG_STAGEROOT$PKG_PREFIX/man/man8

# Fix man pages
echo "Fixing man pages"
spewdo "cp -rf $PKG_STAGEROOT/man $PKG_STAGEROOT$PKG_PREFIX/"
spewdo "rm -rf $PKG_STAGEROOT/man"

# Fix lib symlinks
if [ ! -d $PKG_STAGEROOT$PKG_PREFIX/lib ]; then
	mkdir -p $PKG_STAGEROOT$PKG_PREFIX/lib
fi
( cd $PKG_STAGEROOT/lib
  for libname in pam pamc pam_misc
  do
	rm lib${libname}.so
	ln -s lib${libname}.so.${VERSION} lib${libname}.so
	ln -s lib${libname}.so.${VERSION} lib${libname}.so.0
	mv lib${libname}.a $PKG_STAGEROOT$PKG_PREFIX/lib
  done
)

( cd $PKG_STAGEROOT$PKG_PREFIX/lib
  for libname in pam pamc pam_misc
  do
	rm lib${libname}.so
	ln -s ../../lib/lib${libname}.so.${VERSION} lib${libname}.so
	ln -s ../../lib/lib${libname}.so.${VERSION} lib${libname}.so.0
  done
)

#Let's first remove that pam_selinux module dir because it breaks things in 0.80
echo "Removing pam_selinux"
spewdo "rm -rf $PKG_BUILDROOT/modules/pam_selinux"

# Make sure every module subdirectory gave us a module.  Yes, this is hackish.
for dir in modules/pam_* ; do
if [ -d ${dir} ] ; then
        if ! ls -1 $PKG_STAGEROOT/lib/security/`basename ${dir}`*.so ; then
		echo ERROR `basename ${dir}` did not build a module.
                die "Module missing"
        fi
fi
done

# Install the pwdb configuration file.
spewdo "mv $TOPDIR/pwdb.conf $PKG_STAGEROOT/etc"

# Remove unwanted files from the buildroot.
spewdo "rm $PKG_STAGEROOT/lib/security/pam_radius.so"
spewdo "rm -f doc/txts/README.pam_radius"

# Duplicate doc file sets.
spewdo "rm -fr $PKG_STAGEROOT$PKG_PREFIX/doc/Linux-PAM $PKG_STAGEROOT$PKG_PREFIX/share/doc/pam"
                                                                                
# Check for module problems.  Specifically, check that every module we just
# installed can actually be loaded by a minimal PAM-aware application.
for module in $PKG_STAGEROOT/lib/security/pam*.so ; do
        if ! $DLG_COREREPOS/$NAME/dlopen.sh -lpam -ldl ${module} ; then
                die "Could not load module"
        fi
# And for good measure, make sure that none of the modules pull in threading
# libraries, which if loaded in a non-threaded application, can cause Very
# Bad Things to happen.
        if env LD_PRELOAD=$PKG_STAGEROOT/lib/libpam.so ldd -r ${module} | fgrep -q libpthread ; then
                die "Module pulled in threading lib"
        fi
done

tidydocumentation
analyzebinaries
finalizepackage
packagize
removedir $TOPDIR
cleanup
