32bit版と64bit版を両方コンパイルします。
prefixオプションでマウントポイントを付加できるようにソースを変更します。
--- modules/pam_mkhomedir/pam_mkhomedir.c.orig 2005年 7月 3日 (日) +++ modules/pam_mkhomedir/pam_mkhomedir.c 2007年 2月 1日 (木) @@ -32,6 +32,7 @@ #include#include #include +#include #include #include #include @@ -61,6 +62,8 @@ static unsigned int UMask = 0022; static char SkelDir[BUFSIZ] = "/etc/skel"; /* THIS MODULE IS NOT THREAD SAFE */ +static char PrefixDir[BUFSIZ] = "NULL"; +static char HomeDir[MAXPATHLEN + 1]; /* some syslogging */ static void @@ -94,6 +97,9 @@ } else if (!strncmp(*argv,"skel=",5)) { strncpy(SkelDir,*argv+5,sizeof(SkelDir)); SkelDir[sizeof(SkelDir)-1] = '\0'; + } else if (!strncmp(*argv,"prefix=",7)) { + strncpy(PrefixDir,*argv+7,sizeof(PrefixDir)); + PrefixDir[sizeof(PrefixDir)-1] = '\0'; } else { _log_err(LOG_ERR, "unknown option; %s", *argv); } @@ -547,12 +553,16 @@ return PAM_CRED_INSUFFICIENT; } + if (strcmp(PrefixDir, "NULL")) + strncpy(HomeDir, PrefixDir, MAXPATHLEN); + strncat(HomeDir, pwd->pw_dir, MAXPATHLEN); + /* Stat the home directory, if something exists then we assume it is correct and return a success*/ - if (stat(pwd->pw_dir,&St) == 0) + if (stat(HomeDir,&St) == 0) return PAM_SUCCESS; - return create_homedir(pamh,ctrl,pwd,SkelDir,pwd->pw_dir); + return create_homedir(pamh,ctrl,pwd,SkelDir,HomeDir); } /* Ignore */
次のようなスクリプトを実行します。
make.sh
#!/bin/sh
if [ $# -eq 1 ]; then
. ../setup-pre.sh $1
else
. ../setup-pre.sh
fi
CC=$GCCBIN; export CC
CXX=$GPPBIN; export CXX
CFLAGS="-O2 -D_REENTRANT -DPAM_DYNAMIC -Wall -fPIC"
if [ "$ISA" = "sparcv9" -o "$ISA" = "amd64" ]; then
CFLAGS="-m64 $CFLAGS"
fi
export CFLAGS
CPPFLAGS="-I../../libpam/include -I../../libpamc/include"
export CPPFLAGS
LD=/usr/ccs/bin/ld
./configure --prefix=/usr/local
cp _pam_aconf.h libpam/include/security
cd modules/pammodutil
CC=cc
CXX=CC
CFLAGS="-xO3 -KPIC -D_REENTRANT -DPAM_DYNAMIC"
if [ "$ISA" = "sparcv9" ]; then
CFLAGS="-M /usr/lib/ld/$ISA/map.default -xO3 -xtarget=native64
-xarch=native64 -xcode=pic32 $CFLAGS"
fi
if [ "$ISA" = "amd64" ]; then
CFLAGS="-M /usr/lib/ld/$ISA/map.default -xO3 -xtarget=native64
-xarch=native64 $CFLAGS"
fi
$CC -c $CFLAGS $CPPFLAGS -Iinclude modutil_cleanup.c
$CC -c $CFLAGS $CPPFLAGS -Iinclude modutil_ioloop.c
$CC -c $CFLAGS $CPPFLAGS -Iinclude modutil_getpwnam.c -D_POSIX_PTHREAD_SEMANTICS
cd ../pam_mkhomedir
$CC -c $CFLAGS $CPPFLAGS -I../pammodutil/include pam_mkhomedir.c
if [ "$ISA" = "sparcv9" -o "$ISA" = "amd64" ]; then
$LD -o pam_mkhomedir.so -64 -B dynamic -G -lc pam_mkhomedir.o
../pammodutil/modutil_*.o
else
$LD -o pam_mkhomedir.so -B dynamic -G -lc pam_mkhomedir.o
../pammodutil/modutil_*.o
fi
makeします。
% ./make.sh [sparcv8plus|i386] or % ./make.sh [sparcv9|amd64]
インストールします。
# cp modules/pam_mkhomedir/pam_mkhomedir.so /usr/local/lib/security/sparcv9/pam_mkhomedir.so.1 # cd /usr/local/lib/security/sparcv9 # ln -s pam_mkhomedir.so.1 pam_mkhomedir.so
# cp modules/pam_mkhomedir/pam_mkhomedir.so /usr/local/lib/security/pam_mkhomedir.so.1 # cd /usr/local/lib/security # ln -s pam_mkhomedir.so.1 pam_mkhomedir.so
PAMの設定を行います。
# vi /etc/pam.conf + other session required /usr/local/lib/security/$ISA/pam_mkhomedir.so.1 prefix=/export