SOURCES: samba-pam_smbpasswd-leakage.patch (NEW) - close file desc...

baggins baggins at pld-linux.org
Tue Mar 4 18:40:03 CET 2008


Author: baggins                      Date: Tue Mar  4 17:40:03 2008 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- close file descriptors and free used memory

---- Files affected:
SOURCES:
   samba-pam_smbpasswd-leakage.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/samba-pam_smbpasswd-leakage.patch
diff -u /dev/null SOURCES/samba-pam_smbpasswd-leakage.patch:1.1
--- /dev/null	Tue Mar  4 18:40:03 2008
+++ SOURCES/samba-pam_smbpasswd-leakage.patch	Tue Mar  4 18:39:58 2008
@@ -0,0 +1,164 @@
+diff -ur samba-3.0.28/source/pam_smbpass/pam_smb_acct.c samba-3.0.28-leak/source/pam_smbpass/pam_smb_acct.c
+--- samba-3.0.28/source/pam_smbpass/pam_smb_acct.c	2008-03-04 18:30:27.000000000 +0100
++++ samba-3.0.28-leak/source/pam_smbpass/pam_smb_acct.c	2008-03-04 18:29:46.000000000 +0100
+@@ -63,6 +63,7 @@
+ 		if (on( SMB_DEBUG, ctrl )) {
+ 			_log_err(pamh, LOG_DEBUG, "acct: could not identify user");
+ 		}
++		gfree_case_tables();
+ 		return retval;
+ 	}
+ 	if (on( SMB_DEBUG, ctrl )) {
+@@ -75,6 +76,7 @@
+ 	if (!initialize_password_db(True)) {
+ 		_log_err(pamh, LOG_ALERT, "Cannot access samba password database");
+ 		CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
++		gfree_case_tables();
+ 		return PAM_AUTHINFO_UNAVAIL;
+ 	}
+ 
+@@ -83,18 +85,21 @@
+ 	if (!(sampass = samu_new( NULL ))) {
+         	CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
+ 		/* malloc fail. */
++		gfree_case_tables();
+ 		return nt_status_to_pam(NT_STATUS_NO_MEMORY);
+ 	}
+ 
+ 	if (!pdb_getsampwnam(sampass, name )) {
+ 		_log_err(pamh, LOG_DEBUG, "acct: could not identify user");
+         	CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
++		gfree_case_tables();
+         	return PAM_USER_UNKNOWN;
+ 	}
+ 
+ 	/* check for lookup failure */
+ 	if (!strlen(pdb_get_username(sampass)) ) {
+ 		CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
++		gfree_case_tables();
+ 		return PAM_USER_UNKNOWN;
+ 	}
+ 
+@@ -108,12 +113,14 @@
+ 			"please see your system administrator." );
+ 
+ 		CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
++		gfree_case_tables();
+ 		return PAM_ACCT_EXPIRED;
+ 	}
+ 
+ 	/* TODO: support for expired passwords. */
+ 
+ 	CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
++	gfree_case_tables();
+ 	return PAM_SUCCESS;
+ }
+ 
+diff -ur samba-3.0.28/source/pam_smbpass/pam_smb_auth.c samba-3.0.28-leak/source/pam_smbpass/pam_smb_auth.c
+--- samba-3.0.28/source/pam_smbpass/pam_smb_auth.c	2008-03-04 18:30:27.000000000 +0100
++++ samba-3.0.28-leak/source/pam_smbpass/pam_smb_auth.c	2008-03-04 18:29:05.000000000 +0100
+@@ -43,6 +43,7 @@
+ 		pam_set_data( pamh, "smb_setcred_return"	\
+ 		              , (void *) ret_data, NULL );	\
+ 	}							\
++	gfree_case_tables();					\
+ 	return retval;						\
+ } while (0)
+ 
+diff -ur samba-3.0.28/source/pam_smbpass/pam_smb_passwd.c samba-3.0.28-leak/source/pam_smbpass/pam_smb_passwd.c
+--- samba-3.0.28/source/pam_smbpass/pam_smb_passwd.c	2008-03-04 18:30:27.000000000 +0100
++++ samba-3.0.28-leak/source/pam_smbpass/pam_smb_passwd.c	2008-03-04 18:27:32.000000000 +0100
+@@ -118,6 +118,7 @@
+         if (on( SMB_DEBUG, ctrl )) {
+             _log_err(pamh, LOG_DEBUG, "password: could not identify user");
+         }
++	gfree_case_tables();
+         return retval;
+     }
+     if (on( SMB_DEBUG, ctrl )) {
+@@ -131,18 +132,21 @@
+     if (!initialize_password_db(False)) {
+         _log_err(pamh, LOG_ALERT, "Cannot access samba password database");
+         CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
++	gfree_case_tables();
+         return PAM_AUTHINFO_UNAVAIL;
+     }
+ 
+     /* obtain user record */
+     if ( !(sampass = samu_new( NULL )) ) {
+         CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
++	gfree_case_tables();
+         return nt_status_to_pam(NT_STATUS_NO_MEMORY);
+     }
+ 
+     if (!pdb_getsampwnam(sampass,user)) {
+         _log_err(pamh, LOG_ALERT, "Failed to find entry for user %s.", user);
+         CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
++	gfree_case_tables();
+         return PAM_USER_UNKNOWN;
+     }
+     if (on( SMB_DEBUG, ctrl )) {
+@@ -161,6 +165,7 @@
+ 
+             TALLOC_FREE(sampass);
+             CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
++	    gfree_case_tables();
+             return PAM_SUCCESS;
+         }
+ 
+@@ -175,6 +180,7 @@
+                 _log_err(pamh, LOG_CRIT, "password: out of memory");
+                 TALLOC_FREE(sampass);
+                 CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
++	        gfree_case_tables();
+                 return PAM_BUF_ERR;
+             }
+             strncpy( Announce, greeting, sizeof(greeting) );
+@@ -191,6 +197,7 @@
+                          "password - (old) token not obtained");
+                 TALLOC_FREE(sampass);
+                 CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
++	        gfree_case_tables();
+                 return retval;
+             }
+ 
+@@ -206,6 +213,7 @@
+         pass_old = NULL;
+         TALLOC_FREE(sampass);
+         CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
++	gfree_case_tables();
+         return retval;
+ 
+     } else if (flags & PAM_UPDATE_AUTHTOK) {
+@@ -236,6 +244,7 @@
+             _log_err(pamh, LOG_NOTICE, "password: user not authenticated");
+             TALLOC_FREE(sampass);
+             CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
++	    gfree_case_tables();
+             return retval;
+         }
+ 
+@@ -264,6 +273,7 @@
+             pass_old = NULL;                               /* tidy up */
+             TALLOC_FREE(sampass);
+             CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
++	    gfree_case_tables();
+             return retval;
+         }
+ 
+@@ -284,6 +294,7 @@
+             pass_new = pass_old = NULL;               /* tidy up */
+             TALLOC_FREE(sampass);
+             CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
++	    gfree_case_tables();
+             return retval;
+         }
+ 
+@@ -333,6 +344,7 @@
+ 
+     TALLOC_FREE(sampass);
+     CatchSignal(SIGPIPE, SIGNAL_CAST oldsig_handler);
++    gfree_case_tables();
+     return retval;
+ }
+ 
================================================================


More information about the pld-cvs-commit mailing list