[prev in list] [next in list] [prev in thread] [next in thread] 

List:       samba-technical
Subject:    Re: [PATCH] Fixing Bug 10720 - error: Unable to convert first SID
From:       Garming Sam <garming () catalyst ! net ! nz>
Date:       2014-11-28 2:35:26
Message-ID: 5477DF6E.1060901 () catalyst ! net ! nz
[Download RAW message or body]

On 26/11/14 16:11, Garming Sam wrote:
> The first two patches improves our current testing to correctly 
> identify the error. They simply build upon the existing wbinfo_sid2xid 
> tests and are currently in auto-build.
>
> The other three patches fix the actual issue. The first plumbs a 
> pointer to struct unixid instead of uid/gid. The second fixes the 
> return of the id type and the last fixes the ABI - which with 
> renaming, we can also fix another bug 
> (https://bugzilla.samba.org/show_bug.cgi?id=10355) where it has naming 
> conflicts with Brookhaven Protein DataBank libpdb.
>

The first two patches are now in master, with a minor change to flush 
the cache for the other tests.

The other three only appear to have failed the duplicate symbol check so 
I've reattached the patches with the build scripts slightly modified so 
they don't depend on pdb directly.


Thoughts would be nice.


Thanks,

Garming Sam

["0001-idmap-unify-passdb-id_to_sid-methods.patch" (text/x-patch)]

From 1f0d591086e873057e9f0d328dc0efbc0ba16b21 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming@catalyst.net.nz>
Date: Tue, 25 Nov 2014 14:45:26 +1300
Subject: [PATCH 1/3] idmap: unify passdb *id_to_sid methods

Instead of passing down gid or uid, a pointer to a unixid is now sent
down. This acts as an in-out variable so that the idmap functions can
correctly receive ID_TYPE_BOTH, filling in cache details correctly
rather than forcing the cache to store ID_TYPE_UID or ID_TYPE_GID.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=10720

Change-Id: I11409a0f498e61a3c0a6ae606dd7af1135e6b066
Pair-programmed-with: Andrew Bartlett <abarlet@samba.org>
Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
---
 source3/include/passdb.h        | 28 ++++++++++++++++------
 source3/passdb/lookup_sid.c     | 19 ++++++++++++---
 source3/passdb/pdb_interface.c  | 51 +++++++++++++++++++++--------------------
 source3/passdb/pdb_ldap.c       | 24 ++++++++++++++++---
 source3/passdb/pdb_samba_dsdb.c | 46 +++++++++++--------------------------
 source3/passdb/pdb_wbc_sam.c    | 23 +++++++++++--------
 source3/passdb/py_passdb.c      | 13 +++++++++--
 source3/utils/net_sam.c         |  6 ++++-
 source3/winbindd/idmap_passdb.c | 16 ++-----------
 9 files changed, 129 insertions(+), 97 deletions(-)

diff --git a/source3/include/passdb.h b/source3/include/passdb.h
index 86cb16e..16e3bef 100644
--- a/source3/include/passdb.h
+++ b/source3/include/passdb.h
@@ -415,9 +415,10 @@ enum pdb_policy_type {
  * Changed to 21, set/enum_upn_suffixes. AB.
  * Changed to 22, idmap control functions
  * Changed to 23, new idmap control functions
+ * Changed to 24, removed uid_to_sid and gid_to_sid, replaced with id_to_sid
  */
 
-#define PASSDB_INTERFACE_VERSION 23
+#define PASSDB_INTERFACE_VERSION 24
 
 struct pdb_methods 
 {
@@ -560,10 +561,16 @@ struct pdb_methods
 			       struct pdb_search *search,
 			       const struct dom_sid *sid);
 
-	bool (*uid_to_sid)(struct pdb_methods *methods, uid_t uid,
-			   struct dom_sid *sid);
-	bool (*gid_to_sid)(struct pdb_methods *methods, gid_t gid,
-			   struct dom_sid *sid);
+	/* 
+	 * Instead of passing down a gid or uid, this function sends down a pointer
+	 * to a unixid. 
+	 *
+	 * This acts as an in-out variable so that the idmap functions can correctly
+	 * receive ID_TYPE_BOTH, filling in cache details correctly rather than forcing
+	 * the cache to store ID_TYPE_UID or ID_TYPE_GID. 
+	 */
+	bool (*id_to_sid)(struct pdb_methods *methods, struct unixid *id,
+			  struct dom_sid *sid);
 	bool (*sid_to_id)(struct pdb_methods *methods, const struct dom_sid *sid,
 			  struct unixid *id);
 
@@ -889,8 +896,15 @@ NTSTATUS pdb_lookup_names(const struct dom_sid *domain_sid,
 bool pdb_get_account_policy(enum pdb_policy_type type, uint32_t *value);
 bool pdb_set_account_policy(enum pdb_policy_type type, uint32_t value);
 bool pdb_get_seq_num(time_t *seq_num);
-bool pdb_uid_to_sid(uid_t uid, struct dom_sid *sid);
-bool pdb_gid_to_sid(gid_t gid, struct dom_sid *sid);
+/* 
+ * Instead of passing down a gid or uid, this function sends down a pointer
+ * to a unixid. 
+ *
+ * This acts as an in-out variable so that the idmap functions can correctly
+ * receive ID_TYPE_BOTH, filling in cache details correctly rather than forcing
+ * the cache to store ID_TYPE_UID or ID_TYPE_GID. 
+ */
+bool pdb_id_to_sid(struct unixid *id, struct dom_sid *sid);
 bool pdb_sid_to_id(const struct dom_sid *sid, struct unixid *id);
 uint32_t pdb_capabilities(void);
 bool pdb_new_rid(uint32_t *rid);
diff --git a/source3/passdb/lookup_sid.c b/source3/passdb/lookup_sid.c
index d541719..494a840 100644
--- a/source3/passdb/lookup_sid.c
+++ b/source3/passdb/lookup_sid.c
@@ -1029,11 +1029,15 @@ bool lookup_sid(TALLOC_CTX *mem_ctx, const struct dom_sid *sid,
 static void legacy_uid_to_sid(struct dom_sid *psid, uid_t uid)
 {
 	bool ret;
+	struct unixid id;
 
 	ZERO_STRUCTP(psid);
 
+	id.id = uid;
+	id.type = ID_TYPE_UID;
+
 	become_root();
-	ret = pdb_uid_to_sid(uid, psid);
+	ret = pdb_id_to_sid(&id, psid);
 	unbecome_root();
 
 	if (ret) {
@@ -1059,11 +1063,15 @@ static void legacy_uid_to_sid(struct dom_sid *psid, uid_t uid)
 static void legacy_gid_to_sid(struct dom_sid *psid, gid_t gid)
 {
 	bool ret;
+	struct unixid id;
 
 	ZERO_STRUCTP(psid);
 
+	id.id = gid;
+	id.type = ID_TYPE_GID;
+
 	become_root();
-	ret = pdb_gid_to_sid(gid, psid);
+	ret = pdb_id_to_sid(&id, psid);
 	unbecome_root();
 
 	if (ret) {
@@ -1527,8 +1535,13 @@ NTSTATUS get_primary_group_sid(TALLOC_CTX *mem_ctx,
 			}
 		} else {
 			/* Try group mapping */
+			struct unixid id;
+
+			id.id = pwd->pw_gid;
+			id.type = ID_TYPE_GID;
+
 			ZERO_STRUCTP(group_sid);
-			if (pdb_gid_to_sid(pwd->pw_gid, group_sid)) {
+			if (pdb_id_to_sid(&id, group_sid)) {
 				need_lookup_sid = true;
 			}
 		}
diff --git a/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c
index ed42961..9dee9d2 100644
--- a/source3/passdb/pdb_interface.c
+++ b/source3/passdb/pdb_interface.c
@@ -1204,35 +1204,23 @@ bool pdb_get_seq_num(time_t *seq_num)
 	return NT_STATUS_IS_OK(pdb->get_seq_num(pdb, seq_num));
 }
 
-bool pdb_uid_to_sid(uid_t uid, struct dom_sid *sid)
-{
-	struct pdb_methods *pdb = pdb_get_methods();
-	bool ret;
-
-	ret = pdb->uid_to_sid(pdb, uid, sid);
-
-	if (ret == true) {
-		struct unixid id;
-		id.id = uid;
-		id.type = ID_TYPE_UID;
-		idmap_cache_set_sid2unixid(sid, &id);
-	}
-
-	return ret;
-}
-
-bool pdb_gid_to_sid(gid_t gid, struct dom_sid *sid)
+/* 
+ * Instead of passing down a gid or uid, this function sends down a pointer
+ * to a unixid. 
+ *
+ * This acts as an in-out variable so that the idmap functions can correctly
+ * receive ID_TYPE_BOTH, filling in cache details correctly rather than forcing
+ * the cache to store ID_TYPE_UID or ID_TYPE_GID. 
+ */
+bool pdb_id_to_sid(struct unixid *id, struct dom_sid *sid)
 {
 	struct pdb_methods *pdb = pdb_get_methods();
 	bool ret;
 
-	ret = pdb->gid_to_sid(pdb, gid, sid);
+	ret = pdb->id_to_sid(pdb, id, sid);
 
 	if (ret == true) {
-		struct unixid id;
-		id.id = gid;
-		id.type = ID_TYPE_GID;
-		idmap_cache_set_sid2unixid(sid, &id);
+		idmap_cache_set_sid2unixid(sid, id);
 	}
 
 	return ret;
@@ -1458,6 +1446,20 @@ static bool pdb_default_gid_to_sid(struct pdb_methods *methods, gid_t gid,
 	return true;
 }
 
+static bool pdb_default_id_to_sid(struct pdb_methods *methods, struct unixid *id,
+				   struct dom_sid *sid)
+{
+	switch (id->type) {
+	case ID_TYPE_UID:
+		return pdb_default_uid_to_sid(methods, id->id, sid);
+
+	case ID_TYPE_GID:
+		return pdb_default_gid_to_sid(methods, id->id, sid);
+
+	default:
+		return false;
+	}
+}
 /**
  * The "Unix User" and "Unix Group" domains have a special
  * id mapping that is a rid-algorithm with range starting at 0.
@@ -2614,8 +2616,7 @@ NTSTATUS make_pdb_method( struct pdb_methods **methods )
 	(*methods)->get_account_policy = pdb_default_get_account_policy;
 	(*methods)->set_account_policy = pdb_default_set_account_policy;
 	(*methods)->get_seq_num = pdb_default_get_seq_num;
-	(*methods)->uid_to_sid = pdb_default_uid_to_sid;
-	(*methods)->gid_to_sid = pdb_default_gid_to_sid;
+	(*methods)->id_to_sid = pdb_default_id_to_sid;
 	(*methods)->sid_to_id = pdb_default_sid_to_id;
 
 	(*methods)->search_groups = pdb_default_search_groups;
diff --git a/source3/passdb/pdb_ldap.c b/source3/passdb/pdb_ldap.c
index 0458e56..0d2c302 100644
--- a/source3/passdb/pdb_ldap.c
+++ b/source3/passdb/pdb_ldap.c
@@ -3017,6 +3017,7 @@ static NTSTATUS ldapsam_add_group_mapping_entry(struct pdb_methods *methods,
 	NTSTATUS result;
 
 	struct dom_sid sid;
+	struct unixid id;
 
 	int rc;
 
@@ -3082,7 +3083,10 @@ static NTSTATUS ldapsam_add_group_mapping_entry(struct pdb_methods *methods,
 		goto done;
 	}
 
-	if (pdb_gid_to_sid(map->gid, &sid)) {
+	id.id = map->gid;
+	id.type = ID_TYPE_GID;
+
+	if (pdb_id_to_sid(&id, &sid)) {
 		DEBUG(3, ("Gid %u is already mapped to SID %s, refusing to "
 			  "add\n", (unsigned int)map->gid, sid_string_dbg(&sid)));
 		result = NT_STATUS_GROUP_EXISTS;
@@ -5128,6 +5132,21 @@ static bool ldapsam_gid_to_sid(struct pdb_methods *methods, gid_t gid,
 	return ret;
 }
 
+static bool ldapsam_id_to_sid(struct pdb_methods *methods, struct unixid *id,
+				   struct dom_sid *sid)
+{
+	switch (id->type) {
+	case ID_TYPE_UID:
+		return ldapsam_uid_to_sid(methods, id->id, sid);
+
+	case ID_TYPE_GID:
+		return ldapsam_gid_to_sid(methods, id->id, sid);
+
+	default:
+		return false;
+	}
+}
+
 
 /*
  * The following functions are called only if
@@ -6487,8 +6506,7 @@ NTSTATUS pdb_ldapsam_init_common(struct pdb_methods **pdb_method,
 			ldapsam_enum_group_memberships;
 		(*pdb_method)->lookup_rids = ldapsam_lookup_rids;
 		(*pdb_method)->sid_to_id = ldapsam_sid_to_id;
-		(*pdb_method)->uid_to_sid = ldapsam_uid_to_sid;
-		(*pdb_method)->gid_to_sid = ldapsam_gid_to_sid;
+		(*pdb_method)->id_to_sid = ldapsam_id_to_sid;
 
 		if (lp_parm_bool(-1, "ldapsam", "editposix", False)) {
 			(*pdb_method)->create_user = ldapsam_create_user;
diff --git a/source3/passdb/pdb_samba_dsdb.c b/source3/passdb/pdb_samba_dsdb.c
index 465cc24..5fa2c2f 100644
--- a/source3/passdb/pdb_samba_dsdb.c
+++ b/source3/passdb/pdb_samba_dsdb.c
@@ -2042,8 +2042,16 @@ static bool pdb_samba_dsdb_search_aliases(struct pdb_methods *m,
 	return true;
 }
 
-static bool pdb_samba_dsdb_uid_to_sid(struct pdb_methods *m, uid_t uid,
-			       struct dom_sid *sid)
+/* 
+ * Instead of taking a gid or uid, this function takes a pointer to a 
+ * unixid. 
+ *
+ * This acts as an in-out variable so that the idmap functions can correctly
+ * receive ID_TYPE_BOTH, and this function ensures cache details are filled
+ * correctly rather than forcing the cache to store ID_TYPE_UID or ID_TYPE_GID. 
+ */
+static bool pdb_samba_dsdb_id_to_sid(struct pdb_methods *m, struct unixid *id,
+				     struct dom_sid *sid)
 {
 	struct pdb_samba_dsdb_state *state = talloc_get_type_abort(
 		m->private_data, struct pdb_samba_dsdb_state);
@@ -2055,8 +2063,7 @@ static bool pdb_samba_dsdb_uid_to_sid(struct pdb_methods *m, uid_t uid,
 		return false;
 	}
 
-	id_map.xid.id = uid;
-	id_map.xid.type = ID_TYPE_UID;
+	id_map.xid = *id;
 	id_maps[0] = &id_map;
 	id_maps[1] = NULL;
 
@@ -2065,33 +2072,9 @@ static bool pdb_samba_dsdb_uid_to_sid(struct pdb_methods *m, uid_t uid,
 		talloc_free(tmp_ctx);
 		return false;
 	}
-	*sid = *id_map.sid;
-	talloc_free(tmp_ctx);
-	return true;
-}
 
-static bool pdb_samba_dsdb_gid_to_sid(struct pdb_methods *m, gid_t gid,
-			       struct dom_sid *sid)
-{
-	struct pdb_samba_dsdb_state *state = talloc_get_type_abort(
-		m->private_data, struct pdb_samba_dsdb_state);
-	NTSTATUS status;
-	struct id_map id_map;
-	struct id_map *id_maps[2];
-	TALLOC_CTX *tmp_ctx = talloc_stackframe();
-	if (!tmp_ctx) {
-		return false;
-	}
-
-	id_map.xid.id = gid;
-	id_map.xid.type = ID_TYPE_GID;
-	id_maps[0] = &id_map;
-	id_maps[1] = NULL;
-
-	status = idmap_xids_to_sids(state->idmap_ctx, tmp_ctx, id_maps);
-	if (!NT_STATUS_IS_OK(status)) {
-		talloc_free(tmp_ctx);
-		return false;
+	if (id_map.xid.type != ID_TYPE_NOT_SPECIFIED) {
+		id->type = id_map.xid.type;
 	}
 	*sid = *id_map.sid;
 	talloc_free(tmp_ctx);
@@ -2341,8 +2324,7 @@ static void pdb_samba_dsdb_init_methods(struct pdb_methods *m)
 	m->search_users = pdb_samba_dsdb_search_users;
 	m->search_groups = pdb_samba_dsdb_search_groups;
 	m->search_aliases = pdb_samba_dsdb_search_aliases;
-	m->uid_to_sid = pdb_samba_dsdb_uid_to_sid;
-	m->gid_to_sid = pdb_samba_dsdb_gid_to_sid;
+	m->id_to_sid = pdb_samba_dsdb_id_to_sid;
 	m->sid_to_id = pdb_samba_dsdb_sid_to_id;
 	m->capabilities = pdb_samba_dsdb_capabilities;
 	m->new_rid = pdb_samba_dsdb_new_rid;
diff --git a/source3/passdb/pdb_wbc_sam.c b/source3/passdb/pdb_wbc_sam.c
index 2343649..b20a35a 100644
--- a/source3/passdb/pdb_wbc_sam.c
+++ b/source3/passdb/pdb_wbc_sam.c
@@ -40,6 +40,7 @@
 #include "passdb.h"
 #include "lib/winbind_util.h"
 #include "passdb/pdb_wbc_sam.h"
+#include "idmap.h"
 
 /***************************************************************************
   Default implementations of some functions.
@@ -72,16 +73,19 @@ static NTSTATUS pdb_wbc_sam_getsampwsid(struct pdb_methods *methods, struct samu
 	return _pdb_wbc_sam_getsampw(methods, user, winbind_getpwsid(sid));
 }
 
-static bool pdb_wbc_sam_uid_to_sid(struct pdb_methods *methods, uid_t uid,
-				   struct dom_sid *sid)
+static bool pdb_wbc_sam_id_to_sid(struct pdb_methods *methods, struct unixid *id,
+				  struct dom_sid *sid)
 {
-	return winbind_uid_to_sid(sid, uid);
-}
+	switch (id->type) {
+	case ID_TYPE_UID:
+		return winbind_uid_to_sid(sid, id->id);
 
-static bool pdb_wbc_sam_gid_to_sid(struct pdb_methods *methods, gid_t gid,
-				   struct dom_sid *sid)
-{
-	return winbind_gid_to_sid(sid, gid);
+	case ID_TYPE_GID:
+		return winbind_gid_to_sid(sid, id->id);
+
+	default:
+		return false;
+	}
 }
 
 static NTSTATUS pdb_wbc_sam_enum_group_members(struct pdb_methods *methods,
@@ -426,8 +430,7 @@ static NTSTATUS pdb_init_wbc_sam(struct pdb_methods **pdb_method, const char *lo
 	(*pdb_method)->lookup_rids = pdb_wbc_sam_lookup_rids;
 	(*pdb_method)->get_account_policy = pdb_wbc_sam_get_account_policy;
 	(*pdb_method)->set_account_policy = pdb_wbc_sam_set_account_policy;
-	(*pdb_method)->uid_to_sid = pdb_wbc_sam_uid_to_sid;
-	(*pdb_method)->gid_to_sid = pdb_wbc_sam_gid_to_sid;
+	(*pdb_method)->id_to_sid = pdb_wbc_sam_id_to_sid;
 
 	(*pdb_method)->search_groups = pdb_wbc_sam_search_groups;
 	(*pdb_method)->search_aliases = pdb_wbc_sam_search_aliases;
diff --git a/source3/passdb/py_passdb.c b/source3/passdb/py_passdb.c
index dec45c3..3a1e583 100644
--- a/source3/passdb/py_passdb.c
+++ b/source3/passdb/py_passdb.c
@@ -25,6 +25,7 @@
 #include "librpc/gen_ndr/idmap.h"
 #include "passdb.h"
 #include "secrets.h"
+#include "idmap.h"
 
 /* There's no Py_ssize_t in 2.4, apparently */
 #if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 5
@@ -2678,6 +2679,7 @@ static PyObject *py_pdb_uid_to_sid(pytalloc_Object *self, PyObject *args)
 {
 	TALLOC_CTX *frame = talloc_stackframe();
 	struct pdb_methods *methods;
+	struct unixid id;
 	unsigned int uid;
 	struct dom_sid user_sid, *copy_user_sid;
 	PyObject *py_user_sid;
@@ -2689,7 +2691,10 @@ static PyObject *py_pdb_uid_to_sid(pytalloc_Object *self, PyObject *args)
 
 	methods = pytalloc_get_ptr(self);
 
-	if (!methods->uid_to_sid(methods, uid, &user_sid)) {
+	id.id = uid;
+	id.type = ID_TYPE_UID;
+
+	if (!methods->id_to_sid(methods, &id, &user_sid)) {
 		PyErr_Format(py_pdb_error, "Unable to get sid for uid=%d", uid);
 		talloc_free(frame);
 		return NULL;
@@ -2713,6 +2718,7 @@ static PyObject *py_pdb_gid_to_sid(pytalloc_Object *self, PyObject *args)
 {
 	TALLOC_CTX *frame = talloc_stackframe();
 	struct pdb_methods *methods;
+	struct unixid id;
 	unsigned int gid;
 	struct dom_sid group_sid, *copy_group_sid;
 	PyObject *py_group_sid;
@@ -2722,9 +2728,12 @@ static PyObject *py_pdb_gid_to_sid(pytalloc_Object *self, PyObject *args)
 		return NULL;
 	}
 
+	id.id = gid;
+	id.type = ID_TYPE_GID;
+
 	methods = pytalloc_get_ptr(self);
 
-	if (!methods->gid_to_sid(methods, gid, &group_sid)) {
+	if (!methods->id_to_sid(methods, &id, &group_sid)) {
 		PyErr_Format(py_pdb_error, "Unable to get sid for gid=%d", gid);
 		talloc_free(frame);
 		return NULL;
diff --git a/source3/utils/net_sam.c b/source3/utils/net_sam.c
index aadabc1..2ee9a91 100644
--- a/source3/utils/net_sam.c
+++ b/source3/utils/net_sam.c
@@ -30,6 +30,7 @@
 #include "passdb/pdb_ldap_schema.h"
 #include "lib/privileges.h"
 #include "secrets.h"
+#include "idmap.h"
 
 /*
  * Set a user's data
@@ -912,6 +913,7 @@ static int net_sam_mapunixgroup(struct net_context *c, int argc, const char **ar
 static NTSTATUS unmap_unix_group(const struct group *grp)
 {
         struct dom_sid dom_sid;
+	struct unixid id;
 
         if (!lookup_name(talloc_tos(), grp->gr_name, LOOKUP_NAME_LOCAL,
                         NULL, NULL, NULL, NULL)) {
@@ -919,7 +921,9 @@ static NTSTATUS unmap_unix_group(const struct group *grp)
                 return NT_STATUS_NO_SUCH_GROUP;
         }
 
-        if (!pdb_gid_to_sid(grp->gr_gid, &dom_sid)) {
+	id.id = grp->gr_gid;
+	id.type = ID_TYPE_GID;
+        if (!pdb_id_to_sid(&id, &dom_sid)) {
                 return NT_STATUS_UNSUCCESSFUL;
         }
 
diff --git a/source3/winbindd/idmap_passdb.c b/source3/winbindd/idmap_passdb.c
index e547e9b..cf8ad74 100644
--- a/source3/winbindd/idmap_passdb.c
+++ b/source3/winbindd/idmap_passdb.c
@@ -44,23 +44,11 @@ static NTSTATUS idmap_pdb_unixids_to_sids(struct idmap_domain *dom, struct id_ma
 	int i;
 
 	for (i = 0; ids[i]; i++) {
-
 		/* unmapped by default */
 		ids[i]->status = ID_UNMAPPED;
 
-		switch (ids[i]->xid.type) {
-		case ID_TYPE_UID:
-			if (pdb_uid_to_sid((uid_t)ids[i]->xid.id, ids[i]->sid)) {
-				ids[i]->status = ID_MAPPED;
-			}
-			break;
-		case ID_TYPE_GID:
-			if (pdb_gid_to_sid((gid_t)ids[i]->xid.id, ids[i]->sid)) {
-				ids[i]->status = ID_MAPPED;
-			}
-			break;
-		default: /* ?? */
-			ids[i]->status = ID_UNKNOWN;
+		if (pdb_id_to_sid(&ids[i]->xid, ids[i]->sid)) {
+			ids[i]->status = ID_MAPPED;
 		}
 	}
 
-- 
1.9.1


["0002-idmap-return-the-correct-id-type-to-id_to_sid-method.patch" (text/x-patch)]

From 4a4369ecef23b01f48898ec7b3427404820927bf Mon Sep 17 00:00:00 2001
From: Garming Sam <garming@catalyst.net.nz>
Date: Wed, 26 Nov 2014 15:33:35 +1300
Subject: [PATCH 2/3] idmap: return the correct id type to *id_to_sid methods

We have a pointer to a unixid which is sent down instead of a uid or
gid. We can use this as an in-out variable so that pdb_samba_dsdb can be
returned ID_TYPE_BOTH to cache correctly instead of leaving it as
ID_TYPE_UID or ID_TYPE_GID.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=10720

Change-Id: I0cef2e419cbb337531244b7b41c708cf2ab883e3
Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
---
 selftest/knownfail      |  2 --
 source4/winbind/idmap.c | 20 +++++++++++++++++++-
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/selftest/knownfail b/selftest/knownfail
index e9e6239..1c4f446 100644
--- a/selftest/knownfail
+++ b/selftest/knownfail
@@ -230,8 +230,6 @@
 ^samba3.rpc.spoolss.printer.addprinterex.driver_info_winreg # knownfail or flapping?
 ^samba3.rpc.spoolss.printer.*.publish_toggle\(.*\)$ # needs spoolss AD member env
 ^samba3.rpc.spoolss.printserver.*.add_processor\(.*\)$
-^samba.wbinfo_sids2xids.\(plugin_s4_dc:local\)
-^samba.wbinfo_sids2xids.\(s4member:local\)
 #
 # The following tests fail against plugin_s4_dc (aka s3fs) currently.
 # These need to be examined and either fixed or correctly categorised.
diff --git a/source4/winbind/idmap.c b/source4/winbind/idmap.c
index 54fea18..26a4664 100644
--- a/source4/winbind/idmap.c
+++ b/source4/winbind/idmap.c
@@ -208,7 +208,7 @@ struct idmap_context *idmap_init(TALLOC_CTX *mem_ctx,
 
 static NTSTATUS idmap_xid_to_sid(struct idmap_context *idmap_ctx,
 				 TALLOC_CTX *mem_ctx,
-				 const struct unixid *unixid,
+				 struct unixid *unixid,
 				 struct dom_sid **sid)
 {
 	int ret;
@@ -321,6 +321,9 @@ static NTSTATUS idmap_xid_to_sid(struct idmap_context *idmap_ctx,
 	}
 
 	if (res->count == 1) {
+		const char *type = ldb_msg_find_attr_as_string(res->msgs[0],
+							       "type", NULL);
+
 		*sid = idmap_msg_get_dom_sid(mem_ctx, res->msgs[0],
 					     "objectSid");
 		if (*sid == NULL) {
@@ -328,6 +331,21 @@ static NTSTATUS idmap_xid_to_sid(struct idmap_context *idmap_ctx,
 			status = NT_STATUS_NONE_MAPPED;
 			goto failed;
 		}
+
+		if (type == NULL) {
+			DEBUG(1, ("Invalid type for mapping entry.\n"));
+			talloc_free(tmp_ctx);
+			return NT_STATUS_NONE_MAPPED;
+		}
+
+		if (strcmp(type, "ID_TYPE_BOTH") == 0) {
+			unixid->type = ID_TYPE_BOTH;
+		} else if (strcmp(type, "ID_TYPE_UID") == 0) {
+			unixid->type = ID_TYPE_UID;
+		} else {
+			unixid->type = ID_TYPE_GID;
+		}
+
 		talloc_free(tmp_ctx);
 		return NT_STATUS_OK;
 	}
-- 
1.9.1


["0003-pdb-Increase-version-number-to-fix-ABI.patch" (text/x-patch)]

From de48112de9817df949a2ef8635e730e17d967c47 Mon Sep 17 00:00:00 2001
From: Garming Sam <garming@catalyst.net.nz>
Date: Tue, 25 Nov 2014 14:56:45 +1300
Subject: [PATCH 3/3] pdb: Increase version number to fix ABI

In the process, we can also rename pdb to avoid conflicts with libpdb.

We don't depend directly on pdb to avoid duplicate symbols.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=10355
Change-Id: I4df6ba2f4ce35d3718dc4198b527cca46a139efe
Pair-programmed-with: Andrew Bartlett <abartlet@samba.org>
Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
---
 source3/passdb/ABI/samba-passdb-0.2.0.sigs | 312 +++++++++++++++++++++++++++++
 source3/winbindd/wscript_build             |   2 +-
 source3/wscript_build                      |  30 +--
 3 files changed, 330 insertions(+), 14 deletions(-)
 create mode 100644 source3/passdb/ABI/samba-passdb-0.2.0.sigs

diff --git a/source3/passdb/ABI/samba-passdb-0.2.0.sigs \
b/source3/passdb/ABI/samba-passdb-0.2.0.sigs new file mode 100644
index 0000000..e2246f6
--- /dev/null
+++ b/source3/passdb/ABI/samba-passdb-0.2.0.sigs
@@ -0,0 +1,312 @@
+PDB_secrets_clear_domain_protection: bool (const char *)
+PDB_secrets_fetch_domain_guid: bool (const char *, struct GUID *)
+PDB_secrets_fetch_domain_sid: bool (const char *, struct dom_sid *)
+PDB_secrets_mark_domain_protected: bool (const char *)
+PDB_secrets_store_domain_guid: bool (const char *, struct GUID *)
+PDB_secrets_store_domain_sid: bool (const char *, const struct dom_sid *)
+account_policy_get: bool (enum pdb_policy_type, uint32_t *)
+account_policy_get_default: bool (enum pdb_policy_type, uint32_t *)
+account_policy_get_desc: const char *(enum pdb_policy_type)
+account_policy_name_to_typenum: enum pdb_policy_type (const char *)
+account_policy_names_list: void (TALLOC_CTX *, const char ***, int *)
+account_policy_set: bool (enum pdb_policy_type, uint32_t)
+add_initial_entry: NTSTATUS (gid_t, const char *, enum lsa_SidType, const char *, \
const char *) +algorithmic_pdb_gid_to_group_rid: uint32_t (gid_t)
+algorithmic_pdb_rid_is_user: bool (uint32_t)
+algorithmic_pdb_uid_to_user_rid: uint32_t (uid_t)
+algorithmic_pdb_user_rid_to_uid: uid_t (uint32_t)
+algorithmic_rid_base: int (void)
+builtin_domain_name: const char *(void)
+cache_account_policy_get: bool (enum pdb_policy_type, uint32_t *)
+cache_account_policy_set: bool (enum pdb_policy_type, uint32_t)
+create_builtin_administrators: NTSTATUS (const struct dom_sid *)
+create_builtin_users: NTSTATUS (const struct dom_sid *)
+decode_account_policy_name: const char *(enum pdb_policy_type)
+get_account_pol_db: struct db_context *(void)
+get_account_policy_attr: const char *(enum pdb_policy_type)
+get_domain_group_from_sid: bool (struct dom_sid, GROUP_MAP *)
+get_primary_group_sid: NTSTATUS (TALLOC_CTX *, const char *, struct passwd **, \
struct dom_sid **) +get_privileges_for_sid_as_set: NTSTATUS (TALLOC_CTX *, \
PRIVILEGE_SET **, struct dom_sid *) +get_privileges_for_sids: bool (uint64_t *, \
struct dom_sid *, int) +get_trust_pw_clear: bool (const char *, char **, const char \
**, enum netr_SchannelType *) +get_trust_pw_hash: bool (const char *, uint8_t *, \
const char **, enum netr_SchannelType *) +gid_to_sid: void (struct dom_sid *, gid_t)
+gid_to_unix_groups_sid: void (gid_t, struct dom_sid *)
+grab_named_mutex: struct named_mutex *(TALLOC_CTX *, const char *, int)
+grant_all_privileges: bool (const struct dom_sid *)
+grant_privilege_by_name: bool (const struct dom_sid *, const char *)
+grant_privilege_set: bool (const struct dom_sid *, struct lsa_PrivilegeSet *)
+groupdb_tdb_init: const struct mapping_backend *(void)
+init_account_policy: bool (void)
+init_buffer_from_samu: uint32_t (uint8_t **, struct samu *, bool)
+init_samu_from_buffer: bool (struct samu *, uint32_t, uint8_t *, uint32_t)
+initialize_password_db: bool (bool, struct tevent_context *)
+is_dc_trusted_domain_situation: bool (const char *)
+is_privileged_sid: bool (const struct dom_sid *)
+local_password_change: NTSTATUS (const char *, int, const char *, char **, char **)
+login_cache_delentry: bool (const struct samu *)
+login_cache_init: bool (void)
+login_cache_read: bool (struct samu *, struct login_cache *)
+login_cache_shutdown: bool (void)
+login_cache_write: bool (const struct samu *, const struct login_cache *)
+lookup_builtin_name: bool (const char *, uint32_t *)
+lookup_builtin_rid: bool (TALLOC_CTX *, uint32_t, const char **)
+lookup_global_sam_name: bool (const char *, int, uint32_t *, enum lsa_SidType *)
+lookup_name: bool (TALLOC_CTX *, const char *, int, const char **, const char **, \
struct dom_sid *, enum lsa_SidType *) +lookup_name_smbconf: bool (TALLOC_CTX *, const \
char *, int, const char **, const char **, struct dom_sid *, enum lsa_SidType *) \
+lookup_sid: bool (TALLOC_CTX *, const struct dom_sid *, const char **, const char \
**, enum lsa_SidType *) +lookup_sids: NTSTATUS (TALLOC_CTX *, int, const struct \
dom_sid **, int, struct lsa_dom_info **, struct lsa_name_info **) \
+lookup_unix_group_name: bool (const char *, struct dom_sid *) \
+lookup_unix_user_name: bool (const char *, struct dom_sid *) +lookup_wellknown_name: \
bool (TALLOC_CTX *, const char *, struct dom_sid *, const char **) \
+lookup_wellknown_sid: bool (TALLOC_CTX *, const struct dom_sid *, const char **, \
const char **) +make_pdb_method: NTSTATUS (struct pdb_methods **)
+make_pdb_method_name: NTSTATUS (struct pdb_methods **, const char *)
+max_algorithmic_gid: gid_t (void)
+max_algorithmic_uid: uid_t (void)
+my_sam_name: const char *(void)
+pdb_add_aliasmem: NTSTATUS (const struct dom_sid *, const struct dom_sid *)
+pdb_add_group_mapping_entry: NTSTATUS (GROUP_MAP *)
+pdb_add_groupmem: NTSTATUS (TALLOC_CTX *, uint32_t, uint32_t)
+pdb_add_sam_account: NTSTATUS (struct samu *)
+pdb_build_fields_present: uint32_t (struct samu *)
+pdb_capabilities: uint32_t (void)
+pdb_copy_sam_account: bool (struct samu *, struct samu *)
+pdb_create_alias: NTSTATUS (const char *, uint32_t *)
+pdb_create_builtin: NTSTATUS (uint32_t)
+pdb_create_builtin_alias: NTSTATUS (uint32_t, gid_t)
+pdb_create_dom_group: NTSTATUS (TALLOC_CTX *, const char *, uint32_t *)
+pdb_create_user: NTSTATUS (TALLOC_CTX *, const char *, uint32_t, uint32_t *)
+pdb_decode_acct_ctrl: uint32_t (const char *)
+pdb_default_add_aliasmem: NTSTATUS (struct pdb_methods *, const struct dom_sid *, \
const struct dom_sid *) +pdb_default_add_group_mapping_entry: NTSTATUS (struct \
pdb_methods *, GROUP_MAP *) +pdb_default_alias_memberships: NTSTATUS (struct \
pdb_methods *, TALLOC_CTX *, const struct dom_sid *, const struct dom_sid *, size_t, \
uint32_t **, size_t *) +pdb_default_create_alias: NTSTATUS (struct pdb_methods *, \
const char *, uint32_t *) +pdb_default_del_aliasmem: NTSTATUS (struct pdb_methods *, \
const struct dom_sid *, const struct dom_sid *) +pdb_default_delete_alias: NTSTATUS \
(struct pdb_methods *, const struct dom_sid *) \
+pdb_default_delete_group_mapping_entry: NTSTATUS (struct pdb_methods *, struct \
dom_sid) +pdb_default_enum_aliasmem: NTSTATUS (struct pdb_methods *, const struct \
dom_sid *, TALLOC_CTX *, struct dom_sid **, size_t *) \
+pdb_default_enum_group_mapping: NTSTATUS (struct pdb_methods *, const struct dom_sid \
*, enum lsa_SidType, GROUP_MAP ***, size_t *, bool) +pdb_default_get_aliasinfo: \
NTSTATUS (struct pdb_methods *, const struct dom_sid *, struct acct_info *) \
+pdb_default_getgrgid: NTSTATUS (struct pdb_methods *, GROUP_MAP *, gid_t) \
+pdb_default_getgrnam: NTSTATUS (struct pdb_methods *, GROUP_MAP *, const char *) \
+pdb_default_getgrsid: NTSTATUS (struct pdb_methods *, GROUP_MAP *, struct dom_sid) \
+pdb_default_set_aliasinfo: NTSTATUS (struct pdb_methods *, const struct dom_sid *, \
struct acct_info *) +pdb_default_update_group_mapping_entry: NTSTATUS (struct \
pdb_methods *, GROUP_MAP *) +pdb_del_aliasmem: NTSTATUS (const struct dom_sid *, \
const struct dom_sid *) +pdb_del_groupmem: NTSTATUS (TALLOC_CTX *, uint32_t, \
uint32_t) +pdb_del_trusted_domain: NTSTATUS (const char *)
+pdb_del_trusteddom_pw: bool (const char *)
+pdb_delete_alias: NTSTATUS (const struct dom_sid *)
+pdb_delete_dom_group: NTSTATUS (TALLOC_CTX *, uint32_t)
+pdb_delete_group_mapping_entry: NTSTATUS (struct dom_sid)
+pdb_delete_sam_account: NTSTATUS (struct samu *)
+pdb_delete_secret: NTSTATUS (const char *)
+pdb_delete_user: NTSTATUS (TALLOC_CTX *, struct samu *)
+pdb_element_is_changed: bool (const struct samu *, enum pdb_elements)
+pdb_element_is_set_or_changed: bool (const struct samu *, enum pdb_elements)
+pdb_encode_acct_ctrl: char *(uint32_t, size_t)
+pdb_enum_alias_memberships: NTSTATUS (TALLOC_CTX *, const struct dom_sid *, const \
struct dom_sid *, size_t, uint32_t **, size_t *) +pdb_enum_aliasmem: NTSTATUS (const \
struct dom_sid *, TALLOC_CTX *, struct dom_sid **, size_t *) +pdb_enum_group_mapping: \
bool (const struct dom_sid *, enum lsa_SidType, GROUP_MAP ***, size_t *, bool) \
+pdb_enum_group_members: NTSTATUS (TALLOC_CTX *, const struct dom_sid *, uint32_t **, \
size_t *) +pdb_enum_group_memberships: NTSTATUS (TALLOC_CTX *, struct samu *, struct \
dom_sid **, gid_t **, uint32_t *) +pdb_enum_trusted_domains: NTSTATUS (TALLOC_CTX *, \
uint32_t *, struct pdb_trusted_domain ***) +pdb_enum_trusteddoms: NTSTATUS \
(TALLOC_CTX *, uint32_t *, struct trustdom_info ***) +pdb_enum_upn_suffixes: NTSTATUS \
(TALLOC_CTX *, uint32_t *, char ***) +pdb_find_backend_entry: struct \
pdb_init_function_entry *(const char *) +pdb_get_account_policy: bool (enum \
pdb_policy_type, uint32_t *) +pdb_get_acct_ctrl: uint32_t (const struct samu *)
+pdb_get_acct_desc: const char *(const struct samu *)
+pdb_get_aliasinfo: NTSTATUS (const struct dom_sid *, struct acct_info *)
+pdb_get_backend_private_data: void *(const struct samu *, const struct pdb_methods \
*) +pdb_get_backends: const struct pdb_init_function_entry *(void)
+pdb_get_bad_password_count: uint16_t (const struct samu *)
+pdb_get_bad_password_time: time_t (const struct samu *)
+pdb_get_code_page: uint16_t (const struct samu *)
+pdb_get_comment: const char *(const struct samu *)
+pdb_get_country_code: uint16_t (const struct samu *)
+pdb_get_dir_drive: const char *(const struct samu *)
+pdb_get_domain: const char *(const struct samu *)
+pdb_get_domain_info: struct pdb_domain_info *(TALLOC_CTX *)
+pdb_get_fullname: const char *(const struct samu *)
+pdb_get_group_rid: uint32_t (struct samu *)
+pdb_get_group_sid: const struct dom_sid *(struct samu *)
+pdb_get_homedir: const char *(const struct samu *)
+pdb_get_hours: const uint8_t *(const struct samu *)
+pdb_get_hours_len: uint32_t (const struct samu *)
+pdb_get_init_flags: enum pdb_value_state (const struct samu *, enum pdb_elements)
+pdb_get_kickoff_time: time_t (const struct samu *)
+pdb_get_lanman_passwd: const uint8_t *(const struct samu *)
+pdb_get_logoff_time: time_t (const struct samu *)
+pdb_get_logon_count: uint16_t (const struct samu *)
+pdb_get_logon_divs: uint16_t (const struct samu *)
+pdb_get_logon_script: const char *(const struct samu *)
+pdb_get_logon_time: time_t (const struct samu *)
+pdb_get_munged_dial: const char *(const struct samu *)
+pdb_get_nt_passwd: const uint8_t *(const struct samu *)
+pdb_get_nt_username: const char *(const struct samu *)
+pdb_get_pass_can_change: bool (const struct samu *)
+pdb_get_pass_can_change_time: time_t (const struct samu *)
+pdb_get_pass_can_change_time_noncalc: time_t (const struct samu *)
+pdb_get_pass_last_set_time: time_t (const struct samu *)
+pdb_get_pass_must_change_time: time_t (const struct samu *)
+pdb_get_plaintext_passwd: const char *(const struct samu *)
+pdb_get_profile_path: const char *(const struct samu *)
+pdb_get_pw_history: const uint8_t *(const struct samu *, uint32_t *)
+pdb_get_secret: NTSTATUS (TALLOC_CTX *, const char *, DATA_BLOB *, NTTIME *, \
DATA_BLOB *, NTTIME *, struct security_descriptor **) +pdb_get_seq_num: bool (time_t \
*) +pdb_get_tevent_context: struct tevent_context *(void)
+pdb_get_trust_credentials: NTSTATUS (const char *, const char *, TALLOC_CTX *, \
struct cli_credentials **) +pdb_get_trusted_domain: NTSTATUS (TALLOC_CTX *, const \
char *, struct pdb_trusted_domain **) +pdb_get_trusted_domain_by_sid: NTSTATUS \
(TALLOC_CTX *, struct dom_sid *, struct pdb_trusted_domain **) \
+pdb_get_trusteddom_pw: bool (const char *, char **, struct dom_sid *, time_t *) \
+pdb_get_unknown_6: uint32_t (const struct samu *) +pdb_get_user_rid: uint32_t (const \
struct samu *) +pdb_get_user_sid: const struct dom_sid *(const struct samu *)
+pdb_get_username: const char *(const struct samu *)
+pdb_get_workstations: const char *(const struct samu *)
+pdb_getgrgid: bool (GROUP_MAP *, gid_t)
+pdb_getgrnam: bool (GROUP_MAP *, const char *)
+pdb_getgrsid: bool (GROUP_MAP *, struct dom_sid)
+pdb_gethexhours: bool (const char *, unsigned char *)
+pdb_gethexpwd: bool (const char *, unsigned char *)
+pdb_getsampwnam: bool (struct samu *, const char *)
+pdb_getsampwsid: bool (struct samu *, const struct dom_sid *)
+pdb_group_rid_to_gid: gid_t (uint32_t)
+pdb_id_to_sid: bool (struct unixid *, struct dom_sid *)
+pdb_increment_bad_password_count: bool (struct samu *)
+pdb_is_password_change_time_max: bool (time_t)
+pdb_is_responsible_for_builtin: bool (void)
+pdb_is_responsible_for_everything_else: bool (void)
+pdb_is_responsible_for_our_sam: bool (void)
+pdb_is_responsible_for_unix_groups: bool (void)
+pdb_is_responsible_for_unix_users: bool (void)
+pdb_is_responsible_for_wellknown: bool (void)
+pdb_lookup_rids: NTSTATUS (const struct dom_sid *, int, uint32_t *, const char **, \
enum lsa_SidType *) +pdb_new_rid: bool (uint32_t *)
+pdb_nop_add_group_mapping_entry: NTSTATUS (struct pdb_methods *, GROUP_MAP *)
+pdb_nop_delete_group_mapping_entry: NTSTATUS (struct pdb_methods *, struct dom_sid)
+pdb_nop_enum_group_mapping: NTSTATUS (struct pdb_methods *, enum lsa_SidType, \
GROUP_MAP **, size_t *, bool) +pdb_nop_getgrgid: NTSTATUS (struct pdb_methods *, \
GROUP_MAP *, gid_t) +pdb_nop_getgrnam: NTSTATUS (struct pdb_methods *, GROUP_MAP *, \
const char *) +pdb_nop_getgrsid: NTSTATUS (struct pdb_methods *, GROUP_MAP *, struct \
dom_sid) +pdb_nop_update_group_mapping_entry: NTSTATUS (struct pdb_methods *, \
GROUP_MAP *) +pdb_rename_sam_account: NTSTATUS (struct samu *, const char *)
+pdb_search_aliases: struct pdb_search *(TALLOC_CTX *, const struct dom_sid *)
+pdb_search_entries: uint32_t (struct pdb_search *, uint32_t, uint32_t, struct \
samr_displayentry **) +pdb_search_groups: struct pdb_search *(TALLOC_CTX *)
+pdb_search_init: struct pdb_search *(TALLOC_CTX *, enum pdb_search_type)
+pdb_search_users: struct pdb_search *(TALLOC_CTX *, uint32_t)
+pdb_set_account_policy: bool (enum pdb_policy_type, uint32_t)
+pdb_set_acct_ctrl: bool (struct samu *, uint32_t, enum pdb_value_state)
+pdb_set_acct_desc: bool (struct samu *, const char *, enum pdb_value_state)
+pdb_set_aliasinfo: NTSTATUS (const struct dom_sid *, struct acct_info *)
+pdb_set_backend_private_data: bool (struct samu *, void *, void (*)(void **), const \
struct pdb_methods *, enum pdb_value_state) +pdb_set_bad_password_count: bool (struct \
samu *, uint16_t, enum pdb_value_state) +pdb_set_bad_password_time: bool (struct samu \
*, time_t, enum pdb_value_state) +pdb_set_code_page: bool (struct samu *, uint16_t, \
enum pdb_value_state) +pdb_set_comment: bool (struct samu *, const char *, enum \
pdb_value_state) +pdb_set_country_code: bool (struct samu *, uint16_t, enum \
pdb_value_state) +pdb_set_dir_drive: bool (struct samu *, const char *, enum \
pdb_value_state) +pdb_set_domain: bool (struct samu *, const char *, enum \
pdb_value_state) +pdb_set_fullname: bool (struct samu *, const char *, enum \
pdb_value_state) +pdb_set_group_sid: bool (struct samu *, const struct dom_sid *, \
enum pdb_value_state) +pdb_set_group_sid_from_rid: bool (struct samu *, uint32_t, \
enum pdb_value_state) +pdb_set_homedir: bool (struct samu *, const char *, enum \
pdb_value_state) +pdb_set_hours: bool (struct samu *, const uint8_t *, int, enum \
pdb_value_state) +pdb_set_hours_len: bool (struct samu *, uint32_t, enum \
pdb_value_state) +pdb_set_init_flags: bool (struct samu *, enum pdb_elements, enum \
pdb_value_state) +pdb_set_kickoff_time: bool (struct samu *, time_t, enum \
pdb_value_state) +pdb_set_lanman_passwd: bool (struct samu *, const uint8_t *, enum \
pdb_value_state) +pdb_set_logoff_time: bool (struct samu *, time_t, enum \
pdb_value_state) +pdb_set_logon_count: bool (struct samu *, uint16_t, enum \
pdb_value_state) +pdb_set_logon_divs: bool (struct samu *, uint16_t, enum \
pdb_value_state) +pdb_set_logon_script: bool (struct samu *, const char *, enum \
pdb_value_state) +pdb_set_logon_time: bool (struct samu *, time_t, enum \
pdb_value_state) +pdb_set_munged_dial: bool (struct samu *, const char *, enum \
pdb_value_state) +pdb_set_nt_passwd: bool (struct samu *, const uint8_t *, enum \
pdb_value_state) +pdb_set_nt_username: bool (struct samu *, const char *, enum \
pdb_value_state) +pdb_set_pass_can_change: bool (struct samu *, bool)
+pdb_set_pass_can_change_time: bool (struct samu *, time_t, enum pdb_value_state)
+pdb_set_pass_last_set_time: bool (struct samu *, time_t, enum pdb_value_state)
+pdb_set_plaintext_passwd: bool (struct samu *, const char *)
+pdb_set_plaintext_pw_only: bool (struct samu *, const char *, enum pdb_value_state)
+pdb_set_profile_path: bool (struct samu *, const char *, enum pdb_value_state)
+pdb_set_pw_history: bool (struct samu *, const uint8_t *, uint32_t, enum \
pdb_value_state) +pdb_set_secret: NTSTATUS (const char *, DATA_BLOB *, DATA_BLOB *, \
struct security_descriptor *) +pdb_set_trusted_domain: NTSTATUS (const char *, const \
struct pdb_trusted_domain *) +pdb_set_trusteddom_pw: bool (const char *, const char \
*, const struct dom_sid *) +pdb_set_unix_primary_group: NTSTATUS (TALLOC_CTX *, \
struct samu *) +pdb_set_unknown_6: bool (struct samu *, uint32_t, enum \
pdb_value_state) +pdb_set_upn_suffixes: NTSTATUS (uint32_t, const char **)
+pdb_set_user_sid: bool (struct samu *, const struct dom_sid *, enum pdb_value_state)
+pdb_set_user_sid_from_rid: bool (struct samu *, uint32_t, enum pdb_value_state)
+pdb_set_user_sid_from_string: bool (struct samu *, const char *, enum \
pdb_value_state) +pdb_set_username: bool (struct samu *, const char *, enum \
pdb_value_state) +pdb_set_workstations: bool (struct samu *, const char *, enum \
pdb_value_state) +pdb_sethexhours: void (char *, const unsigned char *)
+pdb_sethexpwd: void (char *, const unsigned char *, uint32_t)
+pdb_sid_to_id: bool (const struct dom_sid *, struct unixid *)
+pdb_sid_to_id_unix_users_and_groups: bool (const struct dom_sid *, struct unixid *)
+pdb_update_autolock_flag: bool (struct samu *, bool *)
+pdb_update_bad_password_count: bool (struct samu *, bool *)
+pdb_update_group_mapping_entry: NTSTATUS (GROUP_MAP *)
+pdb_update_login_attempts: NTSTATUS (struct samu *, bool)
+pdb_update_sam_account: NTSTATUS (struct samu *)
+privilege_create_account: NTSTATUS (const struct dom_sid *)
+privilege_delete_account: NTSTATUS (const struct dom_sid *)
+privilege_enum_sids: NTSTATUS (enum sec_privilege, TALLOC_CTX *, struct dom_sid **, \
int *) +privilege_enumerate_accounts: NTSTATUS (struct dom_sid **, int *)
+revoke_all_privileges: bool (const struct dom_sid *)
+revoke_privilege_by_name: bool (const struct dom_sid *, const char *)
+revoke_privilege_set: bool (const struct dom_sid *, struct lsa_PrivilegeSet *)
+samu_alloc_rid_unix: NTSTATUS (struct pdb_methods *, struct samu *, const struct \
passwd *) +samu_new: struct samu *(TALLOC_CTX *)
+samu_set_unix: NTSTATUS (struct samu *, const struct passwd *)
+secrets_trusted_domains: NTSTATUS (TALLOC_CTX *, uint32_t *, struct trustdom_info \
***) +sid_check_is_builtin: bool (const struct dom_sid *)
+sid_check_is_for_passdb: bool (const struct dom_sid *)
+sid_check_is_in_builtin: bool (const struct dom_sid *)
+sid_check_is_in_unix_groups: bool (const struct dom_sid *)
+sid_check_is_in_unix_users: bool (const struct dom_sid *)
+sid_check_is_in_wellknown_domain: bool (const struct dom_sid *)
+sid_check_is_unix_groups: bool (const struct dom_sid *)
+sid_check_is_unix_users: bool (const struct dom_sid *)
+sid_check_is_wellknown_builtin: bool (const struct dom_sid *)
+sid_check_is_wellknown_domain: bool (const struct dom_sid *, const char **)
+sid_check_object_is_for_passdb: bool (const struct dom_sid *)
+sid_to_gid: bool (const struct dom_sid *, gid_t *)
+sid_to_uid: bool (const struct dom_sid *, uid_t *)
+sids_to_unixids: bool (const struct dom_sid *, uint32_t, struct unixid *)
+smb_add_user_group: int (const char *, const char *)
+smb_create_group: int (const char *, gid_t *)
+smb_delete_group: int (const char *)
+smb_delete_user_group: int (const char *, const char *)
+smb_nscd_flush_group_cache: void (void)
+smb_nscd_flush_user_cache: void (void)
+smb_register_passdb: NTSTATUS (int, const char *, pdb_init_function)
+smb_set_primary_group: int (const char *, const char *)
+uid_to_sid: void (struct dom_sid *, uid_t)
+uid_to_unix_users_sid: void (uid_t, struct dom_sid *)
+unix_groups_domain_name: const char *(void)
+unix_users_domain_name: const char *(void)
+unixid_from_both: void (struct unixid *, uint32_t)
+unixid_from_gid: void (struct unixid *, uint32_t)
+unixid_from_uid: void (struct unixid *, uint32_t)
+wb_is_trusted_domain: wbcErr (const char *)
+winbind_allocate_gid: bool (gid_t *)
+winbind_allocate_uid: bool (uid_t *)
+winbind_get_groups: bool (TALLOC_CTX *, const char *, uint32_t *, gid_t **)
+winbind_get_sid_aliases: bool (TALLOC_CTX *, const struct dom_sid *, const struct \
dom_sid *, size_t, uint32_t **, size_t *) +winbind_getpwnam: struct passwd *(const \
char *) +winbind_getpwsid: struct passwd *(const struct dom_sid *)
+winbind_gid_to_sid: bool (struct dom_sid *, gid_t)
+winbind_lookup_name: bool (const char *, const char *, struct dom_sid *, enum \
lsa_SidType *) +winbind_lookup_rids: bool (TALLOC_CTX *, const struct dom_sid *, int, \
uint32_t *, const char **, const char ***, enum lsa_SidType **) +winbind_lookup_sid: \
bool (TALLOC_CTX *, const struct dom_sid *, const char **, const char **, enum \
lsa_SidType *) +winbind_lookup_usersids: bool (TALLOC_CTX *, const struct dom_sid *, \
uint32_t *, struct dom_sid **) +winbind_ping: bool (void)
+winbind_sid_to_gid: bool (gid_t *, const struct dom_sid *)
+winbind_sid_to_uid: bool (uid_t *, const struct dom_sid *)
+winbind_uid_to_sid: bool (struct dom_sid *, uid_t)
diff --git a/source3/winbindd/wscript_build b/source3/winbindd/wscript_build
index ea1131c..13658f8 100644
--- a/source3/winbindd/wscript_build
+++ b/source3/winbindd/wscript_build
@@ -52,7 +52,7 @@ bld.SAMBA3_MODULE('idmap_rid',
 bld.SAMBA3_MODULE('idmap_passdb',
                  subsystem='idmap',
                  source='idmap_passdb.c',
-                 deps='samba-util pdb',
+                 deps='samba-util samba-passdb',
                  init_function='',
                  internal_module=bld.SAMBA3_IS_STATIC_MODULE('idmap_passdb'),
                  enabled=bld.SAMBA3_IS_ENABLED_MODULE('idmap_passdb'))
diff --git a/source3/wscript_build b/source3/wscript_build
index 0371336..7b5130d 100755
--- a/source3/wscript_build
+++ b/source3/wscript_build
@@ -144,7 +144,21 @@ private_pdb_match = private_pdb_match + ldapsam_pdb_match
 
 private_pdb_match = private_pdb_match + map(lambda x: '!pdb_%s_init' % x, \
static_pdb_match)  
-bld.SAMBA3_LIBRARY('pdb',
+bld.SAMBA3_LIBRARY('samba-passdb',
+                   source='',
+                   deps='pdb',
+                   private_library=False,
+                   pc_files=[],
+                   public_headers_install=True,
+                   public_headers='''
+                   include/passdb.h
+                   passdb/machine_sid.h
+                   passdb/lookup_sid.h''',
+                   abi_match=private_pdb_match,
+                   abi_directory='passdb/ABI',
+                   vnum='0.2.0')
+
+bld.SAMBA3_SUBSYSTEM('pdb',
                    source='''passdb/pdb_get_set.c
                    passdb/passdb.c
                    lib/util_wellknown.c
@@ -162,17 +176,7 @@ bld.SAMBA3_LIBRARY('pdb',
                    passdb/pdb_interface.c
                    passdb/pdb_secrets.c
                    passdb/pdb_unixid.c''',
-                   deps='secrets3 GROUPDB SERVER_MUTEX wbclient LIBCLI_AUTH \
                flag_mapping samba-credentials',
-                   private_library=False,
-                   pc_files=[],
-                   public_headers_install=True,
-                   public_headers='''
-                   include/passdb.h
-                   passdb/machine_sid.h
-                   passdb/lookup_sid.h''',
-                   abi_match=private_pdb_match,
-                   abi_directory='passdb/ABI',
-                   vnum='0.1.2')
+                   deps='secrets3 GROUPDB SERVER_MUTEX wbclient LIBCLI_AUTH \
flag_mapping samba-credentials')  
 bld.SAMBA3_LIBRARY('smbldaphelper',
                    source='passdb/pdb_ldap_schema.c passdb/pdb_ldap_util.c',
@@ -756,7 +760,7 @@ bld.SAMBA3_SUBSYSTEM('DCUTIL',
 
 bld.SAMBA3_LIBRARY('trusts_util',
                    source='libsmb/trusts_util.c',
-                   deps='libcli_netlogon3 msrpc3 pdb',
+                   deps='libcli_netlogon3 msrpc3 samba-passdb',
                    private_library=True)
 
 bld.SAMBA3_SUBSYSTEM('tdb-wrap3',
-- 
1.9.1



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic