[Samba] [Release Planning 3.4] 3.4.0pre1 will be delayed

Jeremy Allison jra at samba.org
Wed Apr 15 19:04:42 GMT 2009


On Wed, Apr 15, 2009 at 08:59:29PM +0200, Peter Rindfuss wrote:
> Remy Zandwijk wrote:
> > Peter Rindfuss wrote:
> >> On 15.04.2009 15:12, Karolin Seeger wrote:
> >>
> >>> The code change between 3.2.9 is really small and it was not the 
> >>> intention
> >>> to introduce the bug, but maybe it happened.
> >>>
> >> I went from 3.2.8 to 3.2.10, i.e. the bug could have been introduced 
> >> either in 3.2.9 or 3.2.10.
> >>
> >> In the meantime, I reverted to 3.2.8, and things are ok again.
> > 
> > 
> > FWIW: I've setup a virgin PDC based on 3.2.10 and I could join a XP-SP2 
> > machine without problems.
> > 
> > -Remy
> > 
> 
> Remy,
> 
> I can confirm this. For testing purposes, I installed a "fresh" WinXP
> SP2 on a PC. I had no problems to join this machine to 3.2.10, but after
> the next login, the problems showed up as described.

Here are the changes in the rpc subsystems between 3.2.8 and 3.2.10,
as a "reverse" patch (will return 3.2.10 rpc to 3.2.8). Can you apply
this and test if it fixes the problems ? My current theory is the
fixes we've applied to srv_netlog_nt.c in order to support Beta Windows7
clients whilst working with Microsoft engineers.

If you want to confirm this, just replace rpc_server/srv_netlog_nt.c in
3.2.10 with the version from 3.2.8 and see if that fixes the problem.

If it does, I have a theory I'd like to test...

Thanks,

Jeremy.
-------------- next part --------------
diff -u -r samba-3.2.10/source/rpc_server/srv_lsa_nt.c samba-3.2.8/source/rpc_server/srv_lsa_nt.c
--- samba-3.2.10/source/rpc_server/srv_lsa_nt.c	2009-04-01 04:43:23.000000000 -0700
+++ samba-3.2.8/source/rpc_server/srv_lsa_nt.c	2009-02-03 08:10:07.000000000 -0800
@@ -830,10 +830,6 @@
 					   &names,
 					   &mapped_count);
 
-	if (NT_STATUS_IS_ERR(status)) {
-		return status;
-	}
-
 	/* Convert from lsa_TranslatedName2 to lsa_TranslatedName */
 	names_out = TALLOC_ARRAY(p->mem_ctx, struct lsa_TranslatedName,
 				 num_sids);
diff -u -r samba-3.2.10/source/rpc_server/srv_netlog_nt.c samba-3.2.8/source/rpc_server/srv_netlog_nt.c
--- samba-3.2.10/source/rpc_server/srv_netlog_nt.c	2009-04-01 04:43:23.000000000 -0700
+++ samba-3.2.8/source/rpc_server/srv_netlog_nt.c	2009-02-03 08:10:07.000000000 -0800
@@ -474,32 +474,6 @@
 	uint32_t srv_flgs;
 	struct netr_Credential srv_chal_out;
 
-	/* According to Microsoft (see bugid #6099)
-	 * Windows 7 looks at the negotiate_flags
-	 * returned in this structure *even if the
-	 * call fails with access denied ! So in order
-	 * to allow Win7 to connect to a Samba NT style
-	 * PDC we set the flags before we know if it's
-	 * an error or not.
-	 */
-
-	/* 0x000001ff */
-	srv_flgs = NETLOGON_NEG_ACCOUNT_LOCKOUT |
-		   NETLOGON_NEG_PERSISTENT_SAMREPL |
-		   NETLOGON_NEG_ARCFOUR |
-		   NETLOGON_NEG_PROMOTION_COUNT |
-		   NETLOGON_NEG_CHANGELOG_BDC |
-		   NETLOGON_NEG_FULL_SYNC_REPL |
-		   NETLOGON_NEG_MULTIPLE_SIDS |
-		   NETLOGON_NEG_REDO |
-		   NETLOGON_NEG_PASSWORD_CHANGE_REFUSAL;
-
-	if (lp_server_schannel() != false) {
-		srv_flgs |= NETLOGON_NEG_SCHANNEL;
-	}
-
-	*r->out.negotiate_flags = srv_flgs;
-
 	/* We use this as the key to store the creds: */
 	/* r->in.computer_name */
 
@@ -547,9 +521,16 @@
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
+	srv_flgs = 0x000001ff;
+
+	if (lp_server_schannel() != false) {
+		srv_flgs |= NETLOGON_NEG_SCHANNEL;
+	}
+
 	/* set up the LSA AUTH 2 response */
 	memcpy(r->out.return_credentials->data, &srv_chal_out.data,
 	       sizeof(r->out.return_credentials->data));
