diff options
author | Simo Sorce <idra@samba.org> | 2007-10-16 14:16:03 -0400 |
---|---|---|
committer | Simo Sorce <idra@samba.org> | 2007-10-16 14:16:03 -0400 |
commit | b111d543a580694f2909c75a280a42a27bbe6dd0 (patch) | |
tree | 14e28b7ddf16ed7be397a7b0c06e0082c163f154 /source3/winbindd | |
parent | b851ff28f9982d544e4385905e448665a3a05d7f (diff) | |
download | samba-b111d543a580694f2909c75a280a42a27bbe6dd0.tar.gz samba-b111d543a580694f2909c75a280a42a27bbe6dd0.tar.bz2 samba-b111d543a580694f2909c75a280a42a27bbe6dd0.zip |
Fix default domains support using compat syntax.
Without this fix idmap_rid can't be used with the compatible syntax.
Includes fix to keep trusted domains working
(This used to be commit 8c770c367c71d118651964fef63e2fd0fa4a05a5)
Diffstat (limited to 'source3/winbindd')
-rw-r--r-- | source3/winbindd/idmap.c | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/source3/winbindd/idmap.c b/source3/winbindd/idmap.c index 2c7acc185c..022a2291a3 100644 --- a/source3/winbindd/idmap.c +++ b/source3/winbindd/idmap.c @@ -251,12 +251,6 @@ NTSTATUS idmap_close(void) return NT_STATUS_OK; } -/********************************************************************** - Initialise idmap cache and a remote backend (if configured). -**********************************************************************/ - -static const char *idmap_default_domain[] = { "default domain", NULL }; - /**************************************************************************** ****************************************************************************/ @@ -291,6 +285,7 @@ NTSTATUS idmap_init(void) char *compat_backend = NULL; char *compat_params = NULL; const char **dom_list = NULL; + const char *default_domain = NULL; char *alloc_backend = NULL; BOOL default_already_defined = False; BOOL pri_dom_is_in_list = False; @@ -331,10 +326,6 @@ NTSTATUS idmap_init(void) compat = 1; compat_backend = talloc_strdup(idmap_ctx, *compat_list); - if (compat_backend == NULL ) { - ret = NT_STATUS_NO_MEMORY; - goto done; - } /* strip any leading idmap_ prefix of */ if (strncmp(*compat_list, "idmap_", 6) == 0 ) { @@ -349,6 +340,11 @@ NTSTATUS idmap_init(void) *compat_list); } + if (compat_backend == NULL ) { + ret = NT_STATUS_NO_MEMORY; + goto done; + } + /* separate the backend and module arguements */ if ((p = strchr(compat_backend, ':')) != NULL) { *p = '\0'; @@ -365,7 +361,25 @@ NTSTATUS idmap_init(void) } if ( ! dom_list) { - dom_list = idmap_default_domain; + /* generate a list with our main domain */ + char ** dl; + + dl = talloc_array(idmap_ctx, char *, 2); + if (dl == NULL) { + ret = NT_STATUS_NO_MEMORY; + goto done; + } + dl[0] = talloc_strdup(dl, lp_workgroup()); + if (dl[0] == NULL) { + ret = NT_STATUS_NO_MEMORY; + goto done; + } + + /* terminate */ + dl[1] = NULL; + + dom_list = dl; + default_domain = dl[0]; } /*************************** @@ -386,7 +400,8 @@ NTSTATUS idmap_init(void) continue; } - if (strequal(dom_list[i], lp_workgroup())) { + if ((dom_list[i] != default_domain) && + strequal(dom_list[i], lp_workgroup())) { pri_dom_is_in_list = True; } /* init domain */ @@ -407,10 +422,10 @@ NTSTATUS idmap_init(void) "default", False); if (dom->default_domain || - strequal(dom_list[i], idmap_default_domain[0])) { + (default_domain && strequal(dom_list[i], default_domain))) { /* make sure this is set even when we match - * idmap_default_domain[0] */ + * default_domain */ dom->default_domain = True; if (default_already_defined) { |