summaryrefslogtreecommitdiff
path: root/source4/lib/registry
diff options
context:
space:
mode:
Diffstat (limited to 'source4/lib/registry')
-rw-r--r--source4/lib/registry/patchfile.c6
-rw-r--r--source4/lib/registry/registry.h3
-rw-r--r--source4/lib/registry/registry.i11
-rw-r--r--source4/lib/registry/registry_wrap.c49
-rw-r--r--source4/lib/registry/tests/diff.c2
-rw-r--r--source4/lib/registry/tools/regpatch.c2
6 files changed, 48 insertions, 25 deletions
diff --git a/source4/lib/registry/patchfile.c b/source4/lib/registry/patchfile.c
index a6f947ee78..06db3b36ba 100644
--- a/source4/lib/registry/patchfile.c
+++ b/source4/lib/registry/patchfile.c
@@ -479,7 +479,9 @@ static WERROR reg_diff_apply_del_all_values(void *_ctx, const char *key_name)
/**
* Apply diff to a registry context
*/
-_PUBLIC_ WERROR reg_diff_apply(struct registry_context *ctx, const char *filename)
+_PUBLIC_ WERROR reg_diff_apply(struct registry_context *ctx,
+ struct smb_iconv_convenience *iconv_convenience,
+ const char *filename)
{
struct reg_diff_callbacks callbacks;
@@ -490,6 +492,6 @@ _PUBLIC_ WERROR reg_diff_apply(struct registry_context *ctx, const char *filenam
callbacks.del_all_values = reg_diff_apply_del_all_values;
callbacks.done = NULL;
- return reg_diff_load(filename, lp_iconv_convenience(global_loadparm),
+ return reg_diff_load(filename, iconv_convenience,
&callbacks, ctx);
}
diff --git a/source4/lib/registry/registry.h b/source4/lib/registry/registry.h
index e89d6fd55c..f9db39f4ae 100644
--- a/source4/lib/registry/registry.h
+++ b/source4/lib/registry/registry.h
@@ -484,7 +484,8 @@ struct reg_diff_callbacks {
WERROR (*done) (void *callback_data);
};
-WERROR reg_diff_apply(struct registry_context *ctx, const char *filename);
+WERROR reg_diff_apply(struct registry_context *ctx,
+ struct smb_iconv_convenience *ic, const char *filename);
WERROR reg_generate_diff(struct registry_context *ctx1,
struct registry_context *ctx2,
diff --git a/source4/lib/registry/registry.i b/source4/lib/registry/registry.i
index fe3a81d889..b33b99c0c2 100644
--- a/source4/lib/registry/registry.i
+++ b/source4/lib/registry/registry.i
@@ -31,6 +31,7 @@
#include "registry.h"
#include "param/param.h"
#include "events/events.h"
+#include "scripting/python/modules.h"
typedef struct registry_context reg;
typedef struct hive_key hive_key;
@@ -62,6 +63,14 @@ const char *str_regtype(int type);
$result = SWIG_NewPointerObj(*$1, SWIGTYPE_p_registry_context, 0);
}
+%typemap(in,noblock=1) struct smb_iconv_convenience * {
+ $1 = py_iconv_convenience(NULL);
+}
+
+%typemap(freearg,noblock=1) struct smb_iconv_convenience * {
+ talloc_free($1);
+}
+
%rename(Registry) reg_open_local;
WERROR reg_open_local(TALLOC_CTX *parent_ctx, struct registry_context **ctx);
@@ -111,7 +120,7 @@ typedef struct registry_context {
%feature("docstring") diff_apply "S.diff_apply(filename) -> None\n"
"Apply the diff from the specified file";
- WERROR diff_apply(const char *filename);
+ WERROR diff_apply(struct smb_iconv_convenience *ic, const char *filename);
WERROR generate_diff(struct registry_context *ctx2, const struct reg_diff_callbacks *callbacks,
void *callback_data);
diff --git a/source4/lib/registry/registry_wrap.c b/source4/lib/registry/registry_wrap.c
index 809610fd1d..31711b6071 100644
--- a/source4/lib/registry/registry_wrap.c
+++ b/source4/lib/registry/registry_wrap.c
@@ -2502,12 +2502,13 @@ SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int argnum, int flags)
#define SWIGTYPE_p_registry_key swig_types[19]
#define SWIGTYPE_p_short swig_types[20]
#define SWIGTYPE_p_signed_char swig_types[21]
-#define SWIGTYPE_p_unsigned_char swig_types[22]
-#define SWIGTYPE_p_unsigned_int swig_types[23]
-#define SWIGTYPE_p_unsigned_long_long swig_types[24]
-#define SWIGTYPE_p_unsigned_short swig_types[25]
-static swig_type_info *swig_types[27];
-static swig_module_info swig_module = {swig_types, 26, 0, 0, 0, 0};
+#define SWIGTYPE_p_smb_iconv_convenience swig_types[22]
+#define SWIGTYPE_p_unsigned_char swig_types[23]
+#define SWIGTYPE_p_unsigned_int swig_types[24]
+#define SWIGTYPE_p_unsigned_long_long swig_types[25]
+#define SWIGTYPE_p_unsigned_short swig_types[26]
+static swig_type_info *swig_types[28];
+static swig_module_info swig_module = {swig_types, 27, 0, 0, 0, 0};
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
@@ -2555,6 +2556,7 @@ static swig_module_info swig_module = {swig_types, 26, 0, 0, 0, 0};
#include "registry.h"
#include "param/param.h"
#include "events/events.h"
+#include "scripting/python/modules.h"
typedef struct registry_context reg;
typedef struct hive_key hive_key;
@@ -3107,41 +3109,46 @@ fail:
SWIGINTERN PyObject *_wrap_reg_diff_apply(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
reg *arg1 = (reg *) 0 ;
- char *arg2 = (char *) 0 ;
+ struct smb_iconv_convenience *arg2 = (struct smb_iconv_convenience *) 0 ;
+ char *arg3 = (char *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- int res2 ;
- char *buf2 = 0 ;
- int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
char * kwnames[] = {
- (char *) "self",(char *) "filename", NULL
+ (char *) "self",(char *) "ic",(char *) "filename", NULL
};
WERROR result;
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:reg_diff_apply",kwnames,&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OOO:reg_diff_apply",kwnames,&obj0,&obj1,&obj2)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_registry_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "reg_diff_apply" "', argument " "1"" of type '" "reg *""'");
}
arg1 = (reg *)(argp1);
- res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "reg_diff_apply" "', argument " "2"" of type '" "char const *""'");
+ arg2 = py_iconv_convenience(NULL);
+ res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "reg_diff_apply" "', argument " "3"" of type '" "char const *""'");
}
- arg2 = (char *)(buf2);
- result = reg_diff_apply(arg1,(char const *)arg2);
+ arg3 = (char *)(buf3);
+ result = reg_diff_apply(arg1,arg2,(char const *)arg3);
if (!W_ERROR_IS_OK(result)) {
PyErr_SetWERROR(result);
SWIG_fail;
} else if (resultobj == NULL) {
resultobj = Py_None;
}
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ talloc_free(arg2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
return resultobj;
fail:
- if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
+ talloc_free(arg2);
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
return NULL;
}
@@ -3849,6 +3856,7 @@ static swig_type_info _swigt__p_registry_context = {"_p_registry_context", "stru
static swig_type_info _swigt__p_registry_key = {"_p_registry_key", "struct registry_key *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_short = {"_p_short", "short *|int_least16_t *|int16_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_signed_char = {"_p_signed_char", "signed char *|int_least8_t *|int_fast8_t *|int8_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_smb_iconv_convenience = {"_p_smb_iconv_convenience", "struct smb_iconv_convenience *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_char = {"_p_unsigned_char", "unsigned char *|uint_least8_t *|uint_fast8_t *|uint8_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_int = {"_p_unsigned_int", "uintptr_t *|uint_least32_t *|uint_fast32_t *|uint32_t *|unsigned int *|uint_fast16_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_unsigned_long_long = {"_p_unsigned_long_long", "uint_least64_t *|uint_fast64_t *|uint64_t *|unsigned long long *|uintmax_t *", 0, 0, (void*)0, 0};
@@ -3877,6 +3885,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_registry_key,
&_swigt__p_short,
&_swigt__p_signed_char,
+ &_swigt__p_smb_iconv_convenience,
&_swigt__p_unsigned_char,
&_swigt__p_unsigned_int,
&_swigt__p_unsigned_long_long,
@@ -3905,6 +3914,7 @@ static swig_cast_info _swigc__p_registry_context[] = { {&_swigt__p_registry_con
static swig_cast_info _swigc__p_registry_key[] = { {&_swigt__p_registry_key, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_short[] = { {&_swigt__p_short, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_signed_char[] = { {&_swigt__p_signed_char, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_smb_iconv_convenience[] = { {&_swigt__p_smb_iconv_convenience, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_char[] = { {&_swigt__p_unsigned_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_int[] = { {&_swigt__p_unsigned_int, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_unsigned_long_long[] = { {&_swigt__p_unsigned_long_long, 0, 0, 0},{0, 0, 0, 0}};
@@ -3933,6 +3943,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_registry_key,
_swigc__p_short,
_swigc__p_signed_char,
+ _swigc__p_smb_iconv_convenience,
_swigc__p_unsigned_char,
_swigc__p_unsigned_int,
_swigc__p_unsigned_long_long,
diff --git a/source4/lib/registry/tests/diff.c b/source4/lib/registry/tests/diff.c
index 44ea090527..3dba7293bc 100644
--- a/source4/lib/registry/tests/diff.c
+++ b/source4/lib/registry/tests/diff.c
@@ -71,7 +71,7 @@ static bool test_diff_apply(struct torture_context *tctx, void *tcase_data)
struct registry_key *key;
WERROR error;
- error = reg_diff_apply(td->r1_ctx, td->filename);
+ error = reg_diff_apply(td->r1_ctx, lp_iconv_convenience(tctx->lp_ctx), td->filename);
torture_assert_werr_ok(tctx, error, "reg_diff_apply");
error = td->r1_ctx->ops->get_predefined_key(td->r1_ctx, HKEY_LOCAL_MACHINE, &key);
diff --git a/source4/lib/registry/tools/regpatch.c b/source4/lib/registry/tools/regpatch.c
index add59a5e64..03d29a598b 100644
--- a/source4/lib/registry/tools/regpatch.c
+++ b/source4/lib/registry/tools/regpatch.c
@@ -68,7 +68,7 @@ int main(int argc, char **argv)
poptFreeContext(pc);
- reg_diff_apply(h, patch);
+ reg_diff_apply(h, lp_iconv_convenience(cmdline_lp_ctx), patch);
return 0;
}