+	*r->out.negotiate_flags = srv_flgs;
 
 	fstrcpy(p->dc->mach_acct, r->in.account_name);
 	fstrcpy(p->dc->remote_machine, r->in.computer_name);
@@ -701,7 +682,7 @@
 	/* set up the LSA Server Password Set response */
 
 	memcpy(r->out.return_authenticator, &cred_out,
-	       sizeof(*(r->out.return_authenticator)));
+	       sizeof(r->out.return_authenticator));
 
 	TALLOC_FREE(sampass);
 	return status;
@@ -1361,10 +1342,11 @@
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _netr_LogonGetCapabilities(pipes_struct *p,
-				    struct netr_LogonGetCapabilities *r)
+WERROR _netr_NETRLOGONDUMMYROUTINE1(pipes_struct *p,
+				    struct netr_NETRLOGONDUMMYROUTINE1 *r)
 {
-	return NT_STATUS_NOT_IMPLEMENTED;
+	p->rng_fault_state = true;
+	return WERR_NOT_SUPPORTED;
 }
 
 /****************************************************************
diff -u -r samba-3.2.10/source/rpc_server/srv_pipe.c samba-3.2.8/source/rpc_server/srv_pipe.c
--- samba-3.2.10/source/rpc_server/srv_pipe.c	2009-04-01 04:43:23.000000000 -0700
+++ samba-3.2.8/source/rpc_server/srv_pipe.c	2009-02-03 08:10:07.000000000 -0800
@@ -2101,11 +2101,7 @@
 
 	auth_len = p->hdr.auth_len;
 
-	if (auth_len < RPC_AUTH_SCHANNEL_SIGN_OR_SEAL_CHK_LEN ||
-			auth_len > RPC_HEADER_LEN +
-					RPC_HDR_REQ_LEN +
-					RPC_HDR_AUTH_LEN +
-					auth_len) {
+	if (auth_len != RPC_AUTH_SCHANNEL_SIGN_OR_SEAL_CHK_LEN) {
 		DEBUG(0,("Incorrect auth_len %u.\n", (unsigned int)auth_len ));
 		return False;
 	}
diff -u -r samba-3.2.10/source/rpc_server/srv_pipe_hnd.c samba-3.2.8/source/rpc_server/srv_pipe_hnd.c
--- samba-3.2.10/source/rpc_server/srv_pipe_hnd.c	2009-04-01 04:43:23.000000000 -0700
+++ samba-3.2.8/source/rpc_server/srv_pipe_hnd.c	2009-02-03 08:10:07.000000000 -0800
@@ -601,7 +601,7 @@
 	 * will not fit in the initial buffer of size 0x1068   --jerry 22/01/2002
 	 */
 	
-	if(prs_offset(&p->in_data.data) + data_len > MAX_RPC_DATA_SIZE) {
+	if(prs_offset(&p->in_data.data) + data_len > 15*1024*1024) {
 		DEBUG(0,("process_request_pdu: rpc data buffer too large (%u) + (%u)\n",
 				(unsigned int)prs_data_size(&p->in_data.data), (unsigned int)data_len ));
 		set_incoming_fault(p);
diff -u -r samba-3.2.10/source/rpc_server/srv_samr_nt.c samba-3.2.8/source/rpc_server/srv_samr_nt.c
--- samba-3.2.10/source/rpc_server/srv_samr_nt.c	2009-04-01 04:43:23.000000000 -0700
+++ samba-3.2.8/source/rpc_server/srv_samr_nt.c	2009-02-03 08:10:07.000000000 -0800
@@ -1177,7 +1177,9 @@
 
 	*r->out.sam = samr_array;
 	*r->out.num_entries = num_groups;
+	/* this was missing, IMHO:
 	*r->out.resume_handle = num_groups + *r->in.resume_handle;
+	*/
 
 	DEBUG(5,("_samr_EnumDomainGroups: %d\n", __LINE__));
 
diff -u -r samba-3.2.10/source/rpc_server/srv_spoolss_nt.c samba-3.2.8/source/rpc_server/srv_spoolss_nt.c
--- samba-3.2.10/source/rpc_server/srv_spoolss_nt.c	2009-04-01 04:43:23.000000000 -0700
+++ samba-3.2.8/source/rpc_server/srv_spoolss_nt.c	2009-02-03 08:10:07.000000000 -0800
@@ -4729,10 +4729,6 @@
 		return WERR_INVALID_PARAM;
 	}
 
-	if (offered > MAX_RPC_DATA_SIZE) {
-		return WERR_INVALID_PARAM;
-	}
-
 	rpcbuf_move(q_u->buffer, &r_u->buffer);
 	buffer = r_u->buffer;
 
@@ -5090,10 +5086,6 @@
 		return WERR_INVALID_PARAM;
 	}
 
