At http://samba.sernet.de/ma/bzr/SAMBA_3_0-registry.bzr/

------------------------------------------------------------
revno: 5364
revision-id: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Michael Adam <[EMAIL PROTECTED]>
branch nick: SAMBA_3_0-registry.bzr
timestamp: Tue 2007-04-17 01:01:51 +0200
message:
  Changes of the registry also trigger a reload of smb.conf.
  
  This is a first slighty hacked version of a registry watcher
  in lp_file_list_changed. It uses the regdb sequence number
  to decide whether the contents of the registry has changed.
  The hack here is that the call to "registry_init_regdb()" 
  is now there in process_registry_shares() and and in 
  lp_file_list_changed(). It is needed in the latter function
  because when a new smbd process is started, lp_file_list_changed 
  is called before lp_load(). Maybe, I have to think of a better
  place to call regdb_init()... 
modified:
  source/param/loadparm.c        loadparm.c-20060530022627-1efa1edb3eb0e897
=== modified file 'source/param/loadparm.c'
--- a/source/param/loadparm.c   2007-04-15 22:30:33 +0000
+++ b/source/param/loadparm.c   2007-04-16 23:01:51 +0000
@@ -80,6 +80,9 @@
 #define INCLUDE_REGISTRY_NAME "registry"
 #endif
 
+static int regdb_last_seqnum = 0;
+static BOOL include_registry_globals = False;
+
 /* some helpful bits */
 #define LP_SNUM_OK(i) (((i) >= 0) && ((i) < iNumServices) && (ServicePtrs != 
NULL) && ServicePtrs[(i)]->valid)
 #define VALID(i) (ServicePtrs != NULL && ServicePtrs[i]->valid)
@@ -3084,6 +3087,24 @@
 
        DEBUG(6, ("lp_file_list_changed()\n"));
 
+
+       /* hack - should't this go somewhere else?!
+        * now it is here and in process_registry_globals. 
+        * so whichever function is called first wil init the
+        * regdb. here we need it for querying the regdb seqnum */
+       if (!registry_init_regdb()) {
+               DEBUG(1, ("Error initializing the registry.\n"));
+               return False;
+       }
+
+       if (include_registry_globals &&
+           (regdb_last_seqnum != regdb_get_seqnum()))
+       {
+               DEBUGADD(6, ("regdb seqnum changed: old = %d, new = %d\n",
+                            regdb_last_seqnum, regdb_get_seqnum()));
+               return True;
+       }
+
        while (f) {
                pstring n2;
                time_t mod_time;
@@ -3193,6 +3214,8 @@
                smb_panic("Failed to create talloc context!");
        }
 
+       include_registry_globals = True;
+
        /* It might not bee to clean to have the initialization here.
         * If the registry is already initialized, it does not do
         * any harm. */
@@ -3231,7 +3254,7 @@
                        pfunc(valname, value->v.sz.str);
                        break;
                default:
-                       /* ignore */
+                       /* ignore other types */
                        break;
                }
                TALLOC_FREE(value);
@@ -3240,6 +3263,8 @@
 
        ret = pfunc("registry shares", "yes");
 
+       regdb_last_seqnum = regdb_get_seqnum();
+
 done:
        talloc_destroy(ctx);
        return ret;

Reply via email to