[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-unstable-95-g37ee6f4

Stefan Metzmacher metze at sernet.de
Mon Oct 22 07:22:00 GMT 2007


The branch, v3-2-test has been updated
       via  37ee6f498b175b8f3b7e75eba8dd7c709327384c (commit)
       via  5af1b45ed31043f952ec141d0f5f2973aec69d1a (commit)
       via  56640908a6367acfdfd53568a0d329c13330e5eb (commit)
       via  590954407b5badfb9d6b8fb55077dc6a520fb816 (commit)
       via  a1c354866c04a305aa28a287dc6c72db1aa845a9 (commit)
       via  d623b2fa710cfe7ef85b7e9dd84b274b081841ae (commit)
      from  dfef16ac4318b460a5bd29475eb395c1905a5cd8 (commit)

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


- Log -----------------------------------------------------------------
commit 37ee6f498b175b8f3b7e75eba8dd7c709327384c
Author: Simo Sorce <idra at samba.org>
Date:   Mon Oct 8 12:56:57 2007 +0000

    r25573: Add my (C) as well
    (cherry picked from commit a024e27e7136deb87aeed995348a1c494a850ce6)

commit 5af1b45ed31043f952ec141d0f5f2973aec69d1a
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Oct 8 12:25:57 2007 +0000

    r25571: split up child_dispatch_table into domain, idmap and locator tables
    
    metze
    (cherry picked from commit abbb36a37c1dba2218a6c7ec31739eba5f250127)

commit 56640908a6367acfdfd53568a0d329c13330e5eb
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Oct 8 11:15:28 2007 +0000

    r25570: move code of the locator child into its own file
    
    metze

commit 590954407b5badfb9d6b8fb55077dc6a520fb816
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Oct 8 11:13:36 2007 +0000

    r25569: move more idmap stuff into winbindd_idmap.c
    
    metze
    (cherry picked from commit 953229f040580071f6ee09413f67f7edd3227728)

commit a1c354866c04a305aa28a287dc6c72db1aa845a9
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Oct 8 11:11:46 2007 +0000

    r25568: move idmap related functions into their own file.
    
    the final goal is to have 3 child dispatch tables
    'domain', 'idmap' and 'locator' instead of one.
    
    metze
    (cherry picked from commit 97c63f1b95190f3bcc1d9f34765934c97ffb720c)

commit d623b2fa710cfe7ef85b7e9dd84b274b081841ae
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Oct 8 10:54:33 2007 +0000

    r25567: make do_async() non static
    
    metze
    (cherry picked from commit badc714d7f82f8d7c21ecfeab137efb57e970210)

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

Summary of changes:
 source/Makefile.in                 |    2 +
 source/winbindd/winbindd.h         |   13 +
 source/winbindd/winbindd_async.c   |  753 +--------------------------------
 source/winbindd/winbindd_dual.c    |   40 +--
 source/winbindd/winbindd_idmap.c   |  819 ++++++++++++++++++++++++++++++++++++
 source/winbindd/winbindd_locator.c |  102 +++++
 source/winbindd/winbindd_misc.c    |   64 ---
 source/winbindd/winbindd_sid.c     |   12 -
 source/winbindd/winbindd_util.c    |   27 +-
 9 files changed, 972 insertions(+), 860 deletions(-)
 create mode 100644 source/winbindd/winbindd_idmap.c
 create mode 100644 source/winbindd/winbindd_locator.c


Changeset truncated at 500 lines:

diff --git a/source/Makefile.in b/source/Makefile.in
index 4d261d3..ea3708e 100644
--- a/source/Makefile.in
+++ b/source/Makefile.in
@@ -865,6 +865,8 @@ WINBINDD_OBJ1 = \
 		winbindd/winbindd_creds.o \
 		winbindd/winbindd_cred_cache.o \
 		winbindd/winbindd_ccache_access.o \
+		winbindd/winbindd_idmap.o \
+		winbindd/winbindd_locator.o \
 		auth/token_util.o
 
 WINBINDD_OBJ = \
diff --git a/source/winbindd/winbindd.h b/source/winbindd/winbindd.h
index 5fc083f..e4b1396 100644
--- a/source/winbindd/winbindd.h
+++ b/source/winbindd/winbindd.h
@@ -134,6 +134,17 @@ struct winbindd_async_request;
 
 /* Async child */
 
+struct winbindd_domain;
+
+struct winbindd_child_dispatch_table {
+	enum winbindd_cmd cmd;
+	enum winbindd_result (*fn)(struct winbindd_domain *domain,
+				   struct winbindd_cli_state *state);
+	const char *winbindd_cmd_name;
+};
+
+extern const struct winbindd_child_dispatch_table domain_dispatch_table[];
+
 struct winbindd_child {
 	struct winbindd_child *next, *prev;
 
@@ -144,6 +155,8 @@ struct winbindd_child {
 	struct fd_event event;
 	struct timed_event *lockout_policy_event;
 	struct winbindd_async_request *requests;
+
+	const struct winbindd_child_dispatch_table *table;
 };
 
 /* Structures to hold per domain information */
diff --git a/source/winbindd/winbindd_async.c b/source/winbindd/winbindd_async.c
index ae549d0..611ca03 100644
--- a/source/winbindd/winbindd_async.c
+++ b/source/winbindd/winbindd_async.c
@@ -57,12 +57,12 @@ static void do_async_recv(void *private_data, bool success)
 		    state->c, state->private_data);
 }
 
