[SCM] Samba Shared Repository - branch master updated

Volker Lendecke vlendec at samba.org
Tue Mar 15 03:00:02 MDT 2011


The branch, master has been updated
       via  420be02 s3: Read uidNumber/gidNumber in pdb_ads_sid_to_id
       via  b0667f7 s3: Remove some unused code
       via  a4d7b3a s3: "hex_encode" does the same as "binary_string"
      from  7c83f69 s4-rpc: added dcesrv_call_account_name()

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 420be02a60ee989f27a0eebea575fd64f98742fe
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 14 21:47:18 2011 +0100

    s3: Read uidNumber/gidNumber in pdb_ads_sid_to_id
    
    Question: How shall we allocate those? Something like the rid allocator?
    
    Autobuild-User: Volker Lendecke <vlendec at samba.org>
    Autobuild-Date: Tue Mar 15 09:59:55 CET 2011 on sn-devel-104

commit b0667f7fda5d8f7fd110645f885c5503281d67f8
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 14 08:10:13 2011 +0100

    s3: Remove some unused code

commit a4d7b3a1dfddc95c1825588cddaee5b4039fa5e2
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 14 08:09:21 2011 +0100

    s3: "hex_encode" does the same as "binary_string"

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

Summary of changes:
 source3/include/proto.h  |    2 -
 source3/lib/util_sid.c   |    2 +-
 source3/lib/util_str.c   |   41 -------------------------
 source3/passdb/pdb_ads.c |   74 ++++++++++++++++++++++++++++------------------
 4 files changed, 46 insertions(+), 73 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index 199ee48..2cb21f5 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -1435,8 +1435,6 @@ size_t strlen_m_ext_term(const char *s, const charset_t src_charset,
 size_t strlen_m(const char *s);
 size_t strlen_m_term(const char *s);
 size_t strlen_m_term_null(const char *s);
-char *binary_string_rfc2254(TALLOC_CTX *mem_ctx, const uint8_t *buf, int len);
-char *binary_string(char *buf, int len);
 int fstr_sprintf(fstring s, const char *fmt, ...);
 bool str_list_sub_basic( char **list, const char *smb_name,
 			 const char *domain_name );
diff --git a/source3/lib/util_sid.c b/source3/lib/util_sid.c
index f6210c1..ef46a38 100644
--- a/source3/lib/util_sid.c
+++ b/source3/lib/util_sid.c
@@ -121,7 +121,7 @@ char *sid_binstring_hex(const struct dom_sid *sid)
 	if (!buf)
 		return NULL;
 	sid_linearize(buf, len, sid);
-	s = binary_string(buf, len);
+	hex_encode(buf, len, &s);
 	free(buf);
 	return s;
 }
diff --git a/source3/lib/util_str.c b/source3/lib/util_str.c
index b26bde8..6a17297 100644
--- a/source3/lib/util_str.c
+++ b/source3/lib/util_str.c
@@ -1576,47 +1576,6 @@ size_t strlen_m_term_null(const char *s)
 
 	return len+1;
 }
