#!/bin/bash
#
# Copyright 2012 Paul Blazejowski and Zach Borgerding <zborgerd@gmail.com>
# Available under the terms of the GNU GPL.
# Special thanks to saxa for his help with this package.
# Modified by Eugene Wissner <belka.ew@gmail.com>
#

NAME="shadow"
VERSION="4.1.4.3"
REVISION="2"

PKG_SOURCEURL='http://pkg-shadow.alioth.debian.org/releases/$NAME-$VERSION.tar.bz2'

PKG_PATCH[0]='login.defs'
PKG_PATCH[1]='shadow-4.1.4.3-slackwareizeuseradd.diff'

# Cribbed from Slackware 13.37 sources.
PKG_PATCH[2]="adduser"

# Still need this two, for certain.
PKG_PATCH[3]="login.pamd"
PKG_PATCH[4]="passwd.pamd"

# Official slackware's patches from source/a/shadow/patches/.
PKG_PATCH[5]="r3054.diff"
PKG_PATCH[6]="r3055.diff"
PKG_PATCH[7]="r3060.diff"
PKG_PATCH[8]="r3062.diff"
PKG_PATCH[9]="r3096.diff"
PKG_PATCH[10]="r3194.diff"
PKG_PATCH[11]="shadow.man.nodups.diff"

. $DLG_ROOT/etc/config
. $DLG_ROOT/lib/dl-base

PKG_DOCFILES="${PKG_DOCFILES:+$PKG_DOCFILES }doc/{HOWTO,README*,WISHLIST,*.txt}"

cflags -O2 -fstack-protector-all
prepare

applypatch 1 1
applypatch 5 0
applypatch 6 0
applypatch 7 0
applypatch 8 0
applypatch 9 0
applypatch 10 0
applypatch 11 0

analyzesource

# First round: PAM-less binaries
configure --disable-shared \
	--without-selinux \
	--without-audit \
	--without-libpam
make
makeinstall

# Copy PAM/Slackware login configuration.
findpatch filename ${PKG_PATCH[0]}
install -m 644 $filename $PKG_STAGEROOT$PKG_SYSCONFDIR/login.defs
configfile $PKG_SYSCONFDIR/login.defs

# Kludge!
configfile $PKG_SYSCONFDIR/login.access
configfile $PKG_SYSCONFDIR/limits

# /bin/groups is provided by coreutils.
spewdo "rm -f $PKG_STAGEROOT/bin/groups"
spewdo "find $PKG_STAGEROOT$PKG_PREFIX/share/man -name groups.1 -exec rm {} \;"

# Add the empty faillog log file.
createdir $PKG_STAGEROOT/var/log
install -m 640 /dev/null $PKG_STAGEROOT/var/log/faillog
configfile /var/log/faillog

# This will *always* be called 'adduser' so no $PKG_PATCH ref needed.
findpatch filename adduser
install -m 755 $filename $PKG_STAGEROOT$PKG_PREFIX/sbin/adduser

# Slackware puts these in a different location than the default
for filename in faillog lastlog; do
	spewdo "mv $PKG_STAGEROOT$PKG_PREFIX/bin/$filename $PKG_STAGEROOT$PKG_PREFIX/sbin/$filename"
	spewdo "ln -s ../sbin/$filename $PKG_STAGEROOT$PKG_PREFIX/bin/$filename"
done
spewdo "chmod 4711 $PKG_STAGEROOT/bin/su"
spewdo "chmod go-r $PKG_STAGEROOT$PKG_PREFIX/bin/*"

# End of round one.  *DING!*

# Round two: PAM-ized login binary.

# This LDFLAGS setting basically eliminates a spurious linkage to libcrypt,
# which isn't apparently necessary since obviously we can still login.
export LDFLAGS="-Wl,--as-needed -fPIC -lpam -lpam_misc"
# Already set above, but there's no sense in leaving this loosely defined.
cflags -O2 -fstack-protector-all
configure --disable-shared \
	--without-selinux \
	--without-audit \
	--with-libcrack \
	--with-libpam 
make

install -m 755 $PKG_SRCROOT/src/login $PKG_STAGEROOT/bin/login
install -m 4711 $PKG_SRCROOT/src/passwd $PKG_STAGEROOT$PKG_PREFIX/bin/passwd

# And now we copy the two needed pam auth file
createdir $PKG_STAGEROOT$PKG_SYSCONFDIR/pam.d
findpatch filename ${PKG_PATCH[3]}
install -m 644 $filename $PKG_STAGEROOT$PKG_SYSCONFDIR/pam.d/login

findpatch filename ${PKG_PATCH[4]}
install -m 644 $filename $PKG_STAGEROOT$PKG_SYSCONFDIR/pam.d/passwd

tidydocumentation
analyzebinaries
finalizepackage
packagize
cleanup
