svn commit: samba r16438 - in branches/SAMBA_3_0_RELEASE: . source/lib source/nsswitch source/param source/passdb source/printing source/registry source/rpc_server source/utils source/web

jerry at samba.org jerry at samba.org
Wed Jun 21 13:05:43 GMT 2006


Author: jerry
Date: 2006-06-21 13:05:41 +0000 (Wed, 21 Jun 2006)
New Revision: 16438

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16438

Log:
sync up to r16433
Modified:
   branches/SAMBA_3_0_RELEASE/WHATSNEW.txt
   branches/SAMBA_3_0_RELEASE/source/lib/util_unistr.c
   branches/SAMBA_3_0_RELEASE/source/nsswitch/winbindd_util.c
   branches/SAMBA_3_0_RELEASE/source/param/loadparm.c
   branches/SAMBA_3_0_RELEASE/source/passdb/pdb_ldap.c
   branches/SAMBA_3_0_RELEASE/source/printing/nt_printing.c
   branches/SAMBA_3_0_RELEASE/source/registry/reg_printing.c
   branches/SAMBA_3_0_RELEASE/source/rpc_server/srv_lsa_nt.c
   branches/SAMBA_3_0_RELEASE/source/utils/net_rpc_samsync.c
   branches/SAMBA_3_0_RELEASE/source/web/cgi.c
   branches/SAMBA_3_0_RELEASE/source/web/swat.c


Changeset:
Modified: branches/SAMBA_3_0_RELEASE/WHATSNEW.txt
===================================================================
--- branches/SAMBA_3_0_RELEASE/WHATSNEW.txt	2006-06-21 04:59:52 UTC (rev 16437)
+++ branches/SAMBA_3_0_RELEASE/WHATSNEW.txt	2006-06-21 13:05:41 UTC (rev 16438)
@@ -68,6 +68,7 @@
 o   Volker Lendecke <vl at samba.org>
     * Fixes for various Klocwork defect reports.
     * Fixes for various Coverity defect reports.
+    * BUG 3848: Fix WinXP join error in a Samba domain using ldapsam.
 
 
 

Modified: branches/SAMBA_3_0_RELEASE/source/lib/util_unistr.c
===================================================================
--- branches/SAMBA_3_0_RELEASE/source/lib/util_unistr.c	2006-06-21 04:59:52 UTC (rev 16437)
+++ branches/SAMBA_3_0_RELEASE/source/lib/util_unistr.c	2006-06-21 13:05:41 UTC (rev 16438)
@@ -98,8 +98,10 @@
 	/* Get the name of the current locale.  */
 	old_locale = setlocale(LC_ALL, NULL);
 
-	/* Save it as it is in static storage. */
-	saved_locale = SMB_STRDUP(old_locale);
+	if (old_locale) {
+		/* Save it as it is in static storage. */
+		saved_locale = SMB_STRDUP(old_locale);
+	}
 
 	/* We set back the locale to C to get ASCII-compatible toupper/lower functions. */
 	setlocale(LC_ALL, "C");
@@ -139,8 +141,10 @@
 
 #ifdef HAVE_SETLOCALE
 	/* Restore the old locale. */
-	setlocale (LC_ALL, saved_locale);
-	SAFE_FREE(saved_locale);
+	if (saved_locale) {
+		setlocale (LC_ALL, saved_locale);
+		SAFE_FREE(saved_locale);
+	}
 #endif
 }
 

Modified: branches/SAMBA_3_0_RELEASE/source/nsswitch/winbindd_util.c
===================================================================
--- branches/SAMBA_3_0_RELEASE/source/nsswitch/winbindd_util.c	2006-06-21 04:59:52 UTC (rev 16437)
+++ branches/SAMBA_3_0_RELEASE/source/nsswitch/winbindd_util.c	2006-06-21 13:05:41 UTC (rev 16438)
@@ -976,14 +976,6 @@
 	_num_clients--;
 }
 