-static void do_async(TALLOC_CTX *mem_ctx, struct winbindd_child *child,
-		     const struct winbindd_request *request,
-		     void (*cont)(TALLOC_CTX *mem_ctx, bool success,
-				  struct winbindd_response *response,
-				  void *c, void *private_data),
-		     void *c, void *private_data)
+void do_async(TALLOC_CTX *mem_ctx, struct winbindd_child *child,
+	      const struct winbindd_request *request,
+	      void (*cont)(TALLOC_CTX *mem_ctx, bool success,
+			   struct winbindd_response *response,
+			   void *c, void *private_data),
+	      void *c, void *private_data)
 {
 	struct do_async_state *state;
 
@@ -111,581 +111,6 @@ void do_async_domain(TALLOC_CTX *mem_ctx, struct winbindd_domain *domain,
 			     &state->response, do_async_recv, state);
 }
 
-static void winbindd_set_mapping_recv(TALLOC_CTX *mem_ctx, bool success,
-				   struct winbindd_response *response,
-				   void *c, void *private_data)
-{
-	void (*cont)(void *priv, bool succ) = (void (*)(void *, bool))c;
-
-	if (!success) {
-		DEBUG(5, ("Could not trigger idmap_set_mapping\n"));
-		cont(private_data, False);
-		return;
-	}
-
-	if (response->result != WINBINDD_OK) {
-		DEBUG(5, ("idmap_set_mapping returned an error\n"));
-		cont(private_data, False);
-		return;
-	}
-
-	cont(private_data, True);
-}
-
-void winbindd_set_mapping_async(TALLOC_CTX *mem_ctx, const struct id_map *map,
-			     void (*cont)(void *private_data, bool success),
-			     void *private_data)
-{
-	struct winbindd_request request;
-	ZERO_STRUCT(request);
-	request.cmd = WINBINDD_DUAL_SET_MAPPING;
-	request.data.dual_idmapset.id = map->xid.id;
-	request.data.dual_idmapset.type = map->xid.type;
-	sid_to_string(request.data.dual_idmapset.sid, map->sid);
-
-	do_async(mem_ctx, idmap_child(), &request, winbindd_set_mapping_recv,
-		 (void *)cont, private_data);
-}
-
-enum winbindd_result winbindd_dual_set_mapping(struct winbindd_domain *domain,
-					    struct winbindd_cli_state *state)
-{
-	struct id_map map;
-	DOM_SID sid;
-	NTSTATUS result;
-
-	DEBUG(3, ("[%5lu]: dual_idmapset\n", (unsigned long)state->pid));
-
-	if (!string_to_sid(&sid, state->request.data.dual_idmapset.sid))
-		return WINBINDD_ERROR;
-
-	map.sid = &sid;
-	map.xid.id = state->request.data.dual_idmapset.id;
-	map.xid.type = state->request.data.dual_idmapset.type;
-	map.status = ID_MAPPED;
-
-	result = idmap_set_mapping(&map);
-	return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
-}
-
-static void winbindd_set_hwm_recv(TALLOC_CTX *mem_ctx, bool success,
-				   struct winbindd_response *response,
-				   void *c, void *private_data)
-{
-	void (*cont)(void *priv, bool succ) = (void (*)(void *, bool))c;
-
-	if (!success) {
-		DEBUG(5, ("Could not trigger idmap_set_hwm\n"));
-		cont(private_data, False);
-		return;
-	}
-
-	if (response->result != WINBINDD_OK) {
-		DEBUG(5, ("idmap_set_hwm returned an error\n"));
-		cont(private_data, False);
-		return;
-	}
-
-	cont(private_data, True);
-}
-
-void winbindd_set_hwm_async(TALLOC_CTX *mem_ctx, const struct unixid *xid,
-			     void (*cont)(void *private_data, bool success),
-			     void *private_data)
-{
-	struct winbindd_request request;
-	ZERO_STRUCT(request);
-	request.cmd = WINBINDD_DUAL_SET_HWM;
-	request.data.dual_idmapset.id = xid->id;
-	request.data.dual_idmapset.type = xid->type;
-
-	do_async(mem_ctx, idmap_child(), &request, winbindd_set_hwm_recv,
-		 (void *)cont, private_data);
-}
-
-enum winbindd_result winbindd_dual_set_hwm(struct winbindd_domain *domain,
-					    struct winbindd_cli_state *state)
-{
-	struct unixid xid;
-	NTSTATUS result;
-
-	DEBUG(3, ("[%5lu]: dual_set_hwm\n", (unsigned long)state->pid));
-
-	xid.id = state->request.data.dual_idmapset.id;
-	xid.type = state->request.data.dual_idmapset.type;
-
-	switch (xid.type) {
-	case ID_TYPE_UID:
-		result = idmap_set_uid_hwm(&xid);
-		break;
-	case ID_TYPE_GID:
-		result = idmap_set_gid_hwm(&xid);
-		break;
-	default:
-		return WINBINDD_ERROR;
-	}
-	return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
-}
-
-static void winbindd_sids2xids_recv(TALLOC_CTX *mem_ctx, bool success,
-			       struct winbindd_response *response,
-			       void *c, void *private_data)
-{
-	void (*cont)(void *priv, bool succ, void *, int) =
-		(void (*)(void *, bool, void *, int))c;
-
-	if (!success) {
-		DEBUG(5, ("Could not trigger sids2xids\n"));
-		cont(private_data, False, NULL, 0);
-		return;
-	}
-
-	if (response->result != WINBINDD_OK) {
-		DEBUG(5, ("sids2xids returned an error\n"));
-		cont(private_data, False, NULL, 0);
-		return;
-	}
-
-	cont(private_data, True, response->extra_data.data, response->length - sizeof(response));
-}
-			 
-void winbindd_sids2xids_async(TALLOC_CTX *mem_ctx, void *sids, int size,
-			 void (*cont)(void *private_data, bool success, void *data, int len),
-			 void *private_data)
-{
-	struct winbindd_request request;
-	ZERO_STRUCT(request);
-	request.cmd = WINBINDD_DUAL_SIDS2XIDS;
-	request.extra_data.data = (char *)sids;
-	request.extra_len = size;
-	do_async(mem_ctx, idmap_child(), &request, winbindd_sids2xids_recv,
-		 (void *)cont, private_data);
-}
-
-enum winbindd_result winbindd_dual_sids2xids(struct winbindd_domain *domain,
-					   struct winbindd_cli_state *state)
-{
-	DOM_SID *sids;
-	struct unixid *xids;
-	struct id_map **ids;
-	NTSTATUS result;
-	int num, i;
-
-	DEBUG(3, ("[%5lu]: sids to unix ids\n", (unsigned long)state->pid));
-
-	if (state->request.extra_len == 0) {
-		DEBUG(0, ("Invalid buffer size!\n"));
-		return WINBINDD_ERROR;
-	}
-
-	sids = (DOM_SID *)state->request.extra_data.data;
-	num = state->request.extra_len / sizeof(DOM_SID);
-
-	ids = TALLOC_ZERO_ARRAY(state->mem_ctx, struct id_map *, num + 1);
-	if ( ! ids) {
-		DEBUG(0, ("Out of memory!\n"));
-		return WINBINDD_ERROR;
-	}
-	for (i = 0; i < num; i++) {
-		ids[i] = TALLOC_P(ids, struct id_map);
-		if ( ! ids[i]) {
-			DEBUG(0, ("Out of memory!\n"));
-			talloc_free(ids);
-			return WINBINDD_ERROR;
-		}
-		ids[i]->sid = &sids[i];
-	}
-
-	result = idmap_sids_to_unixids(ids);
-
-	if (NT_STATUS_IS_OK(result)) {
-
-		xids = SMB_MALLOC_ARRAY(struct unixid, num);
-		if ( ! xids) {
-			DEBUG(0, ("Out of memory!\n"));
-			talloc_free(ids);
-			return WINBINDD_ERROR;
-		}
-		
-		for (i = 0; i < num; i++) {
-			if (ids[i]->status == ID_MAPPED) {
-				xids[i].type = ids[i]->xid.type;
-				xids[i].id = ids[i]->xid.id;
-			} else {
-				xids[i].type = -1;
-			}
-		}
-
-		state->response.length = sizeof(state->response) + (sizeof(struct unixid) * num);
-		state->response.extra_data.data = xids;
-
-	} else {
-		DEBUG (2, ("idmap_sids_to_unixids returned an error: 0x%08x\n", NT_STATUS_V(result)));
-		talloc_free(ids);
-		return WINBINDD_ERROR;
-	}
-
-	talloc_free(ids);
-	return WINBINDD_OK;
-}
-
-static void winbindd_sid2uid_recv(TALLOC_CTX *mem_ctx, bool success,
-			       struct winbindd_response *response,
-			       void *c, void *private_data)
-{
-	void (*cont)(void *priv, bool succ, uid_t uid) =
-		(void (*)(void *, bool, uid_t))c;
-
-	if (!success) {
-		DEBUG(5, ("Could not trigger sid2uid\n"));
-		cont(private_data, False, 0);
-		return;
-	}
-
-	if (response->result != WINBINDD_OK) {
-		DEBUG(5, ("sid2uid returned an error\n"));
-		cont(private_data, False, 0);
-		return;
-	}
-
-	cont(private_data, True, response->data.uid);
-}
-			 
-void winbindd_sid2uid_async(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
-			 void (*cont)(void *private_data, bool success, uid_t uid),
-			 void *private_data)
-{
-	struct winbindd_request request;
-	ZERO_STRUCT(request);
-	request.cmd = WINBINDD_DUAL_SID2UID;
-	sid_to_string(request.data.dual_sid2id.sid, sid);
-	do_async(mem_ctx, idmap_child(), &request, winbindd_sid2uid_recv,
-		 (void *)cont, private_data);
-}
-
-enum winbindd_result winbindd_dual_sid2uid(struct winbindd_domain *domain,
-					   struct winbindd_cli_state *state)
-{
-	DOM_SID sid;
-	NTSTATUS result;
-
-	DEBUG(3, ("[%5lu]: sid to uid %s\n", (unsigned long)state->pid,
-		  state->request.data.dual_sid2id.sid));
-
-	if (!string_to_sid(&sid, state->request.data.dual_sid2id.sid)) {
-		DEBUG(1, ("Could not get convert sid %s from string\n",
-			  state->request.data.dual_sid2id.sid));
-		return WINBINDD_ERROR;
-	}
-
-	/* Find uid for this sid and return it, possibly ask the slow remote idmap */
-
-	result = idmap_sid_to_uid(&sid, &(state->response.data.uid));
-
-	return NT_STATUS_IS_OK(result) ? WINBINDD_OK : WINBINDD_ERROR;
-}
-
-#if 0	/* not used */
-static void uid2name_recv(TALLOC_CTX *mem_ctx, bool success,
-			  struct winbindd_response *response,
-			  void *c, void *private_data);
-
-void winbindd_uid2name_async(TALLOC_CTX *mem_ctx, uid_t uid,
-			     void (*cont)(void *private_data, bool success,
-					  const char *name),
-			     void *private_data)
-{
-	struct winbindd_request request;
-	ZERO_STRUCT(request);
-	request.cmd = WINBINDD_DUAL_UID2NAME;
-	request.data.uid = uid;
-	do_async(mem_ctx, idmap_child(), &request, uid2name_recv,
-		 (void *)cont, private_data);
-}
-#endif	/* not used */
-
-enum winbindd_result winbindd_dual_uid2name(struct winbindd_domain *domain,
-					    struct winbindd_cli_state *state)
-{
-	struct passwd *pw;
-
-	DEBUG(3, ("[%5lu]: uid2name %lu\n", (unsigned long)state->pid, 
-		  (unsigned long)state->request.data.uid));
-
-	pw = getpwuid(state->request.data.uid);
-	if (pw == NULL) {
-		DEBUG(5, ("User %lu not found\n",
-			  (unsigned long)state->request.data.uid));
-		return WINBINDD_ERROR;
-	}
-
-	fstrcpy(state->response.data.name.name, pw->pw_name);
-	return WINBINDD_OK;
-}
-
-#if 0	/* not used */
-static void uid2name_recv(TALLOC_CTX *mem_ctx, bool success,
-			  struct winbindd_response *response,
-			  void *c, void *private_data)
-{
-	void (*cont)(void *priv, bool succ, const char *name) =
-		(void (*)(void *, bool, const char *))c;
-
-	if (!success) {
-		DEBUG(5, ("Could not trigger uid2name\n"));
-		cont(private_data, False, NULL);
-		return;
-	}
-
-	if (response->result != WINBINDD_OK) {
-		DEBUG(5, ("uid2name returned an error\n"));
-		cont(private_data, False, NULL);
-		return;
-	}
-
-	cont(private_data, True, response->data.name.name);
-}
-
-static void name2uid_recv(TALLOC_CTX *mem_ctx, bool success,
-			  struct winbindd_response *response,
-			  void *c, void *private_data);
-
-static void winbindd_name2uid_async(TALLOC_CTX *mem_ctx, const char *name,
-				    void (*cont)(void *private_data, bool success,
-						 uid_t uid),
-				    void *private_data)
-{
-	struct winbindd_request request;
-	ZERO_STRUCT(request);
-	request.cmd = WINBINDD_DUAL_NAME2UID;
-	fstrcpy(request.data.username, name);
-	do_async(mem_ctx, idmap_child(), &request, name2uid_recv,
-		 (void *)cont, private_data);
-}
-#endif	/* not used */
-
-enum winbindd_result winbindd_dual_name2uid(struct winbindd_domain *domain,
-					    struct winbindd_cli_state *state)
-{
-	struct passwd *pw;
-
-	/* Ensure null termination */
-	state->request.data.username
-		[sizeof(state->request.data.username)-1] = '\0';
-
-	DEBUG(3, ("[%5lu]: name2uid %s\n", (unsigned long)state->pid, 
-		  state->request.data.username));
-
-	pw = getpwnam(state->request.data.username);
-	if (pw == NULL) {
-		return WINBINDD_ERROR;
-	}
-
-	state->response.data.uid = pw->pw_uid;
-	return WINBINDD_OK;
-}
-
-#if 0	/* not used */
-static void name2uid_recv(TALLOC_CTX *mem_ctx, bool success,
-			  struct winbindd_response *response,
-			  void *c, void *private_data)
-{
-	void (*cont)(void *priv, bool succ, uid_t uid) =
-		(void (*)(void *, bool, uid_t))c;
-
-	if (!success) {
-		DEBUG(5, ("Could not trigger name2uid\n"));
-		cont(private_data, False, 0);
-		return;
-	}
-
-	if (response->result != WINBINDD_OK) {
-		DEBUG(5, ("name2uid returned an error\n"));
-		cont(private_data, False, 0);
-		return;
-	}
-
-	cont(private_data, True, response->data.uid);
-}
-#endif	/* not used */
-
-static void winbindd_sid2gid_recv(TALLOC_CTX *mem_ctx, bool success,
-			       struct winbindd_response *response,
-			       void *c, void *private_data)
-{
-	void (*cont)(void *priv, bool succ, gid_t gid) =
-		(void (*)(void *, bool, gid_t))c;
-
-	if (!success) {
-		DEBUG(5, ("Could not trigger sid2gid\n"));
-		cont(private_data, False, 0);
-		return;
-	}
-
-	if (response->result != WINBINDD_OK) {
-		DEBUG(5, ("sid2gid returned an error\n"));
-		cont(private_data, False, 0);
-		return;
-	}
-
-	cont(private_data, True, response->data.gid);
-}
-			 
-void winbindd_sid2gid_async(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
-			 void (*cont)(void *private_data, bool success, gid_t gid),
-			 void *private_data)
-{
-	struct winbindd_request request;
-	ZERO_STRUCT(request);
-	request.cmd = WINBINDD_DUAL_SID2GID;
-	sid_to_string(request.data.dual_sid2id.sid, sid);
-


-- 
Samba Shared Repository


More information about the samba-cvs mailing list