[SCM] Samba Shared Repository - branch v3-2-test updated - release-3-2-0pre2-966-gb003ba6

Günther Deschner gd at samba.org
Thu Apr 17 13:29:14 GMT 2008


The branch, v3-2-test has been updated
       via  b003ba65e34bb92bf71a7943957715cd7acbcce0 (commit)
      from  554dcfdab03f9d06f319a3234d56cf44dc38c9da (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit b003ba65e34bb92bf71a7943957715cd7acbcce0
Author: Günther Deschner <gd at samba.org>
Date:   Wed Apr 16 23:52:34 2008 +0200

    Move GETDC mailslot out of winbindd.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source/libsmb/clidgram.c      |  165 +++++++++++++++++++++++++++++++++++++++++
 source/winbindd/winbindd_cm.c |  164 +----------------------------------------
 2 files changed, 167 insertions(+), 162 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/libsmb/clidgram.c b/source/libsmb/clidgram.c
index 66c6ee1..baee95b 100644
--- a/source/libsmb/clidgram.c
+++ b/source/libsmb/clidgram.c
@@ -119,3 +119,168 @@ bool cli_send_mailslot(struct messaging_context *msg_ctx,
 						  MSG_SEND_PACKET,
 						  (uint8 *)&p, sizeof(p)));
 }
+
+static void mailslot_name(struct in_addr dc_ip, fstring name)
+{
+	fstr_sprintf(name, "\\MAILSLOT\\NET\\GETDC%X", dc_ip.s_addr);
+}
+
+bool send_getdc_request(struct messaging_context *msg_ctx,
+			struct sockaddr_storage *dc_ss,
+			const char *domain_name,
+			const DOM_SID *sid)
+{
+	char outbuf[1024];
+	struct in_addr dc_ip;
+	char *p;
+	fstring my_acct_name;
+	fstring my_mailslot;
+	size_t sid_size;
+
+	if (dc_ss->ss_family != AF_INET) {
+		return false;
+	}
+
+	dc_ip = ((struct sockaddr_in *)dc_ss)->sin_addr;
+	mailslot_name(dc_ip, my_mailslot);
+
+	memset(outbuf, '\0', sizeof(outbuf));
+
+	p = outbuf;
+
+	SCVAL(p, 0, SAMLOGON);
+	p++;
+
+	SCVAL(p, 0, 0); /* Count pointer ... */
+	p++;
+
+	SIVAL(p, 0, 0); /* The sender's token ... */
+	p += 2;
+
+	p += dos_PutUniCode(p, global_myname(),
+			sizeof(outbuf) - PTR_DIFF(p, outbuf), True);
+	fstr_sprintf(my_acct_name, "%s$", global_myname());
+	p += dos_PutUniCode(p, my_acct_name,
+			sizeof(outbuf) - PTR_DIFF(p, outbuf), True);
+
+	if (strlen(my_mailslot)+1 > sizeof(outbuf) - PTR_DIFF(p, outbuf)) {
+		return false;
+	}
+
+	memcpy(p, my_mailslot, strlen(my_mailslot)+1);
+	p += strlen(my_mailslot)+1;
+
+	if (sizeof(outbuf) - PTR_DIFF(p, outbuf) < 8) {
+		return false;
+	}
+
+	SIVAL(p, 0, 0x80);
+	p+=4;
+
+	sid_size = ndr_size_dom_sid(sid, 0);
+
+	SIVAL(p, 0, sid_size);
+	p+=4;
+
+	p = ALIGN4(p, outbuf);
+	if (PTR_DIFF(p, outbuf) > sizeof(outbuf)) {
+		return false;
+	}
+
+	if (sid_size + 8 > sizeof(outbuf) - PTR_DIFF(p, outbuf)) {
+		return false;
+	}
+	if (sid) {
+		sid_linearize(p, sizeof(outbuf) - PTR_DIFF(p, outbuf), sid);
+	}
+
+	p += sid_size;
+
+	SIVAL(p, 0, 1);
+	SSVAL(p, 4, 0xffff);
+	SSVAL(p, 6, 0xffff);
+	p+=8;
+
+	return cli_send_mailslot(msg_ctx,
+				 False, "\\MAILSLOT\\NET\\NTLOGON", 0,
+				 outbuf, PTR_DIFF(p, outbuf),
+				 global_myname(), 0, domain_name, 0x1c,
+				 dc_ss);
+}
+
+bool receive_getdc_response(struct sockaddr_storage *dc_ss,
+			    const char *domain_name,
+			    fstring dc_name)
+{
+	struct packet_struct *packet;
+	fstring my_mailslot;
+	char *buf, *p;
+	fstring dcname, user, domain;
+	int len;
+	struct in_addr dc_ip;
+
+	if (dc_ss->ss_family != AF_INET) {
+		return false;
+	}
+	dc_ip = ((struct sockaddr_in *)dc_ss)->sin_addr;
+	mailslot_name(dc_ip, my_mailslot);
+
+	packet = receive_unexpected(DGRAM_PACKET, 0, my_mailslot);
+
+	if (packet == NULL) {
+		DEBUG(5, ("Did not receive packet for %s\n", my_mailslot));
+		return False;
+	}
+
+	DEBUG(5, ("Received packet for %s\n", my_mailslot));
+
+	buf = packet->packet.dgram.data;
+	len = packet->packet.dgram.datasize;
+
+	if (len < 70) {
+		/* 70 is a completely arbitrary value to make sure
+		   the SVAL below does not read uninitialized memory */
+		DEBUG(3, ("GetDC got short response\n"));
+		return False;
+	}
+
+	/* This should be (buf-4)+SVAL(buf-4, smb_vwv12)... */
+	p = buf+SVAL(buf, smb_vwv10);
+
+	switch (CVAL(p, 0)) {
+	case SAMLOGON_R:
+	case SAMLOGON_UNK_R:
+		p+=2;
+		pull_ucs2(buf, dcname, p, sizeof(dcname), PTR_DIFF(buf+len, p),
+			  STR_TERMINATE|STR_NOALIGN);
+		p = skip_unibuf(p, PTR_DIFF(buf+len, p));
+		pull_ucs2(buf, user, p, sizeof(user), PTR_DIFF(buf+len, p),
+			  STR_TERMINATE|STR_NOALIGN);
+		p = skip_unibuf(p, PTR_DIFF(buf+len, p));
+		pull_ucs2(buf, domain, p, sizeof(domain), PTR_DIFF(buf+len, p),
+			  STR_TERMINATE|STR_NOALIGN);
+		p = skip_unibuf(p, PTR_DIFF(buf+len, p));
+
+		if (!strequal(domain, domain_name)) {
+			DEBUG(3, ("GetDC: Expected domain %s, got %s\n",
+				  domain_name, domain));
+			return False;
+		}
+		break;
+
+	default:
+		DEBUG(8, ("GetDC got invalid response type %d\n", CVAL(p, 0)));
+		return False;
+	}
+	p = dcname;
+	if (*p == '\\')	p += 1;
+	if (*p == '\\')	p += 1;
+
+	fstrcpy(dc_name, p);
+
+	DEBUG(10, ("GetDC gave name %s for domain %s\n",
+		   dc_name, domain));
+
+	return True;
+}
+
diff --git a/source/winbindd/winbindd_cm.c b/source/winbindd/winbindd_cm.c
index 8e275b2..adb631b 100644
--- a/source/winbindd/winbindd_cm.c
+++ b/source/winbindd/winbindd_cm.c
@@ -1021,167 +1021,6 @@ static bool add_sockaddr_to_array(TALLOC_CTX *mem_ctx,
 	return True;
 }
 
