Hi, I noticed the following problem in samba 2.2.5: the pam winbind module floods the system with sockets until the ulimits are reached under some circumstances. I attached a simple program to demonstrate the problem. The problem only occurs with pam_winbind, if i use another pam module, pam_unix for example, everything works fine. Does anybody can tell me if this is a problem in my code or a bug in pam_winbind? Thanks in advance, -timo -------------- next part -------------- // leider fehlt bei den SuSE 7.3 PAM header Dateien die extern Anweisung extern "C" { #include <security/pam_appl.h> #include <security/pam_misc.h> } #include <iostream> // der Service f?r PAM (der Name der Datei in /etc/pam.d/) #define SERVICE "cdsrv" /** * die conversation function f?r PAM (_authenticate()) */ int own_conv(int num_msg, const pam_message *msg[], pam_response *response[], void *appdata_ptr) { pam_response *reply = new pam_response[num_msg]; for( int x = 0; x < num_msg; x++ ) { reply[x].resp_retcode = 0; reply[x].resp = strdup((char*)appdata_ptr); } response[0] = reply; return PAM_SUCCESS; } /** * pr?ft gegen PAM ob das user/password pair stimmt und gibt * true zur?ck wenn es stimmt, ansonsten false. * * (Ist auf KEINEN Fall geeignet um generelle PAM Unterst?tzung * zu integrieren, lediglich zur simplen user/passwd * authentifizierung. F?r erweiterte Authentifizierungs-Mechanismen * wie z.B.: Chipkarten m?sste der Code entsprechend erweitert * werden. Funktioniert nur gegen die shadow Datei wenn die Berechtigungen * stimmen, funktioniert allerdings problemlos gegen winbindd) * * damit libpam.so von der java engine geladen werden kann muss LD_PRELOAD * gesetzt sein: * export LD_PRELOAD=/usr/lib/libpam.so */ bool _authenticate( char *user, char *passwd ) { pam_handle_t *pamh = NULL; /* das password f?r die conversation function setzen */ pam_conv conv; conv.appdata_ptr = (void*)passwd; conv.conv = own_conv; /* PAM session initialisieren */ int retval = pam_start(SERVICE, user, &conv, &pamh); /* user authentifizieren */ if (retval == PAM_SUCCESS) { retval = pam_authenticate(pamh, 0); } /* pam session schliessen */ /* TODO: was ist wenn die session nicht wieder geschlossen werden kann */ int t = pam_end(pamh,retval); if( retval == PAM_SUCCESS ) { return(true); } else { return(false); } } void main(int argc, char ** argv) { while( true ) { if( _authenticate( argv[1], argv[2] ) ) { cout << argv[1] << ":" << argv[2] << " is authenticated" << endl; } else { cout << argv[1] << ":" << argv[2] << " is not authenticated" << endl; } } } -------------- next part -------------- #%PAM-1.0 auth required pam_winbind.so #account required pam_warn.so debug #account required pam_deny.so debug #session required pam_warn.so debug #session required pam_deny.so debug #password required pam_warn.so debug #password required pam_deny.so debug