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