-	if (offered > MAX_RPC_DATA_SIZE) {
-		return WERR_INVALID_PARAM;
-	}
-
 	rpcbuf_move(q_u->buffer, &r_u->buffer);
 	buffer = r_u->buffer;
 
@@ -5755,10 +5747,6 @@
 		return WERR_INVALID_PARAM;
 	}
 
-	if (offered > MAX_RPC_DATA_SIZE) {
-		return WERR_INVALID_PARAM;
-	}
-
 	rpcbuf_move(q_u->buffer, &r_u->buffer);
 	buffer = r_u->buffer;
 
@@ -6832,10 +6820,6 @@
 		return WERR_INVALID_PARAM;
 	}
 
-	if (offered > MAX_RPC_DATA_SIZE) {
-		return WERR_INVALID_PARAM;
-	}
-
 	rpcbuf_move(q_u->buffer, &r_u->buffer);
 	buffer = r_u->buffer;
 
@@ -7212,10 +7196,6 @@
 		return WERR_INVALID_PARAM;
 	}
 
-	if (offered > MAX_RPC_DATA_SIZE) {
-		return WERR_INVALID_PARAM;
-	}
-
 	rpcbuf_move(q_u->buffer, &r_u->buffer);
 	buffer = r_u->buffer;
 
@@ -7283,10 +7263,6 @@
 		return WERR_INVALID_PARAM;
 	}
 
-	if (offered > MAX_RPC_DATA_SIZE) {
-		return WERR_INVALID_PARAM;
-	}
-
 	rpcbuf_move(q_u->buffer, &r_u->buffer);
 	buffer = r_u->buffer;
 
@@ -7695,10 +7671,6 @@
 		return WERR_INVALID_PARAM;
 	}
 
-	if (offered > MAX_RPC_DATA_SIZE) {
-		return WERR_INVALID_PARAM;
-	}
-
 	rpcbuf_move(q_u->buffer, &r_u->buffer);
 	buffer = r_u->buffer;
 
@@ -8108,10 +8080,6 @@
 		return WERR_INVALID_PARAM;
 	}
 
-	if (offered > MAX_RPC_DATA_SIZE) {
-		return WERR_INVALID_PARAM;
-	}
-
 	rpcbuf_move(q_u->buffer, &r_u->buffer);
 	buffer = r_u->buffer;
 
@@ -8739,10 +8707,6 @@
 		return WERR_INVALID_PARAM;
 	}
 
-	if (offered > MAX_RPC_DATA_SIZE) {
-		return WERR_INVALID_PARAM;
-	}
-
 	rpcbuf_move(q_u->buffer, &r_u->buffer);
 	buffer = r_u->buffer;
 
@@ -8822,10 +8786,6 @@
 		return WERR_INVALID_PARAM;
 	}
 
-	if (offered > MAX_RPC_DATA_SIZE) {
-		return WERR_INVALID_PARAM;
-	}
-
 	rpcbuf_move(q_u->buffer, &r_u->buffer);
 	buffer = r_u->buffer;
 
@@ -8954,10 +8914,6 @@
 		return WERR_INVALID_PARAM;
 	}
 
-	if (offered > MAX_RPC_DATA_SIZE) {
-		return WERR_INVALID_PARAM;
-	}
-
 	rpcbuf_move(q_u->buffer, &r_u->buffer);
 	buffer = r_u->buffer;
 
@@ -9134,10 +9090,6 @@
 		return WERR_INVALID_PARAM;
 	}
 
-	if (offered > MAX_RPC_DATA_SIZE) {
-		return WERR_INVALID_PARAM;
-	}
-
 	rpcbuf_move(q_u->buffer, &r_u->buffer);
 	buffer = r_u->buffer;
 
@@ -9779,10 +9731,6 @@
 		return WERR_INVALID_PARAM;
 	}
 
-	if (offered > MAX_RPC_DATA_SIZE) {
-		return WERR_INVALID_PARAM;
-	}
-
 	rpcbuf_move(q_u->buffer, &r_u->buffer);
 	buffer = r_u->buffer;
 
diff -u -r samba-3.2.10/source/rpc_server/srv_srvsvc_nt.c samba-3.2.8/source/rpc_server/srv_srvsvc_nt.c
--- samba-3.2.10/source/rpc_server/srv_srvsvc_nt.c	2009-04-01 04:43:23.000000000 -0700
+++ samba-3.2.8/source/rpc_server/srv_srvsvc_nt.c	2009-02-03 08:10:07.000000000 -0800
@@ -2316,8 +2316,6 @@
 
 	/*allow one struct srvsvc_NetDiskInfo0 for null terminator*/
 
-	r->out.info->count = 0;
-
 	for(i = 0; i < MAX_SERVER_DISK_ENTRIES -1 && (disk_name = next_server_disk_enum(&resume)); i++) {
 
 		r->out.info->count++;


More information about the samba mailing list