Package: winbind
Version: 3.0.5-1mtech
Followup-For: Bug #258302
I've attached a patch that I submitted to buzgilla.samba.org back in
February. I've been running with this patch since then, and everything
is working fine.
-- System Information:
Debian Release: 3.1
Architecture: i386 (i686)
Kernel: Linux 2.6.11-ruby
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Versions of packages winbind depends on:
ii libc6 2.3.2.ds1-22 GNU C Library: Shared libraries an
ii libcomerr2 1.37-2sarge1 common error description library
ii libkrb53 1.3.6-2sarge2 MIT Kerberos runtime libraries
ii libldap2 2.1.30-8 OpenLDAP libraries
ii libpam0g 0.76-22 Pluggable Authentication Modules l
ii libpopt0 1.7-5 lib for parsing cmdline parameters
ii libssl0.9.6 0.9.6m-1 SSL shared libraries (old version)
-- no debconf information
--- samba/source/nsswitch/pam_winbind.c Sun Apr 4 00:37:18 2004
+++ samba.mtech/source/nsswitch/pam_winbind.c Tue Jul 13 10:30:41 2004
@@ -420,6 +420,7 @@
const char *username;
const char *password;
int retval = PAM_AUTH_ERR;
+ static char buf[256] = {0};
/* parse arguments */
int ctrl = _pam_parse(argc, argv);
@@ -454,7 +455,23 @@
}
/* Now use the username to look up password */
- return winbind_auth_request(username, password, ctrl);
+ retval = winbind_auth_request(username, password, ctrl);
+
+ sprintf(buf, "%d", retval);
+ if(pam_set_data(pamh, "winbind_auth_retval", buf, NULL) != PAM_SUCCESS) {
+ _pam_log(LOG_WARNING, "pam_sm_authenticate return code %d cannot be saved for pam_sm_acct_mgmt", retval);
+ return PAM_BAD_ITEM;
+ }
+ switch (retval) {
+ case PAM_AUTHTOK_EXPIRED:
+ _pam_log(LOG_WARNING, "pam_sm_authenticate would return PAM_AUTHTOK_EXPIRED, returning PAM_SUCCESS instead");
+ return PAM_SUCCESS;
+ case PAM_NEW_AUTHTOK_REQD:
+ _pam_log(LOG_WARNING, "pam_sm_authenticate would return PAM_NEW_AUTHTOK_REQD, returning PAM_SUCCESS instead");
+ return PAM_SUCCESS;
+ default:
+ return retval;
+ }
}
PAM_EXTERN
@@ -474,6 +491,7 @@
{
const char *username;
int retval = PAM_USER_UNKNOWN;
+ char *ptr = NULL;
/* parse arguments */
int ctrl = _pam_parse(argc, argv);
@@ -503,7 +521,7 @@
case 0:
/* Otherwise, the authentication looked good */
_pam_log(LOG_NOTICE, "user '%s' granted acces", username);
- return PAM_SUCCESS;
+ break;
default:
/* we don't know anything about this return value */
_pam_log(LOG_ERR, "internal module error (retval = %d, user = `%s'",
@@ -511,6 +529,23 @@
return PAM_SERVICE_ERR;
}
+ if( pam_get_data(pamh, "winbind_auth_retval", (const void **)&ptr) != PAM_SUCCESS ) {
+ _pam_log(LOG_WARNING, "pam_sm_acct_mgmt cannot retrieve pam_sm_authenticate return value");
+ return retval;
+ }
+
+ retval = atoi( ptr );
+ switch (retval) {
+ case PAM_AUTHTOK_EXPIRED:
+ _pam_log(LOG_WARNING, "pam_sm_acct_mgmt would return PAM_AUTHTOK_EXPIRED");
+ /* fall through, since new token is required in this case */
+ case PAM_NEW_AUTHTOK_REQD:
+ _pam_log(LOG_WARNING, "pam_sm_acct_mgmt returning PAM_NEW_AUTHTOK_REQD");
+ return retval;
+ default:
+ return PAM_SUCCESS;
+ }
+
/* should not be reached */
return PAM_IGNORE;
}