[SCM] Samba Shared Repository - branch master updated
Michael Adam
obnox at samba.org
Tue Feb 5 11:15:02 MST 2013
The branch, master has been updated
via 6c2d6ad s3:auth small optimization in create_token_from_sid
via deea99a s3:net: reduce indentation in net idmap delete for symmetry and consistency
via 50e3592 s3:net: introduce a talloc stackframe for net idmap delete
via 8473764 s3:net_idmap_delete do not lock two records at the same time
via 9aa79c1 s3:net idmap: use lp_idmap_default_backend() now that we have it.
via c37a493 s3:param: add new lp_idmap_default_backend()
via 321401e s3:param: introduce new lp_idmap_backend() that takes the domain
via 4198e80 s3:param: add a comment
via 085b976 s3:param: remove unused function lp_idmap_backend()
via cef05fb s3:net idmap: remove call to lp_idmap_backend() - this is useless.
via 600ba80 s3:param: remove unused functions lp_idmap_uid() and lp_idmap_gid()
via 4e52fa7 s3:auth: use new lp_idmap_default_range() instead of lp_idmap_gid() in create_token_from_sid()
via 58b302d s3:param: add utility function lp_idmap_default_range()
via 1342bdd s3:param: add a utility function lp_idmap_range() to get the configured range for a given domain.
via e7b39fb s3:param: remove an old comment (that is not up-to date any more)
from 72cd5d5 tdb: Remove "header" from tdb_context
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 6c2d6ada42779b1c7015ddf3cf0dc420c4558be1
Author: Christian Ambach <ambi at samba.org>
Date: Tue Jan 29 17:19:17 2013 +0100
s3:auth small optimization in create_token_from_sid
save some calls to lp_idmap_default_range(), calling it
once is enough
Signed-off-by: Christian Ambach <ambi at samba.org>
Reviewed-by: Michael Adam <obnox at samba.org>
Autobuild-User(master): Michael Adam <obnox at samba.org>
Autobuild-Date(master): Tue Feb 5 19:14:25 CET 2013 on sn-devel-104
commit deea99ac36a431befae3af39b7e160ce2d7ba5dc
Author: Michael Adam <obnox at samba.org>
Date: Wed Jan 30 15:50:52 2013 +0100
s3:net: reduce indentation in net idmap delete for symmetry and consistency
Signed-off-by: Michael Adam <obnox at samba.org>
Reviewed-by: Christian Ambach <ambi at samba.org>
commit 50e3592ace69a919b3196420e56f09ce435302ea
Author: Michael Adam <obnox at samba.org>
Date: Wed Jan 30 15:46:47 2013 +0100
s3:net: introduce a talloc stackframe for net idmap delete
this simplifies the freeing at the end
Signed-off-by: Michael Adam <obnox at samba.org>
Reviewed-by: Christian Ambach <ambi at samba.org>
commit 8473764234bfec2f21b87ec69c213af4365749b4
Author: Christian Ambach <ambi at samba.org>
Date: Fri Dec 7 13:43:57 2012 +0100
s3:net_idmap_delete do not lock two records at the same time
the lock order check will prohibit this and as we are running inside
a transaction there is no need to lock the records before deleting them
Pair-Programmed-With: Michael Adam <obnox at samba.org>
Signed-off-by: Christian Ambach <ambi at samba.org>
Signed-off-by: Michael Adam <obnox at samba.org>
commit 9aa79c11f07624d10f49a6840e93e84739997ffe
Author: Michael Adam <obnox at samba.org>
Date: Tue Jan 29 13:34:26 2013 +0100
s3:net idmap: use lp_idmap_default_backend() now that we have it.
Signed-off-by: Michael Adam <obnox at samba.org>
Reviewed-by: Christian Ambach <ambi at samba.org>
commit c37a4939026622e3751e9188a3079def89171153
Author: Michael Adam <obnox at samba.org>
Date: Tue Jan 29 13:26:11 2013 +0100
s3:param: add new lp_idmap_default_backend()
Signed-off-by: Michael Adam <obnox at samba.org>
Reviewed-by: Christian Ambach <ambi at samba.org>
commit 321401e7d1c812d70aa44350de0386a12d9c25f4
Author: Michael Adam <obnox at samba.org>
Date: Tue Jan 29 13:24:20 2013 +0100
s3:param: introduce new lp_idmap_backend() that takes the domain
Signed-off-by: Michael Adam <obnox at samba.org>
Reviewed-by: Christian Ambach <ambi at samba.org>
commit 4198e800d809cd0b7be5a0214a22b9a31b906cc4
Author: Michael Adam <obnox at samba.org>
Date: Mon Jan 28 15:41:13 2013 +0100
s3:param: add a comment
Signed-off-by: Michael Adam <obnox at samba.org>
Reviewed-by: Christian Ambach <ambi at samba.org>
commit 085b9767a6886aa04b8cfbee8077b411e466bfec
Author: Michael Adam <obnox at samba.org>
Date: Mon Jan 28 14:35:53 2013 +0100
s3:param: remove unused function lp_idmap_backend()
Signed-off-by: Michael Adam <obnox at samba.org>
Reviewed-by: Christian Ambach <ambi at samba.org>
commit cef05fbe8dc210ba257d2d018878d0b351009c02
Author: Michael Adam <obnox at samba.org>
Date: Mon Jan 28 14:29:21 2013 +0100
s3:net idmap: remove call to lp_idmap_backend() - this is useless.
The variable behind lp_idmap_backend() is never set.
Signed-off-by: Michael Adam <obnox at samba.org>
Reviewed-by: Christian Ambach <ambi at samba.org>
commit 600ba80246aaa6cb9499a49f48e92a2657fdc918
Author: Michael Adam <obnox at samba.org>
Date: Mon Jan 28 14:21:44 2013 +0100
s3:param: remove unused functions lp_idmap_uid() and lp_idmap_gid()
Signed-off-by: Michael Adam <obnox at samba.org>
Reviewed-by: Christian Ambach <ambi at samba.org>
commit 4e52fa7b7346c3afdaeb87c2af69ee71cb3cd1fb
Author: Michael Adam <obnox at samba.org>
Date: Mon Jan 28 16:45:30 2013 +0100
s3:auth: use new lp_idmap_default_range() instead of lp_idmap_gid() in create_token_from_sid()
Signed-off-by: Michael Adam <obnox at samba.org>
Reviewed-by: Christian Ambach <ambi at samba.org>
commit 58b302d76a83880744d637f95b4aa7f80c040ea8
Author: Michael Adam <obnox at samba.org>
Date: Mon Jan 28 16:35:50 2013 +0100
s3:param: add utility function lp_idmap_default_range()
Signed-off-by: Michael Adam <obnox at samba.org>
Reviewed-by: Christian Ambach <ambi at samba.org>
commit 1342bdd55c9759bc23f93298b34ed8d587816e6b
Author: Michael Adam <obnox at samba.org>
Date: Mon Jan 28 16:31:23 2013 +0100
s3:param: add a utility function lp_idmap_range() to get the configured range for a given domain.
Signed-off-by: Michael Adam <obnox at samba.org>
Reviewed-by: Christian Ambach <ambi at samba.org>
commit e7b39fba5e46f01e43250a758c69e3067400a0d3
Author: Michael Adam <obnox at samba.org>
Date: Mon Jan 28 14:18:48 2013 +0100
s3:param: remove an old comment (that is not up-to date any more)
Signed-off-by: Michael Adam <obnox at samba.org>
Reviewed-by: Christian Ambach <ambi at samba.org>
-----------------------------------------------------------------------
Summary of changes:
lib/param/loadparm.c | 1 +
lib/param/param_functions.c | 1 -
source3/auth/token_util.c | 8 ++-
source3/include/proto.h | 7 ++-
source3/param/loadparm.c | 119 +++++++++++++++++++++++++++---------------
source3/utils/net_idmap.c | 64 ++++++++++++-----------
6 files changed, 119 insertions(+), 81 deletions(-)
Changeset truncated at 500 lines:
diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 2462796..fdb02c3 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -87,6 +87,7 @@ static bool defaults_saved = false;
char *szUsershareTemplateShare; \
char *szIdmapUID; \
char *szIdmapGID; \
+ char *szIdmapBackend; \
int winbindMaxDomainConnections; \
int ismb2_max_credits; \
char *tls_keyfile; \
diff --git a/lib/param/param_functions.c b/lib/param/param_functions.c
index 94652fa..852f525 100644
--- a/lib/param/param_functions.c
+++ b/lib/param/param_functions.c
@@ -239,7 +239,6 @@ FN_GLOBAL_CONST_STRING(dnsdomain, szRealm_lower)
FN_GLOBAL_CONST_STRING(dns_forwarder, dns_forwarder)
FN_GLOBAL_CONST_STRING(dos_charset, dos_charset)
FN_GLOBAL_CONST_STRING(guestaccount, szGuestaccount)
-FN_GLOBAL_CONST_STRING(idmap_backend, szIdmapBackend)
FN_GLOBAL_CONST_STRING(lockdir, szLockDir)
FN_GLOBAL_CONST_STRING(logon_drive, szLogonDrive)
FN_GLOBAL_CONST_STRING(logon_home, szLogonHome)
diff --git a/source3/auth/token_util.c b/source3/auth/token_util.c
index ac242f1..d86d589 100644
--- a/source3/auth/token_util.c
+++ b/source3/auth/token_util.c
@@ -565,6 +565,8 @@ static NTSTATUS create_token_from_sid(TALLOC_CTX *mem_ctx,
uint32_t num_group_sids;
uint32_t num_gids;
uint32_t i;
+ uint32_t high, low;
+ bool range_ok;
if (sid_check_is_in_our_sam(user_sid)) {
bool ret;
@@ -757,13 +759,13 @@ static NTSTATUS create_token_from_sid(TALLOC_CTX *mem_ctx,
to 'valid user = "Domain Admins"'. --jerry */
num_gids = num_group_sids;
+ range_ok = lp_idmap_default_range(&low, &high);
for ( i=0; i<num_gids; i++ ) {
- gid_t high, low;
/* don't pickup anything managed by Winbind */
-
- if ( lp_idmap_gid(&low, &high) && (gids[i] >= low) && (gids[i] <= high) )
+ if (range_ok && (gids[i] >= low) && (gids[i] <= high)) {
continue;
+ }
gid_to_unix_groups_sid(gids[i], &unix_group_sid);
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 6856dd7..925039d 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -1080,9 +1080,12 @@ bool lp_winbind_normalize_names(void);
bool lp_winbind_rpc_only(void);
bool lp_create_krb5_conf(void);
int lp_winbind_max_domain_connections(void);
-const char *lp_idmap_backend(void);
int lp_idmap_cache_time(void);
int lp_idmap_negative_cache_time(void);
+bool lp_idmap_range(const char *domain_name, uint32_t *low, uint32_t *high);
+bool lp_idmap_default_range(uint32_t *low, uint32_t *high);
+const char *lp_idmap_backend(const char *domain_name);
+const char *lp_idmap_default_backend (void);
int lp_keepalive(void);
bool lp_passdb_expand_explicit(void);
char *lp_ldap_suffix(TALLOC_CTX *ctx);
@@ -1392,8 +1395,6 @@ bool process_registry_shares(void);
bool lp_config_backend_is_registry(void);
bool lp_config_backend_is_file(void);
bool lp_file_list_changed(void);
-bool lp_idmap_uid(uid_t *low, uid_t *high);
-bool lp_idmap_gid(gid_t *low, gid_t *high);
const char *lp_ldap_machine_suffix(TALLOC_CTX *ctx);
const char *lp_ldap_user_suffix(TALLOC_CTX *ctx);
const char *lp_ldap_group_suffix(TALLOC_CTX *ctx);
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 0e1b019..5bf430d 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -124,6 +124,7 @@ static bool defaults_saved = false;
char *szUsershareTemplateShare; \
char *szIdmapUID; \
char *szIdmapGID; \
+ char *szIdmapBackend; \
int winbindMaxDomainConnections; \
int ismb2_max_credits; \
char *tls_keyfile; \
@@ -2884,74 +2885,106 @@ static bool handle_ldap_debug_level(struct loadparm_context *unused, int snum, c
return true;
}
-/***************************************************************************
- Handle idmap/non unix account uid and gid allocation parameters. The format of these
- parameters is:
+/*
+ * idmap related parameters
+ */
- [global]
+static bool handle_idmap_backend(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr)
+{
+ lp_do_parameter(snum, "idmap config * : backend", pszParmValue);
- idmap uid = 1000-1999
- idmap gid = 700-899
+ return true;
+}
- We only do simple parsing checks here. The strings are parsed into useful
- structures in the idmap daemon code.
+static bool handle_idmap_uid(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr)
+{
+ lp_do_parameter(snum, "idmap config * : range", pszParmValue);
-***************************************************************************/
+ return true;
+}
-/* Some lp_ routines to return idmap [ug]id information */
+static bool handle_idmap_gid(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr)
+{
+ lp_do_parameter(snum, "idmap config * : range", pszParmValue);
-static uid_t idmap_uid_low, idmap_uid_high;
-static gid_t idmap_gid_low, idmap_gid_high;
+ return true;
+}
-bool lp_idmap_uid(uid_t *low, uid_t *high)
+bool lp_idmap_range(const char *domain_name, uint32_t *low, uint32_t *high)
{
- if (idmap_uid_low == 0 || idmap_uid_high == 0)
- return false;
+ char *config_option = NULL;
+ const char *range = NULL;
+ bool ret = false;
- if (low)
- *low = idmap_uid_low;
+ SMB_ASSERT(low != NULL);
+ SMB_ASSERT(high != NULL);
- if (high)
- *high = idmap_uid_high;
+ if ((domain_name == NULL) || (domain_name[0] == '\0')) {
+ domain_name = "*";
+ }
- return true;
-}
+ config_option = talloc_asprintf(talloc_tos(), "idmap config %s",
+ domain_name);
+ if (config_option == NULL) {
+ DEBUG(0, ("out of memory\n"));
+ return false;
+ }
-bool lp_idmap_gid(gid_t *low, gid_t *high)
-{
- if (idmap_gid_low == 0 || idmap_gid_high == 0)
- return false;
+ range = lp_parm_const_string(-1, config_option, "range", NULL);
+ if (range == NULL) {
+ DEBUG(1, ("idmap range not specified for domain '%s'\n", domain_name));
+ goto done;
+ }
- if (low)
- *low = idmap_gid_low;
+ if (sscanf(range, "%u - %u", low, high) != 2) {
+ DEBUG(1, ("error parsing idmap range '%s' for domain '%s'\n",
+ range, domain_name));
+ goto done;
+ }
- if (high)
- *high = idmap_gid_high;
+ ret = true;
+
+done:
+ talloc_free(config_option);
+ return ret;
- return true;
}
-static bool handle_idmap_backend(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr)
+bool lp_idmap_default_range(uint32_t *low, uint32_t *high)
{
- lp_do_parameter(snum, "idmap config * : backend", pszParmValue);
-
- return true;
+ return lp_idmap_range("*", low, high);
}
-/* Do some simple checks on "idmap [ug]id" parameter values */
-
-static bool handle_idmap_uid(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr)
+const char *lp_idmap_backend(const char *domain_name)
{
- lp_do_parameter(snum, "idmap config * : range", pszParmValue);
+ char *config_option = NULL;
+ const char *backend = NULL;
- return true;
+ if ((domain_name == NULL) || (domain_name[0] == '\0')) {
+ domain_name = "*";
+ }
+
+ config_option = talloc_asprintf(talloc_tos(), "idmap config %s",
+ domain_name);
+ if (config_option == NULL) {
+ DEBUG(0, ("out of memory\n"));
+ return false;
+ }
+
+ backend = lp_parm_const_string(-1, config_option, "backend", NULL);
+ if (backend == NULL) {
+ DEBUG(1, ("idmap backend not specified for domain '%s'\n", domain_name));
+ goto done;
+ }
+
+done:
+ talloc_free(config_option);
+ return backend;
}
-static bool handle_idmap_gid(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr)
+const char *lp_idmap_default_backend(void)
{
- lp_do_parameter(snum, "idmap config * : range", pszParmValue);
-
- return true;
+ return lp_idmap_backend("*");
}
/***************************************************************************
diff --git a/source3/utils/net_idmap.c b/source3/utils/net_idmap.c
index 1190627..bdc4879 100644
--- a/source3/utils/net_idmap.c
+++ b/source3/utils/net_idmap.c
@@ -134,10 +134,10 @@ static const char* net_idmap_dbfile(struct net_context *c,
const char* dbfile = NULL;
const char *backend = NULL;
- /* prefer idmap config * : backend over idmap backend parameter */
- backend = lp_parm_const_string(-1, "idmap config *", "backend", NULL);
+ backend = lp_idmap_default_backend();
if (!backend) {
- backend = lp_idmap_backend();
+ d_printf(_("Internal error: 'idmap config * : backend' is not set!\n"));
+ return NULL;
}
if (c->opt_db != NULL) {
@@ -426,64 +426,66 @@ done:
static
NTSTATUS dbwrap_delete_mapping(struct db_context *db, TDB_DATA key1, bool force)
{
- TALLOC_CTX* mem_ctx = talloc_tos();
- struct db_record *rec1=NULL, *rec2=NULL;
- TDB_DATA key2;
+ TALLOC_CTX *mem_ctx = talloc_stackframe();
bool is_valid_mapping;
NTSTATUS status = NT_STATUS_OK;
- TDB_DATA value;
+ TDB_DATA val1, val2;
+
+ ZERO_STRUCT(val1);
+ ZERO_STRUCT(val2);
- rec1 = dbwrap_fetch_locked(db, mem_ctx, key1);
- if (rec1 == NULL) {
+ status = dbwrap_fetch(db, mem_ctx, key1, &val1);
+ if (!NT_STATUS_IS_OK(status)) {
DEBUG(1, ("failed to fetch: %.*s\n", (int)key1.dsize, key1.dptr));
- status = NT_STATUS_NO_MEMORY;
goto done;
}
- key2 = dbwrap_record_get_value(rec1);
- if (key2.dptr == NULL) {
- DEBUG(1, ("could not find %.*s\n", (int)key1.dsize, key1.dptr));
- status = NT_STATUS_NOT_FOUND;
+
+ if (val1.dptr == NULL) {
+ DEBUG(1, ("invalid mapping: %.*s -> empty value\n",
+ (int)key1.dsize, key1.dptr));
+ status = NT_STATUS_FILE_INVALID;
goto done;
}
DEBUG(2, ("mapping: %.*s -> %.*s\n",
- (int)key1.dsize, key1.dptr, (int)key2.dsize, key2.dptr));
+ (int)key1.dsize, key1.dptr, (int)val1.dsize, val1.dptr));
- rec2 = dbwrap_fetch_locked(db, mem_ctx, key2);
- if (rec2 == NULL) {
- DEBUG(1, ("failed to fetch: %.*s\n", (int)key2.dsize, key2.dptr));
- status = NT_STATUS_NO_MEMORY;
+ status = dbwrap_fetch(db, mem_ctx, val1, &val2);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(1, ("failed to fetch: %.*s\n", (int)val1.dsize, val1.dptr));
goto done;
}
- value = dbwrap_record_get_value(rec2);
- is_valid_mapping = tdb_data_equal(key1, value);
+ is_valid_mapping = tdb_data_equal(key1, val2);
if (!is_valid_mapping) {
DEBUG(1, ("invalid mapping: %.*s -> %.*s -> %.*s\n",
- (int)key1.dsize, key1.dptr, (int)key2.dsize, key2.dptr,
- (int)value.dsize, value.dptr ));
+ (int)key1.dsize, key1.dptr,
+ (int)val1.dsize, val1.dptr,
+ (int)val2.dsize, val2.dptr));
if ( !force ) {
status = NT_STATUS_FILE_INVALID;
goto done;
}
}
- status = dbwrap_record_delete(rec1);
+ status = dbwrap_delete(db, key1);
if (!NT_STATUS_IS_OK(status)) {
DEBUG(1, ("failed to delete: %.*s\n", (int)key1.dsize, key1.dptr));
goto done;
}
- if (is_valid_mapping) {
- status = dbwrap_record_delete(rec2);
- if (!NT_STATUS_IS_OK(status)) {
- DEBUG(1, ("failed to delete: %.*s\n", (int)key2.dsize, key2.dptr));
- }
+ if (!is_valid_mapping) {
+ goto done;
+ }
+
+ status = dbwrap_delete(db, val1);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(1, ("failed to delete: %.*s\n", (int)val1.dsize, val1.dptr));
}
+
done:
- TALLOC_FREE(rec1);
- TALLOC_FREE(rec2);
+ talloc_free(mem_ctx);
return status;
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list