summaryrefslogtreecommitdiff
path: root/source4/lib
diff options
context:
space:
mode:
Diffstat (limited to 'source4/lib')
-rw-r--r--source4/lib/charset/charcnv.c17
-rw-r--r--source4/lib/charset/charset.h4
-rw-r--r--source4/lib/charset/config.mk1
-rw-r--r--source4/lib/charset/iconv.c20
-rw-r--r--source4/lib/charset/tests/iconv.c8
-rw-r--r--source4/lib/charset/util_unistr.c39
-rw-r--r--source4/lib/cmdline/config.mk2
-rw-r--r--source4/lib/cmdline/popt_credentials.c4
-rw-r--r--source4/lib/events/config.mk2
-rw-r--r--source4/lib/events/events.py11
-rw-r--r--source4/lib/events/events_wrap.c23
-rw-r--r--source4/lib/ldb-samba/config.mk2
-rw-r--r--source4/lib/ldb/common/ldb.c6
-rw-r--r--source4/lib/ldb/common/ldb_modules.c32
-rw-r--r--source4/lib/ldb/common/ldb_msg.c5
-rw-r--r--source4/lib/ldb/config.mk2
-rw-r--r--source4/lib/ldb/include/ldb.h2
-rw-r--r--source4/lib/ldb/include/ldb_private.h3
-rw-r--r--source4/lib/ldb/ldb.i93
-rw-r--r--source4/lib/ldb/ldb.py161
-rw-r--r--source4/lib/ldb/ldb_ildap/config.mk4
-rw-r--r--source4/lib/ldb/ldb_wrap.c838
-rwxr-xr-xsource4/lib/ldb/tests/python/api.py15
-rw-r--r--source4/lib/ldb/tools/ad2oLschema.c3
-rw-r--r--source4/lib/messaging/config.mk3
-rw-r--r--source4/lib/messaging/irpc.h2
-rw-r--r--source4/lib/messaging/messaging.c12
-rw-r--r--source4/lib/messaging/tests/irpc.c8
-rw-r--r--source4/lib/messaging/tests/messaging.c8
-rw-r--r--source4/lib/policy/lex.c3
-rw-r--r--source4/lib/registry/dir.c2
-rw-r--r--source4/lib/registry/hive.c5
-rw-r--r--source4/lib/registry/hive.h8
-rw-r--r--source4/lib/registry/interface.c2
-rw-r--r--source4/lib/registry/ldb.c9
-rw-r--r--source4/lib/registry/local.c10
-rw-r--r--source4/lib/registry/patchfile_preg.c76
-rw-r--r--source4/lib/registry/regf.c228
-rw-r--r--source4/lib/registry/registry.h4
-rw-r--r--source4/lib/registry/registry.i26
-rw-r--r--source4/lib/registry/registry.py51
-rw-r--r--source4/lib/registry/registry_wrap.c329
-rw-r--r--source4/lib/registry/rpc.c2
-rw-r--r--source4/lib/registry/samba.c4
-rw-r--r--source4/lib/registry/tests/generic.c7
-rw-r--r--source4/lib/registry/tests/hive.c8
-rw-r--r--source4/lib/registry/tests/registry.c4
-rw-r--r--source4/lib/registry/tools/common.c3
-rw-r--r--source4/lib/registry/tools/regshell.c8
-rw-r--r--source4/lib/registry/tools/regtree.c2
-rw-r--r--source4/lib/registry/util.c5
-rw-r--r--source4/lib/replace/README2
-rw-r--r--source4/lib/replace/getifaddrs.c392
-rw-r--r--source4/lib/replace/getifaddrs.m497
-rw-r--r--source4/lib/replace/libreplace.m41
-rw-r--r--source4/lib/replace/libreplace_ld.m46
-rw-r--r--source4/lib/replace/replace.h10
-rw-r--r--source4/lib/replace/system/network.h26
-rw-r--r--source4/lib/replace/test/testsuite.c20
-rw-r--r--source4/lib/samba3/config.mk4
-rw-r--r--source4/lib/samba3/samba3.c4
-rw-r--r--source4/lib/samba3/share_info.c2
-rw-r--r--source4/lib/smbreadline/smbreadline.c12
-rw-r--r--source4/lib/socket/config.m445
-rw-r--r--source4/lib/socket/config.mk4
-rw-r--r--source4/lib/socket/connect.c11
-rw-r--r--source4/lib/socket/connect_multi.c15
-rw-r--r--source4/lib/socket/interface.c114
-rw-r--r--source4/lib/socket/netif.c334
-rw-r--r--source4/lib/socket/netif.h2
-rw-r--r--source4/lib/socket/socket.h9
-rw-r--r--source4/lib/socket/socket_ip.c4
-rw-r--r--source4/lib/socket/testsuite.c20
-rw-r--r--source4/lib/talloc/talloc.c4
-rw-r--r--source4/lib/talloc/talloc.i7
-rw-r--r--source4/lib/tdb/tdb.py67
-rw-r--r--source4/lib/tdb/tdb_wrap.c179
-rw-r--r--source4/lib/tdr/tdr.c37
-rw-r--r--source4/lib/tdr/tdr.h2
-rw-r--r--source4/lib/tdr/testsuite.c86
-rw-r--r--source4/lib/util/dprintf.c39
-rw-r--r--source4/lib/util/ms_fnmatch.c15
-rw-r--r--source4/lib/util/smbrun.c341
-rw-r--r--source4/lib/util/tests/strlist.c25
-rw-r--r--source4/lib/util/util.h1
-rw-r--r--source4/lib/util/util_ldb.c6
-rw-r--r--source4/lib/util/util_strlist.c10
-rw-r--r--source4/lib/util/util_tdb.c17
88 files changed, 2163 insertions, 1933 deletions
diff --git a/source4/lib/charset/charcnv.c b/source4/lib/charset/charcnv.c
index 83bd11563f..54a0676599 100644
--- a/source4/lib/charset/charcnv.c
+++ b/source4/lib/charset/charcnv.c
@@ -42,7 +42,6 @@
struct smb_iconv_convenience {
const char *unix_charset;
const char *dos_charset;
- const char *display_charset;
bool native_iconv;
smb_iconv_t conv_handles[NUM_CHARSETS][NUM_CHARSETS];
};
@@ -57,7 +56,6 @@ static const char *charset_name(struct smb_iconv_convenience *ic, charset_t ch)
case CH_UTF16: return "UTF-16LE";
case CH_UNIX: return ic->unix_charset;
case CH_DOS: return ic->dos_charset;
- case CH_DISPLAY: return ic->display_charset;
case CH_UTF8: return "UTF8";
case CH_UTF16BE: return "UTF-16BE";
default:
@@ -88,7 +86,6 @@ static int close_iconv(struct smb_iconv_convenience *data)
struct smb_iconv_convenience *smb_iconv_convenience_init(TALLOC_CTX *mem_ctx,
const char *dos_charset,
const char *unix_charset,
- const char *display_charset,
bool native_iconv)
{
struct smb_iconv_convenience *ret = talloc_zero(mem_ctx,
@@ -102,7 +99,6 @@ struct smb_iconv_convenience *smb_iconv_convenience_init(TALLOC_CTX *mem_ctx,
ret->dos_charset = talloc_strdup(ret, dos_charset);
ret->unix_charset = talloc_strdup(ret, unix_charset);
- ret->display_charset = talloc_strdup(ret, display_charset);
ret->native_iconv = native_iconv;
return ret;
@@ -115,10 +111,10 @@ static smb_iconv_t get_conv_handle(struct smb_iconv_convenience *ic,
charset_t from, charset_t to)
{
const char *n1, *n2;
- static int initialised;
+ static bool initialised;
- if (initialised == 0) {
- initialised = 1;
+ if (initialised == false) {
+ initialised = true;
#ifdef LC_ALL
/* we set back the locale to C to get ASCII-compatible
@@ -138,7 +134,8 @@ static smb_iconv_t get_conv_handle(struct smb_iconv_convenience *ic,
n1 = charset_name(ic, from);
n2 = charset_name(ic, to);
- ic->conv_handles[from][to] = smb_iconv_open(n2, n1, ic->native_iconv);
+ ic->conv_handles[from][to] = smb_iconv_open_ex(ic, n2, n1,
+ ic->native_iconv);
if (ic->conv_handles[from][to] == (smb_iconv_t)-1) {
if ((from == CH_DOS || to == CH_DOS) &&
@@ -150,8 +147,8 @@ static smb_iconv_t get_conv_handle(struct smb_iconv_convenience *ic,
n1 = charset_name(ic, from);
n2 = charset_name(ic, to);
- ic->conv_handles[from][to] = smb_iconv_open(n2, n1,
- ic->native_iconv);
+ ic->conv_handles[from][to] =
+ smb_iconv_open_ex(ic, n2, n1, ic->native_iconv);
}
}
diff --git a/source4/lib/charset/charset.h b/source4/lib/charset/charset.h
index b1bb18a7c8..1d42a0ad91 100644
--- a/source4/lib/charset/charset.h
+++ b/source4/lib/charset/charset.h
@@ -24,9 +24,9 @@
#include <talloc.h>
/* this defines the charset types used in samba */
-typedef enum {CH_UTF16=0, CH_UNIX=1, CH_DISPLAY=2, CH_DOS=3, CH_UTF8=4, CH_UTF16BE=5} charset_t;
+typedef enum {CH_UTF16=0, CH_UNIX, CH_DOS, CH_UTF8, CH_UTF16BE} charset_t;
-#define NUM_CHARSETS 6
+#define NUM_CHARSETS 5
/*
* for each charset we have a function that pulls from that charset to
diff --git a/source4/lib/charset/config.mk b/source4/lib/charset/config.mk
index b2035672ba..4f0c80c79d 100644
--- a/source4/lib/charset/config.mk
+++ b/source4/lib/charset/config.mk
@@ -9,6 +9,5 @@ PUBLIC_HEADERS = charset.h
PUBLIC_PROTO_HEADER = charset_proto.h
PUBLIC_DEPENDENCIES = ICONV
PRIVATE_DEPENDENCIES = DYNCONFIG
-LDFLAGS = bin/static/libsamba-config.a bin/static/libsamba-util.a
# End SUBSYSTEM CHARSET
################################################
diff --git a/source4/lib/charset/iconv.c b/source4/lib/charset/iconv.c
index 937b3ec8b5..db212a83c4 100644
--- a/source4/lib/charset/iconv.c
+++ b/source4/lib/charset/iconv.c
@@ -154,17 +154,17 @@ static bool is_utf16(const char *name)
strcasecmp(name, "UTF-16LE") == 0;
}
-/*
- simple iconv_open() wrapper
- */
-smb_iconv_t smb_iconv_open(const char *tocode, const char *fromcode,
- bool native_iconv)
+
+
+smb_iconv_t smb_iconv_open_ex(TALLOC_CTX *mem_ctx, const char *tocode,
+ const char *fromcode, bool native_iconv)
{
smb_iconv_t ret;
const struct charset_functions *from=NULL, *to=NULL;
int i;
- ret = (smb_iconv_t)talloc_named(NULL, sizeof(*ret),
+ ret = (smb_iconv_t)talloc_named(mem_ctx,
+ sizeof(*ret),
"iconv(%s,%s)", tocode, fromcode);
if (!ret) {
errno = ENOMEM;
@@ -261,6 +261,14 @@ failed:
}
/*
+ simple iconv_open() wrapper
+ */
+smb_iconv_t smb_iconv_open(const char *tocode, const char *fromcode)
+{
+ return smb_iconv_open_ex(NULL, tocode, fromcode, true);
+}
+
+/*
simple iconv_close() wrapper
*/
int smb_iconv_close(smb_iconv_t cd)
diff --git a/source4/lib/charset/tests/iconv.c b/source4/lib/charset/tests/iconv.c
index ca13dc503a..aeb42c2fa1 100644
--- a/source4/lib/charset/tests/iconv.c
+++ b/source4/lib/charset/tests/iconv.c
@@ -157,8 +157,8 @@ static bool test_buffer(struct torture_context *test,
"failed to open %s to UTF-16LE",
charset));
}
- cd2 = smb_iconv_open(charset, "UTF-16LE", lp_parm_bool(test->lp_ctx, NULL, "iconv", "native", true));
- cd3 = smb_iconv_open("UTF-16LE", charset, lp_parm_bool(test->lp_ctx, NULL, "iconv", "native", true));
+ cd2 = smb_iconv_open_ex(test, charset, "UTF-16LE", lp_parm_bool(test->lp_ctx, NULL, "iconv", "native", true));
+ cd3 = smb_iconv_open_ex(test, "UTF-16LE", charset, lp_parm_bool(test->lp_ctx, NULL, "iconv", "native", true));
last_charset = charset;
}
@@ -288,7 +288,7 @@ static bool test_codepoint(struct torture_context *tctx, unsigned int codepoint)
size_t size, size2;
codepoint_t c;
- size = push_codepoint(global_smb_iconv_convenience, (char *)buf, codepoint);
+ size = push_codepoint(lp_iconv_convenience(tctx->lp_ctx), (char *)buf, codepoint);
torture_assert(tctx, size != -1 || (codepoint >= 0xd800 && codepoint <= 0x10000),
"Invalid Codepoint range");
@@ -299,7 +299,7 @@ static bool test_codepoint(struct torture_context *tctx, unsigned int codepoint)
buf[size+2] = random();
buf[size+3] = random();
- c = next_codepoint(global_smb_iconv_convenience, (char *)buf, &size2);
+ c = next_codepoint(lp_iconv_convenience(tctx->lp_ctx), (char *)buf, &size2);
torture_assert(tctx, c == codepoint,
talloc_asprintf(tctx,
diff --git a/source4/lib/charset/util_unistr.c b/source4/lib/charset/util_unistr.c
index 67a790c250..e0e1aed222 100644
--- a/source4/lib/charset/util_unistr.c
+++ b/source4/lib/charset/util_unistr.c
@@ -21,6 +21,7 @@
#include "includes.h"
#include "system/locale.h"
#include "dynconfig.h"
+#include "param/param.h"
/**
* @file
@@ -129,8 +130,8 @@ _PUBLIC_ int strcasecmp_m(const char *s1, const char *s2)
if (s2 == NULL) return 1;
while (*s1 && *s2) {
- c1 = next_codepoint(global_smb_iconv_convenience, s1, &size1);
- c2 = next_codepoint(global_smb_iconv_convenience, s2, &size2);
+ c1 = next_codepoint(lp_iconv_convenience(global_loadparm), s1, &size1);
+ c2 = next_codepoint(lp_iconv_convenience(global_loadparm), s2, &size2);
s1 += size1;
s2 += size2;
@@ -215,8 +216,8 @@ _PUBLIC_ int strncasecmp_m(const char *s1, const char *s2, size_t n)
while (*s1 && *s2 && n) {
n--;
- c1 = next_codepoint(global_smb_iconv_convenience, s1, &size1);
- c2 = next_codepoint(global_smb_iconv_convenience, s2, &size2);
+ c1 = next_codepoint(lp_iconv_convenience(global_loadparm), s1, &size1);
+ c2 = next_codepoint(lp_iconv_convenience(global_loadparm), s2, &size2);
s1 += size1;
s2 += size2;
@@ -275,7 +276,7 @@ _PUBLIC_ void string_replace_w(char *s, char oldc, char newc)
{
while (s && *s) {
size_t size;
- codepoint_t c = next_codepoint(global_smb_iconv_convenience, s, &size);
+ codepoint_t c = next_codepoint(lp_iconv_convenience(global_loadparm), s, &size);
if (c == oldc) {
*s = newc;
}
@@ -353,7 +354,7 @@ _PUBLIC_ size_t strlen_m(const char *s)
while (*s) {
size_t c_size;
- codepoint_t c = next_codepoint(global_smb_iconv_convenience, s, &c_size);
+ codepoint_t c = next_codepoint(lp_iconv_convenience(global_loadparm), s, &c_size);
if (c < 0x10000) {
count += 1;
} else {
@@ -391,7 +392,7 @@ _PUBLIC_ char *strchr_m(const char *s, char c)
while (*s) {
size_t size;
- codepoint_t c2 = next_codepoint(global_smb_iconv_convenience, s, &size);
+ codepoint_t c2 = next_codepoint(lp_iconv_convenience(global_loadparm), s, &size);
if (c2 == c) {
return discard_const_p(char, s);
}
@@ -416,7 +417,7 @@ _PUBLIC_ char *strrchr_m(const char *s, char c)
while (*s) {
size_t size;
- codepoint_t c2 = next_codepoint(global_smb_iconv_convenience, s, &size);
+ codepoint_t c2 = next_codepoint(lp_iconv_convenience(global_loadparm), s, &size);
if (c2 == c) {
ret = discard_const_p(char, s);
}
@@ -436,7 +437,7 @@ _PUBLIC_ bool strhaslower(const char *string)
codepoint_t s;
codepoint_t t;
- s = next_codepoint(global_smb_iconv_convenience, string, &c_size);
+ s = next_codepoint(lp_iconv_convenience(global_loadparm), string, &c_size);
string += c_size;
t = toupper_w(s);
@@ -459,7 +460,7 @@ _PUBLIC_ bool strhasupper(const char *string)
codepoint_t s;
codepoint_t t;
- s = next_codepoint(global_smb_iconv_convenience, string, &c_size);
+ s = next_codepoint(lp_iconv_convenience(global_loadparm), string, &c_size);
string += c_size;
t = tolower_w(s);
@@ -489,12 +490,12 @@ _PUBLIC_ char *strlower_talloc(TALLOC_CTX *ctx, const char *src)
while (*src) {
size_t c_size;
- codepoint_t c = next_codepoint(global_smb_iconv_convenience, src, &c_size);
+ codepoint_t c = next_codepoint(lp_iconv_convenience(global_loadparm), src, &c_size);
src += c_size;
c = tolower_w(c);
- c_size = push_codepoint(global_smb_iconv_convenience, dest+size, c);
+ c_size = push_codepoint(lp_iconv_convenience(global_loadparm), dest+size, c);
if (c_size == -1) {
talloc_free(dest);
return NULL;
@@ -533,12 +534,12 @@ _PUBLIC_ char *strupper_talloc(TALLOC_CTX *ctx, const char *src)
while (*src) {
size_t c_size;
- codepoint_t c = next_codepoint(global_smb_iconv_convenience, src, &c_size);
+ codepoint_t c = next_codepoint(lp_iconv_convenience(global_loadparm), src, &c_size);
src += c_size;
c = toupper_w(c);
- c_size = push_codepoint(global_smb_iconv_convenience, dest+size, c);
+ c_size = push_codepoint(lp_iconv_convenience(global_loadparm), dest+size, c);
if (c_size == -1) {
talloc_free(dest);
return NULL;
@@ -579,8 +580,8 @@ _PUBLIC_ void strlower_m(char *s)
while (*s) {
size_t c_size, c_size2;
- codepoint_t c = next_codepoint(global_smb_iconv_convenience, s, &c_size);
- c_size2 = push_codepoint(global_smb_iconv_convenience, d, tolower_w(c));
+ codepoint_t c = next_codepoint(lp_iconv_convenience(global_loadparm), s, &c_size);
+ c_size2 = push_codepoint(lp_iconv_convenience(global_loadparm), d, tolower_w(c));
if (c_size2 > c_size) {
DEBUG(0,("FATAL: codepoint 0x%x (0x%x) expanded from %d to %d bytes in strlower_m\n",
c, tolower_w(c), (int)c_size, (int)c_size2));
@@ -615,8 +616,8 @@ _PUBLIC_ void strupper_m(char *s)
while (*s) {
size_t c_size, c_size2;
- codepoint_t c = next_codepoint(global_smb_iconv_convenience, s, &c_size);
- c_size2 = push_codepoint(global_smb_iconv_convenience, d, toupper_w(c));
+ codepoint_t c = next_codepoint(lp_iconv_convenience(global_loadparm), s, &c_size);
+ c_size2 = push_codepoint(lp_iconv_convenience(global_loadparm), d, toupper_w(c));
if (c_size2 > c_size) {
DEBUG(0,("FATAL: codepoint 0x%x (0x%x) expanded from %d to %d bytes in strupper_m\n",
c, toupper_w(c), (int)c_size, (int)c_size2));
@@ -638,7 +639,7 @@ _PUBLIC_ size_t count_chars_w(const char *s, char c)
while (*s) {
size_t size;
- codepoint_t c2 = next_codepoint(global_smb_iconv_convenience, s, &size);
+ codepoint_t c2 = next_codepoint(lp_iconv_convenience(global_loadparm), s, &size);
if (c2 == c) count++;
s += size;
}
diff --git a/source4/lib/cmdline/config.mk b/source4/lib/cmdline/config.mk
index 8f2591bad6..a1f876d56a 100644
--- a/source4/lib/cmdline/config.mk
+++ b/source4/lib/cmdline/config.mk
@@ -11,5 +11,5 @@ PUBLIC_DEPENDENCIES = LIBPOPT
[SUBSYSTEM::POPT_CREDENTIALS]
PRIVATE_PROTO_HEADER = popt_credentials.h
OBJ_FILES = popt_credentials.o
-PUBLIC_DEPENDENCIES = CREDENTIALS_KRB5 LIBCMDLINE_CREDENTIALS LIBPOPT
+PUBLIC_DEPENDENCIES = CREDENTIALS LIBCMDLINE_CREDENTIALS LIBPOPT
PRIVATE_DEPENDENCIES = LIBSAMBA-UTIL
diff --git a/source4/lib/cmdline/popt_credentials.c b/source4/lib/cmdline/popt_credentials.c
index 25c9a2e5ff..de5ea7c1b6 100644
--- a/source4/lib/cmdline/popt_credentials.c
+++ b/source4/lib/cmdline/popt_credentials.c
@@ -54,8 +54,6 @@ static void popt_common_credentials_callback(poptContext con,
const struct poptOption *opt,
const char *arg, const void *data)
{
- struct cli_credentials *creds = data;
-
if (reason == POPT_CALLBACK_REASON_PRE) {
cmdline_credentials = cli_credentials_init(talloc_autofree_context());
return;
@@ -98,7 +96,7 @@ static void popt_common_credentials_callback(poptContext con,
case 'P':
/* Later, after this is all over, get the machine account details from the secrets.ldb */
- cli_credentials_set_machine_account_pending(cmdline_credentials);
+ cli_credentials_set_machine_account_pending(cmdline_credentials, cmdline_lp_ctx);
break;
case OPT_KERBEROS:
diff --git a/source4/lib/events/config.mk b/source4/lib/events/config.mk
index 7f4bfafb54..6750ca2d49 100644
--- a/source4/lib/events/config.mk
+++ b/source4/lib/events/config.mk
@@ -33,7 +33,7 @@ INIT_FUNCTION = s4_events_standard_init
[SUBSYSTEM::LIBEVENTS]
OBJ_FILES = events.o events_timed.o events_signal.o
PUBLIC_HEADERS = events.h events_internal.h
-PUBLIC_DEPENDENCIES = LIBTALLOC
+PUBLIC_DEPENDENCIES = LIBTALLOC LIBSAMBA-UTIL
# End SUBSYSTEM LIBEVENTS
##############################
diff --git a/source4/lib/events/events.py b/source4/lib/events/events.py
index 9cce31fac4..1e41e2d7e7 100644
--- a/source4/lib/events/events.py
+++ b/source4/lib/events/events.py
@@ -2,7 +2,6 @@
# Version 1.3.33
#
# Don't modify this file, modify the SWIG interface instead.
-# This file is compatible with both classic and new-style classes.
import _events
import new
@@ -48,6 +47,16 @@ except AttributeError:
del types
+def _swig_setattr_nondynamic_method(set):
+ def set_attr(self,name,value):
+ if (name == "thisown"): return self.this.own(value)
+ if hasattr(self,name) or (name == "this"):
+ set(self,name,value)
+ else:
+ raise AttributeError("You cannot add attributes to %s" % self)
+ return set_attr
+
+
event_context_init = _events.event_context_init
event_context_init_byname = _events.event_context_init_byname
event_backend_list = _events.event_backend_list
diff --git a/source4/lib/events/events_wrap.c b/source4/lib/events/events_wrap.c
index b2381d5160..08158cdc63 100644
--- a/source4/lib/events/events_wrap.c
+++ b/source4/lib/events/events_wrap.c
@@ -9,7 +9,7 @@
* ----------------------------------------------------------------------------- */
#define SWIGPYTHON
-#define SWIG_PYTHON_DIRECTOR_NO_VTABLE
+#define SWIG_PYTHON_NO_BUILD_NONE
/* -----------------------------------------------------------------------------
* This section contains generic SWIG labels for method/variable
* declarations/attributes, and other compiler dependent labels.
@@ -2472,6 +2472,19 @@ static swig_module_info swig_module = {swig_types, 4, 0, 0, 0, 0};
# error "This python version requires swig to be run with the '-classic' option"
# endif
#endif
+#if (PY_VERSION_HEX <= 0x02020000)
+# error "This python version requires swig to be run with the '-nomodern' option"
+#endif
+#if (PY_VERSION_HEX <= 0x02020000)
+# error "This python version requires swig to be run with the '-nomodernargs' option"
+#endif
+#ifndef METH_O
+# error "This python version requires swig to be run with the '-nofastunpack' option"
+#endif
+#ifdef SWIG_TypeQuery
+# undef SWIG_TypeQuery
+#endif
+#define SWIG_TypeQuery SWIG_Python_TypeQuery
/*-----------------------------------------------
@(target):= _events.so
@@ -2569,7 +2582,7 @@ SWIGINTERN PyObject *_wrap_event_context_init(PyObject *SWIGUNUSEDPARM(self), Py
{
arg1 = NULL;
}
- if (!PyArg_ParseTuple(args,(char *)":event_context_init")) SWIG_fail;
+ if (!SWIG_Python_UnpackTuple(args,"event_context_init",0,0,0)) SWIG_fail;
result = (struct event_context *)event_context_init(arg1);
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_event_context, 0 | 0 );
return resultobj;
@@ -2618,7 +2631,7 @@ SWIGINTERN PyObject *_wrap_event_backend_list(PyObject *SWIGUNUSEDPARM(self), Py
{
arg1 = NULL;
}
- if (!PyArg_ParseTuple(args,(char *)":event_backend_list")) SWIG_fail;
+ if (!SWIG_Python_UnpackTuple(args,"event_backend_list",0,0,0)) SWIG_fail;
result = (char **)event_backend_list(arg1);
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_p_char, 0 | 0 );
return resultobj;
@@ -2628,9 +2641,9 @@ fail:
static PyMethodDef SwigMethods[] = {
- { (char *)"event_context_init", _wrap_event_context_init, METH_VARARGS, NULL},
+ { (char *)"event_context_init", (PyCFunction)_wrap_event_context_init, METH_NOARGS, NULL},
{ (char *)"event_context_init_byname", (PyCFunction) _wrap_event_context_init_byname, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"event_backend_list", _wrap_event_backend_list, METH_VARARGS, NULL},
+ { (char *)"event_backend_list", (PyCFunction)_wrap_event_backend_list, METH_NOARGS, NULL},
{ NULL, NULL, 0, NULL }
};
diff --git a/source4/lib/ldb-samba/config.mk b/source4/lib/ldb-samba/config.mk
index d29b3f319c..fa3ac46021 100644
--- a/source4/lib/ldb-samba/config.mk
+++ b/source4/lib/ldb-samba/config.mk
@@ -3,7 +3,7 @@
[SUBSYSTEM::LDBSAMBA]
PUBLIC_DEPENDENCIES = LIBLDB
PRIVATE_PROTO_HEADER = ldif_handlers.h
-PRIVATE_DEPENDENCIES = LIBSECURITY SAMDB
+PRIVATE_DEPENDENCIES = LIBSECURITY SAMDB_SCHEMA LIBNDR NDR_MISC
OBJ_FILES = \
ldif_handlers.o
# End SUBSYSTEM LDBSAMBA
diff --git a/source4/lib/ldb/common/ldb.c b/source4/lib/ldb/common/ldb.c
index f687e152d3..87f791cb38 100644
--- a/source4/lib/ldb/common/ldb.c
+++ b/source4/lib/ldb/common/ldb.c
@@ -126,7 +126,11 @@ int ldb_connect_backend(struct ldb_context *ldb, const char *url, const char *op
fn = ldb_find_backend(backend);
if (fn == NULL) {
- if (ldb_try_load_dso(ldb, backend) == 0) {
+ int (*init_fn) (void);
+
+ init_fn = ldb_dso_load_symbol(ldb, backend,
+ "init_module");
+ if (init_fn != NULL && init_fn() == 0) {
fn = ldb_find_backend(backend);
}
}
diff --git a/source4/lib/ldb/common/ldb_modules.c b/source4/lib/ldb/common/ldb_modules.c
index 508389e374..72ed969298 100644
--- a/source4/lib/ldb/common/ldb_modules.c
+++ b/source4/lib/ldb/common/ldb_modules.c
@@ -168,7 +168,7 @@ static const struct ldb_module_ops *ldb_find_module_ops(const char *name)
int ldb_global_init(void)
{
- static int (*static_init_fns[])(void) = STATIC_LIBLDB_MODULES;
+ int (*static_init_fns[])(void) = STATIC_LIBLDB_MODULES;
static int initialized = 0;
int ret = 0, i;
@@ -203,14 +203,15 @@ int ldb_register_module(const struct ldb_module_ops *ops)
return 0;
}
-int ldb_try_load_dso(struct ldb_context *ldb, const char *name)
+void *ldb_dso_load_symbol(struct ldb_context *ldb, const char *name,
+ const char *symbol)
{
char *path;
void *handle;
- int (*init_fn) (void);
+ void *sym;
if (ldb->modules_dir == NULL)
- return -1;
+ return NULL;
path = talloc_asprintf(ldb, "%s/%s.%s", ldb->modules_dir, name,
SHLIBEXT);
@@ -220,19 +221,19 @@ int ldb_try_load_dso(struct ldb_context *ldb, const char *name)
handle = dlopen(path, RTLD_NOW);
if (handle == NULL) {
ldb_debug(ldb, LDB_DEBUG_WARNING, "unable to load %s from %s: %s\n", name, path, dlerror());
- return -1;
+ return NULL;
}
- init_fn = (int (*)(void))dlsym(handle, "init_module");
+ sym = (int (*)(void))dlsym(handle, symbol);
- if (init_fn == NULL) {
- ldb_debug(ldb, LDB_DEBUG_ERROR, "no symbol `init_module' found in %s: %s\n", path, dlerror());
- return -1;
+ if (sym == NULL) {
+ ldb_debug(ldb, LDB_DEBUG_ERROR, "no symbol `%s' found in %s: %s\n", symbol, path, dlerror());
+ return NULL;
}
talloc_free(path);
- return init_fn();
+ return sym;
}
int ldb_load_modules_list(struct ldb_context *ldb, const char **module_list, struct ldb_module *backend, struct ldb_module **out)
@@ -248,10 +249,19 @@ int ldb_load_modules_list(struct ldb_context *ldb, const char **module_list, str
ops = ldb_find_module_ops(module_list[i]);
if (ops == NULL) {
- if (ldb_try_load_dso(ldb, module_list[i]) == 0) {
+ int (*init_fn) (void);
+
+ init_fn = ldb_dso_load_symbol(ldb, module_list[i],
+ "init_module");
+ if (init_fn != NULL && init_fn() == 0) {
ops = ldb_find_module_ops(module_list[i]);
}
}
+
+ if (ops == NULL) {
+ ops = ldb_dso_load_symbol(ldb, module_list[i],
+ "ldb_module_ops");
+ }
if (ops == NULL) {
ldb_debug(ldb, LDB_DEBUG_WARNING, "WARNING: Module [%s] not found\n",
diff --git a/source4/lib/ldb/common/ldb_msg.c b/source4/lib/ldb/common/ldb_msg.c
index 528d1d54f1..c1ea9db56b 100644
--- a/source4/lib/ldb/common/ldb_msg.c
+++ b/source4/lib/ldb/common/ldb_msg.c
@@ -124,11 +124,6 @@ int ldb_msg_add_empty( struct ldb_message *msg,
{
struct ldb_message_element *els;
- /* FIXME: we should probably leave this to the schema module to check */
- if (! ldb_valid_attr_name(attr_name)) {
- return LDB_ERR_OPERATIONS_ERROR;
- }
-
els = talloc_realloc(msg, msg->elements,
struct ldb_message_element, msg->num_elements+1);
if (!els) {
diff --git a/source4/lib/ldb/config.mk b/source4/lib/ldb/config.mk
index d37cd0d650..a3b10a22d5 100644
--- a/source4/lib/ldb/config.mk
+++ b/source4/lib/ldb/config.mk
@@ -128,6 +128,7 @@ PRIVATE_DEPENDENCIES = \
[LIBRARY::LIBLDB]
VERSION = 0.0.1
SO_VERSION = 0
+OUTPUT_TYPE = SHARED_LIBRARY
CFLAGS = -Ilib/ldb/include
DESCRIPTION = LDAP-like embedded database library
INIT_FUNCTION_TYPE = int (*) (void)
@@ -148,7 +149,6 @@ OBJ_FILES = \
PUBLIC_DEPENDENCIES = \
LIBTALLOC
PRIVATE_DEPENDENCIES = \
- DYNCONFIG \
SOCKET_WRAPPER
MANPAGE = man/ldb.3
PUBLIC_HEADERS = include/ldb.h include/ldb_errors.h
diff --git a/source4/lib/ldb/include/ldb.h b/source4/lib/ldb/include/ldb.h
index 59f5f67fd2..e2ff8c6f98 100644
--- a/source4/lib/ldb/include/ldb.h
+++ b/source4/lib/ldb/include/ldb.h
@@ -1217,7 +1217,7 @@ char *ldb_casefold(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, const char *s);
/**
Check the attribute name is valid according to rfc2251
- \param s tthe string to check
+ \param s the string to check
\return 1 if the name is ok
*/
diff --git a/source4/lib/ldb/include/ldb_private.h b/source4/lib/ldb/include/ldb_private.h
index f88c55664d..d9f2defdc9 100644
--- a/source4/lib/ldb/include/ldb_private.h
+++ b/source4/lib/ldb/include/ldb_private.h
@@ -159,7 +159,8 @@ void ldb_reset_err_string(struct ldb_context *ldb);
int ldb_register_module(const struct ldb_module_ops *);
int ldb_register_backend(const char *url_prefix, ldb_connect_fn);
-int ldb_try_load_dso(struct ldb_context *ldb, const char *name);
+void *ldb_dso_load_symbol(struct ldb_context *ldb, const char *name,
+ const char *symbol);
/* The following definitions come from lib/ldb/common/ldb_debug.c */
void ldb_debug(struct ldb_context *ldb, enum ldb_debug_level level, const char *fmt, ...) PRINTF_ATTRIBUTE(3, 4);
diff --git a/source4/lib/ldb/ldb.i b/source4/lib/ldb/ldb.i
index aec4e2294f..15a49ec9c5 100644
--- a/source4/lib/ldb/ldb.i
+++ b/source4/lib/ldb/ldb.i
@@ -25,7 +25,7 @@
License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
-%module(package="ldb") ldb
+%module ldb
%{
@@ -96,37 +96,6 @@ typedef int ldb_error;
$result = PyString_FromStringAndSize((const char *)$1.data, $1.length);
}
-%typemap(in) ldb_msg *add_msg (int dict_pos, int msg_pos, PyObject *key,
- PyObject *value, ldb_msg_element *msgel) {
- if (PyDict_Check($input)) {
- $1 = ldb_msg_new(NULL);
- $1->num_elements = PyDict_Size($input) - 1; /* dn isn't in there */
- $1->elements = talloc_zero_array($1, struct ldb_message_element, $1->num_elements+1);
- msg_pos = dict_pos = 0;
- while (PyDict_Next($input, &dict_pos, &key, &value)) {
- if (!strcmp(PyString_AsString(key), "dn")) {
- if (ldb_dn_from_pyobject(value, &$1->dn) != 0)
- SWIG_exception(SWIG_TypeError, "unable to convert dn");
- } else {
- msgel = ldb_msg_element_from_pyobject(value, 0, PyString_AsString(key));
- memcpy(&$1->elements[msg_pos], msgel, sizeof(*msgel));
- msg_pos++;
- }
- dict_pos++;
- }
-
- if ($1->dn == NULL)
- SWIG_exception(SWIG_TypeError, "no dn set");
- } else {
- if (SWIG_ConvertPtr($input, (void **)&$1, SWIGTYPE_p_ldb_message, 0) != 0)
- return NULL;
- }
-}
-
-%typemap(freearg) ldb_msg *add_msg {
-//talloc_free($1);
-}
-
/*
* Wrap struct ldb_result
*/
@@ -222,10 +191,16 @@ fail:
} ldb_dn;
#ifdef SWIGPYTHON
-%inline {
-int ldb_dn_from_pyobject(PyObject *object, ldb_dn **dn)
+%{
+int ldb_dn_from_pyobject(TALLOC_CTX *mem_ctx, PyObject *object,
+ struct ldb_context *ldb, ldb_dn **dn)
{
- return SWIG_ConvertPtr(object, (void **)dn, SWIGTYPE_p_ldb_dn, 0);
+ if (ldb != NULL && PyString_Check(object)) {
+ *dn = ldb_dn_new(mem_ctx, ldb, PyString_AsString(object));
+ return 0;
+ }
+ return SWIG_ConvertPtr(object, (void **)dn, SWIGTYPE_p_ldb_dn,
+ SWIG_POINTER_EXCEPTION);
}
ldb_msg_element *ldb_msg_element_from_pyobject(PyObject *set_obj, int flags,
@@ -274,7 +249,7 @@ PyObject *ldb_msg_element_to_set(ldb_msg_element *me)
return result;
}
-}
+%}
#endif
/* ldb_message_element */
@@ -450,7 +425,7 @@ PyObject *PyExc_LdbError;
* Wrap ldb functions
*/
-%rename(Ldb) ldb;
+%rename(Ldb) ldb_context;
/* Top-level ldb operations */
typedef struct ldb_context {
%typemap(out) ldb_error {
@@ -493,6 +468,48 @@ fail:
ldb_error delete(ldb_dn *dn);
ldb_error rename(ldb_dn *olddn, ldb_dn *newdn);
ldb_error add(ldb_msg *add_msg);
+ ldb_error add(PyObject *py_msg)
+ {
+ ldb_error ret;
+ int dict_pos, msg_pos;
+ PyObject *key, *value;
+ ldb_msg_element *msgel;
+ ldb_msg *msg = NULL;
+ if (PyDict_Check(py_msg)) {
+ msg = ldb_msg_new(NULL);
+ msg->num_elements = PyDict_Size(py_msg) - 1; /* dn isn't in there */
+ msg->elements = talloc_zero_array(msg, struct ldb_message_element, msg->num_elements+1);
+ msg_pos = dict_pos = 0;
+ while (PyDict_Next(py_msg, &dict_pos, &key, &value)) {
+ if (!strcmp(PyString_AsString(key), "dn")) {
+ if (ldb_dn_from_pyobject(msg, value, $self, &msg->dn) != 0) {
+ return LDB_ERR_OTHER;
+ }
+ } else {
+ msgel = ldb_msg_element_from_pyobject(value, 0, PyString_AsString(key));
+ memcpy(&msg->elements[msg_pos], msgel, sizeof(*msgel));
+ msg_pos++;
+ }
+ dict_pos++;
+ }
+
+ if (msg->dn == NULL) {
+ SWIG_exception(SWIG_TypeError, "no dn set");
+ return LDB_ERR_OTHER;
+ }
+ } else {
+ if (SWIG_ConvertPtr(py_msg, (void **)&msg, SWIGTYPE_p_ldb_message, 0) != 0)
+ return LDB_ERR_OTHER;
+ }
+
+ ret = ldb_add($self,msg);
+
+ talloc_free(msg);
+ return ret;
+
+ fail:
+ return LDB_ERR_OTHER;
+ }
ldb_error modify(ldb_msg *message);
ldb_dn *get_config_basedn();
ldb_dn *get_root_basedn();
@@ -535,7 +552,7 @@ fail:
} ldb;
%nodefault ldb_message;
-%nodefault Ldb;
+%nodefault ldb_context;
%nodefault Dn;
%rename(valid_attr_name) ldb_valid_attr_name;
diff --git a/source4/lib/ldb/ldb.py b/source4/lib/ldb/ldb.py
index b887b21aea..ce4a5ec494 100644
--- a/source4/lib/ldb/ldb.py
+++ b/source4/lib/ldb/ldb.py
@@ -2,7 +2,6 @@
# Version 1.3.33
#
# Don't modify this file, modify the SWIG interface instead.
-# This file is compatible with both classic and new-style classes.
import _ldb
import new
@@ -48,6 +47,16 @@ except AttributeError:
del types
+def _swig_setattr_nondynamic_method(set):
+ def set_attr(self,name,value):
+ if (name == "thisown"): return self.this.own(value)
+ if hasattr(self,name) or (name == "this"):
+ set(self,name,value)
+ else:
+ raise AttributeError("You cannot add attributes to %s" % self)
+ return set_attr
+
+
SCOPE_DEFAULT = _ldb.SCOPE_DEFAULT
SCOPE_BASE = _ldb.SCOPE_BASE
SCOPE_ONELEVEL = _ldb.SCOPE_ONELEVEL
@@ -56,51 +65,38 @@ CHANGETYPE_NONE = _ldb.CHANGETYPE_NONE
CHANGETYPE_ADD = _ldb.CHANGETYPE_ADD
CHANGETYPE_DELETE = _ldb.CHANGETYPE_DELETE
CHANGETYPE_MODIFY = _ldb.CHANGETYPE_MODIFY
-class Dn(_object):
- __swig_setmethods__ = {}
- __setattr__ = lambda self, name, value: _swig_setattr(self, Dn, name, value)
- __swig_getmethods__ = {}
- __getattr__ = lambda self, name: _swig_getattr(self, Dn, name)
+class Dn(object):
+ thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
__repr__ = _swig_repr
def __init__(self, *args, **kwargs):
- this = _ldb.new_Dn(*args, **kwargs)
- try: self.this.append(this)
- except: self.this = this
+ _ldb.Dn_swiginit(self,_ldb.new_Dn(*args, **kwargs))
__swig_destroy__ = _ldb.delete_Dn
- __del__ = lambda self : None;
- def validate(*args, **kwargs): return _ldb.Dn_validate(*args, **kwargs)
- def get_casefold(*args, **kwargs): return _ldb.Dn_get_casefold(*args, **kwargs)
- def __str__(*args, **kwargs): return _ldb.Dn___str__(*args, **kwargs)
- def parent(*args, **kwargs): return _ldb.Dn_parent(*args, **kwargs)
- def __cmp__(*args, **kwargs): return _ldb.Dn___cmp__(*args, **kwargs)
- def is_valid(*args, **kwargs): return _ldb.Dn_is_valid(*args, **kwargs)
- def is_special(*args, **kwargs): return _ldb.Dn_is_special(*args, **kwargs)
- def is_null(*args, **kwargs): return _ldb.Dn_is_null(*args, **kwargs)
- def check_special(*args, **kwargs): return _ldb.Dn_check_special(*args, **kwargs)
- def __len__(*args, **kwargs): return _ldb.Dn___len__(*args, **kwargs)
- def add_child(*args, **kwargs): return _ldb.Dn_add_child(*args, **kwargs)
- def add_base(*args, **kwargs): return _ldb.Dn_add_base(*args, **kwargs)
- def canonical_str(*args, **kwargs): return _ldb.Dn_canonical_str(*args, **kwargs)
- def canonical_ex_str(*args, **kwargs): return _ldb.Dn_canonical_ex_str(*args, **kwargs)
- def __add__(*args, **kwargs): return _ldb.Dn___add__(*args, **kwargs)
+Dn.validate = new_instancemethod(_ldb.Dn_validate,None,Dn)
+Dn.get_casefold = new_instancemethod(_ldb.Dn_get_casefold,None,Dn)
+Dn.__str__ = new_instancemethod(_ldb.Dn___str__,None,Dn)
+Dn.parent = new_instancemethod(_ldb.Dn_parent,None,Dn)
+Dn.__cmp__ = new_instancemethod(_ldb.Dn___cmp__,None,Dn)
+Dn.is_valid = new_instancemethod(_ldb.Dn_is_valid,None,Dn)
+Dn.is_special = new_instancemethod(_ldb.Dn_is_special,None,Dn)
+Dn.is_null = new_instancemethod(_ldb.Dn_is_null,None,Dn)
+Dn.check_special = new_instancemethod(_ldb.Dn_check_special,None,Dn)
+Dn.__len__ = new_instancemethod(_ldb.Dn___len__,None,Dn)
+Dn.add_child = new_instancemethod(_ldb.Dn_add_child,None,Dn)
+Dn.add_base = new_instancemethod(_ldb.Dn_add_base,None,Dn)
+Dn.canonical_str = new_instancemethod(_ldb.Dn_canonical_str,None,Dn)
+Dn.canonical_ex_str = new_instancemethod(_ldb.Dn_canonical_ex_str,None,Dn)
+Dn.__add__ = new_instancemethod(_ldb.Dn___add__,None,Dn)
Dn_swigregister = _ldb.Dn_swigregister
Dn_swigregister(Dn)
-ldb_dn_from_pyobject = _ldb.ldb_dn_from_pyobject
-ldb_msg_element_from_pyobject = _ldb.ldb_msg_element_from_pyobject
-ldb_msg_element_to_set = _ldb.ldb_msg_element_to_set
-class ldb_msg_element(_object):
- __swig_setmethods__ = {}
- __setattr__ = lambda self, name, value: _swig_setattr(self, ldb_msg_element, name, value)
- __swig_getmethods__ = {}
- __getattr__ = lambda self, name: _swig_getattr(self, ldb_msg_element, name)
+class ldb_msg_element(object):
+ thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
def __init__(self): raise AttributeError, "No constructor defined"
__repr__ = _swig_repr
- def __iter__(*args, **kwargs): return _ldb.ldb_msg_element___iter__(*args, **kwargs)
- def __set__(*args, **kwargs): return _ldb.ldb_msg_element___set__(*args, **kwargs)
__swig_destroy__ = _ldb.delete_ldb_msg_element
- __del__ = lambda self : None;
- def __cmp__(*args, **kwargs): return _ldb.ldb_msg_element___cmp__(*args, **kwargs)
+ldb_msg_element.__iter__ = new_instancemethod(_ldb.ldb_msg_element___iter__,None,ldb_msg_element)
+ldb_msg_element.__set__ = new_instancemethod(_ldb.ldb_msg_element___set__,None,ldb_msg_element)
+ldb_msg_element.__cmp__ = new_instancemethod(_ldb.ldb_msg_element___cmp__,None,ldb_msg_element)
ldb_msg_element_swigregister = _ldb.ldb_msg_element_swigregister
ldb_msg_element_swigregister(ldb_msg_element)
@@ -109,27 +105,19 @@ def MessageElement(*args, **kwargs):
return val
ldb_msg_list_elements = _ldb.ldb_msg_list_elements
-class Message(_object):
- __swig_setmethods__ = {}
- __setattr__ = lambda self, name, value: _swig_setattr(self, Message, name, value)
- __swig_getmethods__ = {}
- __getattr__ = lambda self, name: _swig_getattr(self, Message, name)
+class Message(object):
+ thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
__repr__ = _swig_repr
- __swig_setmethods__["dn"] = _ldb.Message_dn_set
- __swig_getmethods__["dn"] = _ldb.Message_dn_get
- if _newclass:dn = _swig_property(_ldb.Message_dn_get, _ldb.Message_dn_set)
+ dn = _swig_property(_ldb.Message_dn_get, _ldb.Message_dn_set)
def __init__(self, *args, **kwargs):
- this = _ldb.new_Message(*args, **kwargs)
- try: self.this.append(this)
- except: self.this = this
+ _ldb.Message_swiginit(self,_ldb.new_Message(*args, **kwargs))
__swig_destroy__ = _ldb.delete_Message
- __del__ = lambda self : None;
- def __getitem__(*args, **kwargs): return _ldb.Message___getitem__(*args, **kwargs)
- def __setitem__(*args): return _ldb.Message___setitem__(*args)
- def __len__(*args, **kwargs): return _ldb.Message___len__(*args, **kwargs)
- def keys(*args, **kwargs): return _ldb.Message_keys(*args, **kwargs)
- def __iter__(*args, **kwargs): return _ldb.Message___iter__(*args, **kwargs)
- def __delitem__(*args, **kwargs): return _ldb.Message___delitem__(*args, **kwargs)
+Message.__getitem__ = new_instancemethod(_ldb.Message___getitem__,None,Message)
+Message.__setitem__ = new_instancemethod(_ldb.Message___setitem__,None,Message)
+Message.__len__ = new_instancemethod(_ldb.Message___len__,None,Message)
+Message.keys = new_instancemethod(_ldb.Message_keys,None,Message)
+Message.__iter__ = new_instancemethod(_ldb.Message___iter__,None,Message)
+Message.__delitem__ = new_instancemethod(_ldb.Message___delitem__,None,Message)
Message_swigregister = _ldb.Message_swigregister
Message_swigregister(Message)
@@ -174,42 +162,35 @@ LDB_ERR_ENTRY_ALREADY_EXISTS = _ldb.LDB_ERR_ENTRY_ALREADY_EXISTS
LDB_ERR_OBJECT_CLASS_MODS_PROHIBITED = _ldb.LDB_ERR_OBJECT_CLASS_MODS_PROHIBITED
LDB_ERR_AFFECTS_MULTIPLE_DSAS = _ldb.LDB_ERR_AFFECTS_MULTIPLE_DSAS
LDB_ERR_OTHER = _ldb.LDB_ERR_OTHER
-class ldb(_object):
- __swig_setmethods__ = {}
- __setattr__ = lambda self, name, value: _swig_setattr(self, ldb, name, value)
- __swig_getmethods__ = {}
- __getattr__ = lambda self, name: _swig_getattr(self, ldb, name)
- def __init__(self): raise AttributeError, "No constructor defined"
+class Ldb(object):
+ thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
__repr__ = _swig_repr
- def connect(*args, **kwargs): return _ldb.ldb_connect(*args, **kwargs)
- __swig_destroy__ = _ldb.delete_ldb
- __del__ = lambda self : None;
- def search(*args, **kwargs): return _ldb.ldb_search(*args, **kwargs)
- def delete(*args, **kwargs): return _ldb.ldb_delete(*args, **kwargs)
- def rename(*args, **kwargs): return _ldb.ldb_rename(*args, **kwargs)
- def add(*args, **kwargs): return _ldb.ldb_add(*args, **kwargs)
- def modify(*args, **kwargs): return _ldb.ldb_modify(*args, **kwargs)
- def get_config_basedn(*args, **kwargs): return _ldb.ldb_get_config_basedn(*args, **kwargs)
- def get_root_basedn(*args, **kwargs): return _ldb.ldb_get_root_basedn(*args, **kwargs)
- def get_schema_basedn(*args, **kwargs): return _ldb.ldb_get_schema_basedn(*args, **kwargs)
- def get_default_basedn(*args, **kwargs): return _ldb.ldb_get_default_basedn(*args, **kwargs)
- def errstring(*args, **kwargs): return _ldb.ldb_errstring(*args, **kwargs)
- def set_create_perms(*args, **kwargs): return _ldb.ldb_set_create_perms(*args, **kwargs)
- def set_modules_dir(*args, **kwargs): return _ldb.ldb_set_modules_dir(*args, **kwargs)
- def set_debug(*args, **kwargs): return _ldb.ldb_set_debug(*args, **kwargs)
- def set_opaque(*args, **kwargs): return _ldb.ldb_set_opaque(*args, **kwargs)
- def get_opaque(*args, **kwargs): return _ldb.ldb_get_opaque(*args, **kwargs)
- def transaction_start(*args, **kwargs): return _ldb.ldb_transaction_start(*args, **kwargs)
- def transaction_commit(*args, **kwargs): return _ldb.ldb_transaction_commit(*args, **kwargs)
- def transaction_cancel(*args, **kwargs): return _ldb.ldb_transaction_cancel(*args, **kwargs)
- def __contains__(*args, **kwargs): return _ldb.ldb___contains__(*args, **kwargs)
- def parse_ldif(*args, **kwargs): return _ldb.ldb_parse_ldif(*args, **kwargs)
-ldb_swigregister = _ldb.ldb_swigregister
-ldb_swigregister(ldb)
-
-def Ldb(*args, **kwargs):
- val = _ldb.new_Ldb(*args, **kwargs)
- return val
+ def __init__(self, *args, **kwargs):
+ _ldb.Ldb_swiginit(self,_ldb.new_Ldb(*args, **kwargs))
+ __swig_destroy__ = _ldb.delete_Ldb
+Ldb.connect = new_instancemethod(_ldb.Ldb_connect,None,Ldb)
+Ldb.search = new_instancemethod(_ldb.Ldb_search,None,Ldb)
+Ldb.delete = new_instancemethod(_ldb.Ldb_delete,None,Ldb)
+Ldb.rename = new_instancemethod(_ldb.Ldb_rename,None,Ldb)
+Ldb.add = new_instancemethod(_ldb.Ldb_add,None,Ldb)
+Ldb.modify = new_instancemethod(_ldb.Ldb_modify,None,Ldb)
+Ldb.get_config_basedn = new_instancemethod(_ldb.Ldb_get_config_basedn,None,Ldb)
+Ldb.get_root_basedn = new_instancemethod(_ldb.Ldb_get_root_basedn,None,Ldb)
+Ldb.get_schema_basedn = new_instancemethod(_ldb.Ldb_get_schema_basedn,None,Ldb)
+Ldb.get_default_basedn = new_instancemethod(_ldb.Ldb_get_default_basedn,None,Ldb)
+Ldb.errstring = new_instancemethod(_ldb.Ldb_errstring,None,Ldb)
+Ldb.set_create_perms = new_instancemethod(_ldb.Ldb_set_create_perms,None,Ldb)
+Ldb.set_modules_dir = new_instancemethod(_ldb.Ldb_set_modules_dir,None,Ldb)
+Ldb.set_debug = new_instancemethod(_ldb.Ldb_set_debug,None,Ldb)
+Ldb.set_opaque = new_instancemethod(_ldb.Ldb_set_opaque,None,Ldb)
+Ldb.get_opaque = new_instancemethod(_ldb.Ldb_get_opaque,None,Ldb)
+Ldb.transaction_start = new_instancemethod(_ldb.Ldb_transaction_start,None,Ldb)
+Ldb.transaction_commit = new_instancemethod(_ldb.Ldb_transaction_commit,None,Ldb)
+Ldb.transaction_cancel = new_instancemethod(_ldb.Ldb_transaction_cancel,None,Ldb)
+Ldb.__contains__ = new_instancemethod(_ldb.Ldb___contains__,None,Ldb)
+Ldb.parse_ldif = new_instancemethod(_ldb.Ldb_parse_ldif,None,Ldb)
+Ldb_swigregister = _ldb.Ldb_swigregister
+Ldb_swigregister(Ldb)
valid_attr_name = _ldb.valid_attr_name
timestring = _ldb.timestring
diff --git a/source4/lib/ldb/ldb_ildap/config.mk b/source4/lib/ldb/ldb_ildap/config.mk
index 83c43b6c35..01d9ec88ff 100644
--- a/source4/lib/ldb/ldb_ildap/config.mk
+++ b/source4/lib/ldb/ldb_ildap/config.mk
@@ -3,8 +3,8 @@
[MODULE::ldb_ildap]
SUBSYSTEM = LIBLDB
CFLAGS = -Ilib/ldb/include
-#OUTPUT_TYPE = SHARED_LIBRARY
-PRIVATE_DEPENDENCIES = LIBTALLOC LIBCLI_LDAP
+OUTPUT_TYPE = SHARED_LIBRARY
+PRIVATE_DEPENDENCIES = LIBTALLOC LIBCLI_LDAP CREDENTIALS
INIT_FUNCTION = ldb_ildap_init
ALIASES = ldapi ldaps ldap
OBJ_FILES = \
diff --git a/source4/lib/ldb/ldb_wrap.c b/source4/lib/ldb/ldb_wrap.c
index b542fd6b8b..975e91dbe4 100644
--- a/source4/lib/ldb/ldb_wrap.c
+++ b/source4/lib/ldb/ldb_wrap.c
@@ -9,7 +9,7 @@
* ----------------------------------------------------------------------------- */
#define SWIGPYTHON
-#define SWIG_PYTHON_DIRECTOR_NO_VTABLE
+#define SWIG_PYTHON_NO_BUILD_NONE
/* -----------------------------------------------------------------------------
* This section contains generic SWIG labels for method/variable
* declarations/attributes, and other compiler dependent labels.
@@ -2470,18 +2470,17 @@ SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int argnum, int flags)
#define SWIGTYPE_p_ldb_result swig_types[8]
#define SWIGTYPE_p_long_long swig_types[9]
#define SWIGTYPE_p_p_char swig_types[10]
-#define SWIGTYPE_p_p_ldb_dn swig_types[11]
-#define SWIGTYPE_p_p_ldb_result swig_types[12]
-#define SWIGTYPE_p_short swig_types[13]
-#define SWIGTYPE_p_signed_char swig_types[14]
-#define SWIGTYPE_p_unsigned_char swig_types[15]
-#define SWIGTYPE_p_unsigned_int swig_types[16]
-#define SWIGTYPE_p_unsigned_long swig_types[17]
-#define SWIGTYPE_p_unsigned_long_long swig_types[18]
-#define SWIGTYPE_p_unsigned_short swig_types[19]
-#define SWIGTYPE_p_void swig_types[20]
-static swig_type_info *swig_types[22];
-static swig_module_info swig_module = {swig_types, 21, 0, 0, 0, 0};
+#define SWIGTYPE_p_p_ldb_result swig_types[11]
+#define SWIGTYPE_p_short swig_types[12]
+#define SWIGTYPE_p_signed_char swig_types[13]
+#define SWIGTYPE_p_unsigned_char swig_types[14]
+#define SWIGTYPE_p_unsigned_int swig_types[15]
+#define SWIGTYPE_p_unsigned_long swig_types[16]
+#define SWIGTYPE_p_unsigned_long_long swig_types[17]
+#define SWIGTYPE_p_unsigned_short swig_types[18]
+#define SWIGTYPE_p_void swig_types[19]
+static swig_type_info *swig_types[21];
+static swig_module_info swig_module = {swig_types, 20, 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)
@@ -2492,6 +2491,19 @@ static swig_module_info swig_module = {swig_types, 21, 0, 0, 0, 0};
# error "This python version requires swig to be run with the '-classic' option"
# endif
#endif
+#if (PY_VERSION_HEX <= 0x02020000)
+# error "This python version requires swig to be run with the '-nomodern' option"
+#endif
+#if (PY_VERSION_HEX <= 0x02020000)
+# error "This python version requires swig to be run with the '-nomodernargs' option"
+#endif
+#ifndef METH_O
+# error "This python version requires swig to be run with the '-nofastunpack' option"
+#endif
+#ifdef SWIG_TypeQuery
+# undef SWIG_TypeQuery
+#endif
+#define SWIG_TypeQuery SWIG_Python_TypeQuery
/*-----------------------------------------------
@(target):= _ldb.so
@@ -2658,9 +2670,15 @@ SWIGINTERN ldb_dn *ldb_dn___add__(ldb_dn *self,ldb_dn *other){
return ret;
}
-int ldb_dn_from_pyobject(PyObject *object, ldb_dn **dn)
+int ldb_dn_from_pyobject(TALLOC_CTX *mem_ctx, PyObject *object,
+ struct ldb_context *ldb, ldb_dn **dn)
{
- return SWIG_ConvertPtr(object, (void **)dn, SWIGTYPE_p_ldb_dn, 0);
+ if (ldb != NULL && PyString_Check(object)) {
+ *dn = ldb_dn_new(mem_ctx, ldb, PyString_AsString(object));
+ return 0;
+ }
+ return SWIG_ConvertPtr(object, (void **)dn, SWIGTYPE_p_ldb_dn,
+ SWIG_POINTER_EXCEPTION);
}
ldb_msg_element *ldb_msg_element_from_pyobject(PyObject *set_obj, int flags,
@@ -2710,6 +2728,12 @@ PyObject *ldb_msg_element_to_set(ldb_msg_element *me)
}
+SWIGINTERN PyObject *ldb_msg_element___iter__(ldb_msg_element *self){
+ return PyObject_GetIter(ldb_msg_element_to_set(self));
+ }
+SWIGINTERN PyObject *ldb_msg_element___set__(ldb_msg_element *self){
+ return ldb_msg_element_to_set(self);
+ }
#include <limits.h>
#if !defined(SWIG_NO_LLONG_MAX)
@@ -2855,12 +2879,6 @@ SWIG_AsVal_int (PyObject * obj, int *val)
return res;
}
-SWIGINTERN PyObject *ldb_msg_element___iter__(ldb_msg_element *self){
- return PyObject_GetIter(ldb_msg_element_to_set(self));
- }
-SWIGINTERN PyObject *ldb_msg_element___set__(ldb_msg_element *self){
- return ldb_msg_element_to_set(self);
- }
SWIGINTERN ldb_msg_element *new_ldb_msg_element(PyObject *set_obj,int flags,char const *name){
return ldb_msg_element_from_pyobject(set_obj, flags, name);
}
@@ -3025,6 +3043,47 @@ fail:
return NULL;
}
SWIGINTERN void delete_ldb(ldb *self){ talloc_free(self); }
+SWIGINTERN ldb_error ldb_add__SWIG_1(ldb *self,PyObject *py_msg){
+ ldb_error ret;
+ int dict_pos, msg_pos;
+ PyObject *key, *value;
+ ldb_msg_element *msgel;
+ ldb_msg *msg = NULL;
+ if (PyDict_Check(py_msg)) {
+ msg = ldb_msg_new(NULL);
+ msg->num_elements = PyDict_Size(py_msg) - 1; /* dn isn't in there */
+ msg->elements = talloc_zero_array(msg, struct ldb_message_element, msg->num_elements+1);
+ msg_pos = dict_pos = 0;
+ while (PyDict_Next(py_msg, &dict_pos, &key, &value)) {
+ if (!strcmp(PyString_AsString(key), "dn")) {
+ if (ldb_dn_from_pyobject(msg, value, self, &msg->dn) != 0) {
+ return 80;
+ }
+ } else {
+ msgel = ldb_msg_element_from_pyobject(value, 0, PyString_AsString(key));
+ memcpy(&msg->elements[msg_pos], msgel, sizeof(*msgel));
+ msg_pos++;
+ }
+ dict_pos++;
+ }
+
+ if (msg->dn == NULL) {
+ SWIG_exception(SWIG_TypeError, "no dn set");
+ return 80;
+ }
+ } else {
+ if (SWIG_ConvertPtr(py_msg, (void **)&msg, SWIGTYPE_p_ldb_message, 0) != 0)
+ return 80;
+ }
+
+ ret = ldb_add(self,msg);
+
+ talloc_free(msg);
+ return ret;
+
+ fail:
+ return 80;
+ }
SWIGINTERN ldb_error ldb___contains__(ldb *self,ldb_dn *dn,struct ldb_result **result_as_bool){
return ldb_search(self, dn, LDB_SCOPE_BASE, NULL, NULL,
result_as_bool);
@@ -3062,7 +3121,7 @@ SWIGINTERN PyObject *_wrap_new_Dn(PyObject *SWIGUNUSEDPARM(self), PyObject *args
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
char * kwnames[] = {
- (char *) "Ldb",(char *) "str", NULL
+ (char *) "ldb",(char *) "str", NULL
};
if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:new_Dn",kwnames,&obj0,&obj1)) SWIG_fail;
@@ -3096,10 +3155,11 @@ SWIGINTERN PyObject *_wrap_delete_Dn(PyObject *SWIGUNUSEDPARM(self), PyObject *a
ldb_dn *arg1 = (ldb_dn *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:delete_Dn",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_dn, SWIG_POINTER_DISOWN | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_dn, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Dn" "', argument " "1"" of type '" "ldb_dn *""'");
}
@@ -3119,10 +3179,11 @@ SWIGINTERN PyObject *_wrap_Dn_validate(PyObject *SWIGUNUSEDPARM(self), PyObject
bool result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:Dn_validate",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dn_validate" "', argument " "1"" of type '" "ldb_dn *""'");
}
@@ -3141,10 +3202,11 @@ SWIGINTERN PyObject *_wrap_Dn_get_casefold(PyObject *SWIGUNUSEDPARM(self), PyObj
char *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:Dn_get_casefold",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dn_get_casefold" "', argument " "1"" of type '" "ldb_dn *""'");
}
@@ -3163,10 +3225,11 @@ SWIGINTERN PyObject *_wrap_Dn___str__(PyObject *SWIGUNUSEDPARM(self), PyObject *
char *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:Dn___str__",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dn___str__" "', argument " "1"" of type '" "ldb_dn *""'");
}
@@ -3185,10 +3248,11 @@ SWIGINTERN PyObject *_wrap_Dn_parent(PyObject *SWIGUNUSEDPARM(self), PyObject *a
ldb_dn *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:Dn_parent",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dn_parent" "', argument " "1"" of type '" "ldb_dn *""'");
}
@@ -3241,10 +3305,11 @@ SWIGINTERN PyObject *_wrap_Dn_is_valid(PyObject *SWIGUNUSEDPARM(self), PyObject
bool result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:Dn_is_valid",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dn_is_valid" "', argument " "1"" of type '" "ldb_dn *""'");
}
@@ -3263,10 +3328,11 @@ SWIGINTERN PyObject *_wrap_Dn_is_special(PyObject *SWIGUNUSEDPARM(self), PyObjec
bool result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:Dn_is_special",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dn_is_special" "', argument " "1"" of type '" "ldb_dn *""'");
}
@@ -3285,10 +3351,11 @@ SWIGINTERN PyObject *_wrap_Dn_is_null(PyObject *SWIGUNUSEDPARM(self), PyObject *
bool result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:Dn_is_null",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dn_is_null" "', argument " "1"" of type '" "ldb_dn *""'");
}
@@ -3344,10 +3411,11 @@ SWIGINTERN PyObject *_wrap_Dn___len__(PyObject *SWIGUNUSEDPARM(self), PyObject *
int result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:Dn___len__",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dn___len__" "', argument " "1"" of type '" "ldb_dn *""'");
}
@@ -3434,10 +3502,11 @@ SWIGINTERN PyObject *_wrap_Dn_canonical_str(PyObject *SWIGUNUSEDPARM(self), PyOb
char *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:Dn_canonical_str",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dn_canonical_str" "', argument " "1"" of type '" "ldb_dn *""'");
}
@@ -3456,10 +3525,11 @@ SWIGINTERN PyObject *_wrap_Dn_canonical_ex_str(PyObject *SWIGUNUSEDPARM(self), P
char *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:Dn_canonical_ex_str",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_dn, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dn_canonical_ex_str" "', argument " "1"" of type '" "ldb_dn *""'");
}
@@ -3508,114 +3578,26 @@ fail:
SWIGINTERN PyObject *Dn_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
- if (!PyArg_ParseTuple(args,(char*)"O|swigregister", &obj)) return NULL;
+ if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL;
SWIG_TypeNewClientData(SWIGTYPE_p_ldb_dn, SWIG_NewClientData(obj));
return SWIG_Py_Void();
}
-SWIGINTERN PyObject *_wrap_ldb_dn_from_pyobject(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
- PyObject *resultobj = 0;
- PyObject *arg1 = (PyObject *) 0 ;
- ldb_dn **arg2 = (ldb_dn **) 0 ;
- int result;
- void *argp2 = 0 ;
- int res2 = 0 ;
- PyObject * obj0 = 0 ;
- PyObject * obj1 = 0 ;
- char * kwnames[] = {
- (char *) "object",(char *) "dn", NULL
- };
-
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:ldb_dn_from_pyobject",kwnames,&obj0,&obj1)) SWIG_fail;
- arg1 = obj0;
- res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_p_ldb_dn, 0 | 0 );
- if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ldb_dn_from_pyobject" "', argument " "2"" of type '" "ldb_dn **""'");
- }
- arg2 = (ldb_dn **)(argp2);
- result = (int)ldb_dn_from_pyobject(arg1,arg2);
- resultobj = SWIG_From_int((int)(result));
- return resultobj;
-fail:
- return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_ldb_msg_element_from_pyobject(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
- PyObject *resultobj = 0;
- PyObject *arg1 = (PyObject *) 0 ;
- int arg2 ;
- char *arg3 = (char *) 0 ;
- ldb_msg_element *result = 0 ;
- int val2 ;
- int ecode2 = 0 ;
- int res3 ;
- char *buf3 = 0 ;
- int alloc3 = 0 ;
- PyObject * obj0 = 0 ;
- PyObject * obj1 = 0 ;
- PyObject * obj2 = 0 ;
- char * kwnames[] = {
- (char *) "set_obj",(char *) "flags",(char *) "attr_name", NULL
- };
-
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OOO:ldb_msg_element_from_pyobject",kwnames,&obj0,&obj1,&obj2)) SWIG_fail;
- arg1 = obj0;
- ecode2 = SWIG_AsVal_int(obj1, &val2);
- if (!SWIG_IsOK(ecode2)) {
- SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "ldb_msg_element_from_pyobject" "', argument " "2"" of type '" "int""'");
- }
- arg2 = (int)(val2);
- res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
- if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ldb_msg_element_from_pyobject" "', argument " "3"" of type '" "char const *""'");
- }
- arg3 = (char *)(buf3);
- result = (ldb_msg_element *)ldb_msg_element_from_pyobject(arg1,arg2,(char const *)arg3);
- resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ldb_message_element, 0 | 0 );
- if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
- return resultobj;
-fail:
- if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
- return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_ldb_msg_element_to_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
- PyObject *resultobj = 0;
- ldb_msg_element *arg1 = (ldb_msg_element *) 0 ;
- PyObject *result = 0 ;
- void *argp1 = 0 ;
- int res1 = 0 ;
- PyObject * obj0 = 0 ;
- char * kwnames[] = {
- (char *) "me", NULL
- };
-
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"O:ldb_msg_element_to_set",kwnames,&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_message_element, 0 | 0 );
- if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_msg_element_to_set" "', argument " "1"" of type '" "ldb_msg_element *""'");
- }
- arg1 = (ldb_msg_element *)(argp1);
- result = (PyObject *)ldb_msg_element_to_set(arg1);
- resultobj = result;
- return resultobj;
-fail:
- return NULL;
+SWIGINTERN PyObject *Dn_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ return SWIG_Python_InitShadowInstance(args);
}
-
SWIGINTERN PyObject *_wrap_ldb_msg_element___iter__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
ldb_msg_element *arg1 = (ldb_msg_element *) 0 ;
PyObject *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:ldb_msg_element___iter__",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_message_element, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_message_element, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_msg_element___iter__" "', argument " "1"" of type '" "ldb_msg_element *""'");
}
@@ -3634,10 +3616,11 @@ SWIGINTERN PyObject *_wrap_ldb_msg_element___set__(PyObject *SWIGUNUSEDPARM(self
PyObject *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:ldb_msg_element___set__",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_message_element, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_message_element, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_msg_element___set__" "', argument " "1"" of type '" "ldb_msg_element *""'");
}
@@ -3699,10 +3682,11 @@ SWIGINTERN PyObject *_wrap_delete_ldb_msg_element(PyObject *SWIGUNUSEDPARM(self)
ldb_msg_element *arg1 = (ldb_msg_element *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:delete_ldb_msg_element",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_message_element, SWIG_POINTER_DISOWN | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_message_element, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_ldb_msg_element" "', argument " "1"" of type '" "ldb_msg_element *""'");
}
@@ -3752,7 +3736,7 @@ fail:
SWIGINTERN PyObject *ldb_msg_element_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
- if (!PyArg_ParseTuple(args,(char*)"O|swigregister", &obj)) return NULL;
+ if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL;
SWIG_TypeNewClientData(SWIGTYPE_p_ldb_message_element, SWIG_NewClientData(obj));
return SWIG_Py_Void();
}
@@ -3795,16 +3779,15 @@ SWIGINTERN PyObject *_wrap_Message_dn_set(PyObject *SWIGUNUSEDPARM(self), PyObje
int res1 = 0 ;
void *argp2 = 0 ;
int res2 = 0 ;
- PyObject * obj0 = 0 ;
- PyObject * obj1 = 0 ;
+ PyObject *swig_obj[2] ;
- if (!PyArg_ParseTuple(args,(char *)"OO:Message_dn_set",&obj0,&obj1)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_message, 0 | 0 );
+ if (!SWIG_Python_UnpackTuple(args,"Message_dn_set",2,2,swig_obj)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_message, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Message_dn_set" "', argument " "1"" of type '" "ldb_msg *""'");
}
arg1 = (ldb_msg *)(argp1);
- res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_ldb_dn, SWIG_POINTER_DISOWN | 0 );
+ res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_ldb_dn, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Message_dn_set" "', argument " "2"" of type '" "ldb_dn *""'");
}
@@ -3829,10 +3812,11 @@ SWIGINTERN PyObject *_wrap_Message_dn_get(PyObject *SWIGUNUSEDPARM(self), PyObje
ldb_dn *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:Message_dn_get",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_message, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_message, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Message_dn_get" "', argument " "1"" of type '" "ldb_msg *""'");
}
@@ -3882,10 +3866,11 @@ SWIGINTERN PyObject *_wrap_delete_Message(PyObject *SWIGUNUSEDPARM(self), PyObje
ldb_msg *arg1 = (ldb_msg *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:delete_Message",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_message, SWIG_POINTER_DISOWN | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_message, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Message" "', argument " "1"" of type '" "ldb_msg *""'");
}
@@ -3951,7 +3936,7 @@ fail:
}
-SWIGINTERN PyObject *_wrap_Message___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_Message___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), int nobjs, PyObject **swig_obj) {
PyObject *resultobj = 0;
ldb_msg *arg1 = (ldb_msg *) 0 ;
char *arg2 = (char *) 0 ;
@@ -3963,22 +3948,19 @@ SWIGINTERN PyObject *_wrap_Message___setitem____SWIG_0(PyObject *SWIGUNUSEDPARM(
int alloc2 = 0 ;
void *argp3 = 0 ;
int res3 = 0 ;
- PyObject * obj0 = 0 ;
- PyObject * obj1 = 0 ;
- PyObject * obj2 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"OOO:Message___setitem__",&obj0,&obj1,&obj2)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_message, 0 | 0 );
+ if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_message, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Message___setitem__" "', argument " "1"" of type '" "ldb_msg *""'");
}
arg1 = (ldb_msg *)(argp1);
- res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ res2 = SWIG_AsCharPtrAndSize(swig_obj[1], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Message___setitem__" "', argument " "2"" of type '" "char const *""'");
}
arg2 = (char *)(buf2);
- res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_ldb_message_element, 0 | 0 );
+ res3 = SWIG_ConvertPtr(swig_obj[2], &argp3,SWIGTYPE_p_ldb_message_element, 0 | 0 );
if (!SWIG_IsOK(res3)) {
SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Message___setitem__" "', argument " "3"" of type '" "ldb_msg_element *""'");
}
@@ -3998,7 +3980,7 @@ fail:
}
-SWIGINTERN PyObject *_wrap_Message___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_Message___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), int nobjs, PyObject **swig_obj) {
PyObject *resultobj = 0;
ldb_msg *arg1 = (ldb_msg *) 0 ;
char *arg2 = (char *) 0 ;
@@ -4008,22 +3990,19 @@ SWIGINTERN PyObject *_wrap_Message___setitem____SWIG_1(PyObject *SWIGUNUSEDPARM(
int res2 ;
char *buf2 = 0 ;
int alloc2 = 0 ;
- PyObject * obj0 = 0 ;
- PyObject * obj1 = 0 ;
- PyObject * obj2 = 0 ;
- if (!PyArg_ParseTuple(args,(char *)"OOO:Message___setitem__",&obj0,&obj1,&obj2)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_message, 0 | 0 );
+ if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_message, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Message___setitem__" "', argument " "1"" of type '" "ldb_msg *""'");
}
arg1 = (ldb_msg *)(argp1);
- res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ res2 = SWIG_AsCharPtrAndSize(swig_obj[1], &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Message___setitem__" "', argument " "2"" of type '" "char const *""'");
}
arg2 = (char *)(buf2);
- arg3 = obj2;
+ arg3 = swig_obj[2];
{
if (arg1 == NULL)
SWIG_exception(SWIG_ValueError,
@@ -4042,46 +4021,23 @@ fail:
SWIGINTERN PyObject *_wrap_Message___setitem__(PyObject *self, PyObject *args) {
int argc;
PyObject *argv[4];
- int ii;
- if (!PyTuple_Check(args)) SWIG_fail;
- argc = (int)PyObject_Length(args);
- for (ii = 0; (ii < argc) && (ii < 3); ii++) {
- argv[ii] = PyTuple_GET_ITEM(args,ii);
- }
+ if (!(argc = SWIG_Python_UnpackTuple(args,"Message___setitem__",0,3,argv))) SWIG_fail;
+ --argc;
if (argc == 3) {
- int _v;
- void *vptr = 0;
- int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_ldb_message, 0);
- _v = SWIG_CheckState(res);
- if (_v) {
- int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+ int _v = 0;
+ {
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_ldb_message_element, 0);
_v = SWIG_CheckState(res);
- if (_v) {
- void *vptr = 0;
- int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_ldb_message_element, 0);
- _v = SWIG_CheckState(res);
- if (_v) {
- return _wrap_Message___setitem____SWIG_0(self, args);
- }
- }
}
+ if (!_v) goto check_1;
+ return _wrap_Message___setitem____SWIG_0(self, argc, argv);
}
+check_1:
+
if (argc == 3) {
- int _v;
- void *vptr = 0;
- int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_ldb_message, 0);
- _v = SWIG_CheckState(res);
- if (_v) {
- int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
- _v = SWIG_CheckState(res);
- if (_v) {
- _v = (argv[2] != 0);
- if (_v) {
- return _wrap_Message___setitem____SWIG_1(self, args);
- }
- }
- }
+ return _wrap_Message___setitem____SWIG_1(self, argc, argv);
}
fail:
@@ -4096,10 +4052,11 @@ SWIGINTERN PyObject *_wrap_Message___len__(PyObject *SWIGUNUSEDPARM(self), PyObj
unsigned int result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:Message___len__",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_message, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_message, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Message___len__" "', argument " "1"" of type '" "ldb_msg *""'");
}
@@ -4123,10 +4080,11 @@ SWIGINTERN PyObject *_wrap_Message_keys(PyObject *SWIGUNUSEDPARM(self), PyObject
PyObject *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:Message_keys",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_message, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_message, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Message_keys" "', argument " "1"" of type '" "ldb_msg *""'");
}
@@ -4150,10 +4108,11 @@ SWIGINTERN PyObject *_wrap_Message___iter__(PyObject *SWIGUNUSEDPARM(self), PyOb
PyObject *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:Message___iter__",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_message, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_message, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Message___iter__" "', argument " "1"" of type '" "ldb_msg *""'");
}
@@ -4214,11 +4173,15 @@ fail:
SWIGINTERN PyObject *Message_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
- if (!PyArg_ParseTuple(args,(char*)"O|swigregister", &obj)) return NULL;
+ if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL;
SWIG_TypeNewClientData(SWIGTYPE_p_ldb_message, SWIG_NewClientData(obj));
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *Message_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ return SWIG_Python_InitShadowInstance(args);
+}
+
SWIGINTERN PyObject *_wrap_ldb_ldif_to_pyobject(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
ldb_ldif *arg1 = (ldb_ldif *) 0 ;
@@ -4287,7 +4250,7 @@ SWIGINTERN PyObject *_wrap_new_Ldb(PyObject *SWIGUNUSEDPARM(self), PyObject *arg
arg3 = (char **)(argp3);
}
result = (ldb *)new_ldb((char const *)arg1,arg2,(char const *(*))arg3);
- resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ldb_context, SWIG_POINTER_OWN | 0 );
+ resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ldb_context, SWIG_POINTER_NEW | 0 );
if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
return resultobj;
fail:
@@ -4296,7 +4259,7 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_connect(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
+SWIGINTERN PyObject *_wrap_Ldb_connect(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
char *arg2 = (char *) 0 ;
@@ -4320,28 +4283,28 @@ SWIGINTERN PyObject *_wrap_ldb_connect(PyObject *SWIGUNUSEDPARM(self), PyObject
(char *) "self",(char *) "url",(char *) "flags",(char *) "options", NULL
};
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO|OO:ldb_connect",kwnames,&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO|OO:Ldb_connect",kwnames,&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_connect" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_connect" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ldb_connect" "', argument " "2"" of type '" "char const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Ldb_connect" "', argument " "2"" of type '" "char const *""'");
}
arg2 = (char *)(buf2);
if (obj2) {
ecode3 = SWIG_AsVal_unsigned_SS_int(obj2, &val3);
if (!SWIG_IsOK(ecode3)) {
- SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "ldb_connect" "', argument " "3"" of type '" "unsigned int""'");
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Ldb_connect" "', argument " "3"" of type '" "unsigned int""'");
}
arg3 = (unsigned int)(val3);
}
if (obj3) {
res4 = SWIG_ConvertPtr(obj3, &argp4,SWIGTYPE_p_p_char, 0 | 0 );
if (!SWIG_IsOK(res4)) {
- SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "ldb_connect" "', argument " "4"" of type '" "char const *[]""'");
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "Ldb_connect" "', argument " "4"" of type '" "char const *[]""'");
}
arg4 = (char **)(argp4);
}
@@ -4366,17 +4329,18 @@ fail:
}
-SWIGINTERN PyObject *_wrap_delete_ldb(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Ldb(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:delete_ldb",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, SWIG_POINTER_DISOWN | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_context, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_ldb" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Ldb" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
{
@@ -4393,7 +4357,7 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_search(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
+SWIGINTERN PyObject *_wrap_Ldb_search(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
ldb_dn *arg2 = (ldb_dn *) NULL ;
@@ -4425,30 +4389,30 @@ SWIGINTERN PyObject *_wrap_ldb_search(PyObject *SWIGUNUSEDPARM(self), PyObject *
{
arg6 = &temp_ldb_result6;
}
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"O|OOOO:ldb_search",kwnames,&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+ if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"O|OOOO:Ldb_search",kwnames,&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_search" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_search" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
if (obj1) {
res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_ldb_dn, 0 | 0 );
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ldb_search" "', argument " "2"" of type '" "ldb_dn *""'");
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Ldb_search" "', argument " "2"" of type '" "ldb_dn *""'");
}
arg2 = (ldb_dn *)(argp2);
}
if (obj2) {
ecode3 = SWIG_AsVal_int(obj2, &val3);
if (!SWIG_IsOK(ecode3)) {
- SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "ldb_search" "', argument " "3"" of type '" "enum ldb_scope""'");
+ SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Ldb_search" "', argument " "3"" of type '" "enum ldb_scope""'");
}
arg3 = (enum ldb_scope)(val3);
}
if (obj3) {
res4 = SWIG_AsCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
if (!SWIG_IsOK(res4)) {
- SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "ldb_search" "', argument " "4"" of type '" "char const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "Ldb_search" "', argument " "4"" of type '" "char const *""'");
}
arg4 = (char *)(buf4);
}
@@ -4502,7 +4466,7 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_delete(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
+SWIGINTERN PyObject *_wrap_Ldb_delete(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
ldb_dn *arg2 = (ldb_dn *) 0 ;
@@ -4517,15 +4481,15 @@ SWIGINTERN PyObject *_wrap_ldb_delete(PyObject *SWIGUNUSEDPARM(self), PyObject *
(char *) "self",(char *) "dn", NULL
};
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:ldb_delete",kwnames,&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:Ldb_delete",kwnames,&obj0,&obj1)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_delete" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_delete" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_ldb_dn, 0 | 0 );
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ldb_delete" "', argument " "2"" of type '" "ldb_dn *""'");
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Ldb_delete" "', argument " "2"" of type '" "ldb_dn *""'");
}
arg2 = (ldb_dn *)(argp2);
{
@@ -4547,7 +4511,7 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_rename(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
+SWIGINTERN PyObject *_wrap_Ldb_rename(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
ldb_dn *arg2 = (ldb_dn *) 0 ;
@@ -4566,20 +4530,20 @@ SWIGINTERN PyObject *_wrap_ldb_rename(PyObject *SWIGUNUSEDPARM(self), PyObject *
(char *) "self",(char *) "olddn",(char *) "newdn", NULL
};
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OOO:ldb_rename",kwnames,&obj0,&obj1,&obj2)) SWIG_fail;
+ if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OOO:Ldb_rename",kwnames,&obj0,&obj1,&obj2)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_rename" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_rename" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_ldb_dn, 0 | 0 );
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ldb_rename" "', argument " "2"" of type '" "ldb_dn *""'");
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Ldb_rename" "', argument " "2"" of type '" "ldb_dn *""'");
}
arg2 = (ldb_dn *)(argp2);
res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_ldb_dn, 0 | 0 );
if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ldb_rename" "', argument " "3"" of type '" "ldb_dn *""'");
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Ldb_rename" "', argument " "3"" of type '" "ldb_dn *""'");
}
arg3 = (ldb_dn *)(argp3);
{
@@ -4601,55 +4565,27 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_add(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
+SWIGINTERN PyObject *_wrap_Ldb_add__SWIG_0(PyObject *SWIGUNUSEDPARM(self), int nobjs, PyObject **swig_obj) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
ldb_msg *arg2 = (ldb_msg *) 0 ;
ldb_error result;
void *argp1 = 0 ;
int res1 = 0 ;
- int dict_pos2 ;
- int msg_pos2 ;
- PyObject *key2 ;
- PyObject *value2 ;
- ldb_msg_element *msgel2 ;
- PyObject * obj0 = 0 ;
- PyObject * obj1 = 0 ;
- char * kwnames[] = {
- (char *) "self",(char *) "add_msg", NULL
- };
+ void *argp2 = 0 ;
+ int res2 = 0 ;
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:ldb_add",kwnames,&obj0,&obj1)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
+ if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_add" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_add" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
- {
- if (PyDict_Check(obj1)) {
- arg2 = ldb_msg_new(NULL);
- arg2->num_elements = PyDict_Size(obj1) - 1; /* dn isn't in there */
- arg2->elements = talloc_zero_array(arg2, struct ldb_message_element, arg2->num_elements+1);
- msg_pos2 = dict_pos2 = 0;
- while (PyDict_Next(obj1, &dict_pos2, &key2, &value2)) {
- if (!strcmp(PyString_AsString(key2), "dn")) {
- if (ldb_dn_from_pyobject(value2, &arg2->dn) != 0)
- SWIG_exception(SWIG_TypeError, "unable to convert dn");
- } else {
- msgel2 = ldb_msg_element_from_pyobject(value2, 0, PyString_AsString(key2));
- memcpy(&arg2->elements[msg_pos2], msgel2, sizeof(*msgel2));
- msg_pos2++;
- }
- dict_pos2++;
- }
-
- if (arg2->dn == NULL)
- SWIG_exception(SWIG_TypeError, "no dn set");
- } else {
- if (SWIG_ConvertPtr(obj1, (void **)&arg2, SWIGTYPE_p_ldb_message, 0) != 0)
- return NULL;
- }
+ res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_ldb_message, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Ldb_add" "', argument " "2"" of type '" "ldb_msg *""'");
}
+ arg2 = (ldb_msg *)(argp2);
{
if (arg1 == NULL)
SWIG_exception(SWIG_ValueError,
@@ -4668,19 +4604,75 @@ SWIGINTERN PyObject *_wrap_ldb_add(PyObject *SWIGUNUSEDPARM(self), PyObject *arg
}
resultobj = Py_None;
}
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Ldb_add__SWIG_1(PyObject *SWIGUNUSEDPARM(self), int nobjs, PyObject **swig_obj) {
+ PyObject *resultobj = 0;
+ ldb *arg1 = (ldb *) 0 ;
+ PyObject *arg2 = (PyObject *) 0 ;
+ ldb_error result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+
+ if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_add" "', argument " "1"" of type '" "ldb *""'");
+ }
+ arg1 = (ldb *)(argp1);
+ arg2 = swig_obj[1];
+ {
+ if (arg1 == NULL)
+ SWIG_exception(SWIG_ValueError,
+ "ldb context must be non-NULL");
+ }
+ result = ldb_add__SWIG_1(arg1,arg2);
{
- //talloc_free(arg2);
+ if (result != 0) {
+ PyErr_SetObject(PyExc_LdbError, Py_BuildValue("(i,s)", result, ldb_strerror(result)));
+ SWIG_fail;
+ }
+ resultobj = Py_None;
}
return resultobj;
fail:
- {
- //talloc_free(arg2);
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Ldb_add(PyObject *self, PyObject *args) {
+ int argc;
+ PyObject *argv[3];
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"Ldb_add",0,2,argv))) SWIG_fail;
+ --argc;
+ if (argc == 2) {
+ int _v = 0;
+ {
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_ldb_message, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_1;
+ return _wrap_Ldb_add__SWIG_0(self, argc, argv);
+ }
+check_1:
+
+ if (argc == 2) {
+ return _wrap_Ldb_add__SWIG_1(self, argc, argv);
}
+
+fail:
+ SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Ldb_add'.\n Possible C/C++ prototypes are:\n"" add(ldb *,ldb_msg *)\n"" add(ldb *,PyObject *)\n");
return NULL;
}
-SWIGINTERN PyObject *_wrap_ldb_modify(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
+SWIGINTERN PyObject *_wrap_Ldb_modify(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
ldb_msg *arg2 = (ldb_msg *) 0 ;
@@ -4695,15 +4687,15 @@ SWIGINTERN PyObject *_wrap_ldb_modify(PyObject *SWIGUNUSEDPARM(self), PyObject *
(char *) "self",(char *) "message", NULL
};
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:ldb_modify",kwnames,&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:Ldb_modify",kwnames,&obj0,&obj1)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_modify" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_modify" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_ldb_message, 0 | 0 );
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ldb_modify" "', argument " "2"" of type '" "ldb_msg *""'");
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Ldb_modify" "', argument " "2"" of type '" "ldb_msg *""'");
}
arg2 = (ldb_msg *)(argp2);
{
@@ -4730,18 +4722,19 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_get_config_basedn(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_Ldb_get_config_basedn(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
ldb_dn *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:ldb_get_config_basedn",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_get_config_basedn" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_get_config_basedn" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
{
@@ -4757,18 +4750,19 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_get_root_basedn(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_Ldb_get_root_basedn(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
ldb_dn *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:ldb_get_root_basedn",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_get_root_basedn" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_get_root_basedn" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
{
@@ -4784,18 +4778,19 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_get_schema_basedn(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_Ldb_get_schema_basedn(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
ldb_dn *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:ldb_get_schema_basedn",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_get_schema_basedn" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_get_schema_basedn" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
{
@@ -4811,18 +4806,19 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_get_default_basedn(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_Ldb_get_default_basedn(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
ldb_dn *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:ldb_get_default_basedn",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_get_default_basedn" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_get_default_basedn" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
{
@@ -4838,18 +4834,19 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_errstring(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_Ldb_errstring(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
char *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:ldb_errstring",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_errstring" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_errstring" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
{
@@ -4865,7 +4862,7 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_set_create_perms(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
+SWIGINTERN PyObject *_wrap_Ldb_set_create_perms(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
unsigned int arg2 ;
@@ -4879,15 +4876,15 @@ SWIGINTERN PyObject *_wrap_ldb_set_create_perms(PyObject *SWIGUNUSEDPARM(self),
(char *) "self",(char *) "perms", NULL
};
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:ldb_set_create_perms",kwnames,&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:Ldb_set_create_perms",kwnames,&obj0,&obj1)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_set_create_perms" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_set_create_perms" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
ecode2 = SWIG_AsVal_unsigned_SS_int(obj1, &val2);
if (!SWIG_IsOK(ecode2)) {
- SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "ldb_set_create_perms" "', argument " "2"" of type '" "unsigned int""'");
+ SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Ldb_set_create_perms" "', argument " "2"" of type '" "unsigned int""'");
}
arg2 = (unsigned int)(val2);
{
@@ -4903,7 +4900,7 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_set_modules_dir(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
+SWIGINTERN PyObject *_wrap_Ldb_set_modules_dir(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
char *arg2 = (char *) 0 ;
@@ -4918,15 +4915,15 @@ SWIGINTERN PyObject *_wrap_ldb_set_modules_dir(PyObject *SWIGUNUSEDPARM(self), P
(char *) "self",(char *) "path", NULL
};
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:ldb_set_modules_dir",kwnames,&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:Ldb_set_modules_dir",kwnames,&obj0,&obj1)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_set_modules_dir" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_set_modules_dir" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ldb_set_modules_dir" "', argument " "2"" of type '" "char const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Ldb_set_modules_dir" "', argument " "2"" of type '" "char const *""'");
}
arg2 = (char *)(buf2);
{
@@ -4944,7 +4941,7 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_set_debug(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
+SWIGINTERN PyObject *_wrap_Ldb_set_debug(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
void (*arg2)(void *,enum ldb_debug_level,char const *,va_list) = (void (*)(void *,enum ldb_debug_level,char const *,va_list)) 0 ;
@@ -4958,10 +4955,10 @@ SWIGINTERN PyObject *_wrap_ldb_set_debug(PyObject *SWIGUNUSEDPARM(self), PyObjec
(char *) "self",(char *) "debug", NULL
};
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:ldb_set_debug",kwnames,&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:Ldb_set_debug",kwnames,&obj0,&obj1)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_set_debug" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_set_debug" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
{
@@ -4990,7 +4987,7 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_set_opaque(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
+SWIGINTERN PyObject *_wrap_Ldb_set_opaque(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
char *arg2 = (char *) 0 ;
@@ -5009,20 +5006,20 @@ SWIGINTERN PyObject *_wrap_ldb_set_opaque(PyObject *SWIGUNUSEDPARM(self), PyObje
(char *) "self",(char *) "name",(char *) "value", NULL
};
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OOO:ldb_set_opaque",kwnames,&obj0,&obj1,&obj2)) SWIG_fail;
+ if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OOO:Ldb_set_opaque",kwnames,&obj0,&obj1,&obj2)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_set_opaque" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_set_opaque" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ldb_set_opaque" "', argument " "2"" of type '" "char const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Ldb_set_opaque" "', argument " "2"" of type '" "char const *""'");
}
arg2 = (char *)(buf2);
res3 = SWIG_ConvertPtr(obj2,SWIG_as_voidptrptr(&arg3), 0, 0);
if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "ldb_set_opaque" "', argument " "3"" of type '" "void *""'");
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Ldb_set_opaque" "', argument " "3"" of type '" "void *""'");
}
{
if (arg1 == NULL)
@@ -5045,7 +5042,7 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_get_opaque(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
+SWIGINTERN PyObject *_wrap_Ldb_get_opaque(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
char *arg2 = (char *) 0 ;
@@ -5061,15 +5058,15 @@ SWIGINTERN PyObject *_wrap_ldb_get_opaque(PyObject *SWIGUNUSEDPARM(self), PyObje
(char *) "self",(char *) "name", NULL
};
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:ldb_get_opaque",kwnames,&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:Ldb_get_opaque",kwnames,&obj0,&obj1)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_get_opaque" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_get_opaque" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ldb_get_opaque" "', argument " "2"" of type '" "char const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Ldb_get_opaque" "', argument " "2"" of type '" "char const *""'");
}
arg2 = (char *)(buf2);
{
@@ -5087,18 +5084,19 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_transaction_start(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_Ldb_transaction_start(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
ldb_error result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:ldb_transaction_start",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_transaction_start" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_transaction_start" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
{
@@ -5120,18 +5118,19 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_transaction_commit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_Ldb_transaction_commit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
ldb_error result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:ldb_transaction_commit",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_transaction_commit" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_transaction_commit" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
{
@@ -5153,18 +5152,19 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_transaction_cancel(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_Ldb_transaction_cancel(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
ldb_error result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:ldb_transaction_cancel",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_transaction_cancel" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_transaction_cancel" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
{
@@ -5186,7 +5186,7 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb___contains__(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
+SWIGINTERN PyObject *_wrap_Ldb___contains__(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
ldb_dn *arg2 = (ldb_dn *) 0 ;
@@ -5206,15 +5206,15 @@ SWIGINTERN PyObject *_wrap_ldb___contains__(PyObject *SWIGUNUSEDPARM(self), PyOb
{
arg3 = &tmp3;
}
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:ldb___contains__",kwnames,&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:Ldb___contains__",kwnames,&obj0,&obj1)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb___contains__" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb___contains__" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_ldb_dn, 0 | 0 );
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ldb___contains__" "', argument " "2"" of type '" "ldb_dn *""'");
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Ldb___contains__" "', argument " "2"" of type '" "ldb_dn *""'");
}
arg2 = (ldb_dn *)(argp2);
{
@@ -5245,7 +5245,7 @@ fail:
}
-SWIGINTERN PyObject *_wrap_ldb_parse_ldif(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
+SWIGINTERN PyObject *_wrap_Ldb_parse_ldif(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
ldb *arg1 = (ldb *) 0 ;
char *arg2 = (char *) 0 ;
@@ -5261,15 +5261,15 @@ SWIGINTERN PyObject *_wrap_ldb_parse_ldif(PyObject *SWIGUNUSEDPARM(self), PyObje
(char *) "self",(char *) "s", NULL
};
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:ldb_parse_ldif",kwnames,&obj0,&obj1)) SWIG_fail;
+ if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:Ldb_parse_ldif",kwnames,&obj0,&obj1)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ldb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ldb_parse_ldif" "', argument " "1"" of type '" "ldb *""'");
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Ldb_parse_ldif" "', argument " "1"" of type '" "ldb *""'");
}
arg1 = (ldb *)(argp1);
res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
- SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ldb_parse_ldif" "', argument " "2"" of type '" "char const *""'");
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Ldb_parse_ldif" "', argument " "2"" of type '" "char const *""'");
}
arg2 = (char *)(buf2);
{
@@ -5287,13 +5287,17 @@ fail:
}
-SWIGINTERN PyObject *ldb_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Ldb_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
- if (!PyArg_ParseTuple(args,(char*)"O|swigregister", &obj)) return NULL;
+ if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL;
SWIG_TypeNewClientData(SWIGTYPE_p_ldb_context, SWIG_NewClientData(obj));
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *Ldb_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ return SWIG_Python_InitShadowInstance(args);
+}
+
SWIGINTERN PyObject *_wrap_valid_attr_name(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
char *arg1 = (char *) 0 ;
@@ -5377,69 +5381,69 @@ fail:
static PyMethodDef SwigMethods[] = {
{ (char *)"new_Dn", (PyCFunction) _wrap_new_Dn, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"delete_Dn", _wrap_delete_Dn, METH_VARARGS, NULL},
- { (char *)"Dn_validate", _wrap_Dn_validate, METH_VARARGS, NULL},
- { (char *)"Dn_get_casefold", _wrap_Dn_get_casefold, METH_VARARGS, NULL},
- { (char *)"Dn___str__", _wrap_Dn___str__, METH_VARARGS, NULL},
- { (char *)"Dn_parent", _wrap_Dn_parent, METH_VARARGS, NULL},
+ { (char *)"delete_Dn", (PyCFunction)_wrap_delete_Dn, METH_O, NULL},
+ { (char *)"Dn_validate", (PyCFunction)_wrap_Dn_validate, METH_O, NULL},
+ { (char *)"Dn_get_casefold", (PyCFunction)_wrap_Dn_get_casefold, METH_O, NULL},
+ { (char *)"Dn___str__", (PyCFunction)_wrap_Dn___str__, METH_O, NULL},
+ { (char *)"Dn_parent", (PyCFunction)_wrap_Dn_parent, METH_O, NULL},
{ (char *)"Dn___cmp__", (PyCFunction) _wrap_Dn___cmp__, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"Dn_is_valid", _wrap_Dn_is_valid, METH_VARARGS, NULL},
- { (char *)"Dn_is_special", _wrap_Dn_is_special, METH_VARARGS, NULL},
- { (char *)"Dn_is_null", _wrap_Dn_is_null, METH_VARARGS, NULL},
+ { (char *)"Dn_is_valid", (PyCFunction)_wrap_Dn_is_valid, METH_O, NULL},
+ { (char *)"Dn_is_special", (PyCFunction)_wrap_Dn_is_special, METH_O, NULL},
+ { (char *)"Dn_is_null", (PyCFunction)_wrap_Dn_is_null, METH_O, NULL},
{ (char *)"Dn_check_special", (PyCFunction) _wrap_Dn_check_special, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"Dn___len__", _wrap_Dn___len__, METH_VARARGS, NULL},
+ { (char *)"Dn___len__", (PyCFunction)_wrap_Dn___len__, METH_O, NULL},
{ (char *)"Dn_add_child", (PyCFunction) _wrap_Dn_add_child, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"Dn_add_base", (PyCFunction) _wrap_Dn_add_base, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"Dn_canonical_str", _wrap_Dn_canonical_str, METH_VARARGS, NULL},
- { (char *)"Dn_canonical_ex_str", _wrap_Dn_canonical_ex_str, METH_VARARGS, NULL},
+ { (char *)"Dn_canonical_str", (PyCFunction)_wrap_Dn_canonical_str, METH_O, NULL},
+ { (char *)"Dn_canonical_ex_str", (PyCFunction)_wrap_Dn_canonical_ex_str, METH_O, NULL},
{ (char *)"Dn___add__", (PyCFunction) _wrap_Dn___add__, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"Dn_swigregister", Dn_swigregister, METH_VARARGS, NULL},
- { (char *)"ldb_dn_from_pyobject", (PyCFunction) _wrap_ldb_dn_from_pyobject, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"ldb_msg_element_from_pyobject", (PyCFunction) _wrap_ldb_msg_element_from_pyobject, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"ldb_msg_element_to_set", (PyCFunction) _wrap_ldb_msg_element_to_set, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"ldb_msg_element___iter__", _wrap_ldb_msg_element___iter__, METH_VARARGS, NULL},
- { (char *)"ldb_msg_element___set__", _wrap_ldb_msg_element___set__, METH_VARARGS, NULL},
+ { (char *)"Dn_swiginit", Dn_swiginit, METH_VARARGS, NULL},
+ { (char *)"ldb_msg_element___iter__", (PyCFunction)_wrap_ldb_msg_element___iter__, METH_O, NULL},
+ { (char *)"ldb_msg_element___set__", (PyCFunction)_wrap_ldb_msg_element___set__, METH_O, NULL},
{ (char *)"new_MessageElement", (PyCFunction) _wrap_new_MessageElement, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"delete_ldb_msg_element", _wrap_delete_ldb_msg_element, METH_VARARGS, NULL},
+ { (char *)"delete_ldb_msg_element", (PyCFunction)_wrap_delete_ldb_msg_element, METH_O, NULL},
{ (char *)"ldb_msg_element___cmp__", (PyCFunction) _wrap_ldb_msg_element___cmp__, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"ldb_msg_element_swigregister", ldb_msg_element_swigregister, METH_VARARGS, NULL},
{ (char *)"ldb_msg_list_elements", (PyCFunction) _wrap_ldb_msg_list_elements, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"Message_dn_set", _wrap_Message_dn_set, METH_VARARGS, NULL},
- { (char *)"Message_dn_get", _wrap_Message_dn_get, METH_VARARGS, NULL},
+ { (char *)"Message_dn_get", (PyCFunction)_wrap_Message_dn_get, METH_O, NULL},
{ (char *)"new_Message", (PyCFunction) _wrap_new_Message, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"delete_Message", _wrap_delete_Message, METH_VARARGS, NULL},
+ { (char *)"delete_Message", (PyCFunction)_wrap_delete_Message, METH_O, NULL},
{ (char *)"Message___getitem__", (PyCFunction) _wrap_Message___getitem__, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"Message___setitem__", _wrap_Message___setitem__, METH_VARARGS, NULL},
- { (char *)"Message___len__", _wrap_Message___len__, METH_VARARGS, NULL},
- { (char *)"Message_keys", _wrap_Message_keys, METH_VARARGS, NULL},
- { (char *)"Message___iter__", _wrap_Message___iter__, METH_VARARGS, NULL},
+ { (char *)"Message___len__", (PyCFunction)_wrap_Message___len__, METH_O, NULL},
+ { (char *)"Message_keys", (PyCFunction)_wrap_Message_keys, METH_O, NULL},
+ { (char *)"Message___iter__", (PyCFunction)_wrap_Message___iter__, METH_O, NULL},
{ (char *)"Message___delitem__", (PyCFunction) _wrap_Message___delitem__, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"Message_swigregister", Message_swigregister, METH_VARARGS, NULL},
+ { (char *)"Message_swiginit", Message_swiginit, METH_VARARGS, NULL},
{ (char *)"ldb_ldif_to_pyobject", (PyCFunction) _wrap_ldb_ldif_to_pyobject, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"new_Ldb", (PyCFunction) _wrap_new_Ldb, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"ldb_connect", (PyCFunction) _wrap_ldb_connect, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"delete_ldb", _wrap_delete_ldb, METH_VARARGS, NULL},
- { (char *)"ldb_search", (PyCFunction) _wrap_ldb_search, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"ldb_delete", (PyCFunction) _wrap_ldb_delete, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"ldb_rename", (PyCFunction) _wrap_ldb_rename, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"ldb_add", (PyCFunction) _wrap_ldb_add, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"ldb_modify", (PyCFunction) _wrap_ldb_modify, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"ldb_get_config_basedn", _wrap_ldb_get_config_basedn, METH_VARARGS, NULL},
- { (char *)"ldb_get_root_basedn", _wrap_ldb_get_root_basedn, METH_VARARGS, NULL},
- { (char *)"ldb_get_schema_basedn", _wrap_ldb_get_schema_basedn, METH_VARARGS, NULL},
- { (char *)"ldb_get_default_basedn", _wrap_ldb_get_default_basedn, METH_VARARGS, NULL},
- { (char *)"ldb_errstring", _wrap_ldb_errstring, METH_VARARGS, NULL},
- { (char *)"ldb_set_create_perms", (PyCFunction) _wrap_ldb_set_create_perms, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"ldb_set_modules_dir", (PyCFunction) _wrap_ldb_set_modules_dir, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"ldb_set_debug", (PyCFunction) _wrap_ldb_set_debug, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"ldb_set_opaque", (PyCFunction) _wrap_ldb_set_opaque, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"ldb_get_opaque", (PyCFunction) _wrap_ldb_get_opaque, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"ldb_transaction_start", _wrap_ldb_transaction_start, METH_VARARGS, NULL},
- { (char *)"ldb_transaction_commit", _wrap_ldb_transaction_commit, METH_VARARGS, NULL},
- { (char *)"ldb_transaction_cancel", _wrap_ldb_transaction_cancel, METH_VARARGS, NULL},
- { (char *)"ldb___contains__", (PyCFunction) _wrap_ldb___contains__, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"ldb_parse_ldif", (PyCFunction) _wrap_ldb_parse_ldif, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"ldb_swigregister", ldb_swigregister, METH_VARARGS, NULL},
+ { (char *)"Ldb_connect", (PyCFunction) _wrap_Ldb_connect, METH_VARARGS | METH_KEYWORDS, NULL},
+ { (char *)"delete_Ldb", (PyCFunction)_wrap_delete_Ldb, METH_O, NULL},
+ { (char *)"Ldb_search", (PyCFunction) _wrap_Ldb_search, METH_VARARGS | METH_KEYWORDS, NULL},
+ { (char *)"Ldb_delete", (PyCFunction) _wrap_Ldb_delete, METH_VARARGS | METH_KEYWORDS, NULL},
+ { (char *)"Ldb_rename", (PyCFunction) _wrap_Ldb_rename, METH_VARARGS | METH_KEYWORDS, NULL},
+ { (char *)"Ldb_add", _wrap_Ldb_add, METH_VARARGS, NULL},
+ { (char *)"Ldb_modify", (PyCFunction) _wrap_Ldb_modify, METH_VARARGS | METH_KEYWORDS, NULL},
+ { (char *)"Ldb_get_config_basedn", (PyCFunction)_wrap_Ldb_get_config_basedn, METH_O, NULL},
+ { (char *)"Ldb_get_root_basedn", (PyCFunction)_wrap_Ldb_get_root_basedn, METH_O, NULL},
+ { (char *)"Ldb_get_schema_basedn", (PyCFunction)_wrap_Ldb_get_schema_basedn, METH_O, NULL},
+ { (char *)"Ldb_get_default_basedn", (PyCFunction)_wrap_Ldb_get_default_basedn, METH_O, NULL},
+ { (char *)"Ldb_errstring", (PyCFunction)_wrap_Ldb_errstring, METH_O, NULL},
+ { (char *)"Ldb_set_create_perms", (PyCFunction) _wrap_Ldb_set_create_perms, METH_VARARGS | METH_KEYWORDS, NULL},
+ { (char *)"Ldb_set_modules_dir", (PyCFunction) _wrap_Ldb_set_modules_dir, METH_VARARGS | METH_KEYWORDS, NULL},
+ { (char *)"Ldb_set_debug", (PyCFunction) _wrap_Ldb_set_debug, METH_VARARGS | METH_KEYWORDS, NULL},
+ { (char *)"Ldb_set_opaque", (PyCFunction) _wrap_Ldb_set_opaque, METH_VARARGS | METH_KEYWORDS, NULL},
+ { (char *)"Ldb_get_opaque", (PyCFunction) _wrap_Ldb_get_opaque, METH_VARARGS | METH_KEYWORDS, NULL},
+ { (char *)"Ldb_transaction_start", (PyCFunction)_wrap_Ldb_transaction_start, METH_O, NULL},
+ { (char *)"Ldb_transaction_commit", (PyCFunction)_wrap_Ldb_transaction_commit, METH_O, NULL},
+ { (char *)"Ldb_transaction_cancel", (PyCFunction)_wrap_Ldb_transaction_cancel, METH_O, NULL},
+ { (char *)"Ldb___contains__", (PyCFunction) _wrap_Ldb___contains__, METH_VARARGS | METH_KEYWORDS, NULL},
+ { (char *)"Ldb_parse_ldif", (PyCFunction) _wrap_Ldb_parse_ldif, METH_VARARGS | METH_KEYWORDS, NULL},
+ { (char *)"Ldb_swigregister", Ldb_swigregister, METH_VARARGS, NULL},
+ { (char *)"Ldb_swiginit", Ldb_swiginit, METH_VARARGS, NULL},
{ (char *)"valid_attr_name", (PyCFunction) _wrap_valid_attr_name, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"timestring", (PyCFunction) _wrap_timestring, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"string_to_time", (PyCFunction) _wrap_string_to_time, METH_VARARGS | METH_KEYWORDS, NULL},
@@ -5460,7 +5464,6 @@ static swig_type_info _swigt__p_ldb_message_element = {"_p_ldb_message_element",
static swig_type_info _swigt__p_ldb_result = {"_p_ldb_result", "struct ldb_result *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_long_long = {"_p_long_long", "int_least64_t *|int_fast64_t *|int64_t *|long long *|intmax_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_ldb_dn = {"_p_p_ldb_dn", "struct ldb_dn **|ldb_dn **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_ldb_result = {"_p_p_ldb_result", "struct ldb_result **", 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};
@@ -5483,7 +5486,6 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_ldb_result,
&_swigt__p_long_long,
&_swigt__p_p_char,
- &_swigt__p_p_ldb_dn,
&_swigt__p_p_ldb_result,
&_swigt__p_short,
&_swigt__p_signed_char,
@@ -5506,7 +5508,6 @@ static swig_cast_info _swigc__p_ldb_message_element[] = { {&_swigt__p_ldb_messa
static swig_cast_info _swigc__p_ldb_result[] = { {&_swigt__p_ldb_result, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_long_long[] = { {&_swigt__p_long_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_p_ldb_dn[] = { {&_swigt__p_p_ldb_dn, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_ldb_result[] = { {&_swigt__p_p_ldb_result, 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}};
@@ -5529,7 +5530,6 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_ldb_result,
_swigc__p_long_long,
_swigc__p_p_char,
- _swigc__p_p_ldb_dn,
_swigc__p_p_ldb_result,
_swigc__p_short,
_swigc__p_signed_char,
diff --git a/source4/lib/ldb/tests/python/api.py b/source4/lib/ldb/tests/python/api.py
index b140bfc599..b6d6170ec2 100755
--- a/source4/lib/ldb/tests/python/api.py
+++ b/source4/lib/ldb/tests/python/api.py
@@ -1,8 +1,11 @@
#!/usr/bin/python
-# Simple tests for the ldb python API
+# Simple tests for the ldb python bindings.
# Copyright (C) 2007 Jelmer Vernooij <jelmer@samba.org>
+
import sys
import unittest
+
+# Required for the standalone LDB build
sys.path.append("swig")
sys.path.append("build/lib.linux-i686-2.4")
@@ -116,6 +119,16 @@ class SimpleLdb(unittest.TestCase):
finally:
l.delete(ldb.Dn(l, "dc=foo"))
+ def test_add_dict_string_dn(self):
+ l = ldb.Ldb("foo.tdb")
+ m = {"dn": "dc=foo", "bla": "bla"}
+ self.assertEquals(len(l.search()), 1)
+ l.add(m)
+ try:
+ self.assertEquals(len(l.search()), 2)
+ finally:
+ l.delete(ldb.Dn(l, "dc=foo"))
+
def test_rename(self):
l = ldb.Ldb("foo.tdb")
m = ldb.Message()
diff --git a/source4/lib/ldb/tools/ad2oLschema.c b/source4/lib/ldb/tools/ad2oLschema.c
index 5fcf752578..c8974d7e7d 100644
--- a/source4/lib/ldb/tools/ad2oLschema.c
+++ b/source4/lib/ldb/tools/ad2oLschema.c
@@ -37,6 +37,7 @@
#include "tools/cmdline.h"
#include "tools/convert.h"
#include "param/param.h"
+#include "lib/cmdline/popt_common.h"
struct schema_conv {
int count;
@@ -677,7 +678,7 @@ static struct schema_conv process_convert(struct ldb_context *ldb, enum convert_
}
}
- target_str = lp_parm_string(global_loadparm, NULL, "convert", "target");
+ target_str = lp_parm_string(cmdline_lp_ctx, NULL, "convert", "target");
if (!target_str || strcasecmp(target_str, "openldap") == 0) {
target = TARGET_OPENLDAP;
diff --git a/source4/lib/messaging/config.mk b/source4/lib/messaging/config.mk
index 843851e853..3fec9c0c90 100644
--- a/source4/lib/messaging/config.mk
+++ b/source4/lib/messaging/config.mk
@@ -10,6 +10,7 @@ PUBLIC_DEPENDENCIES = \
NDR_IRPC \
UNIX_PRIVS \
UTIL_TDB \
- CLUSTER
+ CLUSTER \
+ LIBNDR
# End SUBSYSTEM MESSAGING
################################################
diff --git a/source4/lib/messaging/irpc.h b/source4/lib/messaging/irpc.h
index 989e5d4255..d596c6721e 100644
--- a/source4/lib/messaging/irpc.h
+++ b/source4/lib/messaging/irpc.h
@@ -92,9 +92,11 @@ NTSTATUS messaging_register_tmp(struct messaging_context *msg, void *private,
struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx,
const char *dir,
struct server_id server_id,
+ struct smb_iconv_convenience *iconv_convenience,
struct event_context *ev);
struct messaging_context *messaging_client_init(TALLOC_CTX *mem_ctx,
const char *dir,
+ struct smb_iconv_convenience *iconv_convenience,
struct event_context *ev);
NTSTATUS messaging_send_ptr(struct messaging_context *msg, struct server_id server,
uint32_t msg_type, void *ptr);
diff --git a/source4/lib/messaging/messaging.c b/source4/lib/messaging/messaging.c
index df0bfa32a6..811d5a85bf 100644
--- a/source4/lib/messaging/messaging.c
+++ b/source4/lib/messaging/messaging.c
@@ -49,6 +49,7 @@ struct messaging_context {
struct idr_context *dispatch_tree;
struct messaging_rec *pending;
struct messaging_rec *retry_queue;
+ struct smb_iconv_convenience *iconv_convenience;
struct irpc_list *irpc;
struct idr_context *idr;
const char **names;
@@ -532,6 +533,7 @@ static int messaging_destructor(struct messaging_context *msg)
struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx,
const char *dir,
struct server_id server_id,
+ struct smb_iconv_convenience *iconv_convenience,
struct event_context *ev)
{
struct messaging_context *msg;
@@ -560,6 +562,7 @@ struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx,
msg->base_path = talloc_reference(msg, dir);
msg->path = messaging_path(msg, server_id);
msg->server_id = server_id;
+ msg->iconv_convenience = iconv_convenience;
msg->idr = idr_init(msg);
msg->dispatch_tree = idr_init(msg);
msg->start_time = timeval_current();
@@ -609,12 +612,13 @@ struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx,
*/
struct messaging_context *messaging_client_init(TALLOC_CTX *mem_ctx,
const char *dir,
+ struct smb_iconv_convenience *iconv_convenience,
struct event_context *ev)
{
struct server_id id;
ZERO_STRUCT(id);
id.id = random() % 0x10000000;
- return messaging_init(mem_ctx, dir, id, ev);
+ return messaging_init(mem_ctx, dir, id, iconv_convenience, ev);
}
/*
a list of registered irpc server functions
@@ -698,7 +702,7 @@ NTSTATUS irpc_send_reply(struct irpc_message *m, NTSTATUS status)
m->header.status = status;
/* setup the reply */
- push = ndr_push_init_ctx(m->ndr);
+ push = ndr_push_init_ctx(m->ndr, m->msg_ctx->iconv_convenience);
if (push == NULL) {
status = NT_STATUS_NO_MEMORY;
goto failed;
@@ -798,7 +802,7 @@ static void irpc_handler(struct messaging_context *msg_ctx, void *private,
m->from = src;
- m->ndr = ndr_pull_init_blob(packet, m);
+ m->ndr = ndr_pull_init_blob(packet, m, msg_ctx->iconv_convenience);
if (m->ndr == NULL) goto failed;
m->ndr->flags |= LIBNDR_FLAG_REF_ALLOC;
@@ -890,7 +894,7 @@ struct irpc_request *irpc_call_send(struct messaging_context *msg_ctx,
header.status = NT_STATUS_OK;
/* construct the irpc packet */
- ndr = ndr_push_init_ctx(irpc);
+ ndr = ndr_push_init_ctx(irpc, msg_ctx->iconv_convenience);
if (ndr == NULL) goto failed;
ndr_err = ndr_push_irpc_header(ndr, NDR_SCALARS|NDR_BUFFERS, &header);
diff --git a/source4/lib/messaging/tests/irpc.c b/source4/lib/messaging/tests/irpc.c
index 0618adcfb2..ce3d1045e5 100644
--- a/source4/lib/messaging/tests/irpc.c
+++ b/source4/lib/messaging/tests/irpc.c
@@ -221,13 +221,17 @@ static bool irpc_setup(struct torture_context *tctx, void **_data)
torture_assert(tctx, data->msg_ctx1 =
messaging_init(tctx,
lp_messaging_path(tctx, tctx->lp_ctx),
- cluster_id(MSG_ID1), data->ev),
+ cluster_id(MSG_ID1),
+ lp_iconv_convenience(tctx->lp_ctx),
+ data->ev),
"Failed to init first messaging context");
torture_assert(tctx, data->msg_ctx2 =
messaging_init(tctx,
lp_messaging_path(tctx, tctx->lp_ctx),
- cluster_id(MSG_ID2), data->ev),
+ cluster_id(MSG_ID2),
+ lp_iconv_convenience(tctx->lp_ctx),
+ data->ev),
"Failed to init second messaging context");
/* register the server side function */
diff --git a/source4/lib/messaging/tests/messaging.c b/source4/lib/messaging/tests/messaging.c
index ba3d2f91d6..0df04bce2b 100644
--- a/source4/lib/messaging/tests/messaging.c
+++ b/source4/lib/messaging/tests/messaging.c
@@ -73,7 +73,9 @@ static bool test_ping_speed(struct torture_context *tctx)
msg_server_ctx = messaging_init(tctx,
lp_messaging_path(tctx, tctx->lp_ctx),
- cluster_id(1), ev);
+ cluster_id(1),
+ lp_iconv_convenience(tctx->lp_ctx),
+ ev);
torture_assert(tctx, msg_server_ctx != NULL, "Failed to init ping messaging context");
@@ -82,7 +84,9 @@ static bool test_ping_speed(struct torture_context *tctx)
msg_client_ctx = messaging_init(tctx,
lp_messaging_path(tctx, tctx->lp_ctx),
- cluster_id(2), ev);
+ cluster_id(2),
+ lp_iconv_convenience(tctx->lp_ctx),
+ ev);
torture_assert(tctx, msg_client_ctx != NULL,
"msg_client_ctx messaging_init() failed");
diff --git a/source4/lib/policy/lex.c b/source4/lib/policy/lex.c
index 5364706fc4..c2899aa808 100644
--- a/source4/lib/policy/lex.c
+++ b/source4/lib/policy/lex.c
@@ -587,6 +587,7 @@ char *yytext;
#line 23 "lex.l"
#include "includes.h"
#include "lib/policy/parse_adm.h"
+#include "param/param.h"
void error_message (const char *format, ...);
int yyparse (void);
@@ -600,7 +601,7 @@ static bool utf16 = false;
if (fread(&v, 2, 1, yyin) < 1) \
result = YY_NULL; \
else \
- result = push_codepoint(global_smb_iconv_convenience, buf, v); \
+ result = push_codepoint(lp_iconv_convenience(global_loadparm), buf, v); \
} else { \
int c = getc(yyin); \
result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); \
diff --git a/source4/lib/registry/dir.c b/source4/lib/registry/dir.c
index 532770bcaf..2f00d2fea0 100644
--- a/source4/lib/registry/dir.c
+++ b/source4/lib/registry/dir.c
@@ -272,7 +272,7 @@ static WERROR reg_dir_get_value(TALLOC_CTX *mem_ctx,
}
static WERROR reg_dir_enum_value(TALLOC_CTX *mem_ctx,
- const struct hive_key *key, int idx,
+ struct hive_key *key, int idx,
const char **name,
uint32_t *type, DATA_BLOB *data)
{
diff --git a/source4/lib/registry/hive.c b/source4/lib/registry/hive.c
index 16534aac9c..64bee8251b 100644
--- a/source4/lib/registry/hive.c
+++ b/source4/lib/registry/hive.c
@@ -27,6 +27,7 @@
_PUBLIC_ WERROR reg_open_hive(TALLOC_CTX *parent_ctx, const char *location,
struct auth_session_info *session_info,
struct cli_credentials *credentials,
+ struct loadparm_context *lp_ctx,
struct hive_key **root)
{
int fd, num;
@@ -51,11 +52,11 @@ _PUBLIC_ WERROR reg_open_hive(TALLOC_CTX *parent_ctx, const char *location,
if (!strncmp(peek, "regf", 4)) {
close(fd);
- return reg_open_regf_file(parent_ctx, location, root);
+ return reg_open_regf_file(parent_ctx, location, lp_ctx, root);
} else if (!strncmp(peek, "TDB file", 8)) {
close(fd);
return reg_open_ldb_file(parent_ctx, location, session_info,
- credentials, root);
+ credentials, lp_ctx, root);
}
return WERR_BADFILE;
diff --git a/source4/lib/registry/hive.h b/source4/lib/registry/hive.h
index 2f783dd15d..ffb92f8e79 100644
--- a/source4/lib/registry/hive.h
+++ b/source4/lib/registry/hive.h
@@ -22,6 +22,7 @@
#define __REGISTRY_HIVE_H__
#include <talloc.h>
+#include "libcli/util/werror.h"
#include "librpc/gen_ndr/security.h"
#include "libcli/util/ntstatus.h"
@@ -81,7 +82,7 @@ struct hive_operations {
* Retrieve a registry value with a specific index.
*/
WERROR (*enum_value) (TALLOC_CTX *mem_ctx,
- const struct hive_key *key, int idx,
+ struct hive_key *key, int idx,
const char **name, uint32_t *type,
DATA_BLOB *data);
@@ -143,6 +144,7 @@ struct auth_session_info;
WERROR reg_open_hive(TALLOC_CTX *parent_ctx, const char *location,
struct auth_session_info *session_info,
struct cli_credentials *credentials,
+ struct loadparm_context *lp_ctx,
struct hive_key **root);
WERROR hive_key_get_info(TALLOC_CTX *mem_ctx, const struct hive_key *key,
const char **classname, uint32_t *num_subkeys,
@@ -182,10 +184,12 @@ WERROR hive_key_flush(struct hive_key *key);
WERROR reg_open_directory(TALLOC_CTX *parent_ctx,
const char *location, struct hive_key **key);
WERROR reg_open_regf_file(TALLOC_CTX *parent_ctx,
- const char *location, struct hive_key **key);
+ const char *location, struct loadparm_context *lp_ctx,
+ struct hive_key **key);
WERROR reg_open_ldb_file(TALLOC_CTX *parent_ctx, const char *location,
struct auth_session_info *session_info,
struct cli_credentials *credentials,
+ struct loadparm_context *lp_ctx,
struct hive_key **k);
diff --git a/source4/lib/registry/interface.c b/source4/lib/registry/interface.c
index 8f60a55ae9..b914fbab30 100644
--- a/source4/lib/registry/interface.c
+++ b/source4/lib/registry/interface.c
@@ -74,7 +74,7 @@ _PUBLIC_ WERROR reg_get_predefined_key_by_name(struct registry_context *ctx,
}
/** Get predefined key by id. */
-_PUBLIC_ WERROR reg_get_predefined_key(const struct registry_context *ctx,
+_PUBLIC_ WERROR reg_get_predefined_key(struct registry_context *ctx,
uint32_t hkey, struct registry_key **key)
{
return ctx->ops->get_predefined_key(ctx, hkey, key);
diff --git a/source4/lib/registry/ldb.c b/source4/lib/registry/ldb.c
index 0e556da9e2..c9697ddb4c 100644
--- a/source4/lib/registry/ldb.c
+++ b/source4/lib/registry/ldb.c
@@ -54,7 +54,7 @@ static void reg_ldb_unpack_value(TALLOC_CTX *mem_ctx, struct ldb_message *msg,
{
case REG_SZ:
case REG_EXPAND_SZ:
- data->length = convert_string_talloc(mem_ctx, global_smb_iconv_convenience, CH_UTF8, CH_UTF16,
+ data->length = convert_string_talloc(mem_ctx, lp_iconv_convenience(global_loadparm), CH_UTF8, CH_UTF16,
val->data, val->length,
(void **)&data->data);
break;
@@ -85,7 +85,7 @@ static struct ldb_message *reg_ldb_pack_value(struct ldb_context *ctx,
switch (type) {
case REG_SZ:
case REG_EXPAND_SZ:
- val.length = convert_string_talloc(mem_ctx, global_smb_iconv_convenience, CH_UTF16, CH_UNIX,
+ val.length = convert_string_talloc(mem_ctx, lp_iconv_convenience(global_loadparm), CH_UTF16, CH_UNIX,
(void *)data.data,
data.length,
(void **)&val.data);
@@ -249,7 +249,7 @@ static WERROR ldb_get_subkey_by_id(TALLOC_CTX *mem_ctx,
return WERR_OK;
}
-static WERROR ldb_get_value_by_id(TALLOC_CTX *mem_ctx, const struct hive_key *k,
+static WERROR ldb_get_value_by_id(TALLOC_CTX *mem_ctx, struct hive_key *k,
int idx, const char **name,
uint32_t *data_type, DATA_BLOB *data)
{
@@ -337,6 +337,7 @@ static WERROR ldb_open_key(TALLOC_CTX *mem_ctx, const struct hive_key *h,
WERROR reg_open_ldb_file(TALLOC_CTX *parent_ctx, const char *location,
struct auth_session_info *session_info,
struct cli_credentials *credentials,
+ struct loadparm_context *lp_ctx,
struct hive_key **k)
{
struct ldb_key_data *kd;
@@ -345,7 +346,7 @@ WERROR reg_open_ldb_file(TALLOC_CTX *parent_ctx, const char *location,
if (location == NULL)
return WERR_INVALID_PARAM;
- wrap = ldb_wrap_connect(parent_ctx, global_loadparm,
+ wrap = ldb_wrap_connect(parent_ctx, lp_ctx,
location, session_info, credentials, 0, NULL);
if (wrap == NULL) {
diff --git a/source4/lib/registry/local.c b/source4/lib/registry/local.c
index b54f0cf30a..1ed4f0262e 100644
--- a/source4/lib/registry/local.c
+++ b/source4/lib/registry/local.c
@@ -126,7 +126,7 @@ static WERROR local_open_key(TALLOC_CTX *mem_ctx,
return WERR_OK;
}
-WERROR local_get_predefined_key(const struct registry_context *ctx,
+WERROR local_get_predefined_key(struct registry_context *ctx,
uint32_t key_id, struct registry_key **key)
{
struct registry_local *rctx = talloc_get_type(ctx,
@@ -168,7 +168,7 @@ static WERROR local_create_key(TALLOC_CTX *mem_ctx,
struct security_descriptor *security,
struct registry_key **key)
{
- const struct local_key *local_parent;
+ struct local_key *local_parent;
struct hive_key *hivekey;
const char **elements;
int i;
@@ -177,11 +177,11 @@ static WERROR local_create_key(TALLOC_CTX *mem_ctx,
last_part = strrchr(name, '\\');
if (last_part == NULL) {
last_part = name;
- local_parent = (const struct local_key *)parent_key;
+ local_parent = (struct local_key *)parent_key;
} else {
W_ERROR_NOT_OK_RETURN(reg_open_key(mem_ctx, parent_key,
talloc_strndup(mem_ctx, name, last_part-name),
- &local_parent));
+ (struct registry_key **)&local_parent));
last_part++;
}
@@ -321,7 +321,7 @@ WERROR reg_mount_hive(struct registry_context *rctx,
mp->path.predefined_key = key_id;
mp->prev = mp->next = NULL;
mp->key = hive_key;
- if (elements != NULL) {
+ if (elements != NULL && str_list_length(elements) != 0) {
mp->path.elements = talloc_array(mp, const char *,
str_list_length(elements));
for (i = 0; elements[i] != NULL; i++) {
diff --git a/source4/lib/registry/patchfile_preg.c b/source4/lib/registry/patchfile_preg.c
index 6af239fc21..9cc9a5dec2 100644
--- a/source4/lib/registry/patchfile_preg.c
+++ b/source4/lib/registry/patchfile_preg.c
@@ -23,7 +23,7 @@
#include "lib/registry/registry.h"
#include "lib/registry/patchfile.h"
#include "system/filesys.h"
-#include "pstring.h"
+#include "param/param.h"
struct preg_data {
int fd;
@@ -36,20 +36,18 @@ static WERROR preg_read_utf16(int fd, char *c)
if (read(fd, &v, 2) < 2) {
return WERR_GENERAL_FAILURE;
}
- push_codepoint(global_smb_iconv_convenience, c, v);
+ push_codepoint(lp_iconv_convenience(global_loadparm), c, v);
return WERR_OK;
}
/* FIXME These functions need to be implemented */
static WERROR reg_preg_diff_add_key(void *_data, const char *key_name)
{
- struct preg_data *data = (struct preg_data *)_data;
return WERR_OK;
}
static WERROR reg_preg_diff_del_key(void *_data, const char *key_name)
{
- struct preg_data *data = (struct preg_data *)_data;
return WERR_OK;
}
@@ -57,20 +55,17 @@ static WERROR reg_preg_diff_set_value(void *_data, const char *key_name,
const char *value_name,
uint32_t value_type, DATA_BLOB value_data)
{
- struct preg_data *data = (struct preg_data *)_data;
return WERR_OK;
}
static WERROR reg_preg_diff_del_value(void *_data, const char *key_name,
const char *value_name)
{
- struct preg_data *data = (struct preg_data *)_data;
return WERR_OK;
}
static WERROR reg_preg_diff_del_all_values(void *_data, const char *key_name)
{
- struct preg_data *data = (struct preg_data *)_data;
return WERR_OK;
}
@@ -135,22 +130,29 @@ _PUBLIC_ WERROR reg_preg_diff_load(int fd,
char hdr[4];
uint32_t version;
} preg_header;
- pstring buf;
- char *buf_ptr = buf;
+ char *buf;
+ size_t buf_size = 1024;
+ char *buf_ptr;
TALLOC_CTX *mem_ctx = talloc_init("reg_preg_diff_load");
+ WERROR ret = WERR_OK;
+ DATA_BLOB data = {NULL, 0};
+ char *key = NULL;
+ char *value_name = NULL;
+ buf = talloc_array(mem_ctx, char, buf_size);
+ buf_ptr = buf;
/* Read first 8 bytes (the header) */
if (read(fd, &preg_header, 8) != 8) {
DEBUG(0, ("Could not read PReg file: %s\n",
strerror(errno)));
- close(fd);
- return WERR_GENERAL_FAILURE;
+ ret = WERR_GENERAL_FAILURE;
+ goto cleanup;
}
if (strncmp(preg_header.hdr, "PReg", 4) != 0) {
DEBUG(0, ("This file is not a valid preg registry file\n"));
- close(fd);
- return WERR_GENERAL_FAILURE;
+ ret = WERR_GENERAL_FAILURE;
+ goto cleanup;
}
if (preg_header.version > 1) {
DEBUG(0, ("Warning: file format version is higher than expected.\n"));
@@ -158,23 +160,21 @@ _PUBLIC_ WERROR reg_preg_diff_load(int fd,
/* Read the entries */
while(1) {
- char *key, *value_name;
uint32_t value_type, length;
- DATA_BLOB data;
if (!W_ERROR_IS_OK(preg_read_utf16(fd, buf_ptr))) {
break;
}
if (*buf_ptr != '[') {
DEBUG(0, ("Error in PReg file.\n"));
- close(fd);
- return WERR_GENERAL_FAILURE;
+ ret = WERR_GENERAL_FAILURE;
+ goto cleanup;
}
/* Get the path */
buf_ptr = buf;
while (W_ERROR_IS_OK(preg_read_utf16(fd, buf_ptr)) &&
- *buf_ptr != ';' && buf_ptr-buf < sizeof(buf)) {
+ *buf_ptr != ';' && buf_ptr-buf < buf_size) {
buf_ptr++;
}
key = talloc_asprintf(mem_ctx, "\\%s", buf);
@@ -182,7 +182,7 @@ _PUBLIC_ WERROR reg_preg_diff_load(int fd,
/* Get the name */
buf_ptr = buf;
while (W_ERROR_IS_OK(preg_read_utf16(fd, buf_ptr)) &&
- *buf_ptr != ';' && buf_ptr-buf < sizeof(buf)) {
+ *buf_ptr != ';' && buf_ptr-buf < buf_size) {
buf_ptr++;
}
value_name = talloc_strdup(mem_ctx, buf);
@@ -190,45 +190,45 @@ _PUBLIC_ WERROR reg_preg_diff_load(int fd,
/* Get the type */
if (read(fd, &value_type, 4) < 4) {
DEBUG(0, ("Error while reading PReg\n"));
- close(fd);
- return WERR_GENERAL_FAILURE;
+ ret = WERR_GENERAL_FAILURE;
+ goto cleanup;
}
/* Read past delimiter */
buf_ptr = buf;
if (!(W_ERROR_IS_OK(preg_read_utf16(fd, buf_ptr)) &&
- *buf_ptr == ';') && buf_ptr-buf < sizeof(buf)) {
+ *buf_ptr == ';') && buf_ptr-buf < buf_size) {
DEBUG(0, ("Error in PReg file.\n"));
- close(fd);
- return WERR_GENERAL_FAILURE;
+ ret = WERR_GENERAL_FAILURE;
+ goto cleanup;
}
/* Get data length */
if (read(fd, &length, 4) < 4) {
DEBUG(0, ("Error while reading PReg\n"));
- close(fd);
- return WERR_GENERAL_FAILURE;
+ ret = WERR_GENERAL_FAILURE;
+ goto cleanup;
}
/* Read past delimiter */
buf_ptr = buf;
if (!(W_ERROR_IS_OK(preg_read_utf16(fd, buf_ptr)) &&
- *buf_ptr == ';') && buf_ptr-buf < sizeof(buf)) {
+ *buf_ptr == ';') && buf_ptr-buf < buf_size) {
DEBUG(0, ("Error in PReg file.\n"));
- close(fd);
- return WERR_GENERAL_FAILURE;
+ ret = WERR_GENERAL_FAILURE;
+ goto cleanup;
}
/* Get the data */
buf_ptr = buf;
- if (length < sizeof(buf) &&
+ if (length < buf_size &&
read(fd, buf_ptr, length) != length) {
DEBUG(0, ("Error while reading PReg\n"));
- close(fd);
- return WERR_GENERAL_FAILURE;
+ ret = WERR_GENERAL_FAILURE;
+ goto cleanup;
}
data = data_blob_talloc(mem_ctx, buf, length);
/* Check if delimiter is in place (whine if it isn't) */
buf_ptr = buf;
if (!(W_ERROR_IS_OK(preg_read_utf16(fd, buf_ptr)) &&
- *buf_ptr == ']') && buf_ptr-buf < sizeof(buf)) {
+ *buf_ptr == ']') && buf_ptr-buf < buf_size) {
DEBUG(0, ("Warning: Missing ']' in PReg file, expected ']', got '%c' 0x%x.\n",
*buf_ptr, *buf_ptr));
}
@@ -277,10 +277,12 @@ _PUBLIC_ WERROR reg_preg_diff_load(int fd,
callbacks->set_value(callback_data, key, value_name,
value_type, data);
}
- talloc_free(key);
- talloc_free(value_name);
- talloc_free(data.data);
}
+cleanup:
close(fd);
- return WERR_OK;
+ talloc_free(data.data);
+ talloc_free(key);
+ talloc_free(value_name);
+ talloc_free(buf);
+ return ret;
}
diff --git a/source4/lib/registry/regf.c b/source4/lib/registry/regf.c
index 3ae299b3ef..28bd0ad461 100644
--- a/source4/lib/registry/regf.c
+++ b/source4/lib/registry/regf.c
@@ -24,6 +24,7 @@
#include "lib/registry/tdr_regf.h"
#include "librpc/gen_ndr/ndr_security.h"
#include "librpc/gen_ndr/winreg.h"
+#include "param/param.h"
static struct hive_operations reg_backend_regf;
@@ -47,6 +48,7 @@ struct regf_data {
int fd;
struct hbin_block **hbins;
struct regf_hdr *header;
+ struct smb_iconv_convenience *iconv_convenience;
};
static WERROR regf_save_hbin(struct regf_data *data);
@@ -131,21 +133,22 @@ static DATA_BLOB hbin_get(const struct regf_data *data, uint32_t offset)
static bool hbin_get_tdr(struct regf_data *regf, uint32_t offset,
TALLOC_CTX *ctx, tdr_pull_fn_t pull_fn, void *p)
{
- struct tdr_pull pull;
+ struct tdr_pull *pull = tdr_pull_init(regf, regf->iconv_convenience);
- ZERO_STRUCT(pull);
-
- pull.data = hbin_get(regf, offset);
- if (!pull.data.data) {
+ pull->data = hbin_get(regf, offset);
+ if (!pull->data.data) {
DEBUG(1, ("Unable to get data at 0x%04x\n", offset));
+ talloc_free(pull);
return false;
}
- if (NT_STATUS_IS_ERR(pull_fn(&pull, ctx, p))) {
+ if (NT_STATUS_IS_ERR(pull_fn(pull, ctx, p))) {
DEBUG(1, ("Error parsing record at 0x%04x using tdr\n",
offset));
+ talloc_free(pull);
return false;
}
+ talloc_free(pull);
return true;
}
@@ -263,7 +266,7 @@ static uint32_t hbin_store (struct regf_data *data, DATA_BLOB blob)
static uint32_t hbin_store_tdr(struct regf_data *data,
tdr_push_fn_t push_fn, void *p)
{
- struct tdr_push *push = talloc_zero(data, struct tdr_push);
+ struct tdr_push *push = tdr_push_init(data, data->iconv_convenience);
uint32_t ret;
if (NT_STATUS_IS_ERR(push_fn(push, p))) {
@@ -390,7 +393,7 @@ static uint32_t hbin_store_tdr_resize(struct regf_data *regf,
tdr_push_fn_t push_fn,
uint32_t orig_offset, void *p)
{
- struct tdr_push *push = talloc_zero(regf, struct tdr_push);
+ struct tdr_push *push = tdr_push_init(regf, regf->iconv_convenience);
uint32_t ret;
if (NT_STATUS_IS_ERR(push_fn(push, p))) {
@@ -485,7 +488,7 @@ static struct regf_key_data *regf_get_key(TALLOC_CTX *ctx,
}
-static WERROR regf_get_value(TALLOC_CTX *ctx, const struct hive_key *key,
+static WERROR regf_get_value(TALLOC_CTX *ctx, struct hive_key *key,
int idx, const char **name,
uint32_t *data_type, DATA_BLOB *data)
{
@@ -592,16 +595,17 @@ static WERROR regf_get_subkey_by_index(TALLOC_CTX *ctx,
if (!strncmp((char *)data.data, "li", 2)) {
struct li_block li;
- struct tdr_pull pull;
+ struct tdr_pull *pull = tdr_pull_init(private_data->hive, private_data->hive->iconv_convenience);
DEBUG(10, ("Subkeys in LI list\n"));
- ZERO_STRUCT(pull);
- pull.data = data;
+ pull->data = data;
- if (NT_STATUS_IS_ERR(tdr_pull_li_block(&pull, nk, &li))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_li_block(pull, nk, &li))) {
DEBUG(0, ("Error parsing LI list\n"));
+ talloc_free(pull);
return WERR_GENERAL_FAILURE;
}
+ talloc_free(pull);
SMB_ASSERT(!strncmp(li.header, "li", 2));
if (li.key_count != nk->num_subkeys) {
@@ -612,16 +616,17 @@ static WERROR regf_get_subkey_by_index(TALLOC_CTX *ctx,
} else if (!strncmp((char *)data.data, "lf", 2)) {
struct lf_block lf;
- struct tdr_pull pull;
+ struct tdr_pull *pull = tdr_pull_init(private_data->hive, private_data->hive->iconv_convenience);
DEBUG(10, ("Subkeys in LF list\n"));
- ZERO_STRUCT(pull);
- pull.data = data;
+ pull->data = data;
- if (NT_STATUS_IS_ERR(tdr_pull_lf_block(&pull, nk, &lf))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_lf_block(pull, nk, &lf))) {
DEBUG(0, ("Error parsing LF list\n"));
+ talloc_free(pull);
return WERR_GENERAL_FAILURE;
}
+ talloc_free(pull);
SMB_ASSERT(!strncmp(lf.header, "lf", 2));
if (lf.key_count != nk->num_subkeys) {
@@ -632,16 +637,17 @@ static WERROR regf_get_subkey_by_index(TALLOC_CTX *ctx,
key_off = lf.hr[idx].nk_offset;
} else if (!strncmp((char *)data.data, "lh", 2)) {
struct lh_block lh;
- struct tdr_pull pull;
+ struct tdr_pull *pull = tdr_pull_init(private_data->hive, private_data->hive->iconv_convenience);
DEBUG(10, ("Subkeys in LH list\n"));
- ZERO_STRUCT(pull);
- pull.data = data;
+ pull->data = data;
- if (NT_STATUS_IS_ERR(tdr_pull_lh_block(&pull, nk, &lh))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_lh_block(pull, nk, &lh))) {
DEBUG(0, ("Error parsing LH list\n"));
+ talloc_free(pull);
return WERR_GENERAL_FAILURE;
}
+ talloc_free(pull);
SMB_ASSERT(!strncmp(lh.header, "lh", 2));
if (lh.key_count != nk->num_subkeys) {
@@ -651,16 +657,16 @@ static WERROR regf_get_subkey_by_index(TALLOC_CTX *ctx,
key_off = lh.hr[idx].nk_offset;
} else if (!strncmp((char *)data.data, "ri", 2)) {
struct ri_block ri;
- struct tdr_pull pull;
+ struct tdr_pull *pull = tdr_pull_init(ctx, private_data->hive->iconv_convenience);
uint16_t i;
uint16_t sublist_count = 0;
DEBUG(10, ("Subkeys in RI list\n"));
- ZERO_STRUCT(pull);
- pull.data = data;
+ pull->data = data;
- if (NT_STATUS_IS_ERR(tdr_pull_ri_block(&pull, nk, &ri))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_ri_block(pull, nk, &ri))) {
DEBUG(0, ("Error parsing RI list\n"));
+ talloc_free(pull);
return WERR_GENERAL_FAILURE;
}
SMB_ASSERT(!strncmp(ri.header, "ri", 2));
@@ -672,21 +678,22 @@ static WERROR regf_get_subkey_by_index(TALLOC_CTX *ctx,
list_data = hbin_get(private_data->hive, ri.offset[i]);
if (!list_data.data) {
DEBUG(0, ("Error getting RI list."));
+ talloc_free(pull);
return WERR_GENERAL_FAILURE;
}
- ZERO_STRUCT(pull);
- pull.data = list_data;
+ pull->data = list_data;
if (!strncmp((char *)list_data.data, "li", 2)) {
struct li_block li;
DEBUG(10, ("Subkeys in RI->LI list\n"));
- if (NT_STATUS_IS_ERR(tdr_pull_li_block(&pull,
+ if (NT_STATUS_IS_ERR(tdr_pull_li_block(pull,
nk,
&li))) {
DEBUG(0, ("Error parsing LI list from RI\n"));
+ talloc_free(pull);
return WERR_GENERAL_FAILURE;
}
SMB_ASSERT(!strncmp(li.header, "li", 2));
@@ -704,10 +711,11 @@ static WERROR regf_get_subkey_by_index(TALLOC_CTX *ctx,
DEBUG(10, ("Subkeys in RI->LH list\n"));
- if (NT_STATUS_IS_ERR(tdr_pull_lh_block(&pull,
+ if (NT_STATUS_IS_ERR(tdr_pull_lh_block(pull,
nk,
&lh))) {
DEBUG(0, ("Error parsing LH list from RI\n"));
+ talloc_free(pull);
return WERR_GENERAL_FAILURE;
}
SMB_ASSERT(!strncmp(lh.header, "lh", 2));
@@ -722,11 +730,14 @@ static WERROR regf_get_subkey_by_index(TALLOC_CTX *ctx,
break;
} else {
DEBUG(0,("Unknown sublist in ri block\n"));
+ talloc_free(pull);
return WERR_GENERAL_FAILURE;
}
}
+ talloc_free(pull);
+
if (idx > sublist_count) {
return WERR_NO_MORE_ITEMS;
@@ -769,7 +780,7 @@ static WERROR regf_match_subkey_by_name(TALLOC_CTX *ctx,
{
DATA_BLOB subkey_data;
struct nk_block subkey;
- struct tdr_pull pull;
+ struct tdr_pull *pull;
const struct regf_key_data *private_data =
(const struct regf_key_data *)key;
@@ -779,13 +790,16 @@ static WERROR regf_match_subkey_by_name(TALLOC_CTX *ctx,
return WERR_GENERAL_FAILURE;
}
- ZERO_STRUCT(pull);
- pull.data = subkey_data;
+ pull = tdr_pull_init(ctx, private_data->hive->iconv_convenience);
+
+ pull->data = subkey_data;
- if (NT_STATUS_IS_ERR(tdr_pull_nk_block(&pull, ctx, &subkey))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_nk_block(pull, ctx, &subkey))) {
DEBUG(0, ("Error parsing NK structure.\n"));
+ talloc_free(pull);
return WERR_GENERAL_FAILURE;
}
+ talloc_free(pull);
if (strncmp(subkey.header, "nk", 2)) {
DEBUG(0, ("Not an NK structure.\n"));
@@ -819,17 +833,18 @@ static WERROR regf_get_subkey_by_name(TALLOC_CTX *ctx,
if (!strncmp((char *)data.data, "li", 2)) {
struct li_block li;
- struct tdr_pull pull;
+ struct tdr_pull *pull = tdr_pull_init(ctx, private_data->hive->iconv_convenience);
uint16_t i;
DEBUG(10, ("Subkeys in LI list\n"));
- ZERO_STRUCT(pull);
- pull.data = data;
+ pull->data = data;
- if (NT_STATUS_IS_ERR(tdr_pull_li_block(&pull, nk, &li))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_li_block(pull, nk, &li))) {
DEBUG(0, ("Error parsing LI list\n"));
+ talloc_free(pull);
return WERR_GENERAL_FAILURE;
}
+ talloc_free(pull);
SMB_ASSERT(!strncmp(li.header, "li", 2));
if (li.key_count != nk->num_subkeys) {
@@ -849,17 +864,18 @@ static WERROR regf_get_subkey_by_name(TALLOC_CTX *ctx,
return WERR_NOT_FOUND;
} else if (!strncmp((char *)data.data, "lf", 2)) {
struct lf_block lf;
- struct tdr_pull pull;
+ struct tdr_pull *pull = tdr_pull_init(ctx, private_data->hive->iconv_convenience);
uint16_t i;
DEBUG(10, ("Subkeys in LF list\n"));
- ZERO_STRUCT(pull);
- pull.data = data;
+ pull->data = data;
- if (NT_STATUS_IS_ERR(tdr_pull_lf_block(&pull, nk, &lf))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_lf_block(pull, nk, &lf))) {
DEBUG(0, ("Error parsing LF list\n"));
+ talloc_free(pull);
return WERR_GENERAL_FAILURE;
}
+ talloc_free(pull);
SMB_ASSERT(!strncmp(lf.header, "lf", 2));
if (lf.key_count != nk->num_subkeys) {
@@ -883,18 +899,19 @@ static WERROR regf_get_subkey_by_name(TALLOC_CTX *ctx,
return WERR_NOT_FOUND;
} else if (!strncmp((char *)data.data, "lh", 2)) {
struct lh_block lh;
- struct tdr_pull pull;
+ struct tdr_pull *pull = tdr_pull_init(ctx, private_data->hive->iconv_convenience);
uint16_t i;
uint32_t hash;
DEBUG(10, ("Subkeys in LH list\n"));
- ZERO_STRUCT(pull);
- pull.data = data;
+ pull->data = data;
- if (NT_STATUS_IS_ERR(tdr_pull_lh_block(&pull, nk, &lh))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_lh_block(pull, nk, &lh))) {
DEBUG(0, ("Error parsing LH list\n"));
+ talloc_free(pull);
return WERR_GENERAL_FAILURE;
}
+ talloc_free(pull);
SMB_ASSERT(!strncmp(lh.header, "lh", 2));
if (lh.key_count != nk->num_subkeys) {
@@ -919,15 +936,15 @@ static WERROR regf_get_subkey_by_name(TALLOC_CTX *ctx,
return WERR_NOT_FOUND;
} else if (!strncmp((char *)data.data, "ri", 2)) {
struct ri_block ri;
- struct tdr_pull pull;
+ struct tdr_pull *pull = tdr_pull_init(ctx, private_data->hive->iconv_convenience);
uint16_t i, j;
DEBUG(10, ("Subkeys in RI list\n"));
- ZERO_STRUCT(pull);
- pull.data = data;
+ pull->data = data;
- if (NT_STATUS_IS_ERR(tdr_pull_ri_block(&pull, nk, &ri))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_ri_block(pull, nk, &ri))) {
DEBUG(0, ("Error parsing RI list\n"));
+ talloc_free(pull);
return WERR_GENERAL_FAILURE;
}
SMB_ASSERT(!strncmp(ri.header, "ri", 2));
@@ -939,19 +956,20 @@ static WERROR regf_get_subkey_by_name(TALLOC_CTX *ctx,
list_data = hbin_get(private_data->hive, ri.offset[i]);
if (list_data.data == NULL) {
DEBUG(0, ("Error getting RI list."));
+ talloc_free(pull);
return WERR_GENERAL_FAILURE;
}
- ZERO_STRUCT(pull);
- pull.data = list_data;
+ pull->data = list_data;
if (!strncmp((char *)list_data.data, "li", 2)) {
struct li_block li;
- if (NT_STATUS_IS_ERR(tdr_pull_li_block(&pull,
+ if (NT_STATUS_IS_ERR(tdr_pull_li_block(pull,
nk,
&li))) {
DEBUG(0, ("Error parsing LI list from RI\n"));
+ talloc_free(pull);
return WERR_GENERAL_FAILURE;
}
SMB_ASSERT(!strncmp(li.header, "li", 2));
@@ -968,10 +986,11 @@ static WERROR regf_get_subkey_by_name(TALLOC_CTX *ctx,
struct lh_block lh;
uint32_t hash;
- if (NT_STATUS_IS_ERR(tdr_pull_lh_block(&pull,
+ if (NT_STATUS_IS_ERR(tdr_pull_lh_block(pull,
nk,
&lh))) {
DEBUG(0, ("Error parsing LH list from RI\n"));
+ talloc_free(pull);
return WERR_GENERAL_FAILURE;
}
SMB_ASSERT(!strncmp(lh.header, "lh", 2));
@@ -992,6 +1011,7 @@ static WERROR regf_get_subkey_by_name(TALLOC_CTX *ctx,
if (key_off)
break;
}
+ talloc_free(pull);
if (!key_off)
return WERR_NOT_FOUND;
} else {
@@ -1258,16 +1278,17 @@ static WERROR regf_sl_add_entry(struct regf_data *regf, uint32_t list_offset,
}
if (!strncmp((char *)data.data, "li", 2)) {
- struct tdr_pull pull;
+ struct tdr_pull *pull = tdr_pull_init(regf, regf->iconv_convenience);
struct li_block li;
- ZERO_STRUCT(pull);
- pull.data = data;
+ pull->data = data;
- if (NT_STATUS_IS_ERR(tdr_pull_li_block(&pull, regf, &li))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_li_block(pull, regf, &li))) {
DEBUG(0, ("Error parsing LI list\n"));
+ talloc_free(pull);
return WERR_BADFILE;
}
+ talloc_free(pull);
if (strncmp(li.header, "li", 2) != 0) {
abort();
@@ -1286,16 +1307,17 @@ static WERROR regf_sl_add_entry(struct regf_data *regf, uint32_t list_offset,
talloc_free(li.nk_offset);
} else if (!strncmp((char *)data.data, "lf", 2)) {
- struct tdr_pull pull;
+ struct tdr_pull *pull = tdr_pull_init(regf, regf->iconv_convenience);
struct lf_block lf;
- ZERO_STRUCT(pull);
- pull.data = data;
+ pull->data = data;
- if (NT_STATUS_IS_ERR(tdr_pull_lf_block(&pull, regf, &lf))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_lf_block(pull, regf, &lf))) {
DEBUG(0, ("Error parsing LF list\n"));
+ talloc_free(pull);
return WERR_BADFILE;
}
+ talloc_free(pull);
SMB_ASSERT(!strncmp(lf.header, "lf", 2));
lf.hr = talloc_realloc(regf, lf.hr, struct hash_record,
@@ -1311,16 +1333,17 @@ static WERROR regf_sl_add_entry(struct regf_data *regf, uint32_t list_offset,
talloc_free(lf.hr);
} else if (!strncmp((char *)data.data, "lh", 2)) {
- struct tdr_pull pull;
+ struct tdr_pull *pull = tdr_pull_init(regf, regf->iconv_convenience);
struct lh_block lh;
- ZERO_STRUCT(pull);
- pull.data = data;
+ pull->data = data;
- if (NT_STATUS_IS_ERR(tdr_pull_lh_block(&pull, regf, &lh))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_lh_block(pull, regf, &lh))) {
DEBUG(0, ("Error parsing LH list\n"));
+ talloc_free(pull);
return WERR_BADFILE;
}
+ talloc_free(pull);
SMB_ASSERT(!strncmp(lh.header, "lh", 2));
lh.hr = talloc_realloc(regf, lh.hr, struct lh_hash,
@@ -1359,19 +1382,20 @@ static WERROR regf_sl_del_entry(struct regf_data *regf, uint32_t list_offset,
if (strncmp((char *)data.data, "li", 2) == 0) {
struct li_block li;
- struct tdr_pull pull;
+ struct tdr_pull *pull = tdr_pull_init(regf, regf->iconv_convenience);
uint16_t i;
bool found_offset = false;
DEBUG(10, ("Subkeys in LI list\n"));
- ZERO_STRUCT(pull);
- pull.data = data;
+ pull->data = data;
- if (NT_STATUS_IS_ERR(tdr_pull_li_block(&pull, regf, &li))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_li_block(pull, regf, &li))) {
DEBUG(0, ("Error parsing LI list\n"));
+ talloc_free(pull);
return WERR_BADFILE;
}
+ talloc_free(pull);
SMB_ASSERT(!strncmp(li.header, "li", 2));
@@ -1402,19 +1426,20 @@ static WERROR regf_sl_del_entry(struct regf_data *regf, uint32_t list_offset,
list_offset, &li);
} else if (strncmp((char *)data.data, "lf", 2) == 0) {
struct lf_block lf;
- struct tdr_pull pull;
+ struct tdr_pull *pull = tdr_pull_init(regf, regf->iconv_convenience);
uint16_t i;
bool found_offset = false;
DEBUG(10, ("Subkeys in LF list\n"));
- ZERO_STRUCT(pull);
- pull.data = data;
+ pull->data = data;
- if (NT_STATUS_IS_ERR(tdr_pull_lf_block(&pull, regf, &lf))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_lf_block(pull, regf, &lf))) {
DEBUG(0, ("Error parsing LF list\n"));
+ talloc_free(pull);
return WERR_BADFILE;
}
+ talloc_free(pull);
SMB_ASSERT(!strncmp(lf.header, "lf", 2));
@@ -1447,19 +1472,20 @@ static WERROR regf_sl_del_entry(struct regf_data *regf, uint32_t list_offset,
list_offset, &lf);
} else if (strncmp((char *)data.data, "lh", 2) == 0) {
struct lh_block lh;
- struct tdr_pull pull;
+ struct tdr_pull *pull = tdr_pull_init(regf, regf->iconv_convenience);
uint16_t i;
bool found_offset = false;
DEBUG(10, ("Subkeys in LH list\n"));
- ZERO_STRUCT(pull);
- pull.data = data;
+ pull->data = data;
- if (NT_STATUS_IS_ERR(tdr_pull_lh_block(&pull, regf, &lh))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_lh_block(pull, regf, &lh))) {
DEBUG(0, ("Error parsing LF list\n"));
+ talloc_free(pull);
return WERR_BADFILE;
}
+ talloc_free(pull);
SMB_ASSERT(!strncmp(lh.header, "lh", 2));
@@ -1503,8 +1529,7 @@ static WERROR regf_sl_del_entry(struct regf_data *regf, uint32_t list_offset,
static WERROR regf_del_value (struct hive_key *key, const char *name)
{
- const struct regf_key_data *private_data =
- (const struct regf_key_data *)key;
+ struct regf_key_data *private_data = (struct regf_key_data *)key;
struct regf_data *regf = private_data->hive;
struct nk_block *nk = private_data->nk;
struct vk_block vk;
@@ -1677,8 +1702,7 @@ static WERROR regf_add_key(TALLOC_CTX *ctx, const struct hive_key *parent,
static WERROR regf_set_value(struct hive_key *key, const char *name,
uint32_t type, const DATA_BLOB data)
{
- const struct regf_key_data *private_data =
- (const struct regf_key_data *)key;
+ struct regf_key_data *private_data = (struct regf_key_data *)key;
struct regf_data *regf = private_data->hive;
struct nk_block *nk = private_data->nk;
struct vk_block vk;
@@ -1788,7 +1812,7 @@ static WERROR regf_set_value(struct hive_key *key, const char *name,
static WERROR regf_save_hbin(struct regf_data *regf)
{
- struct tdr_push *push = talloc_zero(regf, struct tdr_push);
+ struct tdr_push *push = tdr_push_init(regf, regf->iconv_convenience);
int i;
W_ERROR_HAVE_NO_MEMORY(push);
@@ -1806,7 +1830,7 @@ static WERROR regf_save_hbin(struct regf_data *regf)
regf->header->chksum = regf_hdr_checksum(push->data.data);
talloc_free(push);
- if (NT_STATUS_IS_ERR(tdr_push_to_fd(regf->fd,
+ if (NT_STATUS_IS_ERR(tdr_push_to_fd(regf->fd, regf->iconv_convenience,
(tdr_push_fn_t)tdr_push_regf_hdr,
regf->header))) {
DEBUG(0, ("Error writing registry file header\n"));
@@ -1819,7 +1843,7 @@ static WERROR regf_save_hbin(struct regf_data *regf)
}
for (i = 0; regf->hbins[i]; i++) {
- if (NT_STATUS_IS_ERR(tdr_push_to_fd(regf->fd,
+ if (NT_STATUS_IS_ERR(tdr_push_to_fd(regf->fd, regf->iconv_convenience,
(tdr_push_fn_t)tdr_push_hbin_block,
regf->hbins[i]))) {
DEBUG(0, ("Error writing HBIN block\n"));
@@ -1835,13 +1859,14 @@ WERROR reg_create_regf_file(TALLOC_CTX *parent_ctx, const char *location,
{
struct regf_data *regf;
struct regf_hdr *regf_hdr;
- struct tdr_pull pull;
int i;
struct nk_block nk;
WERROR error;
regf = (struct regf_data *)talloc_zero(NULL, struct regf_data);
+ regf->iconv_convenience = lp_iconv_convenience(global_loadparm);
+
W_ERROR_HAVE_NO_MEMORY(regf);
DEBUG(5, ("Attempting to create registry file\n"));
@@ -1870,8 +1895,6 @@ WERROR reg_create_regf_file(TALLOC_CTX *parent_ctx, const char *location,
regf->header = regf_hdr;
- pull.offset = 0x1000;
-
i = 0;
/* Create all hbin blocks */
regf->hbins = talloc_array(regf, struct hbin_block *, 1);
@@ -1917,16 +1940,18 @@ WERROR reg_create_regf_file(TALLOC_CTX *parent_ctx, const char *location,
return WERR_OK;
}
-WERROR reg_open_regf_file(TALLOC_CTX *parent_ctx,
- const char *location, struct hive_key **key)
+WERROR reg_open_regf_file(TALLOC_CTX *parent_ctx, const char *location,
+ struct loadparm_context *lp_ctx, struct hive_key **key)
{
struct regf_data *regf;
struct regf_hdr *regf_hdr;
- struct tdr_pull pull;
+ struct tdr_pull *pull;
int i;
regf = (struct regf_data *)talloc_zero(NULL, struct regf_data);
+ regf->iconv_convenience = lp_iconv_convenience(lp_ctx);
+
W_ERROR_HAVE_NO_MEMORY(regf);
DEBUG(5, ("Attempting to load registry file\n"));
@@ -1941,10 +1966,11 @@ WERROR reg_open_regf_file(TALLOC_CTX *parent_ctx,
return WERR_GENERAL_FAILURE;
}
- ZERO_STRUCT(pull);
- pull.data.data = (uint8_t*)fd_load(regf->fd, &pull.data.length, regf);
+ pull = tdr_pull_init(regf, regf->iconv_convenience);
+
+ pull->data.data = (uint8_t*)fd_load(regf->fd, &pull->data.length, regf);
- if (pull.data.data == NULL) {
+ if (pull->data.data == NULL) {
DEBUG(0, ("Error reading data\n"));
talloc_free(regf);
return WERR_GENERAL_FAILURE;
@@ -1953,7 +1979,7 @@ WERROR reg_open_regf_file(TALLOC_CTX *parent_ctx,
regf_hdr = talloc(regf, struct regf_hdr);
W_ERROR_HAVE_NO_MEMORY(regf_hdr);
- if (NT_STATUS_IS_ERR(tdr_pull_regf_hdr(&pull, regf_hdr, regf_hdr))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_regf_hdr(pull, regf_hdr, regf_hdr))) {
talloc_free(regf);
return WERR_GENERAL_FAILURE;
}
@@ -1968,15 +1994,15 @@ WERROR reg_open_regf_file(TALLOC_CTX *parent_ctx,
}
/* Validate the header ... */
- if (regf_hdr_checksum(pull.data.data) != regf_hdr->chksum) {
+ if (regf_hdr_checksum(pull->data.data) != regf_hdr->chksum) {
DEBUG(0, ("Registry file checksum error: %s: %d,%d\n",
location, regf_hdr->chksum,
- regf_hdr_checksum(pull.data.data)));
+ regf_hdr_checksum(pull->data.data)));
talloc_free(regf);
return WERR_GENERAL_FAILURE;
}
- pull.offset = 0x1000;
+ pull->offset = 0x1000;
i = 0;
/* Read in all hbin blocks */
@@ -1985,14 +2011,14 @@ WERROR reg_open_regf_file(TALLOC_CTX *parent_ctx,
regf->hbins[0] = NULL;
- while (pull.offset < pull.data.length &&
- pull.offset <= regf->header->last_block) {
+ while (pull->offset < pull->data.length &&
+ pull->offset <= regf->header->last_block) {
struct hbin_block *hbin = talloc(regf->hbins,
struct hbin_block);
W_ERROR_HAVE_NO_MEMORY(hbin);
- if (NT_STATUS_IS_ERR(tdr_pull_hbin_block(&pull, hbin, hbin))) {
+ if (NT_STATUS_IS_ERR(tdr_pull_hbin_block(pull, hbin, hbin))) {
DEBUG(0, ("[%d] Error parsing HBIN block\n", i));
talloc_free(regf);
return WERR_FOOBAR;
@@ -2012,6 +2038,8 @@ WERROR reg_open_regf_file(TALLOC_CTX *parent_ctx,
regf->hbins[i] = NULL;
}
+ talloc_free(pull);
+
DEBUG(1, ("%d HBIN blocks read\n", i));
*key = (struct hive_key *)regf_get_key(parent_ctx, regf,
diff --git a/source4/lib/registry/registry.h b/source4/lib/registry/registry.h
index edd6c6713f..a02acbea1e 100644
--- a/source4/lib/registry/registry.h
+++ b/source4/lib/registry/registry.h
@@ -94,7 +94,7 @@ struct registry_operations {
WERROR (*flush_key) (struct registry_key *key);
- WERROR (*get_predefined_key) (const struct registry_context *ctx,
+ WERROR (*get_predefined_key) (struct registry_context *ctx,
uint32_t key_id,
struct registry_key **key);
@@ -195,7 +195,7 @@ const char *reg_get_predef_name(uint32_t hkey);
WERROR reg_get_predefined_key_by_name(struct registry_context *ctx,
const char *name,
struct registry_key **key);
-WERROR reg_get_predefined_key(const struct registry_context *ctx,
+WERROR reg_get_predefined_key(struct registry_context *ctx,
uint32_t hkey,
struct registry_key **key);
diff --git a/source4/lib/registry/registry.i b/source4/lib/registry/registry.i
index 330f0856e1..1819e7df80 100644
--- a/source4/lib/registry/registry.i
+++ b/source4/lib/registry/registry.i
@@ -25,6 +25,7 @@
#include "includes.h"
#include "registry.h"
+#include "param/param.h"
typedef struct registry_context reg;
typedef struct hive_key hive;
@@ -39,6 +40,7 @@ typedef struct hive_key hive;
%import "../../lib/talloc/talloc.i"
%import "../../auth/credentials/credentials.i"
%import "../../libcli/util/errors.i"
+%import "../../param/param.i"
/* Utility functions */
@@ -86,10 +88,11 @@ WERROR reg_open_local(TALLOC_CTX *parent_ctx, struct registry_context **ctx,
free((char **) $1);
}
+%talloctype(reg);
+
typedef struct registry_context {
%extend {
- ~reg() { talloc_free($self); }
WERROR get_predefined_key_by_name(const char *name,
struct registry_key **key);
@@ -101,11 +104,18 @@ typedef struct registry_context {
WERROR mount_hive(struct hive_key *hive_key, uint32_t hkey_id,
const char **elements=NULL);
- }
- %pythoncode {
- def mount(self, path, hkey_id, elements=[]):
- self.mount_hive(Hive(path), hkey_id, elements)
+ WERROR mount_hive(struct hive_key *hive_key, const char *predef_name)
+ {
+ int i;
+ for (i = 0; reg_predefined_keys[i].name; i++) {
+ if (!strcasecmp(reg_predefined_keys[i].name, predef_name))
+ return reg_mount_hive($self, hive_key,
+ reg_predefined_keys[i].handle, NULL);
+ }
+ return WERR_INVALID_NAME;
+ }
+
}
} reg;
@@ -123,12 +133,12 @@ typedef struct registry_context {
WERROR reg_open_hive(TALLOC_CTX *parent_ctx, const char *location,
struct auth_session_info *session_info,
struct cli_credentials *credentials,
+ struct loadparm_context *lp_ctx,
struct hive_key **root);
+%talloctype(hive);
+
typedef struct hive_key {
- %extend {
- ~hive() { talloc_free($self); }
- }
} hive;
%rename(open_samba) reg_open_samba;
diff --git a/source4/lib/registry/registry.py b/source4/lib/registry/registry.py
index b61d713df8..67607cd7ac 100644
--- a/source4/lib/registry/registry.py
+++ b/source4/lib/registry/registry.py
@@ -2,7 +2,6 @@
# Version 1.3.33
#
# Don't modify this file, modify the SWIG interface instead.
-# This file is compatible with both classic and new-style classes.
import _registry
import new
@@ -48,45 +47,41 @@ except AttributeError:
del types
+def _swig_setattr_nondynamic_method(set):
+ def set_attr(self,name,value):
+ if (name == "thisown"): return self.this.own(value)
+ if hasattr(self,name) or (name == "this"):
+ set(self,name,value)
+ else:
+ raise AttributeError("You cannot add attributes to %s" % self)
+ return set_attr
+
+
import credentials
+import param
reg_get_predef_name = _registry.reg_get_predef_name
str_regtype = _registry.str_regtype
Registry = _registry.Registry
-class reg(_object):
- __swig_setmethods__ = {}
- __setattr__ = lambda self, name, value: _swig_setattr(self, reg, name, value)
- __swig_getmethods__ = {}
- __getattr__ = lambda self, name: _swig_getattr(self, reg, name)
+class reg(object):
+ thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
__repr__ = _swig_repr
- __swig_destroy__ = _registry.delete_reg
- __del__ = lambda self : None;
- def get_predefined_key_by_name(*args, **kwargs): return _registry.reg_get_predefined_key_by_name(*args, **kwargs)
- def get_predefined_key(*args, **kwargs): return _registry.reg_get_predefined_key(*args, **kwargs)
- def apply_patchfile(*args, **kwargs): return _registry.reg_apply_patchfile(*args, **kwargs)
- def mount_hive(*args, **kwargs): return _registry.reg_mount_hive(*args, **kwargs)
- def mount(self, path, hkey_id, elements=[]):
- self.mount_hive(Hive(path), hkey_id, elements)
-
def __init__(self, *args, **kwargs):
- this = _registry.new_reg(*args, **kwargs)
- try: self.this.append(this)
- except: self.this = this
+ _registry.reg_swiginit(self,_registry.new_reg(*args, **kwargs))
+ __swig_destroy__ = _registry.delete_reg
+reg.get_predefined_key_by_name = new_instancemethod(_registry.reg_get_predefined_key_by_name,None,reg)
+reg.get_predefined_key = new_instancemethod(_registry.reg_get_predefined_key,None,reg)
+reg.apply_patchfile = new_instancemethod(_registry.reg_apply_patchfile,None,reg)
+reg.mount_hive = new_instancemethod(_registry.reg_mount_hive,None,reg)
reg_swigregister = _registry.reg_swigregister
reg_swigregister(reg)
Hive = _registry.Hive
-class hive(_object):
- __swig_setmethods__ = {}
- __setattr__ = lambda self, name, value: _swig_setattr(self, hive, name, value)
- __swig_getmethods__ = {}
- __getattr__ = lambda self, name: _swig_getattr(self, hive, name)
+class hive(object):
+ thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
__repr__ = _swig_repr
- __swig_destroy__ = _registry.delete_hive
- __del__ = lambda self : None;
def __init__(self, *args, **kwargs):
- this = _registry.new_hive(*args, **kwargs)
- try: self.this.append(this)
- except: self.this = this
+ _registry.hive_swiginit(self,_registry.new_hive(*args, **kwargs))
+ __swig_destroy__ = _registry.delete_hive
hive_swigregister = _registry.hive_swigregister
hive_swigregister(hive)
diff --git a/source4/lib/registry/registry_wrap.c b/source4/lib/registry/registry_wrap.c
index 3ab0af10b5..fcbd2ea165 100644
--- a/source4/lib/registry/registry_wrap.c
+++ b/source4/lib/registry/registry_wrap.c
@@ -9,7 +9,7 @@
* ----------------------------------------------------------------------------- */
#define SWIGPYTHON
-#define SWIG_PYTHON_DIRECTOR_NO_VTABLE
+#define SWIG_PYTHON_NO_BUILD_NONE
/* -----------------------------------------------------------------------------
* This section contains generic SWIG labels for method/variable
* declarations/attributes, and other compiler dependent labels.
@@ -2463,20 +2463,24 @@ SWIG_Python_MustGetPtr(PyObject *obj, swig_type_info *ty, int argnum, int flags)
#define SWIGTYPE_p_hive_key swig_types[4]
#define SWIGTYPE_p_int swig_types[5]
#define SWIGTYPE_p_loadparm_context swig_types[6]
-#define SWIGTYPE_p_long_long swig_types[7]
-#define SWIGTYPE_p_p_char swig_types[8]
-#define SWIGTYPE_p_p_hive_key swig_types[9]
-#define SWIGTYPE_p_p_registry_context swig_types[10]
-#define SWIGTYPE_p_p_registry_key swig_types[11]
-#define SWIGTYPE_p_registry_context swig_types[12]
-#define SWIGTYPE_p_short swig_types[13]
-#define SWIGTYPE_p_signed_char swig_types[14]
-#define SWIGTYPE_p_unsigned_char swig_types[15]
-#define SWIGTYPE_p_unsigned_int swig_types[16]
-#define SWIGTYPE_p_unsigned_long_long swig_types[17]
-#define SWIGTYPE_p_unsigned_short swig_types[18]
-static swig_type_info *swig_types[20];
-static swig_module_info swig_module = {swig_types, 19, 0, 0, 0, 0};
+#define SWIGTYPE_p_loadparm_service swig_types[7]
+#define SWIGTYPE_p_long_long swig_types[8]
+#define SWIGTYPE_p_p_char swig_types[9]
+#define SWIGTYPE_p_p_hive_key swig_types[10]
+#define SWIGTYPE_p_p_registry_context swig_types[11]
+#define SWIGTYPE_p_p_registry_key swig_types[12]
+#define SWIGTYPE_p_param_context swig_types[13]
+#define SWIGTYPE_p_param_opt swig_types[14]
+#define SWIGTYPE_p_param_section swig_types[15]
+#define SWIGTYPE_p_registry_context swig_types[16]
+#define SWIGTYPE_p_short swig_types[17]
+#define SWIGTYPE_p_signed_char swig_types[18]
+#define SWIGTYPE_p_unsigned_char swig_types[19]
+#define SWIGTYPE_p_unsigned_int swig_types[20]
+#define SWIGTYPE_p_unsigned_long_long swig_types[21]
+#define SWIGTYPE_p_unsigned_short swig_types[22]
+static swig_type_info *swig_types[24];
+static swig_module_info swig_module = {swig_types, 23, 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)
@@ -2487,6 +2491,19 @@ static swig_module_info swig_module = {swig_types, 19, 0, 0, 0, 0};
# error "This python version requires swig to be run with the '-classic' option"
# endif
#endif
+#if (PY_VERSION_HEX <= 0x02020000)
+# error "This python version requires swig to be run with the '-nomodern' option"
+#endif
+#if (PY_VERSION_HEX <= 0x02020000)
+# error "This python version requires swig to be run with the '-nomodernargs' option"
+#endif
+#ifndef METH_O
+# error "This python version requires swig to be run with the '-nofastunpack' option"
+#endif
+#ifdef SWIG_TypeQuery
+# undef SWIG_TypeQuery
+#endif
+#define SWIG_TypeQuery SWIG_Python_TypeQuery
/*-----------------------------------------------
@(target):= _registry.so
@@ -2509,6 +2526,7 @@ static swig_module_info swig_module = {swig_types, 19, 0, 0, 0, 0};
#include "includes.h"
#include "registry.h"
+#include "param/param.h"
typedef struct registry_context reg;
typedef struct hive_key hive;
@@ -2755,7 +2773,6 @@ SWIG_AsVal_int (PyObject * obj, int *val)
return res;
}
-SWIGINTERN void delete_reg(reg *self){ talloc_free(self); }
SWIGINTERN int
SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
@@ -2814,7 +2831,15 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
SWIGINTERN WERROR reg_apply_patchfile(reg *self,char const *filename){
return reg_diff_apply(filename, self);
}
-SWIGINTERN void delete_hive(hive *self){ talloc_free(self); }
+SWIGINTERN WERROR reg_mount_hive__SWIG_1(reg *self,struct hive_key *hive_key,char const *predef_name){
+ int i;
+ for (i = 0; reg_predefined_keys[i].name; i++) {
+ if (!strcasecmp(reg_predefined_keys[i].name, predef_name))
+ return reg_mount_hive(self, hive_key,
+ reg_predefined_keys[i].handle, NULL);
+ }
+ return WERR_INVALID_NAME;
+ }
#define SWIG_From_long PyInt_FromLong
@@ -2949,28 +2974,6 @@ fail:
}
-SWIGINTERN PyObject *_wrap_delete_reg(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
- PyObject *resultobj = 0;
- reg *arg1 = (reg *) 0 ;
- void *argp1 = 0 ;
- int res1 = 0 ;
- PyObject * obj0 = 0 ;
-
- if (!PyArg_ParseTuple(args,(char *)"O:delete_reg",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_registry_context, SWIG_POINTER_DISOWN | 0 );
- if (!SWIG_IsOK(res1)) {
- SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_reg" "', argument " "1"" of type '" "reg *""'");
- }
- arg1 = (reg *)(argp1);
- delete_reg(arg1);
-
- resultobj = SWIG_Py_Void();
- return resultobj;
-fail:
- return NULL;
-}
-
-
SWIGINTERN PyObject *_wrap_reg_get_predefined_key_by_name(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
reg *arg1 = (reg *) 0 ;
@@ -3118,7 +3121,7 @@ fail:
}
-SWIGINTERN PyObject *_wrap_reg_mount_hive(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
+SWIGINTERN PyObject *_wrap_reg_mount_hive__SWIG_0(PyObject *SWIGUNUSEDPARM(self), int nobjs, PyObject **swig_obj) {
PyObject *resultobj = 0;
reg *arg1 = (reg *) 0 ;
struct hive_key *arg2 = (struct hive_key *) 0 ;
@@ -3131,41 +3134,34 @@ SWIGINTERN PyObject *_wrap_reg_mount_hive(PyObject *SWIGUNUSEDPARM(self), PyObje
int res2 = 0 ;
unsigned int val3 ;
int ecode3 = 0 ;
- PyObject * obj0 = 0 ;
- PyObject * obj1 = 0 ;
- PyObject * obj2 = 0 ;
- PyObject * obj3 = 0 ;
- char * kwnames[] = {
- (char *) "self",(char *) "hive_key",(char *) "hkey_id",(char *) "elements", NULL
- };
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OOO|O:reg_mount_hive",kwnames,&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_registry_context, 0 | 0 );
+ if ((nobjs < 3) || (nobjs > 4)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_registry_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "reg_mount_hive" "', argument " "1"" of type '" "reg *""'");
}
arg1 = (reg *)(argp1);
- res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_hive_key, 0 | 0 );
+ res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_hive_key, 0 | 0 );
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "reg_mount_hive" "', argument " "2"" of type '" "struct hive_key *""'");
}
arg2 = (struct hive_key *)(argp2);
- ecode3 = SWIG_AsVal_unsigned_SS_int(obj2, &val3);
+ ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
if (!SWIG_IsOK(ecode3)) {
SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "reg_mount_hive" "', argument " "3"" of type '" "uint32_t""'");
}
arg3 = (uint32_t)(val3);
- if (obj3) {
+ if (swig_obj[3]) {
{
/* Check if is a list */
- if (PyList_Check(obj3)) {
- int size = PyList_Size(obj3);
+ if (PyList_Check(swig_obj[3])) {
+ int size = PyList_Size(swig_obj[3]);
int i = 0;
arg4 = (char **) malloc((size+1)*sizeof(const char *));
for (i = 0; i < size; i++) {
- PyObject *o = PyList_GetItem(obj3,i);
+ PyObject *o = PyList_GetItem(swig_obj[3],i);
if (PyString_Check(o))
- arg4[i] = PyString_AsString(PyList_GetItem(obj3,i));
+ arg4[i] = PyString_AsString(PyList_GetItem(swig_obj[3],i));
else {
PyErr_SetString(PyExc_TypeError,"list must contain strings");
free(arg4);
@@ -3200,11 +3196,87 @@ fail:
}
+SWIGINTERN PyObject *_wrap_reg_mount_hive__SWIG_1(PyObject *SWIGUNUSEDPARM(self), int nobjs, PyObject **swig_obj) {
+ PyObject *resultobj = 0;
+ reg *arg1 = (reg *) 0 ;
+ struct hive_key *arg2 = (struct hive_key *) 0 ;
+ char *arg3 = (char *) 0 ;
+ WERROR result;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ void *argp2 = 0 ;
+ int res2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+
+ if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_registry_context, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "reg_mount_hive" "', argument " "1"" of type '" "reg *""'");
+ }
+ arg1 = (reg *)(argp1);
+ res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_hive_key, 0 | 0 );
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "reg_mount_hive" "', argument " "2"" of type '" "struct hive_key *""'");
+ }
+ arg2 = (struct hive_key *)(argp2);
+ res3 = SWIG_AsCharPtrAndSize(swig_obj[2], &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "reg_mount_hive" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = (char *)(buf3);
+ result = reg_mount_hive__SWIG_1(arg1,arg2,(char const *)arg3);
+ {
+ if (!W_ERROR_IS_OK(result)) {
+ PyObject *obj = Py_BuildValue("(i,s)", (&result)->v, win_errstr(result));
+ PyErr_SetObject(PyExc_RuntimeError, obj);
+ } else if (resultobj == NULL) {
+ resultobj = Py_None;
+ }
+ }
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ return resultobj;
+fail:
+ if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_reg_mount_hive(PyObject *self, PyObject *args) {
+ int argc;
+ PyObject *argv[5];
+
+ if (!(argc = SWIG_Python_UnpackTuple(args,"reg_mount_hive",0,4,argv))) SWIG_fail;
+ --argc;
+ if ((argc >= 3) && (argc <= 4)) {
+ int _v = 0;
+ {
+ {
+ int res = SWIG_AsVal_unsigned_SS_int(argv[2], NULL);
+ _v = SWIG_CheckState(res);
+ }
+ }
+ if (!_v) goto check_1;
+ return _wrap_reg_mount_hive__SWIG_0(self, argc, argv);
+ }
+check_1:
+
+ if (argc == 3) {
+ return _wrap_reg_mount_hive__SWIG_1(self, argc, argv);
+ }
+
+fail:
+ SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'reg_mount_hive'.\n Possible C/C++ prototypes are:\n"" mount_hive(reg *,struct hive_key *,uint32_t,char const **)\n"" mount_hive(reg *,struct hive_key *,char const *)\n");
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_new_reg(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
reg *result = 0 ;
- if (!PyArg_ParseTuple(args,(char *)":new_reg")) SWIG_fail;
+ if (!SWIG_Python_UnpackTuple(args,"new_reg",0,0,0)) SWIG_fail;
result = (reg *)(reg *) calloc(1, sizeof(reg));
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_registry_context, SWIG_POINTER_NEW | 0 );
return resultobj;
@@ -3213,20 +3285,48 @@ fail:
}
+SWIGINTERN PyObject *_wrap_delete_reg(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ reg *arg1 = (reg *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ PyObject *swig_obj[1] ;
+
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_registry_context, SWIG_POINTER_DISOWN | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_reg" "', argument " "1"" of type '" "reg *""'");
+ }
+ arg1 = (reg *)(argp1);
+ free((char *) arg1);
+
+ resultobj = SWIG_Py_Void();
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *reg_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
- if (!PyArg_ParseTuple(args,(char*)"O|swigregister", &obj)) return NULL;
+ if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL;
SWIG_TypeNewClientData(SWIGTYPE_p_registry_context, SWIG_NewClientData(obj));
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *reg_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ return SWIG_Python_InitShadowInstance(args);
+}
+
SWIGINTERN PyObject *_wrap_Hive(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
TALLOC_CTX *arg1 = (TALLOC_CTX *) 0 ;
char *arg2 = (char *) 0 ;
struct auth_session_info *arg3 = (struct auth_session_info *) 0 ;
struct cli_credentials *arg4 = (struct cli_credentials *) 0 ;
- struct hive_key **arg5 = (struct hive_key **) 0 ;
+ struct loadparm_context *arg5 = (struct loadparm_context *) 0 ;
+ struct hive_key **arg6 = (struct hive_key **) 0 ;
WERROR result;
int res2 ;
char *buf2 = 0 ;
@@ -3235,12 +3335,15 @@ SWIGINTERN PyObject *_wrap_Hive(PyObject *SWIGUNUSEDPARM(self), PyObject *args,
int res3 = 0 ;
void *argp4 = 0 ;
int res4 = 0 ;
- struct hive_key *tmp5 ;
+ void *argp5 = 0 ;
+ int res5 = 0 ;
+ struct hive_key *tmp6 ;
PyObject * obj0 = 0 ;
PyObject * obj1 = 0 ;
PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
char * kwnames[] = {
- (char *) "location",(char *) "session_info",(char *) "credentials", NULL
+ (char *) "location",(char *) "session_info",(char *) "credentials",(char *) "lp_ctx", NULL
};
{
@@ -3250,12 +3353,15 @@ SWIGINTERN PyObject *_wrap_Hive(PyObject *SWIGUNUSEDPARM(self), PyObject *args,
arg4 = NULL;
}
{
+ arg5 = loadparm_init(NULL);
+ }
+ {
arg1 = NULL;
}
{
- arg5 = &tmp5;
+ arg6 = &tmp6;
}
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"O|OO:Hive",kwnames,&obj0,&obj1,&obj2)) SWIG_fail;
+ if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"O|OOO:Hive",kwnames,&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
res2 = SWIG_AsCharPtrAndSize(obj0, &buf2, NULL, &alloc2);
if (!SWIG_IsOK(res2)) {
SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Hive" "', argument " "2"" of type '" "char const *""'");
@@ -3275,7 +3381,14 @@ SWIGINTERN PyObject *_wrap_Hive(PyObject *SWIGUNUSEDPARM(self), PyObject *args,
}
arg4 = (struct cli_credentials *)(argp4);
}
- result = reg_open_hive(arg1,(char const *)arg2,arg3,arg4,arg5);
+ if (obj3) {
+ res5 = SWIG_ConvertPtr(obj3, &argp5,SWIGTYPE_p_loadparm_context, 0 | 0 );
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "Hive" "', argument " "5"" of type '" "struct loadparm_context *""'");
+ }
+ arg5 = (struct loadparm_context *)(argp5);
+ }
+ result = reg_open_hive(arg1,(char const *)arg2,arg3,arg4,arg5,arg6);
{
if (!W_ERROR_IS_OK(result)) {
PyObject *obj = Py_BuildValue("(i,s)", (&result)->v, win_errstr(result));
@@ -3286,7 +3399,7 @@ SWIGINTERN PyObject *_wrap_Hive(PyObject *SWIGUNUSEDPARM(self), PyObject *args,
}
{
Py_XDECREF(resultobj);
- resultobj = SWIG_NewPointerObj(*arg5, SWIGTYPE_p_hive_key, 0);
+ resultobj = SWIG_NewPointerObj(*arg6, SWIGTYPE_p_hive_key, 0);
}
if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
return resultobj;
@@ -3296,20 +3409,34 @@ fail:
}
+SWIGINTERN PyObject *_wrap_new_hive(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ hive *result = 0 ;
+
+ if (!SWIG_Python_UnpackTuple(args,"new_hive",0,0,0)) SWIG_fail;
+ result = (hive *)(hive *) calloc(1, sizeof(hive));
+ resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_hive_key, SWIG_POINTER_NEW | 0 );
+ return resultobj;
+fail:
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_delete_hive(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
hive *arg1 = (hive *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:delete_hive",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_hive_key, SWIG_POINTER_DISOWN | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_hive_key, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_hive" "', argument " "1"" of type '" "hive *""'");
}
arg1 = (hive *)(argp1);
- delete_hive(arg1);
+ free((char *) arg1);
resultobj = SWIG_Py_Void();
return resultobj;
@@ -3318,26 +3445,17 @@ fail:
}
-SWIGINTERN PyObject *_wrap_new_hive(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
- PyObject *resultobj = 0;
- hive *result = 0 ;
-
- if (!PyArg_ParseTuple(args,(char *)":new_hive")) SWIG_fail;
- result = (hive *)(hive *) calloc(1, sizeof(hive));
- resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_hive_key, SWIG_POINTER_NEW | 0 );
- return resultobj;
-fail:
- return NULL;
-}
-
-
SWIGINTERN PyObject *hive_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
- if (!PyArg_ParseTuple(args,(char*)"O|swigregister", &obj)) return NULL;
+ if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL;
SWIG_TypeNewClientData(SWIGTYPE_p_hive_key, SWIG_NewClientData(obj));
return SWIG_Py_Void();
}
+SWIGINTERN PyObject *hive_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ return SWIG_Python_InitShadowInstance(args);
+}
+
SWIGINTERN PyObject *_wrap_open_samba(PyObject *SWIGUNUSEDPARM(self), PyObject *args, PyObject *kwargs) {
PyObject *resultobj = 0;
TALLOC_CTX *arg1 = (TALLOC_CTX *) 0 ;
@@ -3361,6 +3479,9 @@ SWIGINTERN PyObject *_wrap_open_samba(PyObject *SWIGUNUSEDPARM(self), PyObject *
};
{
+ arg3 = loadparm_init(NULL);
+ }
+ {
arg4 = NULL;
}
{
@@ -3372,12 +3493,14 @@ SWIGINTERN PyObject *_wrap_open_samba(PyObject *SWIGUNUSEDPARM(self), PyObject *
{
arg2 = &tmp2;
}
- if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"O|OO:open_samba",kwnames,&obj0,&obj1,&obj2)) SWIG_fail;
- res3 = SWIG_ConvertPtr(obj0, &argp3,SWIGTYPE_p_loadparm_context, 0 | 0 );
- if (!SWIG_IsOK(res3)) {
- SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "open_samba" "', argument " "3"" of type '" "struct loadparm_context *""'");
+ if (!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"|OOO:open_samba",kwnames,&obj0,&obj1,&obj2)) SWIG_fail;
+ if (obj0) {
+ res3 = SWIG_ConvertPtr(obj0, &argp3,SWIGTYPE_p_loadparm_context, 0 | 0 );
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "open_samba" "', argument " "3"" of type '" "struct loadparm_context *""'");
+ }
+ arg3 = (struct loadparm_context *)(argp3);
}
- arg3 = (struct loadparm_context *)(argp3);
if (obj1) {
res4 = SWIG_ConvertPtr(obj1, &argp4,SWIGTYPE_p_auth_session_info, 0 | 0 );
if (!SWIG_IsOK(res4)) {
@@ -3414,17 +3537,19 @@ static PyMethodDef SwigMethods[] = {
{ (char *)"reg_get_predef_name", (PyCFunction) _wrap_reg_get_predef_name, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"str_regtype", (PyCFunction) _wrap_str_regtype, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"Registry", (PyCFunction) _wrap_Registry, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"delete_reg", _wrap_delete_reg, METH_VARARGS, NULL},
{ (char *)"reg_get_predefined_key_by_name", (PyCFunction) _wrap_reg_get_predefined_key_by_name, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"reg_get_predefined_key", (PyCFunction) _wrap_reg_get_predefined_key, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"reg_apply_patchfile", (PyCFunction) _wrap_reg_apply_patchfile, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"reg_mount_hive", (PyCFunction) _wrap_reg_mount_hive, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"new_reg", _wrap_new_reg, METH_VARARGS, NULL},
+ { (char *)"reg_mount_hive", _wrap_reg_mount_hive, METH_VARARGS, NULL},
+ { (char *)"new_reg", (PyCFunction)_wrap_new_reg, METH_NOARGS, NULL},
+ { (char *)"delete_reg", (PyCFunction)_wrap_delete_reg, METH_O, NULL},
{ (char *)"reg_swigregister", reg_swigregister, METH_VARARGS, NULL},
+ { (char *)"reg_swiginit", reg_swiginit, METH_VARARGS, NULL},
{ (char *)"Hive", (PyCFunction) _wrap_Hive, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"delete_hive", _wrap_delete_hive, METH_VARARGS, NULL},
- { (char *)"new_hive", _wrap_new_hive, METH_VARARGS, NULL},
+ { (char *)"new_hive", (PyCFunction)_wrap_new_hive, METH_NOARGS, NULL},
+ { (char *)"delete_hive", (PyCFunction)_wrap_delete_hive, METH_O, NULL},
{ (char *)"hive_swigregister", hive_swigregister, METH_VARARGS, NULL},
+ { (char *)"hive_swiginit", hive_swiginit, METH_VARARGS, NULL},
{ (char *)"open_samba", (PyCFunction) _wrap_open_samba, METH_VARARGS | METH_KEYWORDS, NULL},
{ NULL, NULL, 0, NULL }
};
@@ -3438,12 +3563,16 @@ static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_cli_credentials = {"_p_cli_credentials", "struct cli_credentials *|cli_credentials *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_hive_key = {"_p_hive_key", "struct hive_key *|hive *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_int = {"_p_int", "intptr_t *|int *|int_least32_t *|int_fast32_t *|int32_t *|int_fast16_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_loadparm_context = {"_p_loadparm_context", "struct loadparm_context *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_loadparm_context = {"_p_loadparm_context", "struct loadparm_context *|loadparm_context *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_loadparm_service = {"_p_loadparm_service", "struct loadparm_service *|loadparm_service *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_long_long = {"_p_long_long", "int_least64_t *|int_fast64_t *|int64_t *|long long *|intmax_t *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_hive_key = {"_p_p_hive_key", "struct hive_key **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_registry_context = {"_p_p_registry_context", "struct registry_context **", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_p_registry_key = {"_p_p_registry_key", "struct registry_key **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_param_context = {"_p_param_context", "struct param_context *|param *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_param_opt = {"_p_param_opt", "struct param_opt *|param_opt *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_param_section = {"_p_param_section", "struct param_section *|param_section *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_registry_context = {"_p_registry_context", "struct registry_context *|reg *", 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};
@@ -3460,11 +3589,15 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_hive_key,
&_swigt__p_int,
&_swigt__p_loadparm_context,
+ &_swigt__p_loadparm_service,
&_swigt__p_long_long,
&_swigt__p_p_char,
&_swigt__p_p_hive_key,
&_swigt__p_p_registry_context,
&_swigt__p_p_registry_key,
+ &_swigt__p_param_context,
+ &_swigt__p_param_opt,
+ &_swigt__p_param_section,
&_swigt__p_registry_context,
&_swigt__p_short,
&_swigt__p_signed_char,
@@ -3481,11 +3614,15 @@ static swig_cast_info _swigc__p_cli_credentials[] = { {&_swigt__p_cli_credentia
static swig_cast_info _swigc__p_hive_key[] = { {&_swigt__p_hive_key, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_loadparm_context[] = { {&_swigt__p_loadparm_context, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_loadparm_service[] = { {&_swigt__p_loadparm_service, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_long_long[] = { {&_swigt__p_long_long, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_char[] = { {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_hive_key[] = { {&_swigt__p_p_hive_key, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_registry_context[] = { {&_swigt__p_p_registry_context, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_p_registry_key[] = { {&_swigt__p_p_registry_key, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_param_context[] = { {&_swigt__p_param_context, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_param_opt[] = { {&_swigt__p_param_opt, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_param_section[] = { {&_swigt__p_param_section, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_registry_context[] = { {&_swigt__p_registry_context, 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}};
@@ -3502,11 +3639,15 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_hive_key,
_swigc__p_int,
_swigc__p_loadparm_context,
+ _swigc__p_loadparm_service,
_swigc__p_long_long,
_swigc__p_p_char,
_swigc__p_p_hive_key,
_swigc__p_p_registry_context,
_swigc__p_p_registry_key,
+ _swigc__p_param_context,
+ _swigc__p_param_opt,
+ _swigc__p_param_section,
_swigc__p_registry_context,
_swigc__p_short,
_swigc__p_signed_char,
diff --git a/source4/lib/registry/rpc.c b/source4/lib/registry/rpc.c
index ac0eecd0ac..7f800b786e 100644
--- a/source4/lib/registry/rpc.c
+++ b/source4/lib/registry/rpc.c
@@ -91,7 +91,7 @@ static struct {
static WERROR rpc_query_key(const struct registry_key *k);
-static WERROR rpc_get_predefined_key(const struct registry_context *ctx,
+static WERROR rpc_get_predefined_key(struct registry_context *ctx,
uint32_t hkey_type,
struct registry_key **k)
{
diff --git a/source4/lib/registry/samba.c b/source4/lib/registry/samba.c
index a5a60ba610..02f3363bab 100644
--- a/source4/lib/registry/samba.c
+++ b/source4/lib/registry/samba.c
@@ -40,11 +40,11 @@ static WERROR mount_samba_hive(struct registry_context *ctx,
lp_private_dir(lp_ctx),
name);
- error = reg_open_hive(ctx, location, auth_info, creds, &hive);
+ error = reg_open_hive(ctx, location, auth_info, creds, lp_ctx, &hive);
if (W_ERROR_EQUAL(error, WERR_NOT_FOUND))
error = reg_open_ldb_file(ctx, location, auth_info,
- creds, &hive);
+ creds, lp_ctx, &hive);
if (!W_ERROR_IS_OK(error))
return error;
diff --git a/source4/lib/registry/tests/generic.c b/source4/lib/registry/tests/generic.c
index 1acb6342e7..25a89793bd 100644
--- a/source4/lib/registry/tests/generic.c
+++ b/source4/lib/registry/tests/generic.c
@@ -23,6 +23,7 @@
#include "lib/registry/registry.h"
#include "torture/torture.h"
#include "librpc/gen_ndr/winreg.h"
+#include "param/param.h"
struct torture_suite *torture_registry_hive(TALLOC_CTX *mem_ctx);
struct torture_suite *torture_registry_registry(TALLOC_CTX *mem_ctx);
@@ -52,7 +53,7 @@ static bool test_reg_val_data_string_dword(struct torture_context *ctx)
static bool test_reg_val_data_string_sz(struct torture_context *ctx)
{
DATA_BLOB db;
- db.length = convert_string_talloc(ctx, global_smb_iconv_convenience, CH_UNIX, CH_UTF16,
+ db.length = convert_string_talloc(ctx, lp_iconv_convenience(ctx->lp_ctx), CH_UNIX, CH_UTF16,
"bla", 3, (void **)&db.data);
torture_assert_str_equal(ctx, "bla",
reg_val_data_string(ctx, REG_SZ, db),
@@ -87,7 +88,7 @@ static bool test_reg_val_data_string_empty(struct torture_context *ctx)
static bool test_reg_val_description(struct torture_context *ctx)
{
DATA_BLOB data;
- data.length = convert_string_talloc(ctx, global_smb_iconv_convenience, CH_UNIX, CH_UTF16,
+ data.length = convert_string_talloc(ctx, lp_iconv_convenience(ctx->lp_ctx), CH_UNIX, CH_UTF16,
"stationary traveller",
strlen("stationary traveller"),
(void **)&data.data);
@@ -101,7 +102,7 @@ static bool test_reg_val_description(struct torture_context *ctx)
static bool test_reg_val_description_nullname(struct torture_context *ctx)
{
DATA_BLOB data;
- data.length = convert_string_talloc(ctx, global_smb_iconv_convenience, CH_UNIX, CH_UTF16,
+ data.length = convert_string_talloc(ctx, lp_iconv_convenience(ctx->lp_ctx), CH_UNIX, CH_UTF16,
"west berlin",
strlen("west berlin"),
(void **)&data.data);
diff --git a/source4/lib/registry/tests/hive.c b/source4/lib/registry/tests/hive.c
index 2a0f04eb54..fdb7282395 100644
--- a/source4/lib/registry/tests/hive.c
+++ b/source4/lib/registry/tests/hive.c
@@ -290,7 +290,7 @@ static bool hive_setup_dir(struct torture_context *tctx, void **data)
{
struct hive_key *key;
WERROR error;
- const char *dirname;
+ char *dirname;
NTSTATUS status;
status = torture_temp_dir(tctx, "hive-dir", &dirname);
@@ -314,7 +314,7 @@ static bool hive_setup_ldb(struct torture_context *tctx, void **data)
{
struct hive_key *key;
WERROR error;
- const char *dirname;
+ char *dirname;
NTSTATUS status;
status = torture_temp_dir(tctx, "hive-ldb", &dirname);
@@ -323,7 +323,7 @@ static bool hive_setup_ldb(struct torture_context *tctx, void **data)
rmdir(dirname);
- error = reg_open_ldb_file(tctx, dirname, NULL, NULL, &key);
+ error = reg_open_ldb_file(tctx, dirname, NULL, NULL, tctx->lp_ctx, &key);
if (!W_ERROR_IS_OK(error)) {
fprintf(stderr, "Unable to initialize ldb hive\n");
return false;
@@ -338,7 +338,7 @@ static bool hive_setup_regf(struct torture_context *tctx, void **data)
{
struct hive_key *key;
WERROR error;
- const char *dirname;
+ char *dirname;
NTSTATUS status;
status = torture_temp_dir(tctx, "hive-dir", &dirname);
diff --git a/source4/lib/registry/tests/registry.c b/source4/lib/registry/tests/registry.c
index f0035071f2..6c520f54ed 100644
--- a/source4/lib/registry/tests/registry.c
+++ b/source4/lib/registry/tests/registry.c
@@ -535,7 +535,7 @@ static bool setup_local_registry(struct torture_context *tctx, void **data)
{
struct registry_context *rctx;
WERROR error;
- const char *tempdir;
+ char *tempdir;
NTSTATUS status;
struct hive_key *hive_key;
const char *filename;
@@ -547,7 +547,7 @@ static bool setup_local_registry(struct torture_context *tctx, void **data)
torture_assert_ntstatus_ok(tctx, status, "Creating temp dir failed");
filename = talloc_asprintf(tctx, "%s/classes_root.ldb", tempdir);
- error = reg_open_ldb_file(tctx, filename, NULL, NULL, &hive_key);
+ error = reg_open_ldb_file(tctx, filename, NULL, NULL, tctx->lp_ctx, &hive_key);
torture_assert_werr_ok(tctx, error, "Opening classes_root file failed");
error = reg_mount_hive(rctx, hive_key, HKEY_CLASSES_ROOT, NULL);
diff --git a/source4/lib/registry/tools/common.c b/source4/lib/registry/tools/common.c
index c9293cd310..29e96475e6 100644
--- a/source4/lib/registry/tools/common.c
+++ b/source4/lib/registry/tools/common.c
@@ -42,13 +42,14 @@ struct registry_context *reg_common_open_remote(const char *remote,
}
struct registry_key *reg_common_open_file(const char *path,
+ struct loadparm_context *lp_ctx,
struct cli_credentials *creds)
{
struct hive_key *hive_root;
struct registry_context *h;
WERROR error;
- error = reg_open_hive(NULL, path, NULL, creds, &hive_root);
+ error = reg_open_hive(NULL, path, NULL, creds, lp_ctx, &hive_root);
if(!W_ERROR_IS_OK(error)) {
fprintf(stderr, "Unable to open '%s': %s \n",
diff --git a/source4/lib/registry/tools/regshell.c b/source4/lib/registry/tools/regshell.c
index 2c692952fb..329d6ab670 100644
--- a/source4/lib/registry/tools/regshell.c
+++ b/source4/lib/registry/tools/regshell.c
@@ -500,7 +500,7 @@ int main(int argc, char **argv)
ctx->registry = reg_common_open_remote(remote, cmdline_lp_ctx,
cmdline_credentials);
} else if (file != NULL) {
- ctx->current = reg_common_open_file(file, cmdline_credentials);
+ ctx->current = reg_common_open_file(file, cmdline_lp_ctx, cmdline_credentials);
if (ctx->current == NULL)
return 1;
ctx->registry = ctx->current->context;
@@ -546,12 +546,16 @@ int main(int argc, char **argv)
via readline :-( */
line = smb_readline(prompt, NULL, reg_completion);
- if (line == NULL)
+ if (line == NULL) {
+ free(prompt);
break;
+ }
if (line[0] != '\n') {
ret = W_ERROR_IS_OK(process_cmd(ctx, line));
}
+ free(line);
+ free(prompt);
}
talloc_free(ctx);
diff --git a/source4/lib/registry/tools/regtree.c b/source4/lib/registry/tools/regtree.c
index b267e11b43..0f47d8f8dd 100644
--- a/source4/lib/registry/tools/regtree.c
+++ b/source4/lib/registry/tools/regtree.c
@@ -131,7 +131,7 @@ int main(int argc, char **argv)
if (remote != NULL) {
h = reg_common_open_remote(remote, cmdline_lp_ctx, cmdline_credentials);
} else if (file != NULL) {
- start_key = reg_common_open_file(file, cmdline_credentials);
+ start_key = reg_common_open_file(file, cmdline_lp_ctx, cmdline_credentials);
} else {
h = reg_common_open_local(cmdline_credentials, cmdline_lp_ctx);
}
diff --git a/source4/lib/registry/util.c b/source4/lib/registry/util.c
index f75fc835b5..a251ae49a5 100644
--- a/source4/lib/registry/util.c
+++ b/source4/lib/registry/util.c
@@ -20,6 +20,7 @@
#include "includes.h"
#include "lib/registry/registry.h"
#include "librpc/gen_ndr/winreg.h"
+#include "param/param.h"
/**
* @file
@@ -61,7 +62,7 @@ _PUBLIC_ char *reg_val_data_string(TALLOC_CTX *mem_ctx, uint32_t type,
switch (type) {
case REG_EXPAND_SZ:
case REG_SZ:
- convert_string_talloc(mem_ctx, global_smb_iconv_convenience, CH_UTF16, CH_UNIX,
+ convert_string_talloc(mem_ctx, lp_iconv_convenience(global_loadparm), CH_UTF16, CH_UNIX,
data.data, data.length,
(void **)&ret);
return ret;
@@ -117,7 +118,7 @@ _PUBLIC_ bool reg_string_to_val(TALLOC_CTX *mem_ctx, const char *type_str,
{
case REG_SZ:
case REG_EXPAND_SZ:
- data->length = convert_string_talloc(mem_ctx, global_smb_iconv_convenience, CH_UNIX, CH_UTF16,
+ data->length = convert_string_talloc(mem_ctx, lp_iconv_convenience(global_loadparm), CH_UNIX, CH_UTF16,
data_str, strlen(data_str),
(void **)&data->data);
break;
diff --git a/source4/lib/replace/README b/source4/lib/replace/README
index c61f78a951..268a1b15cf 100644
--- a/source4/lib/replace/README
+++ b/source4/lib/replace/README
@@ -60,6 +60,8 @@ getaddrinfo
freeaddrinfo
getnameinfo
gai_strerror
+getifaddrs
+freeifaddrs
Types:
bool
diff --git a/source4/lib/replace/getifaddrs.c b/source4/lib/replace/getifaddrs.c
new file mode 100644
index 0000000000..4037d647d7
--- /dev/null
+++ b/source4/lib/replace/getifaddrs.c
@@ -0,0 +1,392 @@
+/*
+ Unix SMB/CIFS implementation.
+ Samba utility functions
+ Copyright (C) Andrew Tridgell 1998
+ Copyright (C) Jeremy Allison 2007
+ Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "replace.h"
+#include "system/network.h"
+
+#include <unistd.h>
+#include <stdio.h>
+#include <sys/types.h>
+
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+
+#ifndef SIOCGIFCONF
+#ifdef HAVE_SYS_SOCKIO_H
+#include <sys/sockio.h>
+#endif
+#endif
+
+#ifdef HAVE_IFACE_GETIFADDRS
+#define _FOUND_IFACE_ANY
+#else
+
+void rep_freeifaddrs(struct ifaddrs *ifp)
+{
+ free(ifp->ifa_name);
+ free(ifp->ifa_addr);
+ free(ifp->ifa_netmask);
+ free(ifp->ifa_dstaddr);
+ if (ifp->ifa_next != NULL)
+ freeifaddrs(ifp->ifa_next);
+ free(ifp);
+}
+
+static struct sockaddr *sockaddr_dup(struct sockaddr *sa)
+{
+ struct sockaddr *ret;
+ socklen_t socklen;
+#ifdef HAVE_SOCKADDR_SA_LEN
+ socklen = sa->sa_len;
+#else
+ socklen = sizeof(struct sockaddr_storage);
+#endif
+ ret = calloc(1, socklen);
+ if (ret == NULL)
+ return NULL;
+ memcpy(ret, sa, socklen);
+ return ret;
+}
+#endif
+
+#if HAVE_IFACE_IFCONF
+
+/* this works for Linux 2.2, Solaris 2.5, SunOS4, HPUX 10.20, OSF1
+ V4.0, Ultrix 4.4, SCO Unix 3.2, IRIX 6.4 and FreeBSD 3.2.
+
+ It probably also works on any BSD style system. */
+
+int rep_getifaddrs(struct ifaddrs **ifap)
+{
+ struct ifconf ifc;
+ char buff[8192];
+ int fd, i, n;
+ struct ifreq *ifr=NULL;
+ int total = 0;
+ struct in_addr ipaddr;
+ struct in_addr nmask;
+ char *iname;
+ struct ifaddrs *curif, *lastif;
+
+ *ifap = NULL;
+
+ if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
+ return -1;
+ }
+
+ ifc.ifc_len = sizeof(buff);
+ ifc.ifc_buf = buff;
+
+ if (ioctl(fd, SIOCGIFCONF, &ifc) != 0) {
+ close(fd);
+ return -1;
+ }
+
+ ifr = ifc.ifc_req;
+
+ n = ifc.ifc_len / sizeof(struct ifreq);
+
+ /* Loop through interfaces, looking for given IP address */
+ for (i=n-1;i>=0 && total < max_interfaces;i--) {
+ if (ioctl(fd, SIOCGIFADDR, &ifr[i]) != 0) {
+ freeifaddrs(*ifap);
+ }
+
+ curif = calloc(1, sizeof(struct ifaddrs));
+ if (lastif == NULL) {
+ *ifap = curif;
+ } else {
+ lastif->ifa_next = (*ifap);
+ }
+
+ curif->ifa_name = strdup(ifr[i].ifr_name);
+ curif->ifa_addr = sockaddr_dup(&ifr[i].ifr_addr);
+ curif->ifa_dstaddr = NULL;
+ curif->ifa_data = NULL;
+ curif->ifa_next = NULL;
+ curif->ifa_netmask = NULL;
+
+ if (ioctl(fd, SIOCGIFFLAGS, &ifr[i]) != 0) {
+ freeifaddrs(*ifap);
+ return -1;
+ }
+
+ curif->ifa_flags = ifr[i].ifr_flags;
+
+ if (ioctl(fd, SIOCGIFNETMASK, &ifr[i]) != 0) {
+ freeifaddrs(*ifap);
+ return -1;
+ }
+
+ curif->ifa_netmask = sockaddr_dup(&ifr[i].ifr_addr);
+
+ lastif = curif;
+ }
+
+ close(fd);
+
+ return 0;
+}
+
+#define _FOUND_IFACE_ANY
+#endif /* HAVE_IFACE_IFCONF */
+#ifdef HAVE_IFACE_IFREQ
+
+#ifndef I_STR
+#include <sys/stropts.h>
+#endif
+
+/****************************************************************************
+this should cover most of the streams based systems
+Thanks to Andrej.Borsenkow@mow.siemens.ru for several ideas in this code
+****************************************************************************/
+int rep_getifaddrs(struct ifaddrs **ifap)
+{
+ struct ifreq ifreq;
+ struct strioctl strioctl;
+ char buff[8192];
+ int fd, i, n;
+ struct ifreq *ifr=NULL;
+ int total = 0;
+ struct in_addr ipaddr;
+ struct in_addr nmask;
+ char *iname;
+ struct ifaddrs *curif;
+
+ *ifap = NULL;
+
+ if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
+ return -1;
+ }
+
+ strioctl.ic_cmd = SIOCGIFCONF;
+ strioctl.ic_dp = buff;
+ strioctl.ic_len = sizeof(buff);
+ if (ioctl(fd, I_STR, &strioctl) < 0) {
+ close(fd);
+ return -1;
+ }
+
+ /* we can ignore the possible sizeof(int) here as the resulting
+ number of interface structures won't change */
+ n = strioctl.ic_len / sizeof(struct ifreq);
+
+ /* we will assume that the kernel returns the length as an int
+ at the start of the buffer if the offered size is a
+ multiple of the structure size plus an int */
+ if (n*sizeof(struct ifreq) + sizeof(int) == strioctl.ic_len) {
+ ifr = (struct ifreq *)(buff + sizeof(int));
+ } else {
+ ifr = (struct ifreq *)buff;
+ }
+
+ /* Loop through interfaces */
+
+ for (i = 0; i<n && total < max_interfaces; i++) {
+ ifreq = ifr[i];
+
+ curif = calloc(1, sizeof(struct ifaddrs));
+ if (lastif == NULL) {
+ *ifap = curif;
+ } else {
+ lastif->ifa_next = (*ifap);
+ }
+
+ strioctl.ic_cmd = SIOCGIFFLAGS;
+ strioctl.ic_dp = (char *)&ifreq;
+ strioctl.ic_len = sizeof(struct ifreq);
+ if (ioctl(fd, I_STR, &strioctl) != 0) {
+ freeifaddrs(*ifap);
+ return -1;
+ }
+
+ curif->ifa_flags = ifreq.ifr_flags;
+
+ strioctl.ic_cmd = SIOCGIFADDR;
+ strioctl.ic_dp = (char *)&ifreq;
+ strioctl.ic_len = sizeof(struct ifreq);
+ if (ioctl(fd, I_STR, &strioctl) != 0) {
+ freeifaddrs(*ifap);
+ return -1;
+ }
+
+ curif->ifa_name = strdup(ifreq.ifr_name);
+ curif->ifa_addr = sockaddr_dup(&ifreq.ifr_addr);
+ curif->ifa_dstaddr = NULL;
+ curif->ifa_data = NULL;
+ curif->ifa_next = NULL;
+ curif->ifa_netmask = NULL;
+
+ strioctl.ic_cmd = SIOCGIFNETMASK;
+ strioctl.ic_dp = (char *)&ifreq;
+ strioctl.ic_len = sizeof(struct ifreq);
+ if (ioctl(fd, I_STR, &strioctl) != 0) {
+ freeifaddrs(*ifap);
+ return -1;
+ }
+
+ curif->ifa_netmask = sockaddr_dup(&ifreq.ifr_addr);
+
+ lastif = curif;
+ }
+
+ close(fd);
+
+ return 0;
+}
+
+#define _FOUND_IFACE_ANY
+#endif /* HAVE_IFACE_IFREQ */
+#ifdef HAVE_IFACE_AIX
+
+/****************************************************************************
+this one is for AIX (tested on 4.2)
+****************************************************************************/
+int rep_getifaddrs(struct ifaddrs **ifap)
+{
+ char buff[8192];
+ int fd, i;
+ struct ifconf ifc;
+ struct ifreq *ifr=NULL;
+ struct in_addr ipaddr;
+ struct in_addr nmask;
+ char *iname;
+ int total = 0;
+ struct ifaddrs *curif, *lastif;
+
+ *ifap = NULL;
+
+ if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
+ return -1;
+ }
+
+ ifc.ifc_len = sizeof(buff);
+ ifc.ifc_buf = buff;
+
+ if (ioctl(fd, SIOCGIFCONF, &ifc) != 0) {
+ close(fd);
+ return -1;
+ }
+
+ ifr = ifc.ifc_req;
+
+ /* Loop through interfaces */
+ i = ifc.ifc_len;
+
+ while (i > 0) {
+ uint_t inc;
+
+ inc = ifr->ifr_addr.sa_len;
+
+ if (ioctl(fd, SIOCGIFADDR, ifr) != 0) {
+ freeaddrinfo(*ifap);
+ return -1;
+ }
+
+ curif = calloc(1, sizeof(struct ifaddrs));
+ if (lastif == NULL) {
+ *ifap = curif;
+ } else {
+ lastif->ifa_next = (*ifap);
+ }
+
+ curif->ifa_name = strdup(ifr->ifr_name);
+ curif->ifa_addr = sockaddr_dup(&ifr->ifr_addr);
+ curif->ifa_dstaddr = NULL;
+ curif->ifa_data = NULL;
+ curif->ifa_netmask = NULL;
+ curif->ifa_next = NULL;
+
+ if (ioctl(fd, SIOCGIFFLAGS, ifr) != 0) {
+ freeaddrinfo(*ifap);
+ return -1;
+ }
+
+ curif->ifa_flags = ifr->ifr_flags;
+
+ if (ioctl(fd, SIOCGIFNETMASK, ifr) != 0) {
+ freeaddrinfo(*ifap);
+ return -1;
+ }
+
+ curif->ifa_netmask = sockaddr_dup(&ifr->ifr_addr);
+
+ lastif = curif;
+
+ next:
+ /*
+ * Patch from Archie Cobbs (archie@whistle.com). The
+ * addresses in the SIOCGIFCONF interface list have a
+ * minimum size. Usually this doesn't matter, but if
+ * your machine has tunnel interfaces, etc. that have
+ * a zero length "link address", this does matter. */
+
+ if (inc < sizeof(ifr->ifr_addr))
+ inc = sizeof(ifr->ifr_addr);
+ inc += IFNAMSIZ;
+
+ ifr = (struct ifreq*) (((char*) ifr) + inc);
+ i -= inc;
+ }
+
+ close(fd);
+ return 0;
+}
+
+#define _FOUND_IFACE_ANY
+#endif /* HAVE_IFACE_AIX */
+#ifndef _FOUND_IFACE_ANY
+int rep_getifaddrs(struct ifaddrs **ifap)
+{
+ errno = ENOSYS;
+ return -1;
+}
+#endif
+
+#ifdef AUTOCONF_TEST
+/* this is the autoconf driver to test get_interfaces() */
+
+ int main()
+{
+ struct ifaddrs *ifs = NULL;
+ int ret;
+
+ ret = getifaddrs(&ifs);
+ if (ret != 0) {
+ perror("getifaddrs() failed");
+ return 1;
+ }
+
+ while (ifs) {
+ printf("%-10s ", ifs->ifa_name);
+ if (ifs->ifa_addr != NULL &&
+ ifs->ifa_addr->sa_family == AF_INET) {
+ printf("IP=%s ", inet_ntoa(((struct sockaddr_in *)ifs->ifa_addr)->sin_addr));
+ if (ifs->ifa_netmask != NULL)
+ printf("NETMASK=%s", inet_ntoa(((struct sockaddr_in *)ifs->ifa_netmask)->sin_addr));
+ }
+ printf("\n");
+ ifs = ifs->ifa_next;
+ }
+ return 0;
+}
+#endif
diff --git a/source4/lib/replace/getifaddrs.m4 b/source4/lib/replace/getifaddrs.m4
new file mode 100644
index 0000000000..85f08ee6c3
--- /dev/null
+++ b/source4/lib/replace/getifaddrs.m4
@@ -0,0 +1,97 @@
+AC_CHECK_HEADERS([ifaddrs.h])
+
+dnl Used when getifaddrs is not available
+AC_CHECK_MEMBERS([struct sockaddr.sa_len],
+ [AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, [Whether struct sockaddr has a sa_len member])],
+ [],
+ [#include <sys/socket.h>])
+
+dnl test for getifaddrs and freeifaddrs
+AC_CACHE_CHECK([for getifaddrs and freeifaddrs],samba_cv_HAVE_GETIFADDRS,[
+AC_TRY_COMPILE([
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <ifaddrs.h>
+#include <netdb.h>],
+[
+struct ifaddrs *ifp = NULL;
+int ret = getifaddrs (&ifp);
+freeifaddrs(ifp);
+],
+samba_cv_HAVE_GETIFADDRS=yes,samba_cv_HAVE_GETIFADDRS=no)])
+if test x"$samba_cv_HAVE_GETIFADDRS" = x"yes"; then
+ AC_DEFINE(HAVE_GETIFADDRS,1,[Whether the system has getifaddrs])
+ AC_DEFINE(HAVE_FREEIFADDRS,1,[Whether the system has freeifaddrs])
+ AC_DEFINE(HAVE_STRUCT_IFADDRS,1,[Whether struct ifaddrs is available])
+fi
+
+##################
+# look for a method of finding the list of network interfaces
+#
+# This tests need LIBS="$NSL_LIBS $SOCKET_LIBS"
+#
+old_LIBS=$LIBS
+LIBS="$NSL_LIBS $SOCKET_LIBS"
+iface=no;
+##################
+# look for a method of finding the list of network interfaces
+iface=no;
+AC_CACHE_CHECK([for iface getifaddrs],samba_cv_HAVE_IFACE_GETIFADDRS,[
+SAVE_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
+AC_TRY_RUN([
+#define NO_CONFIG_H 1
+#define HAVE_IFACE_GETIFADDRS 1
+#define AUTOCONF_TEST 1
+#include "$libreplacedir/replace.c"
+#include "$libreplacedir/getifaddrs.c"],
+ samba_cv_HAVE_IFACE_GETIFADDRS=yes,samba_cv_HAVE_IFACE_GETIFADDRS=no,samba_cv_HAVE_IFACE_GETIFADDRS=cross)])
+CPPFLAGS="$SAVE_CPPFLAGS"
+if test x"$samba_cv_HAVE_IFACE_GETIFADDRS" = x"yes"; then
+ iface=yes;AC_DEFINE(HAVE_IFACE_GETIFADDRS,1,[Whether iface getifaddrs is available])
+else
+ LIBREPLACEOBJ="${LIBREPLACEOBJ} getifaddrs.o"
+fi
+
+
+if test $iface = no; then
+AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
+AC_TRY_RUN([
+#define HAVE_IFACE_AIX 1
+#define AUTOCONF_TEST 1
+#undef _XOPEN_SOURCE_EXTENDED
+#include "$libreplacedir/getifaddrs.c"],
+ samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
+if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
+ iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
+fi
+fi
+
+
+if test $iface = no; then
+AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
+AC_TRY_RUN([
+#define HAVE_IFACE_IFCONF 1
+#define AUTOCONF_TEST 1
+#include "$libreplacedir/getifaddrs.c"],
+ samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
+if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
+ iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
+fi
+fi
+
+if test $iface = no; then
+AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
+AC_TRY_RUN([
+#define HAVE_IFACE_IFREQ 1
+#define AUTOCONF_TEST 1
+#include "$libreplacedir/getifaddrs.c"],
+ samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
+if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
+ iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
+fi
+fi
+
+LIBS=$old_LIBS
diff --git a/source4/lib/replace/libreplace.m4 b/source4/lib/replace/libreplace.m4
index c10a4b2381..7e456b4d03 100644
--- a/source4/lib/replace/libreplace.m4
+++ b/source4/lib/replace/libreplace.m4
@@ -327,6 +327,7 @@ m4_include(inet_ntop.m4)
m4_include(inet_pton.m4)
m4_include(getaddrinfo.m4)
m4_include(repdir.m4)
+m4_include(getifaddrs.m4)
AC_CHECK_FUNCS([syslog printf memset memcpy],,[AC_MSG_ERROR([Required function not found])])
diff --git a/source4/lib/replace/libreplace_ld.m4 b/source4/lib/replace/libreplace_ld.m4
index a2e43bbe13..cb8e21434e 100644
--- a/source4/lib/replace/libreplace_ld.m4
+++ b/source4/lib/replace/libreplace_ld.m4
@@ -142,7 +142,7 @@ AC_DEFUN([AC_LIBREPLACE_LD_SHLIB_FLAGS],
LD_SHLIB_FLAGS="-shared"
;;
*darwin*)
- LD_SHLIB_FLAGS="-bundle -flat_namespace -Wl,-search_paths_first"
+ LD_SHLIB_FLAGS="-dynamiclib -Wl,-search_paths_first"
;;
esac
@@ -164,7 +164,7 @@ AC_DEFUN([AC_LIBREPLACE_LD_SHLIB_DISALLOW_UNDEF_FLAG],
LD_SHLIB_DISALLOW_UNDEF_FLAG="-warning_unresolved"
;;
*darwin*)
- LD_SHLIB_DISALLOW_UNDEF_FLAG="-undefined warning"
+ LD_SHLIB_DISALLOW_UNDEF_FLAG="-undefined error"
;;
esac
@@ -268,7 +268,7 @@ AC_DEFUN([AC_LIBREPLACE_LD_SHLIB_ALLOW_UNDEF_FLAG],
LD_SHLIB_ALLOW_UNDEF_FLAG="-expect_unresolved '*'"
;;
*darwin*)
- LD_SHLIB_ALLOW_UNDEF_FLAG="-undefined suppress"
+ LD_SHLIB_ALLOW_UNDEF_FLAG="-undefined dynamic_lookup"
;;
esac
diff --git a/source4/lib/replace/replace.h b/source4/lib/replace/replace.h
index 973c68ee14..f8a89a7213 100644
--- a/source4/lib/replace/replace.h
+++ b/source4/lib/replace/replace.h
@@ -340,6 +340,16 @@ ssize_t rep_pwrite(int __fd, const void *__buf, size_t __nbytes, off_t __offset)
/* prototype is in "system/network.h" */
#endif
+#ifndef HAVE_GETIFADDRS
+#define getifaddrs rep_getifaddrs
+/* prototype is in "system/network.h" */
+#endif
+
+#ifndef HAVE_FREEIFADDRS
+#define freeifaddrs rep_freeifaddrs
+/* prototype is in "system/network.h" */
+#endif
+
#ifdef HAVE_LIMITS_H
#include <limits.h>
#endif
diff --git a/source4/lib/replace/system/network.h b/source4/lib/replace/system/network.h
index d3ae2bf398..f72b233712 100644
--- a/source4/lib/replace/system/network.h
+++ b/source4/lib/replace/system/network.h
@@ -6,6 +6,7 @@
networking system include wrappers
Copyright (C) Andrew Tridgell 2004
+ Copyright (C) Jelmer Vernooij 2007
** NOTE! The following LGPL license applies to the replace
** library. This does NOT imply that all of Samba is released
@@ -93,6 +94,31 @@ int rep_inet_pton(int af, const char *src, void *dst);
const char *rep_inet_ntop(int af, const void *src, char *dst, socklen_t size);
#endif
+#ifdef HAVE_IFADDRS_H
+#include <ifaddrs.h>
+#endif
+
+#ifndef HAVE_STRUCT_IFADDRS
+struct ifaddrs {
+ struct ifaddrs *ifa_next; /* Pointer to next struct */
+ char *ifa_name; /* Interface name */
+ unsigned int ifa_flags; /* Interface flags */
+ struct sockaddr *ifa_addr; /* Interface address */
+ struct sockaddr *ifa_netmask; /* Interface netmask */
+#undef ifa_dstaddr
+ struct sockaddr *ifa_dstaddr; /* P2P interface destination */
+ void *ifa_data; /* Address specific data */
+};
+#endif
+
+#ifndef HAVE_GETIFADDRS
+int rep_getifaddrs(struct ifaddrs **);
+#endif
+
+#ifndef HAVE_FREEIFADDRS
+void rep_freeifaddrs(struct ifaddrs *);
+#endif
+
/*
* Some systems have getaddrinfo but not the
* defines needed to use it.
diff --git a/source4/lib/replace/test/testsuite.c b/source4/lib/replace/test/testsuite.c
index 5b95ae395c..c9f3301005 100644
--- a/source4/lib/replace/test/testsuite.c
+++ b/source4/lib/replace/test/testsuite.c
@@ -856,6 +856,25 @@ static int test_strptime(void)
return libreplace_test_strptime();
}
+static int test_getifaddrs(void)
+{
+ struct ifaddrs *ifa;
+ int ret;
+
+ printf("test: getifaddrs\n");
+
+ ret = getifaddrs(&ifa);
+ if (ret != 0) {
+ printf("failure: getifaddrs\n");
+ return false;
+ }
+
+ freeifaddrs(ifa);
+
+ printf("success: getifaddrs\n");
+ return true;
+}
+
struct torture_context;
bool torture_local_replace(struct torture_context *ctx)
{
@@ -903,6 +922,7 @@ bool torture_local_replace(struct torture_context *ctx)
ret &= test_MAX();
ret &= test_socketpair();
ret &= test_strptime();
+ ret &= test_getifaddrs();
return ret;
}
diff --git a/source4/lib/samba3/config.mk b/source4/lib/samba3/config.mk
index aefb077cf5..76f1ce5096 100644
--- a/source4/lib/samba3/config.mk
+++ b/source4/lib/samba3/config.mk
@@ -10,7 +10,8 @@ OBJ_FILES = tdbsam.o policy.o \
idmap.o winsdb.o samba3.o group.o \
registry.o secrets.o share_info.o
PRIVATE_DEPENDENCIES = LIBSAMBA-UTIL LIBTDB NDR_SECURITY \
- CREDENTIALS SMBPASSWD
+ SMBPASSWD LIBSECURITY
+PUBLIC_DEPENDENCIES = CREDENTIALS
# End SUBSYSTEM LIBSAMBA3
################################################
@@ -19,5 +20,6 @@ PRIVATE_DEPENDENCIES = LIBSAMBA-UTIL LIBTDB NDR_SECURITY \
[SUBSYSTEM::SMBPASSWD]
PRIVATE_PROTO_HEADER = samba3_smbpasswd_proto.h
OBJ_FILES = smbpasswd.o
+PRIVATE_DEPENDENCIES = CHARSET LIBSAMBA-UTIL
# End SUBSYSTEM LIBSAMBA3
################################################
diff --git a/source4/lib/samba3/samba3.c b/source4/lib/samba3/samba3.c
index 74985fab8a..4bd08f188a 100644
--- a/source4/lib/samba3/samba3.c
+++ b/source4/lib/samba3/samba3.c
@@ -36,7 +36,7 @@ NTSTATUS samba3_read_passdb_backends(TALLOC_CTX *ctx, const char *libdir, struct
char *dbfile;
NTSTATUS status = NT_STATUS_OK;
int i;
- const char **backends = param_get_string_list(samba3->configuration, NULL, "passdb backend", NULL);
+ const char **backends = param_get_string_list(samba3->configuration, "passdb backend", NULL, NULL);
/* Default to smbpasswd */
if (backends == NULL)
@@ -59,7 +59,7 @@ NTSTATUS samba3_read_passdb_backends(TALLOC_CTX *ctx, const char *libdir, struct
const char *p = strchr(backends[i], ':');
if (p && p[1]) {
dbfile = talloc_strdup(ctx, p+1);
- } else if ((p = param_get_string(samba3->configuration, NULL, "smb passwd file"))) {
+ } else if ((p = param_get_string(samba3->configuration, "smb passwd file", NULL))) {
dbfile = talloc_strdup(ctx, p);
} else {
dbfile = talloc_strdup(ctx, "/etc/samba/smbpasswd");
diff --git a/source4/lib/samba3/share_info.c b/source4/lib/samba3/share_info.c
index e0778fafb5..4dd15aa918 100644
--- a/source4/lib/samba3/share_info.c
+++ b/source4/lib/samba3/share_info.c
@@ -76,7 +76,7 @@ NTSTATUS samba3_read_share_info(const char *fn, TALLOC_CTX *ctx, struct samba3 *
blob.data = (uint8_t *)vbuf.dptr;
blob.length = vbuf.dsize;
- pull = ndr_pull_init_blob(&blob, ctx);
+ pull = ndr_pull_init_blob(&blob, ctx, lp_iconv_convenience(global_loadparm));
ndr_pull_security_descriptor(pull, NDR_SCALARS|NDR_BUFFERS, &share->secdesc);
diff --git a/source4/lib/smbreadline/smbreadline.c b/source4/lib/smbreadline/smbreadline.c
index 2a72750efb..a85f335b8a 100644
--- a/source4/lib/smbreadline/smbreadline.c
+++ b/source4/lib/smbreadline/smbreadline.c
@@ -19,7 +19,6 @@
*/
#include "includes.h"
-#include "pstring.h"
#include "system/filesys.h"
#include "system/select.h"
#include "system/readline.h"
@@ -78,22 +77,27 @@ static char *smb_readline_replacement(const char *prompt, void (*callback)(void)
char **(completion_fn)(const char *text, int start, int end))
{
fd_set fds;
- static pstring line;
+ char *line;
struct timeval timeout;
int fd = STDIN_FILENO;
char *ret;
do_debug("%s", prompt);
+ line = (char *)malloc(BUFSIZ);
+ if (!line) {
+ return NULL;
+ }
+
while (1) {
timeout.tv_sec = 5;
timeout.tv_usec = 0;
FD_ZERO(&fds);
FD_SET(fd,&fds);
-
+
if (sys_select_intr(fd+1,&fds,NULL,NULL,&timeout) == 1) {
- ret = x_fgets(line, sizeof(line), x_stdin);
+ ret = x_fgets(line, BUFSIZ, x_stdin);
return ret;
}
if (callback)
diff --git a/source4/lib/socket/config.m4 b/source4/lib/socket/config.m4
index 3296730c82..a713090c6d 100644
--- a/source4/lib/socket/config.m4
+++ b/source4/lib/socket/config.m4
@@ -97,50 +97,5 @@ dnl don't build ipv6 by default, unless the above test enables it, or
dnl the configure uses --with-static-modules=socket_ipv6
-##################
-# look for a method of finding the list of network interfaces
-#
-# This tests need LIBS="$NSL_LIBS $SOCKET_LIBS"
-#
-old_CFLAGS=$CFLAGS
-old_LIBS=$LIBS
-LIBS="$NSL_LIBS $SOCKET_LIBS"
-CFLAGS="$CFLAGS -Ilib/replace"
-iface=no;
-AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
-AC_TRY_RUN([
-#define HAVE_IFACE_AIX 1
-#define AUTOCONF_TEST 1
-#undef _XOPEN_SOURCE_EXTENDED
-#include "${srcdir-.}/lib/socket/netif.c"],
- samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
-if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
- iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
-fi
-
-if test $iface = no; then
-AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
-AC_TRY_RUN([
-#define HAVE_IFACE_IFCONF 1
-#define AUTOCONF_TEST 1
-#include "${srcdir-.}/lib/socket/netif.c"],
- samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
-if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
- iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
-fi
-fi
-if test $iface = no; then
-AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
-AC_TRY_RUN([
-#define HAVE_IFACE_IFREQ 1
-#define AUTOCONF_TEST 1
-#include "${srcdir-.}/lib/socket/netif.c"],
- samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
-if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
- iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
-fi
-fi
-CFLAGS=$old_CFLAGS
-LIBS=$old_LIBS
diff --git a/source4/lib/socket/config.mk b/source4/lib/socket/config.mk
index d1e0bcfef5..fe64c90b81 100644
--- a/source4/lib/socket/config.mk
+++ b/source4/lib/socket/config.mk
@@ -39,9 +39,7 @@ OBJ_FILES = \
access.o \
connect_multi.o \
connect.o
-LDFLAGS = $(SUBSYSTEM_LIBCLI_RESOLVE_OUTPUT) $(SUBSYSTEM_LIBCLI_NBT_OUTPUT) $(SUBSYSTEM_NDR_NBT_OUTPUT) $(LIBRARY_NDR_SVCCTL_OUTPUT)
PUBLIC_DEPENDENCIES = LIBTALLOC
-PRIVATE_DEPENDENCIES = SOCKET_WRAPPER LIBCLI_COMPOSITE
-#LIBCLI_RESOLVE
+PRIVATE_DEPENDENCIES = SOCKET_WRAPPER LIBCLI_COMPOSITE LIBCLI_RESOLVE
# End SUBSYSTEM SOCKET
################################################
diff --git a/source4/lib/socket/connect.c b/source4/lib/socket/connect.c
index cad8967dab..773bf41873 100644
--- a/source4/lib/socket/connect.c
+++ b/source4/lib/socket/connect.c
@@ -85,7 +85,7 @@ struct composite_context *socket_connect_send(struct socket_context *sock,
struct socket_address *my_address,
struct socket_address *server_address,
uint32_t flags,
- const char **name_resolve_order,
+ struct resolve_context *resolve_ctx,
struct event_context *event_ctx)
{
struct composite_context *result;
@@ -123,12 +123,11 @@ struct composite_context *socket_connect_send(struct socket_context *sock,
set_blocking(socket_get_fd(sock), false);
- if (server_address->addr && strcmp(sock->backend_name, "ipv4") == 0) {
+ if (resolve_ctx != NULL && server_address->addr && strcmp(sock->backend_name, "ipv4") == 0) {
struct nbt_name name;
struct composite_context *creq;
make_nbt_name_client(&name, server_address->addr);
- creq = resolve_name_send(&name, result->event_ctx,
- lp_name_resolve_order(global_loadparm));
+ creq = resolve_name_send(resolve_ctx, &name, result->event_ctx);
if (composite_nomem(creq, result)) return result;
composite_continue(result, creq, continue_resolve_name, result);
return result;
@@ -207,11 +206,11 @@ NTSTATUS socket_connect_recv(struct composite_context *result)
NTSTATUS socket_connect_ev(struct socket_context *sock,
struct socket_address *my_address,
struct socket_address *server_address,
- uint32_t flags, const char **name_resolve_order,
+ uint32_t flags, struct resolve_context *resolve_ctx,
struct event_context *ev)
{
struct composite_context *ctx;
ctx = socket_connect_send(sock, my_address,
- server_address, flags, name_resolve_order, ev);
+ server_address, flags, resolve_ctx, ev);
return socket_connect_recv(ctx);
}
diff --git a/source4/lib/socket/connect_multi.c b/source4/lib/socket/connect_multi.c
index 58ab673965..2f736a4b05 100644
--- a/source4/lib/socket/connect_multi.c
+++ b/source4/lib/socket/connect_multi.c
@@ -38,7 +38,7 @@ struct connect_multi_state {
int num_ports;
uint16_t *ports;
- const char **name_resolve_order;
+ struct resolve_context *resolve_ctx;
struct socket_context *sock;
uint16_t result_port;
@@ -70,7 +70,7 @@ _PUBLIC_ struct composite_context *socket_connect_multi_send(
const char *server_address,
int num_server_ports,
uint16_t *server_ports,
- const char **name_resolve_order,
+ struct resolve_context *resolve_ctx,
struct event_context *event_ctx)
{
struct composite_context *result;
@@ -90,7 +90,7 @@ _PUBLIC_ struct composite_context *socket_connect_multi_send(
if (composite_nomem(multi->server_address, result)) goto failed;
multi->num_ports = num_server_ports;
- multi->name_resolve_order = str_list_copy(multi, name_resolve_order);
+ multi->resolve_ctx = talloc_reference(multi, resolve_ctx);
multi->ports = talloc_array(multi, uint16_t, multi->num_ports);
if (composite_nomem(multi->ports, result)) goto failed;
@@ -107,8 +107,7 @@ _PUBLIC_ struct composite_context *socket_connect_multi_send(
struct nbt_name name;
struct composite_context *creq;
make_nbt_name_client(&name, server_address);
- creq = resolve_name_send(&name, result->event_ctx,
- name_resolve_order);
+ creq = resolve_name_send(resolve_ctx, &name, result->event_ctx);
if (composite_nomem(creq, result)) goto failed;
composite_continue(result, creq, continue_resolve_name, result);
return result;
@@ -161,7 +160,7 @@ static void connect_multi_next_socket(struct composite_context *result)
talloc_steal(state, state->sock);
creq = socket_connect_send(state->sock, NULL,
- state->addr, 0, multi->name_resolve_order,
+ state->addr, 0, multi->resolve_ctx,
result->event_ctx);
if (composite_nomem(creq, result)) return;
talloc_steal(state, creq);
@@ -269,7 +268,7 @@ _PUBLIC_ NTSTATUS socket_connect_multi_recv(struct composite_context *ctx,
NTSTATUS socket_connect_multi(TALLOC_CTX *mem_ctx,
const char *server_address,
int num_server_ports, uint16_t *server_ports,
- const char **name_resolve_order,
+ struct resolve_context *resolve_ctx,
struct event_context *event_ctx,
struct socket_context **result,
uint16_t *result_port)
@@ -277,7 +276,7 @@ NTSTATUS socket_connect_multi(TALLOC_CTX *mem_ctx,
struct composite_context *ctx =
socket_connect_multi_send(mem_ctx, server_address,
num_server_ports, server_ports,
- name_resolve_order,
+ resolve_ctx,
event_ctx);
return socket_connect_multi_recv(ctx, mem_ctx, result, result_port);
}
diff --git a/source4/lib/socket/interface.c b/source4/lib/socket/interface.c
index 79c5673022..c327f02bbd 100644
--- a/source4/lib/socket/interface.c
+++ b/source4/lib/socket/interface.c
@@ -35,8 +35,6 @@ struct interface {
const char *nmask_s;
};
-static struct interface *local_interfaces;
-
#define ALLONES ((uint32_t)0xFFFFFFFF)
/*
address construction based on a patch from fred@datalync.com
@@ -47,12 +45,13 @@ static struct interface *local_interfaces;
/****************************************************************************
Try and find an interface that matches an ip. If we cannot, return NULL
**************************************************************************/
-static struct interface *iface_find(struct in_addr ip, bool CheckMask)
+static struct interface *iface_find(struct interface *interfaces,
+ struct in_addr ip, bool CheckMask)
{
struct interface *i;
- if (is_zero_ip(ip)) return local_interfaces;
+ if (is_zero_ip(ip)) return interfaces;
- for (i=local_interfaces;i;i=i->next)
+ for (i=interfaces;i;i=i->next)
if (CheckMask) {
if (same_net(i->ip,ip,i->nmask)) return i;
} else if (i->ip.s_addr == ip.s_addr) return i;
@@ -64,18 +63,19 @@ static struct interface *iface_find(struct in_addr ip, bool CheckMask)
/****************************************************************************
add an interface to the linked list of interfaces
****************************************************************************/
-static void add_interface(struct in_addr ip, struct in_addr nmask)
+static void add_interface(TALLOC_CTX *mem_ctx, struct in_addr ip, struct in_addr nmask, struct interface **interfaces)
{
struct interface *iface;
struct in_addr bcast;
- if (iface_find(ip, false)) {
+ if (iface_find(*interfaces, ip, false)) {
DEBUG(3,("not adding duplicate interface %s\n",inet_ntoa(ip)));
return;
}
- iface = talloc(local_interfaces == NULL ? talloc_autofree_context() : local_interfaces, struct interface);
- if (!iface) return;
+ iface = talloc(*interfaces == NULL ? mem_ctx : *interfaces, struct interface);
+ if (iface == NULL)
+ return;
ZERO_STRUCTPN(iface);
@@ -92,7 +92,7 @@ static void add_interface(struct in_addr ip, struct in_addr nmask)
iface->bcast_s = talloc_strdup(iface, inet_ntoa(bcast));
}
- DLIST_ADD_END(local_interfaces, iface, struct interface *);
+ DLIST_ADD_END(*interfaces, iface, struct interface *);
DEBUG(2,("added interface ip=%s nmask=%s\n", iface->ip_s, iface->nmask_s));
}
@@ -110,12 +110,15 @@ This handles the following different forms:
4) ip/mask
5) bcast/mask
**/
-static void interpret_interface(const char *token,
+static void interpret_interface(TALLOC_CTX *mem_ctx,
+ const char *token,
struct iface_struct *probed_ifaces,
- int total_probed)
+ int total_probed,
+ struct interface **local_interfaces)
{
struct in_addr ip, nmask;
char *p;
+ char *address;
int i, added=0;
ip.s_addr = 0;
@@ -124,8 +127,9 @@ static void interpret_interface(const char *token,
/* first check if it is an interface name */
for (i=0;i<total_probed;i++) {
if (gen_fnmatch(token, probed_ifaces[i].name) == 0) {
- add_interface(probed_ifaces[i].ip,
- probed_ifaces[i].netmask);
+ add_interface(mem_ctx, probed_ifaces[i].ip,
+ probed_ifaces[i].netmask,
+ local_interfaces);
added = 1;
}
}
@@ -141,8 +145,9 @@ static void interpret_interface(const char *token,
ip.s_addr = interpret_addr2(token).s_addr;
for (i=0;i<total_probed;i++) {
if (ip.s_addr == probed_ifaces[i].ip.s_addr) {
- add_interface(probed_ifaces[i].ip,
- probed_ifaces[i].netmask);
+ add_interface(mem_ctx, probed_ifaces[i].ip,
+ probed_ifaces[i].netmask,
+ local_interfaces);
return;
}
}
@@ -150,10 +155,13 @@ static void interpret_interface(const char *token,
return;
}
+ address = talloc_strdup(mem_ctx, token);
+ p = strchr_m(address,'/');
+
/* parse it into an IP address/netmasklength pair */
*p++ = 0;
- ip.s_addr = interpret_addr2(token).s_addr;
+ ip.s_addr = interpret_addr2(address).s_addr;
if (strlen(p) > 2) {
nmask.s_addr = interpret_addr2(p).s_addr;
@@ -166,22 +174,26 @@ static void interpret_interface(const char *token,
ip.s_addr == MKNETADDR(ip.s_addr, nmask.s_addr)) {
for (i=0;i<total_probed;i++) {
if (same_net(ip, probed_ifaces[i].ip, nmask)) {
- add_interface(probed_ifaces[i].ip, nmask);
+ add_interface(mem_ctx, probed_ifaces[i].ip, nmask,
+ local_interfaces);
+ talloc_free(address);
return;
}
}
- DEBUG(2,("Can't determine ip for broadcast address %s\n", token));
+ DEBUG(2,("Can't determine ip for broadcast address %s\n", address));
+ talloc_free(address);
return;
}
- add_interface(ip, nmask);
+ add_interface(mem_ctx, ip, nmask, local_interfaces);
+ talloc_free(address);
}
/**
load the list of network interfaces
**/
-static void load_interfaces(const char **interfaces)
+void load_interfaces(TALLOC_CTX *mem_ctx, const char **interfaces, struct interface **local_interfaces)
{
const char **ptr = interfaces;
int i;
@@ -189,9 +201,7 @@ static void load_interfaces(const char **interfaces)
struct in_addr loopback_ip;
int total_probed;
- if (local_interfaces != NULL) {
- return;
- }
+ *local_interfaces = NULL;
loopback_ip = interpret_addr2("127.0.0.1");
@@ -206,43 +216,31 @@ static void load_interfaces(const char **interfaces)
}
for (i=0;i<total_probed;i++) {
if (ifaces[i].ip.s_addr != loopback_ip.s_addr) {
- add_interface(ifaces[i].ip,
- ifaces[i].netmask);
+ add_interface(mem_ctx, ifaces[i].ip,
+ ifaces[i].netmask, local_interfaces);
}
}
}
while (ptr && *ptr) {
- interpret_interface(*ptr, ifaces, total_probed);
+ interpret_interface(mem_ctx, *ptr, ifaces, total_probed, local_interfaces);
ptr++;
}
- if (!local_interfaces) {
+ if (!*local_interfaces) {
DEBUG(0,("WARNING: no network interfaces found\n"));
}
}
-
-/**
- unload the interfaces list, so it can be reloaded when needed
-*/
-void unload_interfaces(void)
-{
- talloc_free(local_interfaces);
- local_interfaces = NULL;
-}
-
/**
how many interfaces do we have
**/
-int iface_count(struct loadparm_context *lp_ctx)
+int iface_count(struct interface *ifaces)
{
int ret = 0;
struct interface *i;
- load_interfaces(lp_interfaces(lp_ctx));
-
- for (i=local_interfaces;i;i=i->next)
+ for (i=ifaces;i;i=i->next)
ret++;
return ret;
}
@@ -250,13 +248,11 @@ int iface_count(struct loadparm_context *lp_ctx)
/**
return IP of the Nth interface
**/
-const char *iface_n_ip(struct loadparm_context *lp_ctx, int n)
+const char *iface_n_ip(struct interface *ifaces, int n)
{
struct interface *i;
- load_interfaces(lp_interfaces(lp_ctx));
-
- for (i=local_interfaces;i && n;i=i->next)
+ for (i=ifaces;i && n;i=i->next)
n--;
if (i) {
@@ -268,13 +264,11 @@ const char *iface_n_ip(struct loadparm_context *lp_ctx, int n)
/**
return bcast of the Nth interface
**/
-const char *iface_n_bcast(struct loadparm_context *lp_ctx, int n)
+const char *iface_n_bcast(struct interface *ifaces, int n)
{
struct interface *i;
- load_interfaces(lp_interfaces(lp_ctx));
-
- for (i=local_interfaces;i && n;i=i->next)
+ for (i=ifaces;i && n;i=i->next)
n--;
if (i) {
@@ -286,13 +280,11 @@ const char *iface_n_bcast(struct loadparm_context *lp_ctx, int n)
/**
return netmask of the Nth interface
**/
-const char *iface_n_netmask(struct loadparm_context *lp_ctx, int n)
+const char *iface_n_netmask(struct interface *ifaces, int n)
{
struct interface *i;
- load_interfaces(lp_interfaces(lp_ctx));
-
- for (i=local_interfaces;i && n;i=i->next)
+ for (i=ifaces;i && n;i=i->next)
n--;
if (i) {
@@ -305,32 +297,28 @@ const char *iface_n_netmask(struct loadparm_context *lp_ctx, int n)
return the local IP address that best matches a destination IP, or
our first interface if none match
*/
-const char *iface_best_ip(struct loadparm_context *lp_ctx, const char *dest)
+const char *iface_best_ip(struct interface *ifaces, const char *dest)
{
struct interface *iface;
struct in_addr ip;
- load_interfaces(lp_interfaces(lp_ctx));
-
ip.s_addr = interpret_addr(dest);
- iface = iface_find(ip, true);
+ iface = iface_find(ifaces, ip, true);
if (iface) {
return iface->ip_s;
}
- return iface_n_ip(lp_ctx, 0);
+ return iface_n_ip(ifaces, 0);
}
/**
return true if an IP is one one of our local networks
*/
-bool iface_is_local(struct loadparm_context *lp_ctx, const char *dest)
+bool iface_is_local(struct interface *ifaces, const char *dest)
{
struct in_addr ip;
- load_interfaces(lp_interfaces(lp_ctx));
-
ip.s_addr = interpret_addr(dest);
- if (iface_find(ip, true)) {
+ if (iface_find(ifaces, ip, true)) {
return true;
}
return false;
diff --git a/source4/lib/socket/netif.c b/source4/lib/socket/netif.c
index c9f43e811a..bf410af441 100644
--- a/source4/lib/socket/netif.c
+++ b/source4/lib/socket/netif.c
@@ -2,6 +2,8 @@
Unix SMB/CIFS implementation.
return a list of network interfaces
Copyright (C) Andrew Tridgell 1998
+ Copyright (C) Jeremy Allison 2007
+ Copyright (C) Jelmer Vernooij 2007
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -29,327 +31,63 @@
*/
-#ifndef AUTOCONF_TEST
#include "includes.h"
-#endif
-
-#include <unistd.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <netdb.h>
-#include <sys/ioctl.h>
-#include <netdb.h>
-#include <sys/ioctl.h>
-#include <sys/time.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-#ifndef SIOCGIFCONF
-#ifdef HAVE_SYS_SOCKIO_H
-#include <sys/sockio.h>
-#endif
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-
-#ifdef __COMPAR_FN_T
-#define QSORT_CAST (__compar_fn_t)
-#endif
-
-#ifndef QSORT_CAST
-#define QSORT_CAST (int (*)(const void *, const void *))
-#endif
-
-#ifdef HAVE_NET_IF_H
-#include <net/if.h>
-#endif
-
+#include "system/network.h"
#include "netif.h"
-#if HAVE_IFACE_IFCONF
-
-/* this works for Linux 2.2, Solaris 2.5, SunOS4, HPUX 10.20, OSF1
- V4.0, Ultrix 4.4, SCO Unix 3.2, IRIX 6.4 and FreeBSD 3.2.
-
- It probably also works on any BSD style system. */
-
/****************************************************************************
- get the netmask address for a local interface
+ Try the "standard" getifaddrs/freeifaddrs interfaces.
+ Also gets IPv6 interfaces.
****************************************************************************/
-static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces)
-{
- struct ifconf ifc;
- char buff[8192];
- int fd, i, n;
- struct ifreq *ifr=NULL;
- int total = 0;
- struct in_addr ipaddr;
- struct in_addr nmask;
- char *iname;
-
- if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
- return -1;
- }
-
- ifc.ifc_len = sizeof(buff);
- ifc.ifc_buf = buff;
-
- if (ioctl(fd, SIOCGIFCONF, &ifc) != 0) {
- close(fd);
- return -1;
- }
-
- ifr = ifc.ifc_req;
-
- n = ifc.ifc_len / sizeof(struct ifreq);
-
- /* Loop through interfaces, looking for given IP address */
- for (i=n-1;i>=0 && total < max_interfaces;i--) {
- if (ioctl(fd, SIOCGIFADDR, &ifr[i]) != 0) {
- continue;
- }
-
- iname = ifr[i].ifr_name;
- ipaddr = (*(struct sockaddr_in *)&ifr[i].ifr_addr).sin_addr;
-
- if (ioctl(fd, SIOCGIFFLAGS, &ifr[i]) != 0) {
- continue;
- }
-
- if (!(ifr[i].ifr_flags & IFF_UP)) {
- continue;
- }
-
- if (ioctl(fd, SIOCGIFNETMASK, &ifr[i]) != 0) {
- continue;
- }
-
- nmask = ((struct sockaddr_in *)&ifr[i].ifr_addr)->sin_addr;
-
- strncpy(ifaces[total].name, iname, sizeof(ifaces[total].name)-1);
- ifaces[total].name[sizeof(ifaces[total].name)-1] = 0;
- ifaces[total].ip = ipaddr;
- ifaces[total].netmask = nmask;
- total++;
- }
-
- close(fd);
-
- return total;
-}
-
-#define _FOUND_IFACE_ANY
-#endif /* HAVE_IFACE_IFCONF */
-#ifdef HAVE_IFACE_IFREQ
-
-#ifndef I_STR
-#include <sys/stropts.h>
-#endif
/****************************************************************************
-this should cover most of the streams based systems
-Thanks to Andrej.Borsenkow@mow.siemens.ru for several ideas in this code
+ Get the netmask address for a local interface.
****************************************************************************/
+
static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces)
{
- struct ifreq ifreq;
- struct strioctl strioctl;
- char buff[8192];
- int fd, i, n;
- struct ifreq *ifr=NULL;
+ struct ifaddrs *iflist = NULL;
+ struct ifaddrs *ifptr = NULL;
int total = 0;
- struct in_addr ipaddr;
- struct in_addr nmask;
- char *iname;
- if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
+ if (getifaddrs(&iflist) < 0) {
return -1;
}
-
- strioctl.ic_cmd = SIOCGIFCONF;
- strioctl.ic_dp = buff;
- strioctl.ic_len = sizeof(buff);
- if (ioctl(fd, I_STR, &strioctl) < 0) {
- close(fd);
- return -1;
- }
-
- /* we can ignore the possible sizeof(int) here as the resulting
- number of interface structures won't change */
- n = strioctl.ic_len / sizeof(struct ifreq);
- /* we will assume that the kernel returns the length as an int
- at the start of the buffer if the offered size is a
- multiple of the structure size plus an int */
- if (n*sizeof(struct ifreq) + sizeof(int) == strioctl.ic_len) {
- ifr = (struct ifreq *)(buff + sizeof(int));
- } else {
- ifr = (struct ifreq *)buff;
- }
+ /* Loop through interfaces, looking for given IP address */
+ for (ifptr = iflist, total = 0;
+ ifptr != NULL && total < max_interfaces;
+ ifptr = ifptr->ifa_next) {
- /* Loop through interfaces */
+ memset(&ifaces[total], '\0', sizeof(ifaces[total]));
- for (i = 0; i<n && total < max_interfaces; i++) {
- ifreq = ifr[i];
-
- strioctl.ic_cmd = SIOCGIFFLAGS;
- strioctl.ic_dp = (char *)&ifreq;
- strioctl.ic_len = sizeof(struct ifreq);
- if (ioctl(fd, I_STR, &strioctl) != 0) {
- continue;
- }
-
- if (!(ifreq.ifr_flags & IFF_UP)) {
+ if (!ifptr->ifa_addr || !ifptr->ifa_netmask) {
continue;
}
- strioctl.ic_cmd = SIOCGIFADDR;
- strioctl.ic_dp = (char *)&ifreq;
- strioctl.ic_len = sizeof(struct ifreq);
- if (ioctl(fd, I_STR, &strioctl) != 0) {
+ /* Check the interface is up. */
+ if (!(ifptr->ifa_flags & IFF_UP)) {
continue;
}
- ipaddr = (*(struct sockaddr_in *) &ifreq.ifr_addr).sin_addr;
- iname = ifreq.ifr_name;
-
- strioctl.ic_cmd = SIOCGIFNETMASK;
- strioctl.ic_dp = (char *)&ifreq;
- strioctl.ic_len = sizeof(struct ifreq);
- if (ioctl(fd, I_STR, &strioctl) != 0) {
+ /* We don't support IPv6 *yet* */
+ if (ifptr->ifa_addr->sa_family != AF_INET) {
continue;
}
- nmask = ((struct sockaddr_in *)&ifreq.ifr_addr)->sin_addr;
-
- strncpy(ifaces[total].name, iname, sizeof(ifaces[total].name)-1);
- ifaces[total].name[sizeof(ifaces[total].name)-1] = 0;
- ifaces[total].ip = ipaddr;
- ifaces[total].netmask = nmask;
+ ifaces[total].ip = ((struct sockaddr_in *)ifptr->ifa_addr)->sin_addr;
+ ifaces[total].netmask = ((struct sockaddr_in *)ifptr->ifa_netmask)->sin_addr;
+ strlcpy(ifaces[total].name, ifptr->ifa_name,
+ sizeof(ifaces[total].name));
total++;
}
- close(fd);
+ freeifaddrs(iflist);
return total;
}
-#define _FOUND_IFACE_ANY
-#endif /* HAVE_IFACE_IFREQ */
-#ifdef HAVE_IFACE_AIX
-
-/****************************************************************************
-this one is for AIX (tested on 4.2)
-****************************************************************************/
-static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces)
-{
- char buff[8192];
- int fd, i;
- struct ifconf ifc;
- struct ifreq *ifr=NULL;
- struct in_addr ipaddr;
- struct in_addr nmask;
- char *iname;
- int total = 0;
-
- if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
- return -1;
- }
-
-
- ifc.ifc_len = sizeof(buff);
- ifc.ifc_buf = buff;
-
- if (ioctl(fd, SIOCGIFCONF, &ifc) != 0) {
- close(fd);
- return -1;
- }
-
- ifr = ifc.ifc_req;
-
- /* Loop through interfaces */
- i = ifc.ifc_len;
-
- while (i > 0 && total < max_interfaces) {
- uint_t inc;
-
- inc = ifr->ifr_addr.sa_len;
-
- if (ioctl(fd, SIOCGIFADDR, ifr) != 0) {
- goto next;
- }
-
- ipaddr = (*(struct sockaddr_in *) &ifr->ifr_addr).sin_addr;
- iname = ifr->ifr_name;
-
- if (ioctl(fd, SIOCGIFFLAGS, ifr) != 0) {
- goto next;
- }
-
- if (!(ifr->ifr_flags & IFF_UP)) {
- goto next;
- }
-
- if (ioctl(fd, SIOCGIFNETMASK, ifr) != 0) {
- goto next;
- }
-
- nmask = ((struct sockaddr_in *)&ifr->ifr_addr)->sin_addr;
-
- strncpy(ifaces[total].name, iname, sizeof(ifaces[total].name)-1);
- ifaces[total].name[sizeof(ifaces[total].name)-1] = 0;
- ifaces[total].ip = ipaddr;
- ifaces[total].netmask = nmask;
-
- total++;
-
- next:
- /*
- * Patch from Archie Cobbs (archie@whistle.com). The
- * addresses in the SIOCGIFCONF interface list have a
- * minimum size. Usually this doesn't matter, but if
- * your machine has tunnel interfaces, etc. that have
- * a zero length "link address", this does matter. */
-
- if (inc < sizeof(ifr->ifr_addr))
- inc = sizeof(ifr->ifr_addr);
- inc += IFNAMSIZ;
-
- ifr = (struct ifreq*) (((char*) ifr) + inc);
- i -= inc;
- }
-
-
- close(fd);
- return total;
-}
-
-#define _FOUND_IFACE_ANY
-#endif /* HAVE_IFACE_AIX */
-#ifndef _FOUND_IFACE_ANY
-static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces)
-{
- return -1;
-}
-#endif
-
-
static int iface_comp(struct iface_struct *i1, struct iface_struct *i2)
{
int r;
@@ -386,25 +124,3 @@ int get_interfaces(struct iface_struct *ifaces, int max_interfaces)
return total;
}
-
-
-#ifdef AUTOCONF_TEST
-/* this is the autoconf driver to test get_interfaces() */
-
- int main()
-{
- struct iface_struct ifaces[MAX_INTERFACES];
- int total = get_interfaces(ifaces, MAX_INTERFACES);
- int i;
-
- printf("got %d interfaces:\n", total);
- if (total <= 0) exit(1);
-
- for (i=0;i<total;i++) {
- printf("%-10s ", ifaces[i].name);
- printf("IP=%s ", inet_ntoa(ifaces[i].ip));
- printf("NETMASK=%s\n", inet_ntoa(ifaces[i].netmask));
- }
- return 0;
-}
-#endif
diff --git a/source4/lib/socket/netif.h b/source4/lib/socket/netif.h
index 4855f4bd73..417c6e074f 100644
--- a/source4/lib/socket/netif.h
+++ b/source4/lib/socket/netif.h
@@ -27,6 +27,8 @@ struct iface_struct {
struct in_addr netmask;
};
+struct interface;
+
#define MAX_INTERFACES 128
#ifndef AUTOCONF_TEST
diff --git a/source4/lib/socket/socket.h b/source4/lib/socket/socket.h
index 24bc5f1aac..4baa0cfbb1 100644
--- a/source4/lib/socket/socket.h
+++ b/source4/lib/socket/socket.h
@@ -126,6 +126,7 @@ struct socket_context {
int family;
};
+struct resolve_context;
/* prototypes */
NTSTATUS socket_create_with_ops(TALLOC_CTX *mem_ctx, const struct socket_ops *ops,
@@ -178,21 +179,21 @@ struct composite_context *socket_connect_send(struct socket_context *sock,
struct socket_address *my_address,
struct socket_address *server_address,
uint32_t flags,
- const char **name_resolve_order,
+ struct resolve_context *resolve_ctx,
struct event_context *event_ctx);
NTSTATUS socket_connect_recv(struct composite_context *ctx);
NTSTATUS socket_connect_ev(struct socket_context *sock,
struct socket_address *my_address,
struct socket_address *server_address,
uint32_t flags,
- const char **name_resolve_order,
+ struct resolve_context *resolve_ctx,
struct event_context *ev);
struct composite_context *socket_connect_multi_send(TALLOC_CTX *mem_ctx,
const char *server_address,
int num_server_ports,
uint16_t *server_ports,
- const char **name_resolve_order,
+ struct resolve_context *resolve_ctx,
struct event_context *event_ctx);
NTSTATUS socket_connect_multi_recv(struct composite_context *ctx,
TALLOC_CTX *mem_ctx,
@@ -200,7 +201,7 @@ NTSTATUS socket_connect_multi_recv(struct composite_context *ctx,
uint16_t *port);
NTSTATUS socket_connect_multi(TALLOC_CTX *mem_ctx, const char *server_address,
int num_server_ports, uint16_t *server_ports,
- const char **name_resolve_order,
+ struct resolve_context *resolve_ctx,
struct event_context *event_ctx,
struct socket_context **result,
uint16_t *port);
diff --git a/source4/lib/socket/socket_ip.c b/source4/lib/socket/socket_ip.c
index e3676ad71a..e61b6d82fc 100644
--- a/source4/lib/socket/socket_ip.c
+++ b/source4/lib/socket/socket_ip.c
@@ -130,6 +130,8 @@ static NTSTATUS ipv4_connect(struct socket_context *sock,
if (!srv_ip.s_addr) {
return NT_STATUS_BAD_NETWORK_NAME;
}
+
+ SMB_ASSERT(srv_address->port != 0);
ZERO_STRUCT(srv_addr);
#ifdef HAVE_SOCK_SIN_LEN
@@ -356,6 +358,8 @@ static NTSTATUS ipv4_sendto(struct socket_context *sock,
} else {
struct sockaddr_in srv_addr;
struct in_addr addr;
+
+ SMB_ASSERT(dest_addr->port != 0);
ZERO_STRUCT(srv_addr);
#ifdef HAVE_SOCK_SIN_LEN
diff --git a/source4/lib/socket/testsuite.c b/source4/lib/socket/testsuite.c
index dea740dbc8..6d4d81a884 100644
--- a/source4/lib/socket/testsuite.c
+++ b/source4/lib/socket/testsuite.c
@@ -26,8 +26,9 @@
#include "lib/socket/netif.h"
#include "torture/torture.h"
#include "param/param.h"
+#include "libcli/resolve/resolve.h"
-/*
+/**
basic testing of udp routines
*/
static bool test_udp(struct torture_context *tctx)
@@ -39,6 +40,9 @@ static bool test_udp(struct torture_context *tctx)
DATA_BLOB blob, blob2;
size_t sent, nread;
TALLOC_CTX *mem_ctx = tctx;
+ struct interface *ifaces;
+
+ load_interfaces(tctx, lp_interfaces(tctx->lp_ctx), &ifaces);
status = socket_create("ip", SOCKET_TYPE_DGRAM, &sock1, 0);
torture_assert_ntstatus_ok(tctx, status, "creating DGRAM IP socket 1");
@@ -49,7 +53,7 @@ static bool test_udp(struct torture_context *tctx)
talloc_steal(mem_ctx, sock2);
localhost = socket_address_from_strings(sock1, sock1->backend_name,
- iface_best_ip(tctx->lp_ctx, "127.0.0.1"), 0);
+ iface_best_ip(ifaces, "127.0.0.1"), 0);
torture_assert(tctx, localhost, "Localhost not found");
@@ -58,10 +62,10 @@ static bool test_udp(struct torture_context *tctx)
srv_addr = socket_get_my_addr(sock1, mem_ctx);
torture_assert(tctx, srv_addr != NULL &&
- strcmp(srv_addr->addr, iface_best_ip(tctx->lp_ctx, "127.0.0.1")) == 0,
+ strcmp(srv_addr->addr, iface_best_ip(ifaces, "127.0.0.1")) == 0,
talloc_asprintf(tctx,
"Expected server address of %s but got %s",
- iface_best_ip(tctx->lp_ctx, "127.0.0.1"), srv_addr ? srv_addr->addr : NULL));
+ iface_best_ip(ifaces, "127.0.0.1"), srv_addr ? srv_addr->addr : NULL));
torture_comment(tctx, "server port is %d\n", srv_addr->port);
@@ -121,6 +125,7 @@ static bool test_tcp(struct torture_context *tctx)
size_t sent, nread;
TALLOC_CTX *mem_ctx = tctx;
struct event_context *ev = event_context_init(mem_ctx);
+ struct interface *ifaces;
status = socket_create("ip", SOCKET_TYPE_STREAM, &sock1, 0);
torture_assert_ntstatus_ok(tctx, status, "creating IP stream socket 1");
@@ -130,8 +135,9 @@ static bool test_tcp(struct torture_context *tctx)
torture_assert_ntstatus_ok(tctx, status, "creating IP stream socket 1");
talloc_steal(mem_ctx, sock2);
+ load_interfaces(tctx, lp_interfaces(tctx->lp_ctx), &ifaces);
localhost = socket_address_from_strings(sock1, sock1->backend_name,
- iface_best_ip(tctx->lp_ctx, "127.0.0.1"), 0);
+ iface_best_ip(ifaces, "127.0.0.1"), 0);
torture_assert(tctx, localhost, "Localhost not found");
status = socket_listen(sock1, localhost, 0, 0);
@@ -141,12 +147,12 @@ static bool test_tcp(struct torture_context *tctx)
torture_assert(tctx, srv_addr && srv_addr->addr,
"Unexpected socket_get_my_addr NULL\n");
- torture_assert_str_equal(tctx, srv_addr->addr, iface_best_ip(tctx->lp_ctx, "127.0.0.1"),
+ torture_assert_str_equal(tctx, srv_addr->addr, iface_best_ip(ifaces, "127.0.0.1"),
"Unexpected server address");
torture_comment(tctx, "server port is %d\n", srv_addr->port);
- status = socket_connect_ev(sock2, NULL, srv_addr, 0, lp_name_resolve_order(tctx->lp_ctx), ev);
+ status = socket_connect_ev(sock2, NULL, srv_addr, 0, NULL, ev);
torture_assert_ntstatus_ok(tctx, status, "connect() on socket 2");
status = socket_accept(sock1, &sock3);
diff --git a/source4/lib/talloc/talloc.c b/source4/lib/talloc/talloc.c
index 4d72c0e871..f9aefcd6de 100644
--- a/source4/lib/talloc/talloc.c
+++ b/source4/lib/talloc/talloc.c
@@ -1246,12 +1246,12 @@ char *talloc_strndup_append_buffer(char *s, const char *a, size_t n)
#endif
char *talloc_vasprintf(const void *t, const char *fmt, va_list ap)
-{
+{
int len;
char *ret;
va_list ap2;
char c;
-
+
/* this call looks strange, but it makes it work on older solaris boxes */
va_copy(ap2, ap);
len = vsnprintf(&c, 1, fmt, ap2);
diff --git a/source4/lib/talloc/talloc.i b/source4/lib/talloc/talloc.i
index c35d5d2411..c852ae8f9f 100644
--- a/source4/lib/talloc/talloc.i
+++ b/source4/lib/talloc/talloc.i
@@ -22,3 +22,10 @@
%typemap(in, numinputs=0) TALLOC_CTX * {
$1 = NULL;
}
+
+%define %talloctype(TYPE)
+%nodefaultctor TYPE;
+%extend TYPE {
+ ~TYPE() { talloc_free($self); }
+}
+%enddef
diff --git a/source4/lib/tdb/tdb.py b/source4/lib/tdb/tdb.py
index 1105291099..d4cf9f5c6f 100644
--- a/source4/lib/tdb/tdb.py
+++ b/source4/lib/tdb/tdb.py
@@ -2,7 +2,6 @@
# Version 1.3.33
#
# Don't modify this file, modify the SWIG interface instead.
-# This file is compatible with both classic and new-style classes.
import _tdb
import new
@@ -48,6 +47,16 @@ except AttributeError:
del types
+def _swig_setattr_nondynamic_method(set):
+ def set_attr(self,name,value):
+ if (name == "thisown"): return self.this.own(value)
+ if hasattr(self,name) or (name == "this"):
+ set(self,name,value)
+ else:
+ raise AttributeError("You cannot add attributes to %s" % self)
+ return set_attr
+
+
REPLACE = _tdb.REPLACE
INSERT = _tdb.INSERT
MODIFY = _tdb.MODIFY
@@ -69,39 +78,11 @@ TDB_ERR_LOCK_TIMEOUT = _tdb.TDB_ERR_LOCK_TIMEOUT
TDB_ERR_NOEXIST = _tdb.TDB_ERR_NOEXIST
TDB_ERR_EINVAL = _tdb.TDB_ERR_EINVAL
TDB_ERR_RDONLY = _tdb.TDB_ERR_RDONLY
-class tdb(_object):
- __swig_setmethods__ = {}
- __setattr__ = lambda self, name, value: _swig_setattr(self, tdb, name, value)
- __swig_getmethods__ = {}
- __getattr__ = lambda self, name: _swig_getattr(self, tdb, name)
+class tdb(object):
+ thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
def __init__(self): raise AttributeError, "No constructor defined"
__repr__ = _swig_repr
- def error(*args, **kwargs): return _tdb.tdb_error(*args, **kwargs)
__swig_destroy__ = _tdb.delete_tdb
- __del__ = lambda self : None;
- def close(*args, **kwargs): return _tdb.tdb_close(*args, **kwargs)
- def append(*args, **kwargs): return _tdb.tdb_append(*args, **kwargs)
- def errorstr(*args, **kwargs): return _tdb.tdb_errorstr(*args, **kwargs)
- def fetch(*args, **kwargs): return _tdb.tdb_fetch(*args, **kwargs)
- def delete(*args, **kwargs): return _tdb.tdb_delete(*args, **kwargs)
- def store(*args, **kwargs): return _tdb.tdb_store(*args, **kwargs)
- def exists(*args, **kwargs): return _tdb.tdb_exists(*args, **kwargs)
- def firstkey(*args, **kwargs): return _tdb.tdb_firstkey(*args, **kwargs)
- def nextkey(*args, **kwargs): return _tdb.tdb_nextkey(*args, **kwargs)
- def lock_all(*args, **kwargs): return _tdb.tdb_lock_all(*args, **kwargs)
- def unlock_all(*args, **kwargs): return _tdb.tdb_unlock_all(*args, **kwargs)
- def read_lock_all(*args, **kwargs): return _tdb.tdb_read_lock_all(*args, **kwargs)
- def read_unlock_all(*args, **kwargs): return _tdb.tdb_read_unlock_all(*args, **kwargs)
- def reopen(*args, **kwargs): return _tdb.tdb_reopen(*args, **kwargs)
- def transaction_start(*args, **kwargs): return _tdb.tdb_transaction_start(*args, **kwargs)
- def transaction_commit(*args, **kwargs): return _tdb.tdb_transaction_commit(*args, **kwargs)
- def transaction_cancel(*args, **kwargs): return _tdb.tdb_transaction_cancel(*args, **kwargs)
- def transaction_recover(*args, **kwargs): return _tdb.tdb_transaction_recover(*args, **kwargs)
- def hash_size(*args, **kwargs): return _tdb.tdb_hash_size(*args, **kwargs)
- def map_size(*args, **kwargs): return _tdb.tdb_map_size(*args, **kwargs)
- def get_flags(*args, **kwargs): return _tdb.tdb_get_flags(*args, **kwargs)
- def set_max_dead(*args, **kwargs): return _tdb.tdb_set_max_dead(*args, **kwargs)
- def name(*args, **kwargs): return _tdb.tdb_name(*args, **kwargs)
def __str__(self):
return self.name()
@@ -173,6 +154,30 @@ class tdb(_object):
+tdb.error = new_instancemethod(_tdb.tdb_error,None,tdb)
+tdb.close = new_instancemethod(_tdb.tdb_close,None,tdb)
+tdb.append = new_instancemethod(_tdb.tdb_append,None,tdb)
+tdb.errorstr = new_instancemethod(_tdb.tdb_errorstr,None,tdb)
+tdb.fetch = new_instancemethod(_tdb.tdb_fetch,None,tdb)
+tdb.delete = new_instancemethod(_tdb.tdb_delete,None,tdb)
+tdb.store = new_instancemethod(_tdb.tdb_store,None,tdb)
+tdb.exists = new_instancemethod(_tdb.tdb_exists,None,tdb)
+tdb.firstkey = new_instancemethod(_tdb.tdb_firstkey,None,tdb)
+tdb.nextkey = new_instancemethod(_tdb.tdb_nextkey,None,tdb)
+tdb.lock_all = new_instancemethod(_tdb.tdb_lock_all,None,tdb)
+tdb.unlock_all = new_instancemethod(_tdb.tdb_unlock_all,None,tdb)
+tdb.read_lock_all = new_instancemethod(_tdb.tdb_read_lock_all,None,tdb)
+tdb.read_unlock_all = new_instancemethod(_tdb.tdb_read_unlock_all,None,tdb)
+tdb.reopen = new_instancemethod(_tdb.tdb_reopen,None,tdb)
+tdb.transaction_start = new_instancemethod(_tdb.tdb_transaction_start,None,tdb)
+tdb.transaction_commit = new_instancemethod(_tdb.tdb_transaction_commit,None,tdb)
+tdb.transaction_cancel = new_instancemethod(_tdb.tdb_transaction_cancel,None,tdb)
+tdb.transaction_recover = new_instancemethod(_tdb.tdb_transaction_recover,None,tdb)
+tdb.hash_size = new_instancemethod(_tdb.tdb_hash_size,None,tdb)
+tdb.map_size = new_instancemethod(_tdb.tdb_map_size,None,tdb)
+tdb.get_flags = new_instancemethod(_tdb.tdb_get_flags,None,tdb)
+tdb.set_max_dead = new_instancemethod(_tdb.tdb_set_max_dead,None,tdb)
+tdb.name = new_instancemethod(_tdb.tdb_name,None,tdb)
tdb_swigregister = _tdb.tdb_swigregister
tdb_swigregister(tdb)
diff --git a/source4/lib/tdb/tdb_wrap.c b/source4/lib/tdb/tdb_wrap.c
index b9660c3428..841cd78399 100644
--- a/source4/lib/tdb/tdb_wrap.c
+++ b/source4/lib/tdb/tdb_wrap.c
@@ -9,7 +9,7 @@
* ----------------------------------------------------------------------------- */
#define SWIGPYTHON
-#define SWIG_PYTHON_DIRECTOR_NO_VTABLE
+#define SWIG_PYTHON_NO_BUILD_NONE
/* -----------------------------------------------------------------------------
* This section contains generic SWIG labels for method/variable
* declarations/attributes, and other compiler dependent labels.
@@ -2479,6 +2479,19 @@ static swig_module_info swig_module = {swig_types, 11, 0, 0, 0, 0};
# error "This python version requires swig to be run with the '-classic' option"
# endif
#endif
+#if (PY_VERSION_HEX <= 0x02020000)
+# error "This python version requires swig to be run with the '-nomodern' option"
+#endif
+#if (PY_VERSION_HEX <= 0x02020000)
+# error "This python version requires swig to be run with the '-nomodernargs' option"
+#endif
+#ifndef METH_O
+# error "This python version requires swig to be run with the '-nofastunpack' option"
+#endif
+#ifdef SWIG_TypeQuery
+# undef SWIG_TypeQuery
+#endif
+#define SWIG_TypeQuery SWIG_Python_TypeQuery
/*-----------------------------------------------
@(target):= _tdb.so
@@ -2880,10 +2893,11 @@ SWIGINTERN PyObject *_wrap_tdb_error(PyObject *SWIGUNUSEDPARM(self), PyObject *a
enum TDB_ERROR result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_error",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_error" "', argument " "1"" of type '" "tdb *""'");
}
@@ -2901,10 +2915,11 @@ SWIGINTERN PyObject *_wrap_delete_tdb(PyObject *SWIGUNUSEDPARM(self), PyObject *
tdb *arg1 = (tdb *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:delete_tdb",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, SWIG_POINTER_DISOWN | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, SWIG_POINTER_DISOWN | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_tdb" "', argument " "1"" of type '" "tdb *""'");
}
@@ -2924,10 +2939,11 @@ SWIGINTERN PyObject *_wrap_tdb_close(PyObject *SWIGUNUSEDPARM(self), PyObject *a
int result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_close",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_close" "', argument " "1"" of type '" "tdb *""'");
}
@@ -2991,10 +3007,11 @@ SWIGINTERN PyObject *_wrap_tdb_errorstr(PyObject *SWIGUNUSEDPARM(self), PyObject
char *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_errorstr",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_errorstr" "', argument " "1"" of type '" "tdb *""'");
}
@@ -3184,10 +3201,11 @@ SWIGINTERN PyObject *_wrap_tdb_firstkey(PyObject *SWIGUNUSEDPARM(self), PyObject
TDB_DATA result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_firstkey",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_firstkey" "', argument " "1"" of type '" "tdb *""'");
}
@@ -3255,10 +3273,11 @@ SWIGINTERN PyObject *_wrap_tdb_lock_all(PyObject *SWIGUNUSEDPARM(self), PyObject
int result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_lock_all",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_lock_all" "', argument " "1"" of type '" "tdb *""'");
}
@@ -3277,10 +3296,11 @@ SWIGINTERN PyObject *_wrap_tdb_unlock_all(PyObject *SWIGUNUSEDPARM(self), PyObje
int result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_unlock_all",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_unlock_all" "', argument " "1"" of type '" "tdb *""'");
}
@@ -3299,10 +3319,11 @@ SWIGINTERN PyObject *_wrap_tdb_read_lock_all(PyObject *SWIGUNUSEDPARM(self), PyO
int result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_read_lock_all",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_read_lock_all" "', argument " "1"" of type '" "tdb *""'");
}
@@ -3321,10 +3342,11 @@ SWIGINTERN PyObject *_wrap_tdb_read_unlock_all(PyObject *SWIGUNUSEDPARM(self), P
int result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_read_unlock_all",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_read_unlock_all" "', argument " "1"" of type '" "tdb *""'");
}
@@ -3343,10 +3365,11 @@ SWIGINTERN PyObject *_wrap_tdb_reopen(PyObject *SWIGUNUSEDPARM(self), PyObject *
int result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_reopen",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_reopen" "', argument " "1"" of type '" "tdb *""'");
}
@@ -3365,10 +3388,11 @@ SWIGINTERN PyObject *_wrap_tdb_transaction_start(PyObject *SWIGUNUSEDPARM(self),
int result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_transaction_start",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_transaction_start" "', argument " "1"" of type '" "tdb *""'");
}
@@ -3387,10 +3411,11 @@ SWIGINTERN PyObject *_wrap_tdb_transaction_commit(PyObject *SWIGUNUSEDPARM(self)
int result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_transaction_commit",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_transaction_commit" "', argument " "1"" of type '" "tdb *""'");
}
@@ -3409,10 +3434,11 @@ SWIGINTERN PyObject *_wrap_tdb_transaction_cancel(PyObject *SWIGUNUSEDPARM(self)
int result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_transaction_cancel",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_transaction_cancel" "', argument " "1"" of type '" "tdb *""'");
}
@@ -3431,10 +3457,11 @@ SWIGINTERN PyObject *_wrap_tdb_transaction_recover(PyObject *SWIGUNUSEDPARM(self
int result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_transaction_recover",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_transaction_recover" "', argument " "1"" of type '" "tdb *""'");
}
@@ -3453,10 +3480,11 @@ SWIGINTERN PyObject *_wrap_tdb_hash_size(PyObject *SWIGUNUSEDPARM(self), PyObjec
int result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_hash_size",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_hash_size" "', argument " "1"" of type '" "tdb *""'");
}
@@ -3475,10 +3503,11 @@ SWIGINTERN PyObject *_wrap_tdb_map_size(PyObject *SWIGUNUSEDPARM(self), PyObject
size_t result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_map_size",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_map_size" "', argument " "1"" of type '" "tdb *""'");
}
@@ -3497,10 +3526,11 @@ SWIGINTERN PyObject *_wrap_tdb_get_flags(PyObject *SWIGUNUSEDPARM(self), PyObjec
int result;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_get_flags",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_get_flags" "', argument " "1"" of type '" "tdb *""'");
}
@@ -3552,10 +3582,11 @@ SWIGINTERN PyObject *_wrap_tdb_name(PyObject *SWIGUNUSEDPARM(self), PyObject *ar
char *result = 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
- PyObject * obj0 = 0 ;
+ PyObject *swig_obj[1] ;
- if (!PyArg_ParseTuple(args,(char *)"O:tdb_name",&obj0)) SWIG_fail;
- res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
+ if (!args) SWIG_fail;
+ swig_obj[0] = args;
+ res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_tdb_context, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "tdb_name" "', argument " "1"" of type '" "tdb *""'");
}
@@ -3570,38 +3601,38 @@ fail:
SWIGINTERN PyObject *tdb_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *obj;
- if (!PyArg_ParseTuple(args,(char*)"O|swigregister", &obj)) return NULL;
+ if (!SWIG_Python_UnpackTuple(args,(char*)"swigregister", 1, 1,&obj)) return NULL;
SWIG_TypeNewClientData(SWIGTYPE_p_tdb_context, SWIG_NewClientData(obj));
return SWIG_Py_Void();
}
static PyMethodDef SwigMethods[] = {
{ (char *)"new_Tdb", (PyCFunction) _wrap_new_Tdb, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"tdb_error", _wrap_tdb_error, METH_VARARGS, NULL},
- { (char *)"delete_tdb", _wrap_delete_tdb, METH_VARARGS, NULL},
- { (char *)"tdb_close", _wrap_tdb_close, METH_VARARGS, NULL},
+ { (char *)"tdb_error", (PyCFunction)_wrap_tdb_error, METH_O, NULL},
+ { (char *)"delete_tdb", (PyCFunction)_wrap_delete_tdb, METH_O, NULL},
+ { (char *)"tdb_close", (PyCFunction)_wrap_tdb_close, METH_O, NULL},
{ (char *)"tdb_append", (PyCFunction) _wrap_tdb_append, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"tdb_errorstr", _wrap_tdb_errorstr, METH_VARARGS, NULL},
+ { (char *)"tdb_errorstr", (PyCFunction)_wrap_tdb_errorstr, METH_O, NULL},
{ (char *)"tdb_fetch", (PyCFunction) _wrap_tdb_fetch, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"tdb_delete", (PyCFunction) _wrap_tdb_delete, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"tdb_store", (PyCFunction) _wrap_tdb_store, METH_VARARGS | METH_KEYWORDS, NULL},
{ (char *)"tdb_exists", (PyCFunction) _wrap_tdb_exists, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"tdb_firstkey", _wrap_tdb_firstkey, METH_VARARGS, NULL},
+ { (char *)"tdb_firstkey", (PyCFunction)_wrap_tdb_firstkey, METH_O, NULL},
{ (char *)"tdb_nextkey", (PyCFunction) _wrap_tdb_nextkey, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"tdb_lock_all", _wrap_tdb_lock_all, METH_VARARGS, NULL},
- { (char *)"tdb_unlock_all", _wrap_tdb_unlock_all, METH_VARARGS, NULL},
- { (char *)"tdb_read_lock_all", _wrap_tdb_read_lock_all, METH_VARARGS, NULL},
- { (char *)"tdb_read_unlock_all", _wrap_tdb_read_unlock_all, METH_VARARGS, NULL},
- { (char *)"tdb_reopen", _wrap_tdb_reopen, METH_VARARGS, NULL},
- { (char *)"tdb_transaction_start", _wrap_tdb_transaction_start, METH_VARARGS, NULL},
- { (char *)"tdb_transaction_commit", _wrap_tdb_transaction_commit, METH_VARARGS, NULL},
- { (char *)"tdb_transaction_cancel", _wrap_tdb_transaction_cancel, METH_VARARGS, NULL},
- { (char *)"tdb_transaction_recover", _wrap_tdb_transaction_recover, METH_VARARGS, NULL},
- { (char *)"tdb_hash_size", _wrap_tdb_hash_size, METH_VARARGS, NULL},
- { (char *)"tdb_map_size", _wrap_tdb_map_size, METH_VARARGS, NULL},
- { (char *)"tdb_get_flags", _wrap_tdb_get_flags, METH_VARARGS, NULL},
+ { (char *)"tdb_lock_all", (PyCFunction)_wrap_tdb_lock_all, METH_O, NULL},
+ { (char *)"tdb_unlock_all", (PyCFunction)_wrap_tdb_unlock_all, METH_O, NULL},
+ { (char *)"tdb_read_lock_all", (PyCFunction)_wrap_tdb_read_lock_all, METH_O, NULL},
+ { (char *)"tdb_read_unlock_all", (PyCFunction)_wrap_tdb_read_unlock_all, METH_O, NULL},
+ { (char *)"tdb_reopen", (PyCFunction)_wrap_tdb_reopen, METH_O, NULL},
+ { (char *)"tdb_transaction_start", (PyCFunction)_wrap_tdb_transaction_start, METH_O, NULL},
+ { (char *)"tdb_transaction_commit", (PyCFunction)_wrap_tdb_transaction_commit, METH_O, NULL},
+ { (char *)"tdb_transaction_cancel", (PyCFunction)_wrap_tdb_transaction_cancel, METH_O, NULL},
+ { (char *)"tdb_transaction_recover", (PyCFunction)_wrap_tdb_transaction_recover, METH_O, NULL},
+ { (char *)"tdb_hash_size", (PyCFunction)_wrap_tdb_hash_size, METH_O, NULL},
+ { (char *)"tdb_map_size", (PyCFunction)_wrap_tdb_map_size, METH_O, NULL},
+ { (char *)"tdb_get_flags", (PyCFunction)_wrap_tdb_get_flags, METH_O, NULL},
{ (char *)"tdb_set_max_dead", (PyCFunction) _wrap_tdb_set_max_dead, METH_VARARGS | METH_KEYWORDS, NULL},
- { (char *)"tdb_name", _wrap_tdb_name, METH_VARARGS, NULL},
+ { (char *)"tdb_name", (PyCFunction)_wrap_tdb_name, METH_O, NULL},
{ (char *)"tdb_swigregister", tdb_swigregister, METH_VARARGS, NULL},
{ NULL, NULL, 0, NULL }
};
diff --git a/source4/lib/tdr/tdr.c b/source4/lib/tdr/tdr.c
index 0757a02e47..f75cac9810 100644
--- a/source4/lib/tdr/tdr.c
+++ b/source4/lib/tdr/tdr.c
@@ -24,6 +24,7 @@
#include "system/filesys.h"
#include "system/network.h"
#include "tdr/tdr.h"
+#include "param/param.h"
#define TDR_BASE_MARSHALL_SIZE 1024
@@ -153,7 +154,7 @@ NTSTATUS tdr_pull_charset(struct tdr_pull *tdr, TALLOC_CTX *ctx, const char **v,
TDR_PULL_NEED_BYTES(tdr, el_size*length);
- ret = convert_string_talloc(ctx, global_smb_iconv_convenience, chset, CH_UNIX, tdr->data.data+tdr->offset, el_size*length, discard_const_p(void *, v));
+ ret = convert_string_talloc(ctx, lp_iconv_convenience(global_loadparm), chset, CH_UNIX, tdr->data.data+tdr->offset, el_size*length, discard_const_p(void *, v));
if (ret == -1) {
return NT_STATUS_INVALID_PARAMETER;
@@ -175,7 +176,7 @@ NTSTATUS tdr_push_charset(struct tdr_push *tdr, const char **v, uint32_t length,
required = el_size * length;
TDR_PUSH_NEED_BYTES(tdr, required);
- ret = convert_string(global_smb_iconv_convenience, CH_UNIX, chset, *v, strlen(*v), tdr->data.data+tdr->data.length, required);
+ ret = convert_string(tdr->iconv_convenience, CH_UNIX, chset, *v, strlen(*v), tdr->data.data+tdr->data.length, required);
if (ret == -1) {
return NT_STATUS_INVALID_PARAMETER;
@@ -371,9 +372,33 @@ NTSTATUS tdr_pull_DATA_BLOB(struct tdr_pull *tdr, TALLOC_CTX *ctx, DATA_BLOB *bl
return NT_STATUS_OK;
}
-NTSTATUS tdr_push_to_fd(int fd, tdr_push_fn_t push_fn, const void *p)
+struct tdr_push *tdr_push_init(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *ic)
{
- struct tdr_push *push = talloc_zero(NULL, struct tdr_push);
+ struct tdr_push *push = talloc_zero(mem_ctx, struct tdr_push);
+
+ if (push == NULL)
+ return NULL;
+
+ push->iconv_convenience = talloc_reference(push, ic);
+
+ return push;
+}
+
+struct tdr_pull *tdr_pull_init(TALLOC_CTX *mem_ctx, struct smb_iconv_convenience *ic)
+{
+ struct tdr_pull *pull = talloc_zero(mem_ctx, struct tdr_pull);
+
+ if (pull == NULL)
+ return NULL;
+
+ pull->iconv_convenience = talloc_reference(pull, ic);
+
+ return pull;
+}
+
+NTSTATUS tdr_push_to_fd(int fd, struct smb_iconv_convenience *iconv_convenience, tdr_push_fn_t push_fn, const void *p)
+{
+ struct tdr_push *push = tdr_push_init(NULL, iconv_convenience);
if (push == NULL)
return NT_STATUS_NO_MEMORY;
@@ -404,9 +429,7 @@ void tdr_print_debug_helper(struct tdr_print *tdr, const char *format, ...) _PRI
vasprintf(&s, format, ap);
va_end(ap);
- for (i=0;i<tdr->level;i++) {
- DEBUG(0,(" "));
- }
+ for (i=0;i<tdr->level;i++) { DEBUG(0,(" ")); }
DEBUG(0,("%s\n", s));
free(s);
diff --git a/source4/lib/tdr/tdr.h b/source4/lib/tdr/tdr.h
index 689b9f3ebb..301cd3002e 100644
--- a/source4/lib/tdr/tdr.h
+++ b/source4/lib/tdr/tdr.h
@@ -33,11 +33,13 @@ struct tdr_pull {
DATA_BLOB data;
uint32_t offset;
int flags;
+ struct smb_iconv_convenience *iconv_convenience;
};
struct tdr_push {
DATA_BLOB data;
int flags;
+ struct smb_iconv_convenience *iconv_convenience;
};
struct tdr_print {
diff --git a/source4/lib/tdr/testsuite.c b/source4/lib/tdr/testsuite.c
index 20afca25a5..44c5810f90 100644
--- a/source4/lib/tdr/testsuite.c
+++ b/source4/lib/tdr/testsuite.c
@@ -21,11 +21,12 @@
#include "includes.h"
#include "torture/torture.h"
#include "lib/tdr/tdr.h"
+#include "param/param.h"
static bool test_push_uint8(struct torture_context *tctx)
{
uint8_t v = 4;
- struct tdr_push *tdr = talloc_zero(tctx, struct tdr_push);
+ struct tdr_push *tdr = tdr_push_init(tctx, lp_iconv_convenience(tctx->lp_ctx));
torture_assert_ntstatus_ok(tctx, tdr_push_uint8(tdr, &v), "push failed");
torture_assert_int_equal(tctx, tdr->data.length, 1, "length incorrect");
@@ -37,14 +38,14 @@ static bool test_pull_uint8(struct torture_context *tctx)
{
uint8_t d = 2;
uint8_t l;
- struct tdr_pull tdr;
- tdr.data.data = &d;
- tdr.data.length = 1;
- tdr.offset = 0;
- tdr.flags = 0;
- torture_assert_ntstatus_ok(tctx, tdr_pull_uint8(&tdr, tctx, &l),
+ struct tdr_pull *tdr = tdr_pull_init(tctx, lp_iconv_convenience(tctx->lp_ctx));
+ tdr->data.data = &d;
+ tdr->data.length = 1;
+ tdr->offset = 0;
+ tdr->flags = 0;
+ torture_assert_ntstatus_ok(tctx, tdr_pull_uint8(tdr, tctx, &l),
"pull failed");
- torture_assert_int_equal(tctx, 1, tdr.offset,
+ torture_assert_int_equal(tctx, 1, tdr->offset,
"offset invalid");
return true;
}
@@ -52,7 +53,7 @@ static bool test_pull_uint8(struct torture_context *tctx)
static bool test_push_uint16(struct torture_context *tctx)
{
uint16_t v = 0xF32;
- struct tdr_push *tdr = talloc_zero(tctx, struct tdr_push);
+ struct tdr_push *tdr = tdr_push_init(tctx, lp_iconv_convenience(tctx->lp_ctx));
torture_assert_ntstatus_ok(tctx, tdr_push_uint16(tdr, &v), "push failed");
torture_assert_int_equal(tctx, tdr->data.length, 2, "length incorrect");
@@ -65,15 +66,14 @@ static bool test_pull_uint16(struct torture_context *tctx)
{
uint8_t d[2] = { 782 & 0xFF, (782 & 0xFF00) / 0x100 };
uint16_t l;
- struct tdr_pull tdr;
- tdr.data.data = d;
- tdr.data.length = 2;
- tdr.offset = 0;
- tdr.flags = 0;
- torture_assert_ntstatus_ok(tctx, tdr_pull_uint16(&tdr, tctx, &l),
+ struct tdr_pull *tdr = tdr_pull_init(tctx, lp_iconv_convenience(tctx->lp_ctx));
+ tdr->data.data = d;
+ tdr->data.length = 2;
+ tdr->offset = 0;
+ tdr->flags = 0;
+ torture_assert_ntstatus_ok(tctx, tdr_pull_uint16(tdr, tctx, &l),
"pull failed");
- torture_assert_int_equal(tctx, 2, tdr.offset,
- "offset invalid");
+ torture_assert_int_equal(tctx, 2, tdr->offset, "offset invalid");
torture_assert_int_equal(tctx, 782, l, "right int read");
return true;
}
@@ -81,7 +81,7 @@ static bool test_pull_uint16(struct torture_context *tctx)
static bool test_push_uint32(struct torture_context *tctx)
{
uint32_t v = 0x100F32;
- struct tdr_push *tdr = talloc_zero(tctx, struct tdr_push);
+ struct tdr_push *tdr = tdr_push_init(tctx, lp_iconv_convenience(tctx->lp_ctx));
torture_assert_ntstatus_ok(tctx, tdr_push_uint32(tdr, &v), "push failed");
torture_assert_int_equal(tctx, tdr->data.length, 4, "length incorrect");
@@ -96,35 +96,35 @@ static bool test_pull_uint32(struct torture_context *tctx)
{
uint8_t d[4] = { 782 & 0xFF, (782 & 0xFF00) / 0x100, 0, 0 };
uint32_t l;
- struct tdr_pull tdr;
- tdr.data.data = d;
- tdr.data.length = 4;
- tdr.offset = 0;
- tdr.flags = 0;
- torture_assert_ntstatus_ok(tctx, tdr_pull_uint32(&tdr, tctx, &l),
+ struct tdr_pull *tdr = tdr_pull_init(tctx, lp_iconv_convenience(tctx->lp_ctx));
+ tdr->data.data = d;
+ tdr->data.length = 4;
+ tdr->offset = 0;
+ tdr->flags = 0;
+ torture_assert_ntstatus_ok(tctx, tdr_pull_uint32(tdr, tctx, &l),
"pull failed");
- torture_assert_int_equal(tctx, 4, tdr.offset, "offset invalid");
+ torture_assert_int_equal(tctx, 4, tdr->offset, "offset invalid");
torture_assert_int_equal(tctx, 782, l, "right int read");
return true;
}
static bool test_pull_charset(struct torture_context *tctx)
{
- struct tdr_pull tdr;
+ struct tdr_pull *tdr = tdr_pull_init(tctx, lp_iconv_convenience(tctx->lp_ctx));
const char *l = NULL;
- tdr.data.data = (uint8_t *)talloc_strdup(tctx, "bla");
- tdr.data.length = 4;
- tdr.offset = 0;
- tdr.flags = 0;
- torture_assert_ntstatus_ok(tctx, tdr_pull_charset(&tdr, tctx, &l, -1, 1, CH_DOS),
+ tdr->data.data = (uint8_t *)talloc_strdup(tctx, "bla");
+ tdr->data.length = 4;
+ tdr->offset = 0;
+ tdr->flags = 0;
+ torture_assert_ntstatus_ok(tctx, tdr_pull_charset(tdr, tctx, &l, -1, 1, CH_DOS),
"pull failed");
- torture_assert_int_equal(tctx, 4, tdr.offset, "offset invalid");
+ torture_assert_int_equal(tctx, 4, tdr->offset, "offset invalid");
torture_assert_str_equal(tctx, "bla", l, "right int read");
- tdr.offset = 0;
- torture_assert_ntstatus_ok(tctx, tdr_pull_charset(&tdr, tctx, &l, 2, 1, CH_UNIX),
+ tdr->offset = 0;
+ torture_assert_ntstatus_ok(tctx, tdr_pull_charset(tdr, tctx, &l, 2, 1, CH_UNIX),
"pull failed");
- torture_assert_int_equal(tctx, 2, tdr.offset, "offset invalid");
+ torture_assert_int_equal(tctx, 2, tdr->offset, "offset invalid");
torture_assert_str_equal(tctx, "bl", l, "right int read");
return true;
@@ -132,15 +132,15 @@ static bool test_pull_charset(struct torture_context *tctx)
static bool test_pull_charset_empty(struct torture_context *tctx)
{
- struct tdr_pull tdr;
+ struct tdr_pull *tdr = tdr_pull_init(tctx, lp_iconv_convenience(tctx->lp_ctx));
const char *l = NULL;
- tdr.data.data = (uint8_t *)talloc_strdup(tctx, "bla");
- tdr.data.length = 4;
- tdr.offset = 0;
- tdr.flags = 0;
- torture_assert_ntstatus_ok(tctx, tdr_pull_charset(&tdr, tctx, &l, 0, 1, CH_DOS),
+ tdr->data.data = (uint8_t *)talloc_strdup(tctx, "bla");
+ tdr->data.length = 4;
+ tdr->offset = 0;
+ tdr->flags = 0;
+ torture_assert_ntstatus_ok(tctx, tdr_pull_charset(tdr, tctx, &l, 0, 1, CH_DOS),
"pull failed");
- torture_assert_int_equal(tctx, 0, tdr.offset, "offset invalid");
+ torture_assert_int_equal(tctx, 0, tdr->offset, "offset invalid");
torture_assert_str_equal(tctx, "", l, "right string read");
return true;
@@ -151,7 +151,7 @@ static bool test_pull_charset_empty(struct torture_context *tctx)
static bool test_push_charset(struct torture_context *tctx)
{
const char *l = "bloe";
- struct tdr_push *tdr = talloc_zero(tctx, struct tdr_push);
+ struct tdr_push *tdr = tdr_push_init(tctx, lp_iconv_convenience(tctx->lp_ctx));
torture_assert_ntstatus_ok(tctx, tdr_push_charset(tdr, &l, 4, 1, CH_UTF8),
"push failed");
torture_assert_int_equal(tctx, 4, tdr->data.length, "offset invalid");
diff --git a/source4/lib/util/dprintf.c b/source4/lib/util/dprintf.c
index 5b3fe4b1ea..308d81b105 100644
--- a/source4/lib/util/dprintf.c
+++ b/source4/lib/util/dprintf.c
@@ -2,6 +2,7 @@
Unix SMB/CIFS implementation.
display print functions
Copyright (C) Andrew Tridgell 2001
+ Copyright (C) Jelmer Vernooij 2007
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -32,13 +33,26 @@
#include "includes.h"
#include "system/locale.h"
+#include "param/param.h"
+
+static smb_iconv_t display_cd = (smb_iconv_t)-1;
+
+void d_set_iconv(smb_iconv_t cd)
+{
+ display_cd = cd;
+}
_PUBLIC_ int d_vfprintf(FILE *f, const char *format, va_list ap) _PRINTF_ATTRIBUTE(2,0)
{
char *p, *p2;
- int ret, maxlen, clen;
+ int ret, clen;
va_list ap2;
+ /* If there's nothing to convert, take a shortcut */
+ if (display_cd == (smb_iconv_t)-1) {
+ return vfprintf(f, format, ap);
+ }
+
/* do any message translations */
va_copy(ap2, ap);
ret = vasprintf(&p, format, ap2);
@@ -46,16 +60,7 @@ _PUBLIC_ int d_vfprintf(FILE *f, const char *format, va_list ap) _PRINTF_ATTRIBU
if (ret <= 0) return ret;
- /* now we have the string in unix format, convert it to the display
- charset, but beware of it growing */
- maxlen = ret*2;
-again:
- p2 = (char *)malloc(maxlen);
- if (!p2) {
- SAFE_FREE(p);
- return -1;
- }
- clen = convert_string(global_smb_iconv_convenience, CH_UNIX, CH_DISPLAY, p, ret, p2, maxlen);
+ clen = convert_string_talloc_descriptor(NULL, display_cd, p, ret, (void **)&p2);
if (clen == -1) {
/* the string can't be converted - do the best we can,
filling in non-printing chars with '?' */
@@ -68,22 +73,13 @@ again:
}
}
SAFE_FREE(p);
- SAFE_FREE(p2);
return ret;
}
-
- if (clen >= maxlen) {
- /* it didn't fit - try a larger buffer */
- maxlen *= 2;
- SAFE_FREE(p2);
- goto again;
- }
-
/* good, its converted OK */
SAFE_FREE(p);
ret = fwrite(p2, 1, clen, f);
- SAFE_FREE(p2);
+ talloc_free(p2);
return ret;
}
@@ -112,3 +108,4 @@ _PUBLIC_ int d_printf(const char *format, ...) _PRINTF_ATTRIBUTE(1,2)
return ret;
}
+
diff --git a/source4/lib/util/ms_fnmatch.c b/source4/lib/util/ms_fnmatch.c
index e1bf6f94c5..1fb57b07a4 100644
--- a/source4/lib/util/ms_fnmatch.c
+++ b/source4/lib/util/ms_fnmatch.c
@@ -29,6 +29,7 @@
*/
#include "includes.h"
+#include "param/param.h"
static int null_match(const char *p)
{
@@ -64,7 +65,7 @@ static int ms_fnmatch_core(const char *p, const char *n,
int i;
size_t size, size_n;
- while ((c = next_codepoint(global_smb_iconv_convenience, p, &size))) {
+ while ((c = next_codepoint(lp_iconv_convenience(global_loadparm), p, &size))) {
p += size;
switch (c) {
@@ -74,7 +75,7 @@ static int ms_fnmatch_core(const char *p, const char *n,
return null_match(p);
}
for (i=0; n[i]; i += size_n) {
- next_codepoint(global_smb_iconv_convenience, n+i, &size_n);
+ next_codepoint(lp_iconv_convenience(global_loadparm), n+i, &size_n);
if (ms_fnmatch_core(p, n+i, max_n+1, ldot) == 0) {
return 0;
}
@@ -93,7 +94,7 @@ static int ms_fnmatch_core(const char *p, const char *n,
return -1;
}
for (i=0; n[i]; i += size_n) {
- next_codepoint(global_smb_iconv_convenience, n+i, &size_n);
+ next_codepoint(lp_iconv_convenience(global_loadparm), n+i, &size_n);
if (ms_fnmatch_core(p, n+i, max_n+1, ldot) == 0) return 0;
if (n+i == ldot) {
if (ms_fnmatch_core(p, n+i+size_n, max_n+1, ldot) == 0) return 0;
@@ -109,7 +110,7 @@ static int ms_fnmatch_core(const char *p, const char *n,
if (! *n) {
return -1;
}
- next_codepoint(global_smb_iconv_convenience, n, &size_n);
+ next_codepoint(lp_iconv_convenience(global_loadparm), n, &size_n);
n += size_n;
break;
@@ -123,7 +124,7 @@ static int ms_fnmatch_core(const char *p, const char *n,
break;
}
if (! *n) return null_match(p);
- next_codepoint(global_smb_iconv_convenience, n, &size_n);
+ next_codepoint(lp_iconv_convenience(global_loadparm), n, &size_n);
n += size_n;
break;
@@ -133,12 +134,12 @@ static int ms_fnmatch_core(const char *p, const char *n,
return 0;
}
if (*n != '.') return -1;
- next_codepoint(global_smb_iconv_convenience, n, &size_n);
+ next_codepoint(lp_iconv_convenience(global_loadparm), n, &size_n);
n += size_n;
break;
default:
- c2 = next_codepoint(global_smb_iconv_convenience, n, &size_n);
+ c2 = next_codepoint(lp_iconv_convenience(global_loadparm), n, &size_n);
if (c != c2 && codepoint_cmpi(c, c2) != 0) {
return -1;
}
diff --git a/source4/lib/util/smbrun.c b/source4/lib/util/smbrun.c
deleted file mode 100644
index 26330ab992..0000000000
--- a/source4/lib/util/smbrun.c
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- Unix SMB/CIFS implementation.
- run a command as a specified user
- Copyright (C) Andrew Tridgell 1992-1998
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-
-/* need to move this from here!! need some sleep ... */
-struct current_user current_user;
-
-/****************************************************************************
-This is a utility function of smbrun().
-****************************************************************************/
-
-static int setup_out_fd(void)
-{
- int fd;
- TALLOC_CTX *ctx = talloc_stackframe();
- char *path = NULL;
-
- path = talloc_asprintf(ctx,
- "%s/smb.XXXXXX",
- tmpdir());
- if (!path) {
- TALLOC_FREE(ctx);
- errno = ENOMEM;
- return -1;
- }
-
- /* now create the file */
- fd = smb_mkstemp(path);
-
- if (fd == -1) {
- DEBUG(0,("setup_out_fd: Failed to create file %s. (%s)\n",
- path, strerror(errno) ));
- TALLOC_FREE(ctx);
- return -1;
- }
-
- DEBUG(10,("setup_out_fd: Created tmp file %s\n", path ));
-
- /* Ensure file only kept around by open fd. */
- unlink(path);
- TALLOC_FREE(ctx);
- return fd;
-}
-
-/****************************************************************************
-run a command being careful about uid/gid handling and putting the output in
-outfd (or discard it if outfd is NULL).
-****************************************************************************/
-
-static int smbrun_internal(const char *cmd, int *outfd, BOOL sanitize)
-{
- pid_t pid;
- uid_t uid = current_user.ut.uid;
- gid_t gid = current_user.ut.gid;
-
- /*
- * Lose any elevated privileges.
- */
- drop_effective_capability(KERNEL_OPLOCK_CAPABILITY);
- drop_effective_capability(DMAPI_ACCESS_CAPABILITY);
-
- /* point our stdout at the file we want output to go into */
-
- if (outfd && ((*outfd = setup_out_fd()) == -1)) {
- return -1;
- }
-
- /* in this method we will exec /bin/sh with the correct
- arguments, after first setting stdout to point at the file */
-
- /*
- * We need to temporarily stop CatchChild from eating
- * SIGCLD signals as it also eats the exit status code. JRA.
- */
-
- CatchChildLeaveStatus();
-
- if ((pid=sys_fork()) < 0) {
- DEBUG(0,("smbrun: fork failed with error %s\n", strerror(errno) ));
- CatchChild();
- if (outfd) {
- close(*outfd);
- *outfd = -1;
- }
- return errno;
- }
-
- if (pid) {
- /*
- * Parent.
- */
- int status=0;
- pid_t wpid;
-
-
- /* the parent just waits for the child to exit */
- while((wpid = sys_waitpid(pid,&status,0)) < 0) {
- if(errno == EINTR) {
- errno = 0;
- continue;
- }
- break;
- }
-
- CatchChild();
-
- if (wpid != pid) {
- DEBUG(2,("waitpid(%d) : %s\n",(int)pid,strerror(errno)));
- if (outfd) {
- close(*outfd);
- *outfd = -1;
- }
- return -1;
- }
-
- /* Reset the seek pointer. */
- if (outfd) {
- sys_lseek(*outfd, 0, SEEK_SET);
- }
-
-#if defined(WIFEXITED) && defined(WEXITSTATUS)
- if (WIFEXITED(status)) {
- return WEXITSTATUS(status);
- }
-#endif
-
- return status;
- }
-
- CatchChild();
-
- /* we are in the child. we exec /bin/sh to do the work for us. we
- don't directly exec the command we want because it may be a
- pipeline or anything else the config file specifies */
-
- /* point our stdout at the file we want output to go into */
- if (outfd) {
- close(1);
- if (sys_dup2(*outfd,1) != 1) {
- DEBUG(2,("Failed to create stdout file descriptor\n"));
- close(*outfd);
- exit(80);
- }
- }
-
- /* now completely lose our privileges. This is a fairly paranoid
- way of doing it, but it does work on all systems that I know of */
-
- become_user_permanently(uid, gid);
-
- if (getuid() != uid || geteuid() != uid ||
- getgid() != gid || getegid() != gid) {
- /* we failed to lose our privileges - do not execute
- the command */
- exit(81); /* we can't print stuff at this stage,
- instead use exit codes for debugging */
- }
-
-#ifndef __INSURE__
- /* close all other file descriptors, leaving only 0, 1 and 2. 0 and
- 2 point to /dev/null from the startup code */
- {
- int fd;
- for (fd=3;fd<256;fd++) close(fd);
- }
-#endif
-
- {
- const char *newcmd = sanitize ? escape_shell_string(cmd) : cmd;
- if (!newcmd) {
- exit(82);
- }
- execl("/bin/sh","sh","-c",newcmd,NULL);
- }
-
- /* not reached */
- exit(83);
- return 1;
-}
-
-/****************************************************************************
- Use only in known safe shell calls (printing).
-****************************************************************************/
-
-int smbrun_no_sanitize(const char *cmd, int *outfd)
-{
- return smbrun_internal(cmd, outfd, False);
-}
-
-/****************************************************************************
- By default this now sanitizes shell expansion.
-****************************************************************************/
-
-int smbrun(const char *cmd, int *outfd)
-{
- return smbrun_internal(cmd, outfd, True);
-}
-
-/****************************************************************************
-run a command being careful about uid/gid handling and putting the output in
-outfd (or discard it if outfd is NULL).
-sends the provided secret to the child stdin.
-****************************************************************************/
-
-int smbrunsecret(const char *cmd, const char *secret)
-{
- pid_t pid;
- uid_t uid = current_user.ut.uid;
- gid_t gid = current_user.ut.gid;
- int ifd[2];
-
- /*
- * Lose any elevated privileges.
- */
- drop_effective_capability(KERNEL_OPLOCK_CAPABILITY);
- drop_effective_capability(DMAPI_ACCESS_CAPABILITY);
-
- /* build up an input pipe */
- if(pipe(ifd)) {
- return -1;
- }
-
- /* in this method we will exec /bin/sh with the correct
- arguments, after first setting stdout to point at the file */
-
- /*
- * We need to temporarily stop CatchChild from eating
- * SIGCLD signals as it also eats the exit status code. JRA.
- */
-
- CatchChildLeaveStatus();
-
- if ((pid=sys_fork()) < 0) {
- DEBUG(0, ("smbrunsecret: fork failed with error %s\n", strerror(errno)));
- CatchChild();
- return errno;
- }
-
- if (pid) {
- /*
- * Parent.
- */
- int status = 0;
- pid_t wpid;
- size_t towrite;
- ssize_t wrote;
-
- close(ifd[0]);
- /* send the secret */
- towrite = strlen(secret);
- wrote = write(ifd[1], secret, towrite);
- if ( wrote != towrite ) {
- DEBUG(0,("smbrunsecret: wrote %ld of %lu bytes\n",(long)wrote,(unsigned long)towrite));
- }
- fsync(ifd[1]);
- close(ifd[1]);
-
- /* the parent just waits for the child to exit */
- while((wpid = sys_waitpid(pid, &status, 0)) < 0) {
- if(errno == EINTR) {
- errno = 0;
- continue;
- }
- break;
- }
-
- CatchChild();
-
- if (wpid != pid) {
- DEBUG(2, ("waitpid(%d) : %s\n", (int)pid, strerror(errno)));
- return -1;
- }
-
-#if defined(WIFEXITED) && defined(WEXITSTATUS)
- if (WIFEXITED(status)) {
- return WEXITSTATUS(status);
- }
-#endif
-
- return status;
- }
-
- CatchChild();
-
- /* we are in the child. we exec /bin/sh to do the work for us. we
- don't directly exec the command we want because it may be a
- pipeline or anything else the config file specifies */
-
- close(ifd[1]);
- close(0);
- if (sys_dup2(ifd[0], 0) != 0) {
- DEBUG(2,("Failed to create stdin file descriptor\n"));
- close(ifd[0]);
- exit(80);
- }
-
- /* now completely lose our privileges. This is a fairly paranoid
- way of doing it, but it does work on all systems that I know of */
-
- become_user_permanently(uid, gid);
-
- if (getuid() != uid || geteuid() != uid ||
- getgid() != gid || getegid() != gid) {
- /* we failed to lose our privileges - do not execute
- the command */
- exit(81); /* we can't print stuff at this stage,
- instead use exit codes for debugging */
- }
-
-#ifndef __INSURE__
- /* close all other file descriptors, leaving only 0, 1 and 2. 0 and
- 2 point to /dev/null from the startup code */
- {
- int fd;
- for (fd = 3; fd < 256; fd++) close(fd);
- }
-#endif
-
- execl("/bin/sh", "sh", "-c", cmd, NULL);
-
- /* not reached */
- exit(82);
- return 1;
-}
diff --git a/source4/lib/util/tests/strlist.c b/source4/lib/util/tests/strlist.c
index 437d9d741a..3ecb982e24 100644
--- a/source4/lib/util/tests/strlist.c
+++ b/source4/lib/util/tests/strlist.c
@@ -64,6 +64,29 @@ static bool test_lists_shell(struct torture_context *tctx,
return true;
}
+static bool test_list_copy(struct torture_context *tctx)
+{
+ const char **result;
+ const char *list[] = { "foo", "bar", NULL };
+ const char *empty_list[] = { NULL };
+ const char **null_list = NULL;
+
+ result = str_list_copy(tctx, list);
+ torture_assert_int_equal(tctx, str_list_length(result), 2, "list length");
+ torture_assert_str_equal(tctx, result[0], "foo", "element 0");
+ torture_assert_str_equal(tctx, result[1], "bar", "element 1");
+ torture_assert_str_equal(tctx, result[2], NULL, "element 2");
+
+ result = str_list_copy(tctx, empty_list);
+ torture_assert_int_equal(tctx, str_list_length(result), 0, "list length");
+ torture_assert_str_equal(tctx, result[0], NULL, "element 0");
+
+ result = str_list_copy(tctx, null_list);
+ torture_assert(tctx, result == NULL, "result NULL");
+
+ return true;
+}
+
struct torture_suite *torture_local_util_strlist(TALLOC_CTX *mem_ctx)
{
struct torture_suite *suite = torture_suite_create(mem_ctx, "STRLIST");
@@ -75,5 +98,7 @@ struct torture_suite *torture_local_util_strlist(TALLOC_CTX *mem_ctx)
&test_lists_shell_strings[i]);
}
+ torture_suite_add_simple_test(suite, "list_copy", test_list_copy);
+
return suite;
}
diff --git a/source4/lib/util/util.h b/source4/lib/util/util.h
index f3adbb3333..9e106052f2 100644
--- a/source4/lib/util/util.h
+++ b/source4/lib/util/util.h
@@ -262,6 +262,7 @@ _PUBLIC_ char *generate_random_str(TALLOC_CTX *mem_ctx, size_t len);
/* The following definitions come from lib/util/dprintf.c */
+_PUBLIC_ void d_set_iconv(smb_iconv_t);
_PUBLIC_ int d_vfprintf(FILE *f, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
_PUBLIC_ int d_fprintf(FILE *f, const char *format, ...) PRINTF_ATTRIBUTE(2,3);
_PUBLIC_ int d_printf(const char *format, ...) PRINTF_ATTRIBUTE(1,2);
diff --git a/source4/lib/util/util_ldb.c b/source4/lib/util/util_ldb.c
index ba8443c236..a8719af190 100644
--- a/source4/lib/util/util_ldb.c
+++ b/source4/lib/util/util_ldb.c
@@ -23,16 +23,16 @@
#include "includes.h"
#include "lib/ldb/include/ldb.h"
#include "lib/ldb/include/ldb_errors.h"
-
+#include "lib/util/util_ldb.h"
/*
search the sam for the specified attributes - va_list variant
*/
-int gendb_search_v(struct ldb_context *ldb,
+int gendb_search_v(struct ldb_context *ldb,
TALLOC_CTX *mem_ctx,
struct ldb_dn *basedn,
struct ldb_message ***msgs,
const char * const *attrs,
- const char *format,
+ const char *format,
va_list ap) _PRINTF_ATTRIBUTE(6,0)
{
enum ldb_scope scope = LDB_SCOPE_SUBTREE;
diff --git a/source4/lib/util/util_strlist.c b/source4/lib/util/util_strlist.c
index 1f1cc17d00..30de4b962d 100644
--- a/source4/lib/util/util_strlist.c
+++ b/source4/lib/util/util_strlist.c
@@ -199,8 +199,14 @@ _PUBLIC_ size_t str_list_length(const char **list)
_PUBLIC_ const char **str_list_copy(TALLOC_CTX *mem_ctx, const char **list)
{
int i;
- const char **ret = talloc_array(mem_ctx, const char *, str_list_length(list)+1);
- if (ret == NULL) return NULL;
+ const char **ret;
+
+ if (list == NULL)
+ return NULL;
+
+ ret = talloc_array(mem_ctx, const char *, str_list_length(list)+1);
+ if (ret == NULL)
+ return NULL;
for (i=0;list && list[i];i++) {
ret[i] = talloc_strdup(ret, list[i]);
diff --git a/source4/lib/util/util_tdb.c b/source4/lib/util/util_tdb.c
index d7bddbde01..77ad4eb617 100644
--- a/source4/lib/util/util_tdb.c
+++ b/source4/lib/util/util_tdb.c
@@ -445,7 +445,7 @@ int tdb_unpack(TDB_CONTEXT *tdb, char *buf, int bufsize, const char *fmt, ...)
int len;
int *i;
void **p;
- char *s, **b;
+ char *s, **b, **ps;
char c;
char *buf0 = buf;
const char *fmt0 = fmt;
@@ -453,7 +453,7 @@ int tdb_unpack(TDB_CONTEXT *tdb, char *buf, int bufsize, const char *fmt, ...)
tdb_log_func log_fn = tdb_log_fn(tdb);
va_start(ap, fmt);
-
+
while (*fmt) {
switch ((c=*fmt++)) {
case 'b':
@@ -485,11 +485,10 @@ int tdb_unpack(TDB_CONTEXT *tdb, char *buf, int bufsize, const char *fmt, ...)
*p = (void *)IVAL(buf, 0);
break;
case 'P':
- s = va_arg(ap,char *);
- len = strlen(buf) + 1;
- if (bufsize < len || len > sizeof(pstring))
- goto no_space;
- memcpy(s, buf, len);
+ /* Return a malloc'ed string. */
+ ps = va_arg(ap,char ** );
+ len = strlen((const char *)buf) + 1;
+ *ps = strdup((const char *)buf);
break;
case 'f':
s = va_arg(ap,char *);
@@ -518,7 +517,7 @@ int tdb_unpack(TDB_CONTEXT *tdb, char *buf, int bufsize, const char *fmt, ...)
memcpy(*b, buf+4, *i);
break;
default:
- log_fn(tdb, 0, "Unknown tdb_unpack format %c in %s\n",
+ log_fn(tdb, 0, "Unknown tdb_unpack format %c in %s\n",
c, fmt);
len = 0;
@@ -531,7 +530,7 @@ int tdb_unpack(TDB_CONTEXT *tdb, char *buf, int bufsize, const char *fmt, ...)
va_end(ap);
- log_fn(tdb, 18, "tdb_unpack(%s, %d) -> %d\n",
+ log_fn(tdb, 18, "tdb_unpack(%s, %d) -> %d\n",
fmt0, bufsize0, (int)PTR_DIFF(buf, buf0));
return PTR_DIFF(buf, buf0);