--- pam_ncp_auth.c.orig 2005-08-08 09:53:14.022134996 +0200 +++ pam_ncp_auth.c 2005-08-08 10:26:18.653360234 +0200 @@ -437,6 +437,7 @@ #define NWINFOS_FILE ".nwinfos" #define NWCLIENT_FILE ".nwclient" #define DEF_MNT_PNT "nwhome" +#define DEF_TIMEOUT 60 // Rhodes struct zenElement { char letter; @@ -1306,6 +1307,7 @@ long zenFlagOFF; //PP rev 1.26 turn off some zenflags on that workstation int isNewUser; // PP rev 1.19 int isScreenSaverRelogin; // PP rev 1.21 + int timeout; // Rhodes }; static void @@ -1333,6 +1335,7 @@ ui->defaultTree = NULL; //PP ui->defaultNameCtx = NULL; //PP ui->isNewUser = 0; //PP + ui->timeout = DEF_TIMEOUT; // Rhodes } static void @@ -3370,6 +3373,24 @@ return 0; } +// Rhodes +static int +parsetimeout(struct nw_user_info *ui, const char **str) +{ + int val; + switch (getnumber(&val, str)) { + case 0: + ui->timeout = val; + break; + case 1: + break; + default: + syslog(LOG_ERR, "Unknown timeout value %s\n", *str); + return -1; + } + return 0; +} + // ajout PP 2000/12/19 session_on et off // will mount Netware home directory in ~/nwhome @@ -3420,13 +3441,14 @@ // su -l USER -c "ncpmount ..... " static int mount_nwhome(const char *unixname, const char *uname, // nw FQDN name - const char *pwd, const char *server, const char *volume, const char *path, const char *mntpoint, int uid, int zenFlag, int useIP, int verbose) + const char *pwd, const char *server, const char *volume, const char *path, const char *mntpoint, int uid, int zenFlag, int useIP, int verbose, int timeout) { const char *argv[30]; int err; int i = 1, j = 0; char uidstr[30]; + char timeoutstr[30]; // Rhodes /* -B flag not yet supported by ncpmount */ #ifdef SET_BCAST @@ -3480,9 +3502,20 @@ argv[i++] = volume; } } + if (timeout) { // Rhodes + sprintf(timeoutstr, "%u", timeout); + if (verbose) + syslog(LOG_DEBUG, "Setting home directory ncpmount timeout to %s\n", timeoutstr); + argv[i++] = "-t"; + argv[i++] = timeoutstr; + } argv[i++] = "-o"; argv[i++] = "symlinks,exec"; + if (verbose) { // Rhodes + argv[i++] = "-v"; + } + sprintf(uidstr, "%u", uid); // current user is owner argv[i++] = "-u"; @@ -3627,7 +3660,7 @@ err = mount_nwhome(uname, // unix name for su fqdn, // NW name for ncpmount - pass, ui->nwhomeServer, ui->nwhomeVolume, ui->nwhomePath, mountpnt, pwd->pw_uid, ui->zenFlag, ui->qflag & QF_USE_NETWARE_IP, ui->qflag & QF_DEBUG); + pass, ui->nwhomeServer, ui->nwhomeVolume, ui->nwhomePath, mountpnt, pwd->pw_uid, ui->zenFlag, ui->qflag & QF_USE_NETWARE_IP, ui->qflag & QF_DEBUG, ui->timeout); if (!err) err = PAM_SUCCESS; @@ -4053,6 +4086,9 @@ case 'L': inf.qflag |= QF_NO_PEER_CHECKS; break; + case 't': // Rhodes + parsetimeout(&inf, &chrp); + break; default:; /* just silently ignore unknown option... */ } }