svn commit: samba r26036 - in branches/4.0-python: . source/lib/registry source/scripting/python/samba

jelmer at samba.org jelmer at samba.org
Mon Nov 19 18:20:41 GMT 2007


Author: jelmer
Date: 2007-11-19 18:20:40 +0000 (Mon, 19 Nov 2007)
New Revision: 26036

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=26036

Log:
Allow opening registry files from python, add some constants.
Modified:
   branches/4.0-python/
   branches/4.0-python/source/lib/registry/registry.i
   branches/4.0-python/source/scripting/python/samba/provision.py


Changeset:

Property changes on: branches/4.0-python
___________________________________________________________________
Name: bzr:revision-info
...skipped...
Name: bzr:revision-id:v3-trunk0
...skipped...

Modified: branches/4.0-python/source/lib/registry/registry.i
===================================================================
--- branches/4.0-python/source/lib/registry/registry.i	2007-11-19 18:20:36 UTC (rev 26035)
+++ branches/4.0-python/source/lib/registry/registry.i	2007-11-19 18:20:40 UTC (rev 26036)
@@ -27,34 +27,98 @@
 #include "registry.h"
 
 typedef struct registry_context reg;
+typedef struct hive_key hive;
 %}
 
-%include "stdint.i"
+/* FIXME: This should be in another file */
+%typemap(default) struct auth_session_info * {
+    $1 = NULL; 
+}
 
-WERROR reg_open_local(TALLOC_CTX *mem_ctx,
-		      struct registry_context **ctx,
-		      struct auth_session_info *session_info,
-		      struct cli_credentials *credentials);
+%import "stdint.i"
+%import "../../scripting/swig/talloc.i"
+%import "../../auth/credentials/credentials.i"
+%import "../../libcli/util/errors.i"
 
-WERROR reg_open_samba(TALLOC_CTX *mem_ctx,
-		      struct registry_context **ctx,
-		      struct auth_session_info *session_info,
-		      struct cli_credentials *credentials);
+/* Utility functions */
 
-WERROR reg_open_remote(struct registry_context **ctx,
-		       struct auth_session_info *session_info,
-		       struct cli_credentials *credentials,
-		       const char *location, struct event_context *ev);
-
 const char *reg_get_predef_name(uint32_t hkey);
 const char *str_regtype(int type);
 
-%rename(Registry) reg;
+/* Registry contexts */
+%typemap(in,numinputs=0) struct registry_context ** (struct registry_context *tmp) {
+    $1 = &tmp; 
+}
+
+%typemap(argout) struct registry_context ** {
+    Py_XDECREF($result);
+    $result = SWIG_NewPointerObj(*$1, SWIGTYPE_p_registry_context, 0);
+}
+
+%rename(Registry) reg_open_local;
+WERROR reg_open_local(TALLOC_CTX *parent_ctx, struct registry_context **ctx,
+                      struct auth_session_info *session_info,
+                      struct cli_credentials *credentials);
+
 typedef struct registry_context {
     %extend {
+
+    ~reg() { talloc_free($self); }
     WERROR get_predefined_key_by_name(const char *name, 
                                       struct registry_key **key);
 
     WERROR get_predefined_key(uint32_t hkey, struct registry_key **key);
+    WERROR apply_patchfile(const char *filename)
+    {
+        return reg_diff_apply(filename, $self);
     }
+
+    WERROR mount_hive(struct hive_key *hive_key, uint32_t key_id,
+                      const char **elements=NULL);
+    }
+
+    %pythoncode {
+        def mount(self, path, key_id, elements=[]):
+            self.mount_hive(Hive(path), key_id, elements)
+    }
 } reg;
+
+/* Hives */
+%typemap(in,numinputs=0) struct hive_key ** (struct hive_key *tmp) {
+    $1 = &tmp; 
+}
+
+%typemap(argout) struct hive_key ** {
+    Py_XDECREF($result);
+    $result = SWIG_NewPointerObj(*$1, SWIGTYPE_p_hive_key, 0);
+}
+
+%rename(Hive) reg_open_hive;
+WERROR reg_open_hive(TALLOC_CTX *parent_ctx, const char *location,
+                     struct auth_session_info *session_info,
+                     struct cli_credentials *credentials,
+                     struct hive_key **root);
+
+typedef struct hive_key {
+    %extend {
+        ~hive() { talloc_free($self); }
+    }
+} hive;
+
+%rename(open_samba) reg_open_samba;
+
+WERROR reg_open_samba(TALLOC_CTX *mem_ctx,
+                      struct registry_context **ctx,
+                      struct auth_session_info *session_info,
+                      struct cli_credentials *credentials);
+
+/* Constants */
+%constant uint32_t HKEY_CLASSES_ROOT = HKEY_CLASSES_ROOT;
+%constant uint32_t HKEY_CURRENT_USER = HKEY_CURRENT_USER;
+%constant uint32_t HKEY_LOCAL_MACHINE = HKEY_LOCAL_MACHINE;
+%constant uint32_t HKEY_USERS = HKEY_USERS;
+%constant uint32_t HKEY_PERFORMANCE_DATA = HKEY_PERFORMANCE_DATA;
+%constant uint32_t HKEY_CURRENT_CONFIG = HKEY_CURRENT_CONFIG;
+%constant uint32_t HKEY_DYN_DATA = HKEY_DYN_DATA;
+%constant uint32_t HKEY_PERFORMANCE_TEXT = HKEY_PERFORMANCE_TEXT;
+%constant uint32_t HKEY_PERFORMANCE_NLSTEXT = HKEY_PERFORMANCE_NLSTEXT;

Modified: branches/4.0-python/source/scripting/python/samba/provision.py
===================================================================
--- branches/4.0-python/source/scripting/python/samba/provision.py	2007-11-19 18:20:36 UTC (rev 26035)
+++ branches/4.0-python/source/scripting/python/samba/provision.py	2007-11-19 18:20:40 UTC (rev 26036)
@@ -352,6 +352,7 @@
     paths.ldap_schema_basedn_ldif = os.path.join(private_dir, subobj.dnsdomain + "-schema.ldif")
     paths.s4_ldapi_path = os.path.join(private_dir, "ldapi")
     paths.phpldapadminconfig = os.path.join(private_dir, "phpldapadmin-config.php")
+    paths.hklm = os.path.join(private_dir, "hklm.ldb")
     return paths
 
 
@@ -464,7 +465,10 @@
     setup_ldb(setup_dir, "secrets.ldif", session_info, credentials, subobj, paths.secrets, False)
 
     message("Setting up registry")
-    message("# FIXME")
+    import registry
+    reg = registry.Registry()
+    reg.mount(paths.hklm, registry.HKEY_LOCAL_MACHINE)
+    reg.apply_patchfile(os.path.join(setup_dir, "provision.reg"))
 
     message("Setting up templates into %s" % paths.templates)
     setup_ldb(setup_dir, "provision_templates.ldif", session_info, credentials, subobj, paths.templates)



More information about the samba-cvs mailing list