r22473: Correct fix for setting a default compat tdb idmap backend.
authorGerald Carter <jerry@samba.org>
Mon, 23 Apr 2007 06:10:22 +0000 (06:10 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:19:37 +0000 (12:19 -0500)
Previous code would always fill in "idmap backend = tdb"
even if you defined idmap domains.  My fault.  I should
have tested the original patch more before committing.

source/nsswitch/idmap.c

index 7a74f744b46fccd21d05c377c3d552addcf0d3c1..7589ee66abd984bf29840d913f93f3527e3b78b0 100644 (file)
@@ -289,40 +289,42 @@ NTSTATUS idmap_init(void)
 
        dom_list = lp_idmap_domains();
        
-       if ( dom_list && lp_idmap_backend() ) {
-               DEBUG(0, ("WARNING: idmap backend and idmap domains are "
-                         "mutually excusive!\n"));
-               DEBUGADD(0,("idmap backend option will be IGNORED!\n"));
-       } else if ( lp_idmap_backend() ) {
-               const char **compat_list = lp_idmap_backend();
+       if ( lp_idmap_backend() ) {
+                       const char **compat_list = lp_idmap_backend();
                char *p = NULL;
                const char *q = NULL;           
 
-               compat = 1;
+               if ( dom_list ) {                       
+                       DEBUG(0, ("WARNING: idmap backend and idmap domains are "
+                                 "mutually excusive!\n"));
+                       DEBUGADD(0,("idmap backend option will be IGNORED!\n"));
+               } else {
+                       compat = 1;
 
-               if ( (compat_backend = talloc_strdup( idmap_ctx, *compat_list )) == NULL ) {
-                       ret = NT_STATUS_NO_MEMORY;
-                       goto done;                      
-               }
+                       if ( (compat_backend = talloc_strdup( idmap_ctx, *compat_list )) == NULL ) {
+                               ret = NT_STATUS_NO_MEMORY;
+                               goto done;
+                       }
                
-               /* strip any leading idmap_ prefix of */
-               if (strncmp(*compat_list, "idmap_", 6) == 0 ) {
-                       q = *compat_list += 6;
-                       DEBUG(0, ("WARNING: idmap backend uses obsolete and "
-                                 "deprecated 'idmap_' prefix.\n"
-                                 "Please replace 'idmap_%s' by '%s' in %s\n", 
-                                 q, q, dyn_CONFIGFILE));
-                       compat_backend = talloc_strdup( idmap_ctx, q);
-               } else {
-                       compat_backend = talloc_strdup( idmap_ctx, *compat_list);
-               }
+                       /* strip any leading idmap_ prefix of */
+                       if (strncmp(*compat_list, "idmap_", 6) == 0 ) {
+                               q = *compat_list += 6;
+                               DEBUG(0, ("WARNING: idmap backend uses obsolete and "
+                                         "deprecated 'idmap_' prefix.\n"
+                                         "Please replace 'idmap_%s' by '%s' in %s\n", 
+                                         q, q, dyn_CONFIGFILE));
+                               compat_backend = talloc_strdup( idmap_ctx, q);
+                       } else {
+                               compat_backend = talloc_strdup( idmap_ctx, *compat_list);
+                       }
                        
-               /* separate the backend and module arguements */
-               if ((p = strchr(compat_backend, ':')) != NULL) {
-                       *p = '\0';                      
-                       compat_params = p + 1;
-               }
-       } else {
+                       /* separate the backend and module arguements */
+                       if ((p = strchr(compat_backend, ':')) != NULL) {
+                               *p = '\0';                      
+                               compat_params = p + 1;
+                       }
+               }               
+       } else if ( !dom_list ) {
                /* Back compatible: without idmap domains and explicit
                   idmap backend.  Taking default idmap backend: tdb */
                
@@ -331,7 +333,6 @@ NTSTATUS idmap_init(void)
                compat_params = compat_backend;
        }
 
-
        if ( ! dom_list) {
                dom_list = idmap_default_domain;
        }