-/**
- Return a RFC2254 binary string representation of a buffer.
- Used in LDAP filters.
- Caller must free.
-**/
-
-char *binary_string_rfc2254(TALLOC_CTX *mem_ctx, const uint8_t *buf, int len)
-{
-	char *s;
-	int i, j;
-	const char *hex = "0123456789ABCDEF";
-	s = talloc_array(mem_ctx, char, len * 3 + 1);
-	if (s == NULL) {
-		return NULL;
-	}
-	for (j=i=0;i<len;i++) {
-		s[j] = '\\';
-		s[j+1] = hex[((unsigned char)buf[i]) >> 4];
-		s[j+2] = hex[((unsigned char)buf[i]) & 0xF];
-		j += 3;
-	}
-	s[j] = 0;
-	return s;
-}
-
-char *binary_string(char *buf, int len)
-{
-	char *s;
-	int i, j;
-	const char *hex = "0123456789ABCDEF";
-	s = (char *)SMB_MALLOC(len * 2 + 1);
-	if (!s)
-		return NULL;
-	for (j=i=0;i<len;i++) {
-		s[j]   = hex[((unsigned char)buf[i]) >> 4];
-		s[j+1] = hex[((unsigned char)buf[i]) & 0xF];
-		j += 2;
-	}
-	s[j] = 0;
-	return s;
-}
 
 /**
  Just a typesafety wrapper for snprintf into a fstring.
diff --git a/source3/passdb/pdb_ads.c b/source3/passdb/pdb_ads.c
index ba2193b..5afad1c 100644
--- a/source3/passdb/pdb_ads.c
+++ b/source3/passdb/pdb_ads.c
@@ -2203,46 +2203,62 @@ static bool pdb_ads_sid_to_id(struct pdb_methods *m, const struct dom_sid *sid,
 {
 	struct pdb_ads_state *state = talloc_get_type_abort(
 		m->private_data, struct pdb_ads_state);
+	const char *attrs[4] = { "objectClass", "samAccountType",
+				 "uidNumber", "gidNumber" };
 	struct tldap_message **msg;
-	char *sidstr;
-	uint32_t rid;
+	char *sidstr, *base;
+	uint32_t atype;
 	int rc;
+	bool ret = false;
 
-	/*
-	 * This is a big, big hack: Just hard-code the rid as uid/gid.
-	 */
-
-	sid_peek_rid(sid, &rid);
-
-	sidstr = ldap_encode_ndr_dom_sid(talloc_tos(), sid);
+	sidstr = sid_binstring_hex(sid);
 	if (sidstr == NULL) {
 		return false;
 	}
+	base = talloc_asprintf(talloc_tos(), "<SID=%s>", sidstr);
+	SAFE_FREE(sidstr);
 
 	rc = pdb_ads_search_fmt(
-		state, state->domaindn, TLDAP_SCOPE_SUB,
-		NULL, 0, 0, talloc_tos(), &msg,
-		"(&(objectsid=%s)(objectclass=user))", sidstr);
-	if ((rc == TLDAP_SUCCESS) && (talloc_array_length(msg) > 0)) {
-		id->uid = rid;
-		*type = SID_NAME_USER;
-		TALLOC_FREE(sidstr);
-		return true;
-	}
+		state, base, TLDAP_SCOPE_BASE,
+		attrs, ARRAY_SIZE(attrs), 0, talloc_tos(), &msg,
+		"(objectclass=*)");
+	TALLOC_FREE(base);
 
-	rc = pdb_ads_search_fmt(
-		state, state->domaindn, TLDAP_SCOPE_SUB,
-		NULL, 0, 0, talloc_tos(), &msg,
-		"(&(objectsid=%s)(objectclass=group))", sidstr);
-	if ((rc == TLDAP_SUCCESS) && (talloc_array_length(msg) > 0)) {
-		id->gid = rid;
+	if (rc != TLDAP_SUCCESS) {
+		DEBUG(10, ("pdb_ads_search_fmt failed: %s\n",
+			   tldap_errstr(talloc_tos(), state->ld, rc)));
+		return false;
+	}
+	if (talloc_array_length(msg) != 1) {
+		DEBUG(10, ("Got %d objects, expected 1\n",
+			   talloc_array_length(msg)));
+		goto fail;
+	}
+	if (!tldap_pull_uint32(msg[0], "samAccountType", &atype)) {
+		DEBUG(10, ("samAccountType not found\n"));
+		goto fail;
+	}
+	if (atype == ATYPE_ACCOUNT) {
+		uint32_t uid;
+		*type = SID_NAME_USER;
+		if (!tldap_pull_uint32(msg[0], "uidNumber", &uid)) {
+			DEBUG(10, ("Did not find uidNumber\n"));
+			goto fail;
+		}
+		id->uid = uid;
+	} else {
+		uint32_t gid;
 		*type = SID_NAME_DOM_GRP;
-		TALLOC_FREE(sidstr);
-		return true;
+		if (!tldap_pull_uint32(msg[0], "gidNumber", &gid)) {
+			DEBUG(10, ("Did not find gidNumber\n"));
+			goto fail;
+		}
+		id->gid = gid;
 	}
-
-	TALLOC_FREE(sidstr);
-	return false;
+	ret = true;
+fail:
+	TALLOC_FREE(msg);
+	return ret;
 }
 
 static uint32_t pdb_ads_capabilities(struct pdb_methods *m)


-- 
Samba Shared Repository


More information about the samba-cvs mailing list