[SCM] Samba Shared Repository - branch master updated

Christian Ambach ambi at samba.org
Wed Sep 7 07:16:02 MDT 2011


The branch, master has been updated
       via  0aa5587 s3:idmap/autorid add a small alloc pool to autorid
      from  c640e92 s4-s3-upgrade: convert password age policies to the negative NTTIME format

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


- Log -----------------------------------------------------------------
commit 0aa558718ad7427ee8b02046da73eea1838a5a32
Author: Christian Ambach <ambi at samba.org>
Date:   Wed Aug 31 18:28:51 2011 +0200

    s3:idmap/autorid add a small alloc pool to autorid
    
    this is needed to allocate gids for BUILTIN\Users and
    BUILTIN\Administrators
    
    gids are stored at the start of the first domain
    as RIDs start with values over 500, we have some room there
    so we do not need to allocate a range
    
    Autobuild-User: Christian Ambach <ambi at samba.org>
    Autobuild-Date: Wed Sep  7 15:15:09 CEST 2011 on sn-devel-104

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

Summary of changes:
 source3/winbindd/idmap_autorid.c |   52 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 52 insertions(+), 0 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/winbindd/idmap_autorid.c b/source3/winbindd/idmap_autorid.c
index a60f926..85ddca2 100644
--- a/source3/winbindd/idmap_autorid.c
+++ b/source3/winbindd/idmap_autorid.c
@@ -35,6 +35,8 @@
 #define DBGC_CLASS DBGC_IDMAP
 
 #define HWM "NEXT RANGE"
+#define ALLOC_HWM "NEXT ALLOC ID"
+#define ALLOC_POOL_SIZE 500
 #define CONFIGKEY "CONFIG"
 
 struct autorid_global_config {
@@ -361,6 +363,17 @@ static NTSTATUS idmap_autorid_db_init(void)
 		}
 	}
 
+	/* Initialize high water mark for alloc pool to 0 */
+	hwm = dbwrap_fetch_int32(autorid_db, ALLOC_HWM);
+	if ((hwm < 0)) {
+		if (!NT_STATUS_IS_OK
+		    (dbwrap_trans_store_int32(autorid_db, ALLOC_HWM, 0))) {
+			DEBUG(0,
+			      ("Unable to initialise HWM in autorid "
+			       "database\n"));
+			return NT_STATUS_INTERNAL_DB_ERROR;
+		}
+	}
 	return NT_STATUS_OK;
 }
 
@@ -542,6 +555,44 @@ done:
 	return status;
 }
 
+static NTSTATUS idmap_autorid_allocate_id(struct idmap_domain *dom,
+					  struct unixid *xid) {
+
+	struct autorid_global_config *globalcfg;
+	NTSTATUS ret;
+	uint32_t hwm;
+
+	if (!strequal(dom->name, "*")) {
+		DEBUG(3, ("idmap_autorid_allocate_id: "
+			  "Refusing creation of mapping for domain'%s'. "
+			  "Currently only supported for the default "
+			  "domain \"*\".\n",
+			   dom->name));
+		return NT_STATUS_NOT_IMPLEMENTED;
+	}
+
+	globalcfg = talloc_get_type(dom->private_data,
+				    struct autorid_global_config);
+
+	if (!dbwrap_fetch_uint32(autorid_db, ALLOC_HWM, &hwm)) {
+		DEBUG(1, ("Failed to fetch current allocation HWM value!\n"));
+		return NT_STATUS_INTERNAL_ERROR;
+	}
+
+	if (hwm > ALLOC_POOL_SIZE) {
+		DEBUG(1, ("allocation pool is depleted!\n"));
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	ret = dbwrap_change_uint32_atomic(autorid_db, ALLOC_HWM, &(xid->id), 1);
+	if (!NT_STATUS_IS_OK(ret)) {
+		DEBUG(1, ("Fatal error while allocating new ID!\n"));
+	}
+	xid->id = (xid->id)+(globalcfg->minvalue);
+
+	return ret;
+}
+
 /*
   Close the idmap tdb instance
 */
@@ -549,6 +600,7 @@ static struct idmap_methods autorid_methods = {
 	.init = idmap_autorid_initialize,
 	.unixids_to_sids = idmap_autorid_unixids_to_sids,
 	.sids_to_unixids = idmap_autorid_sids_to_unixids,
+	.allocate_id	 = idmap_autorid_allocate_id
 };
 
 NTSTATUS idmap_autorid_init(void)


-- 
Samba Shared Repository


More information about the samba-cvs mailing list