pam_mkhomedir in Linux-PAM-0.81

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]

インストールします。

64bit版

# 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

32bit版

# 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

hiraga@next-hop.net
Last modified: $Date: 2008/02/19 14:46:40 $
Apache