-/* Demote a client to be the last in the list */
-
-void winbindd_demote_client(struct winbindd_cli_state *cli)
-{
-	struct winbindd_cli_state *tmp;
-	DLIST_DEMOTE(_client_list, cli, tmp);
-}
-
 /* Close all open clients */
 
 void winbindd_kill_all_clients(void)

Modified: branches/SAMBA_3_0_RELEASE/source/param/loadparm.c
===================================================================
--- branches/SAMBA_3_0_RELEASE/source/param/loadparm.c	2006-06-21 04:59:52 UTC (rev 16437)
+++ branches/SAMBA_3_0_RELEASE/source/param/loadparm.c	2006-06-21 13:05:41 UTC (rev 16438)
@@ -3244,9 +3244,9 @@
  Handle ldap suffixes - default to ldapsuffix if sub-suffixes are not defined.
 ***************************************************************************/
 
-static char* append_ldap_suffix( const char *str )
+static const char *append_ldap_suffix( const char *str )
 {
-	char *suffix_string;
+	const char *suffix_string;
 
 
 	if (!lp_talloc)
@@ -3255,13 +3255,13 @@
 	suffix_string = talloc_asprintf( lp_talloc, "%s,%s", str, Globals.szLdapSuffix );
 	if ( !suffix_string ) {
 		DEBUG(0,("append_ldap_suffix: talloc_asprintf() failed!\n"));
-		return NULL;
+		return "";
 	}
 
 	return suffix_string;
 }
 
-char *lp_ldap_machine_suffix(void)
+const char *lp_ldap_machine_suffix(void)
 {
 	if (Globals.szLdapMachineSuffix[0])
 		return append_ldap_suffix(Globals.szLdapMachineSuffix);
@@ -3269,7 +3269,7 @@
 	return lp_string(Globals.szLdapSuffix);
 }
 
-char *lp_ldap_user_suffix(void)
+const char *lp_ldap_user_suffix(void)
 {
 	if (Globals.szLdapUserSuffix[0])
 		return append_ldap_suffix(Globals.szLdapUserSuffix);
@@ -3277,7 +3277,7 @@
 	return lp_string(Globals.szLdapSuffix);
 }
 
-char *lp_ldap_group_suffix(void)
+const char *lp_ldap_group_suffix(void)
 {
 	if (Globals.szLdapGroupSuffix[0])
 		return append_ldap_suffix(Globals.szLdapGroupSuffix);
@@ -3285,7 +3285,7 @@
 	return lp_string(Globals.szLdapSuffix);
 }
 
-char *lp_ldap_idmap_suffix(void)
+const char *lp_ldap_idmap_suffix(void)
 {
 	if (Globals.szLdapIdmapSuffix[0])
 		return append_ldap_suffix(Globals.szLdapIdmapSuffix);

Modified: branches/SAMBA_3_0_RELEASE/source/passdb/pdb_ldap.c
===================================================================
--- branches/SAMBA_3_0_RELEASE/source/passdb/pdb_ldap.c	2006-06-21 04:59:52 UTC (rev 16437)
+++ branches/SAMBA_3_0_RELEASE/source/passdb/pdb_ldap.c	2006-06-21 13:05:41 UTC (rev 16438)
@@ -1796,6 +1796,19 @@
 	ldap_mods_free(mods,True);
 	SAFE_FREE(dn);
 
+	/*
+	 * We need to set the backend private data to NULL here. For example
+	 * setuserinfo level 25 does a pdb_update_sam_account twice on the
+	 * same one, and with the explicit delete / add logic for attribute
+	 * values the second time we would use the wrong "old" value which
+	 * does not exist in LDAP anymore. Thus the LDAP server would refuse
+	 * the update.
+	 * The existing LDAPMessage is still being auto-freed by the
+	 * destructor.
+	 */
+	pdb_set_backend_private_data(newpwd, NULL, NULL, my_methods,
+				     PDB_CHANGED);
+
 	if (!NT_STATUS_IS_OK(ret)) {
 		return ret;
 	}

Modified: branches/SAMBA_3_0_RELEASE/source/printing/nt_printing.c
===================================================================
--- branches/SAMBA_3_0_RELEASE/source/printing/nt_printing.c	2006-06-21 04:59:52 UTC (rev 16437)
+++ branches/SAMBA_3_0_RELEASE/source/printing/nt_printing.c	2006-06-21 13:05:41 UTC (rev 16438)
@@ -2767,6 +2767,8 @@
 	fstring	*subkeys_ptr = NULL;
 	fstring subkeyname;
 	
+	*subkeys = NULL;
+
 	if ( !data )
 		return 0;
 

Modified: branches/SAMBA_3_0_RELEASE/source/registry/reg_printing.c
===================================================================
--- branches/SAMBA_3_0_RELEASE/source/registry/reg_printing.c	2006-06-21 04:59:52 UTC (rev 16437)
+++ branches/SAMBA_3_0_RELEASE/source/registry/reg_printing.c	2006-06-21 13:05:41 UTC (rev 16438)
@@ -346,8 +346,10 @@
 		if ( lookup_printerkey(printer->info_2->data, subkeyname) == -1 ) {
 			DEBUG(5,("key_printers_store_keys: adding key %s\n", 
 				existing_subkeys[i]));
-			if ( add_new_printer_key( printer->info_2->data, subkeyname ) == -1 ) 
+			if ( add_new_printer_key( printer->info_2->data, subkeyname ) == -1 ) {
+				SAFE_FREE( existing_subkeys );
 				return False;
+			}
 		}
 	}
 	