-static void mailslot_name(struct in_addr dc_ip, fstring name)
-{
-	fstr_sprintf(name, "\\MAILSLOT\\NET\\GETDC%X", dc_ip.s_addr);
-}
-
-static bool send_getdc_request(struct sockaddr_storage *dc_ss,
-			       const char *domain_name,
-			       const DOM_SID *sid)
-{
-	char outbuf[1024];
-	struct in_addr dc_ip;
-	char *p;
-	fstring my_acct_name;
-	fstring my_mailslot;
-	size_t sid_size;
-
-	if (dc_ss->ss_family != AF_INET) {
-		return false;
-	}
-
-	dc_ip = ((struct sockaddr_in *)dc_ss)->sin_addr;
-	mailslot_name(dc_ip, my_mailslot);
-
-	memset(outbuf, '\0', sizeof(outbuf));
-
-	p = outbuf;
-
-	SCVAL(p, 0, SAMLOGON);
-	p++;
-
-	SCVAL(p, 0, 0); /* Count pointer ... */
-	p++;
-
-	SIVAL(p, 0, 0); /* The sender's token ... */
-	p += 2;
-
-	p += dos_PutUniCode(p, global_myname(),
-			sizeof(outbuf) - PTR_DIFF(p, outbuf), True);
-	fstr_sprintf(my_acct_name, "%s$", global_myname());
-	p += dos_PutUniCode(p, my_acct_name,
-			sizeof(outbuf) - PTR_DIFF(p, outbuf), True);
-
-	if (strlen(my_mailslot)+1 > sizeof(outbuf) - PTR_DIFF(p, outbuf)) {
-		return false;
-	}
-
-	memcpy(p, my_mailslot, strlen(my_mailslot)+1);
-	p += strlen(my_mailslot)+1;
-
-	if (sizeof(outbuf) - PTR_DIFF(p, outbuf) < 8) {
-		return false;
-	}
-
-	SIVAL(p, 0, 0x80);
-	p+=4;
-
-	sid_size = ndr_size_dom_sid(sid, 0);
-
-	SIVAL(p, 0, sid_size);
-	p+=4;
-
-	p = ALIGN4(p, outbuf);
-	if (PTR_DIFF(p, outbuf) > sizeof(outbuf)) {
-		return false;
-	}
-
-	if (sid_size + 8 > sizeof(outbuf) - PTR_DIFF(p, outbuf)) {
-		return false;
-	}
-	sid_linearize(p, sizeof(outbuf) - PTR_DIFF(p, outbuf), sid);
-
-	p += sid_size;
-
-	SIVAL(p, 0, 1);
-	SSVAL(p, 4, 0xffff);
-	SSVAL(p, 6, 0xffff);
-	p+=8;
-
-	return cli_send_mailslot(winbind_messaging_context(),
-				 False, "\\MAILSLOT\\NET\\NTLOGON", 0,
-				 outbuf, PTR_DIFF(p, outbuf),
-				 global_myname(), 0, domain_name, 0x1c,
-				 dc_ss);
-}
-
-static bool receive_getdc_response(struct sockaddr_storage *dc_ss,
-				   const char *domain_name,
-				   fstring dc_name)
-{
-	struct packet_struct *packet;
-	fstring my_mailslot;
-	char *buf, *p;
-	fstring dcname, user, domain;
-	int len;
-	struct in_addr dc_ip;
-
-	if (dc_ss->ss_family != AF_INET) {
-		return false;
-	}
-	dc_ip = ((struct sockaddr_in *)dc_ss)->sin_addr;
-	mailslot_name(dc_ip, my_mailslot);
-
-	packet = receive_unexpected(DGRAM_PACKET, 0, my_mailslot);
-
-	if (packet == NULL) {
-		DEBUG(5, ("Did not receive packet for %s\n", my_mailslot));
-		return False;
-	}
-
-	DEBUG(5, ("Received packet for %s\n", my_mailslot));
-
-	buf = packet->packet.dgram.data;
-	len = packet->packet.dgram.datasize;
-
-	if (len < 70) {
-		/* 70 is a completely arbitrary value to make sure
-		   the SVAL below does not read uninitialized memory */
-		DEBUG(3, ("GetDC got short response\n"));
-		return False;
-	}
-
-	/* This should be (buf-4)+SVAL(buf-4, smb_vwv12)... */
-	p = buf+SVAL(buf, smb_vwv10);
-
-	switch (CVAL(p, 0)) {
-	case SAMLOGON_R:
-	case SAMLOGON_UNK_R:
-		p+=2;
-		pull_ucs2(buf, dcname, p, sizeof(dcname), PTR_DIFF(buf+len, p),
-			  STR_TERMINATE|STR_NOALIGN);
-		p = skip_unibuf(p, PTR_DIFF(buf+len, p));
-		pull_ucs2(buf, user, p, sizeof(user), PTR_DIFF(buf+len, p),
-			  STR_TERMINATE|STR_NOALIGN);
-		p = skip_unibuf(p, PTR_DIFF(buf+len, p));
-		pull_ucs2(buf, domain, p, sizeof(domain), PTR_DIFF(buf+len, p),
-			  STR_TERMINATE|STR_NOALIGN);
-		p = skip_unibuf(p, PTR_DIFF(buf+len, p));
-
-		if (!strequal(domain, domain_name)) {
-			DEBUG(3, ("GetDC: Expected domain %s, got %s\n",
-				  domain_name, domain));
-			return False;
-		}
-		break;
-
-	default:
-		DEBUG(8, ("GetDC got invalid response type %d\n", CVAL(p, 0)));
-		return False;
-	}
-	p = dcname;
-	if (*p == '\\')	p += 1;
-	if (*p == '\\')	p += 1;
-
-	fstrcpy(dc_name, p);
-
-	DEBUG(10, ("GetDC gave name %s for domain %s\n",
-		   dc_name, domain));
-
-	return True;
-}
-
 /*******************************************************************
  convert an ip to a name
 *******************************************************************/
@@ -1253,7 +1092,8 @@ static bool dcip_to_name(const struct winbindd_domain *domain,
 
 	/* try GETDC requests next */
 
-	if (send_getdc_request(pss, domain->name, &domain->sid)) {
+	if (send_getdc_request(winbind_messaging_context(),
+			       pss, domain->name, &domain->sid)) {
 		int i;
 		smb_msleep(100);
 		for (i=0; i<5; i++) {


-- 
Samba Shared Repository


More information about the samba-cvs mailing list