The branch, v3-2-ctdb has been updated
       via  993608e2fa84e43b8195a53e2c3f2024f0e92b8e (commit)
       via  074229796c4ca9827238e7fee7aca5a95c7ada05 (commit)
       via  43a2a26956298a0e12a79880107324784f9ec7de (commit)
      from  e407636d9bcdc88ca6e21dfd78c016302c6553f3 (commit)

http://gitweb.samba.org/?p=obnox/samba-ctdb.git;a=shortlog;h=v3-2-ctdb


- Log -----------------------------------------------------------------
commit 993608e2fa84e43b8195a53e2c3f2024f0e92b8e
Author: Michael Adam <[email protected]>
Date:   Tue Apr 28 15:52:44 2009 +0200

    pm_process():raise level of debug message
    
    Michael

commit 074229796c4ca9827238e7fee7aca5a95c7ada05
Author: Michael Adam <[email protected]>
Date:   Mon Apr 27 18:10:14 2009 +0200

    s3:loadparm: prevent infinite include nesting.
    
    This introduces a hard coded MAX_INCLUDE_DEPTH of 100.
    When this is exceeded, handle_include (and hence lp_load) fails.
    
    One could of course implement a more intelligent loop detection
    in the include-tree, but this would require some restructuring
    of the internal loadparm housekeeping. Maybe as a second improvement
    step.
    
    Michael

commit 43a2a26956298a0e12a79880107324784f9ec7de
Author: Michael Adam <[email protected]>
Date:   Tue Apr 28 01:24:27 2009 +0200

    s3:mark registry shares without path unavailable just as with text config
    
    This prevents users from getting access to "/" in misconfigured setups.
    
    Michael
    
    Signed-off-by: Michael Adam <[email protected]>

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

Summary of changes:
 source/param/loadparm.c |   24 ++++++++++++++++++++++--
 source/param/params.c   |    2 +-
 2 files changed, 23 insertions(+), 3 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/param/loadparm.c b/source/param/loadparm.c
index a17cb1f..f6f2486 100644
--- a/source/param/loadparm.c
+++ b/source/param/loadparm.c
@@ -6529,6 +6529,9 @@ static bool process_registry_service(struct 
smbconf_service *service)
                        return false;
                }
        }
+       if (iServiceIndex >= 0) {
+               ret = service_ok(iServiceIndex);
+       }
        return true;
 }
 
@@ -6616,6 +6619,10 @@ done:
        return ret;
 }
 
+#define MAX_INCLUDE_DEPTH 100
+
+static uint8_t include_depth;
+
 static struct file_lists {
        struct file_lists *next;
        char *name;
@@ -6803,12 +6810,22 @@ static bool handle_include(int snum, const char 
*pszParmValue, char **ptr)
 {
        char *fname;
 
+       if (include_depth >= MAX_INCLUDE_DEPTH) {
+               DEBUG(0, ("Error: Maximum include depth (%u) exceeded!\n",
+                         include_depth));
+               return false;
+       }
+
        if (strequal(pszParmValue, INCLUDE_REGISTRY_NAME)) {
                if (!bAllowIncludeRegistry) {
                        return true;
                }
                if (bInGlobalSection) {
-                       return process_registry_globals();
+                       bool ret;
+                       include_depth++;
+                       ret = process_registry_globals();
+                       include_depth--;
+                       return ret;
                } else {
                        DEBUG(1, ("\"include = registry\" only effective "
                                  "in %s section\n", GLOBAL_NAME));
@@ -6825,7 +6842,10 @@ static bool handle_include(int snum, const char 
*pszParmValue, char **ptr)
        string_set(ptr, fname);
 
        if (file_exist(fname, NULL)) {
-               bool ret = pm_process(fname, do_section, do_parameter, NULL);
+               bool ret;
+               include_depth++;
+               ret = pm_process(fname, do_section, do_parameter, NULL);
+               include_depth--;
                SAFE_FREE(fname);
                return ret;
        }
diff --git a/source/param/params.c b/source/param/params.c
index 478376c..bbdb869 100644
--- a/source/param/params.c
+++ b/source/param/params.c
@@ -582,7 +582,7 @@ bool pm_process( const char *FileName,
        myfile_close(InFile);
 
        if( !result ) {
-               DEBUG(0,("%s Failed.  Error returned from params.c:parse().\n", 
func));
+               DEBUG(3,("%s Failed.  Error returned from params.c:parse().\n", 
func));
                return False;
        }
 


-- 
SAMBA-CTDB repository

Reply via email to