@@ -360,6 +362,8 @@
 	if ( printer )
 		free_a_printer( &printer, 2 );
 
+	SAFE_FREE( existing_subkeys );
+
 	return True;
 }
 

Modified: branches/SAMBA_3_0_RELEASE/source/rpc_server/srv_lsa_nt.c
===================================================================
--- branches/SAMBA_3_0_RELEASE/source/rpc_server/srv_lsa_nt.c	2006-06-21 04:59:52 UTC (rev 16437)
+++ branches/SAMBA_3_0_RELEASE/source/rpc_server/srv_lsa_nt.c	2006-06-21 13:05:41 UTC (rev 16438)
@@ -1135,7 +1135,7 @@
 
 	if ((ref == NULL) || (rids == NULL) || (rids2 == NULL)) {
 		r_u->status = NT_STATUS_NO_MEMORY;
-		goto done;
+		return NT_STATUS_NO_MEMORY;
 	}
 
 	if (!find_policy_by_hnd(p, &q_u->pol, (void **)(void *)&handle)) {
@@ -1149,10 +1149,6 @@
 		goto done;
 	}
 
-	if (!ref || !rids || !rids2) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
 	/* set up the LSA Lookup RIDs response */
 	become_root(); /* lookup_name can require root privs */
 	r_u->status = lookup_lsa_rids(p->mem_ctx, ref, rids, num_entries,

Modified: branches/SAMBA_3_0_RELEASE/source/utils/net_rpc_samsync.c
===================================================================
--- branches/SAMBA_3_0_RELEASE/source/utils/net_rpc_samsync.c	2006-06-21 04:59:52 UTC (rev 16437)
+++ branches/SAMBA_3_0_RELEASE/source/utils/net_rpc_samsync.c	2006-06-21 13:05:41 UTC (rev 16438)
@@ -1025,7 +1025,7 @@
 static NTSTATUS populate_ldap_for_ldif(fstring sid, const char *suffix, const char 
 		       *builtin_sid, FILE *add_fd)
 {
-	char *user_suffix, *group_suffix, *machine_suffix, *idmap_suffix;
+	const char *user_suffix, *group_suffix, *machine_suffix, *idmap_suffix;
 	char *user_attr=NULL, *group_attr=NULL;
 	char *suffix_attr;
 	int len;

Modified: branches/SAMBA_3_0_RELEASE/source/web/cgi.c
===================================================================
--- branches/SAMBA_3_0_RELEASE/source/web/cgi.c	2006-06-21 04:59:52 UTC (rev 16437)
+++ branches/SAMBA_3_0_RELEASE/source/web/cgi.c	2006-06-21 13:05:41 UTC (rev 16438)
@@ -223,6 +223,7 @@
   browser. Also doesn't allow for variables[] containing multiple variables
   with the same name and the same or different values.
   ***************************************************************************/
+
 const char *cgi_variable(const char *name)
 {
 	int i;
@@ -234,6 +235,20 @@
 }
 
 /***************************************************************************
+ Version of the above that can't return a NULL pointer.
+***************************************************************************/
+
+const char *cgi_variable_nonull(const char *name)
+{
+	const char *var = cgi_variable(name);
+	if (var) {
+		return var;
+	} else {
+		return "";
+	}
+}
+
+/***************************************************************************
 tell a browser about a fatal error in the http processing
   ***************************************************************************/
 static void cgi_setup_error(const char *err, const char *header, const char *info)

Modified: branches/SAMBA_3_0_RELEASE/source/web/swat.c
===================================================================
--- branches/SAMBA_3_0_RELEASE/source/web/swat.c	2006-06-21 04:59:52 UTC (rev 16437)
+++ branches/SAMBA_3_0_RELEASE/source/web/swat.c	2006-06-21 13:05:41 UTC (rev 16438)
@@ -515,7 +515,7 @@
 
 	while ((parm = lp_next_parameter(snum, &i, 1))) {
 		slprintf(label, sizeof(label)-1, "parm_%s", make_parm_name(parm->label));
-		if ((v = cgi_variable(label))) {
+		if ((v = cgi_variable(label)) != NULL) {
 			if (parm->flags & FLAG_HIDE) continue;
 			commit_parameter(snum, parm, v); 
 		}
@@ -678,10 +678,10 @@
 	}
 
 	if (cgi_variable("Commit")){
-		SerType = atoi(cgi_variable("ServerType"));
-		winstype = atoi(cgi_variable("WINSType"));
+		SerType = atoi(cgi_variable_nonull("ServerType"));
+		winstype = atoi(cgi_variable_nonull("WINSType"));
 		have_home = lp_servicenumber(HOMES_NAME);
-		HomeExpo = atoi(cgi_variable("HomeExpo"));
+		HomeExpo = atoi(cgi_variable_nonull("HomeExpo"));
 
 		/* Plain text passwords are too badly broken - use encrypted passwords only */
 		lp_do_parameter( GLOBAL_SECTION_SNUM, "encrypt passwords", "Yes");
@@ -714,7 +714,7 @@
 				break;
 			case 2:
 				lp_do_parameter( GLOBAL_SECTION_SNUM, "wins support", "No" );
-				lp_do_parameter( GLOBAL_SECTION_SNUM, "wins server", cgi_variable("WINSAddr"));
+				lp_do_parameter( GLOBAL_SECTION_SNUM, "wins server", cgi_variable_nonull("WINSAddr"));
 				break;
 		}
 
@@ -839,7 +839,7 @@
 	}
 
 	if ( cgi_variable("ViewMode") )
-		mode = atoi(cgi_variable("ViewMode"));
+		mode = atoi(cgi_variable_nonull("ViewMode"));
 	if ( cgi_variable("BasicMode"))
 		mode = 0;
 	if ( cgi_variable("AdvMode"))
@@ -915,7 +915,7 @@
 	printf("<table>\n");
 
 	if ( cgi_variable("ViewMode") )
-		mode = atoi(cgi_variable("ViewMode"));
+		mode = atoi(cgi_variable_nonull("ViewMode"));
 	if ( cgi_variable("BasicMode"))
 		mode = 0;
 	if ( cgi_variable("AdvMode"))
@@ -1029,7 +1029,7 @@
 	int local_flags = 0;
 
 	/* Make sure users name has been specified */
-	if (strlen(cgi_variable(SWAT_USER)) == 0) {
+	if (strlen(cgi_variable_nonull(SWAT_USER)) == 0) {
 		printf("<p>%s\n", _(" Must specify \"User Name\" "));
 		return;
 	}
@@ -1044,27 +1044,27 @@
 		 * If current user is not root, make sure old password has been specified 
 		 * If REMOTE change, even root must provide old password 
 		 */
-		if (((!am_root()) && (strlen( cgi_variable(OLD_PSWD)) <= 0)) ||
-		    ((cgi_variable(CHG_R_PASSWD_FLAG)) &&  (strlen( cgi_variable(OLD_PSWD)) <= 0))) {
+		if (((!am_root()) && (strlen( cgi_variable_nonull(OLD_PSWD)) <= 0)) ||
+		    ((cgi_variable(CHG_R_PASSWD_FLAG)) &&  (strlen( cgi_variable_nonull(OLD_PSWD)) <= 0))) {
 			printf("<p>%s\n", _(" Must specify \"Old Password\" "));
 			return;
 		}
 
 		/* If changing a users password on a remote hosts we have to know what host */
-		if ((cgi_variable(CHG_R_PASSWD_FLAG)) && (strlen( cgi_variable(RHOST)) <= 0)) {
+		if ((cgi_variable(CHG_R_PASSWD_FLAG)) && (strlen( cgi_variable_nonull(RHOST)) <= 0)) {
 			printf("<p>%s\n", _(" Must specify \"Remote Machine\" "));
 			return;
 		}
 
 		/* Make sure new passwords have been specified */
-		if ((strlen( cgi_variable(NEW_PSWD)) <= 0) ||
-		    (strlen( cgi_variable(NEW2_PSWD)) <= 0)) {
+		if ((strlen( cgi_variable_nonull(NEW_PSWD)) <= 0) ||
+		    (strlen( cgi_variable_nonull(NEW2_PSWD)) <= 0)) {
 			printf("<p>%s\n", _(" Must specify \"New, and Re-typed Passwords\" "));
 			return;
 		}
 
 		/* Make sure new passwords was typed correctly twice */
-		if (strcmp(cgi_variable(NEW_PSWD), cgi_variable(NEW2_PSWD)) != 0) {
+		if (strcmp(cgi_variable_nonull(NEW_PSWD), cgi_variable_nonull(NEW2_PSWD)) != 0) {
 			printf("<p>%s\n", _(" Re-typed password didn't match new password "));
 			return;
 		}
@@ -1091,17 +1091,17 @@
 	
 
 	rslt = change_password(host,
-			       cgi_variable(SWAT_USER),
-			       cgi_variable(OLD_PSWD), cgi_variable(NEW_PSWD),
+			       cgi_variable_nonull(SWAT_USER),
+			       cgi_variable_nonull(OLD_PSWD), cgi_variable_nonull(NEW_PSWD),
 				   local_flags);
 
 	if(cgi_variable(CHG_S_PASSWD_FLAG)) {
 		printf("<p>");
 		if (rslt == True) {
-			printf(_(" The passwd for '%s' has been changed."), cgi_variable(SWAT_USER));
+			printf(_(" The passwd for '%s' has been changed."), cgi_variable_nonull(SWAT_USER));
 			printf("\n");
 		} else {
-			printf(_(" The passwd for '%s' has NOT been changed."), cgi_variable(SWAT_USER));
+			printf(_(" The passwd for '%s' has NOT been changed."), cgi_variable_nonull(SWAT_USER));
 			printf("\n");
 		}
 	}
@@ -1121,7 +1121,7 @@
 	 * changed the User box text to another users name, remember it.
 	 */
 	if (cgi_variable(SWAT_USER)) {
-		new_name = cgi_variable(SWAT_USER);
+		new_name = cgi_variable_nonull(SWAT_USER);
 	} 
 
 	if (!new_name) new_name = "";
@@ -1265,7 +1265,7 @@
 	printf("<FORM name=\"swatform\" method=post>\n");
 
 	if ( cgi_variable("ViewMode") )
-		mode = atoi(cgi_variable("ViewMode"));
+		mode = atoi(cgi_variable_nonull("ViewMode"));
         if ( cgi_variable("BasicMode"))
                 mode = 0;
         if ( cgi_variable("AdvMode"))



More information about the samba-cvs mailing list