mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
Merge branch 'master' of ssh://git.samba.org/data/git/samba
This commit is contained in:
commit
5c75b65ca1
@ -3,6 +3,7 @@
|
|||||||
Samba system utilities
|
Samba system utilities
|
||||||
Copyright (C) Andrew Tridgell 1992-1998
|
Copyright (C) Andrew Tridgell 1992-1998
|
||||||
Copyright (C) Jeremy Allison 1998-2002
|
Copyright (C) Jeremy Allison 1998-2002
|
||||||
|
Copyright (C) Jelmer Vernooij 2006
|
||||||
|
|
||||||
** NOTE! The following LGPL license applies to the replace
|
** NOTE! The following LGPL license applies to the replace
|
||||||
** library. This does NOT imply that all of Samba is released
|
** library. This does NOT imply that all of Samba is released
|
||||||
|
@ -899,7 +899,10 @@ static int swrap_get_pcap_fd(const char *fname)
|
|||||||
file_hdr.frame_max_len = SWRAP_FRAME_LENGTH_MAX;
|
file_hdr.frame_max_len = SWRAP_FRAME_LENGTH_MAX;
|
||||||
file_hdr.link_type = 0x0065; /* 101 RAW IP */
|
file_hdr.link_type = 0x0065; /* 101 RAW IP */
|
||||||
|
|
||||||
write(fd, &file_hdr, sizeof(file_hdr));
|
if (write(fd, &file_hdr, sizeof(file_hdr)) != sizeof(file_hdr)) {
|
||||||
|
close(fd);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1190,7 +1193,12 @@ static void swrap_dump_packet(struct socket_info *si,
|
|||||||
|
|
||||||
fd = swrap_get_pcap_fd(file_name);
|
fd = swrap_get_pcap_fd(file_name);
|
||||||
if (fd != -1) {
|
if (fd != -1) {
|
||||||
write(fd, packet, packet_len);
|
if (write(fd, packet, packet_len) != packet_len) {
|
||||||
|
close(fd);
|
||||||
|
free(packet);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(packet);
|
free(packet);
|
||||||
|
@ -2,20 +2,21 @@ TALLOC_OBJ = $(tallocdir)/talloc.o
|
|||||||
|
|
||||||
TALLOC_SOLIB = libtalloc.$(SHLIBEXT).$(PACKAGE_VERSION)
|
TALLOC_SOLIB = libtalloc.$(SHLIBEXT).$(PACKAGE_VERSION)
|
||||||
TALLOC_SONAME = libtalloc.$(SHLIBEXT).1
|
TALLOC_SONAME = libtalloc.$(SHLIBEXT).1
|
||||||
|
TALLOC_STLIB = libtalloc.a
|
||||||
|
|
||||||
all:: libtalloc.a $(TALLOC_SOLIB) testsuite
|
all:: $(TALLOC_STLIB) $(TALLOC_SOLIB) testsuite
|
||||||
|
|
||||||
testsuite:: $(LIBOBJ) testsuite.o testsuite_main.o
|
testsuite:: $(LIBOBJ) testsuite.o testsuite_main.o
|
||||||
$(CC) $(CFLAGS) -o testsuite testsuite.o testsuite_main.o $(LIBOBJ) $(LIBS)
|
$(CC) $(CFLAGS) -o testsuite testsuite.o testsuite_main.o $(LIBOBJ) $(LIBS)
|
||||||
|
|
||||||
libtalloc.a: $(LIBOBJ)
|
$(TALLOC_STLIB): $(LIBOBJ)
|
||||||
ar -rv $@ $(LIBOBJ)
|
ar -rv $@ $(LIBOBJ)
|
||||||
@-ranlib $@
|
@-ranlib $@
|
||||||
|
|
||||||
install:: all
|
install:: all
|
||||||
${INSTALLCMD} -d $(DESTDIR)$(libdir)
|
${INSTALLCMD} -d $(DESTDIR)$(libdir)
|
||||||
${INSTALLCMD} -d $(DESTDIR)$(libdir)/pkgconfig
|
${INSTALLCMD} -d $(DESTDIR)$(libdir)/pkgconfig
|
||||||
${INSTALLCMD} -m 755 libtalloc.a $(DESTDIR)$(libdir)
|
${INSTALLCMD} -m 755 $(TALLOC_STLIB) $(DESTDIR)$(libdir)
|
||||||
${INSTALLCMD} -m 755 $(TALLOC_SOLIB) $(DESTDIR)$(libdir)
|
${INSTALLCMD} -m 755 $(TALLOC_SOLIB) $(DESTDIR)$(libdir)
|
||||||
${INSTALLCMD} -d $(DESTDIR)${includedir}
|
${INSTALLCMD} -d $(DESTDIR)${includedir}
|
||||||
${INSTALLCMD} -m 644 $(srcdir)/talloc.h $(DESTDIR)$(includedir)
|
${INSTALLCMD} -m 644 $(srcdir)/talloc.h $(DESTDIR)$(includedir)
|
||||||
@ -28,7 +29,7 @@ install:: all
|
|||||||
doc:: talloc.3 talloc.3.html
|
doc:: talloc.3 talloc.3.html
|
||||||
|
|
||||||
clean::
|
clean::
|
||||||
rm -f *~ $(LIBOBJ) $(TALLOC_SOLIB) libtalloc.a testsuite testsuite.o testsuite_main.o *.gc?? talloc.3 talloc.3.html
|
rm -f *~ $(LIBOBJ) $(TALLOC_SOLIB) $(TALLOC_STLIB) testsuite testsuite.o testsuite_main.o *.gc?? talloc.3 talloc.3.html
|
||||||
|
|
||||||
test:: testsuite
|
test:: testsuite
|
||||||
./testsuite
|
./testsuite
|
||||||
|
@ -7,8 +7,9 @@ ALL_PROGS = $(PROGS) $(PROGS_NOINSTALL)
|
|||||||
|
|
||||||
TDB_SONAME = libtdb.$(SHLIBEXT).1
|
TDB_SONAME = libtdb.$(SHLIBEXT).1
|
||||||
TDB_SOLIB = libtdb.$(SHLIBEXT).$(PACKAGE_VERSION)
|
TDB_SOLIB = libtdb.$(SHLIBEXT).$(PACKAGE_VERSION)
|
||||||
|
TDB_STLIB = libtdb.a
|
||||||
|
|
||||||
TDB_LIB = libtdb.a
|
TDB_LIB = $(TDB_STLIB)
|
||||||
|
|
||||||
bin/tdbtest$(EXEEXT): tools/tdbtest.o $(TDB_LIB)
|
bin/tdbtest$(EXEEXT): tools/tdbtest.o $(TDB_LIB)
|
||||||
$(CC) $(CFLAGS) $(LDFLAGS) -o bin/tdbtest tools/tdbtest.o -L. -ltdb -lgdbm
|
$(CC) $(CFLAGS) $(LDFLAGS) -o bin/tdbtest tools/tdbtest.o -L. -ltdb -lgdbm
|
||||||
@ -30,7 +31,7 @@ test:: bin/tdbtorture$(EXEEXT) $(TDB_SONAME)
|
|||||||
|
|
||||||
clean::
|
clean::
|
||||||
rm -f test.db test.tdb torture.tdb test.gdbm
|
rm -f test.db test.tdb torture.tdb test.gdbm
|
||||||
rm -f $(TDB_SONAME) $(TDB_SOLIB) libtdb.a libtdb.$(SHLIBEXT)
|
rm -f $(TDB_SONAME) $(TDB_SOLIB) $(TDB_STLIB) libtdb.$(SHLIBEXT)
|
||||||
rm -f $(ALL_PROGS) tdb.pc
|
rm -f $(ALL_PROGS) tdb.pc
|
||||||
|
|
||||||
build-python:: tdb.$(SHLIBEXT)
|
build-python:: tdb.$(SHLIBEXT)
|
||||||
@ -68,10 +69,10 @@ installheaders:: installdirs
|
|||||||
|
|
||||||
installlibs:: all installdirs
|
installlibs:: all installdirs
|
||||||
cp tdb.pc $(DESTDIR)$(libdir)/pkgconfig
|
cp tdb.pc $(DESTDIR)$(libdir)/pkgconfig
|
||||||
cp libtdb.a $(TDB_SOLIB) $(DESTDIR)$(libdir)
|
cp $(TDB_STLIB) $(TDB_SOLIB) $(DESTDIR)$(libdir)
|
||||||
|
|
||||||
libtdb.a: $(TDB_OBJ)
|
$(TDB_STLIB): $(TDB_OBJ)
|
||||||
ar -rv libtdb.a $(TDB_OBJ)
|
ar -rv $(TDB_STLIB) $(TDB_OBJ)
|
||||||
|
|
||||||
libtdb.$(SHLIBEXT): $(TDB_SOLIB)
|
libtdb.$(SHLIBEXT): $(TDB_SOLIB)
|
||||||
ln -fs $< $@
|
ln -fs $< $@
|
||||||
|
@ -41,17 +41,6 @@ CFLAGS = -I../lib/tevent
|
|||||||
# End SUBSYSTEM LIBTEVENT
|
# End SUBSYSTEM LIBTEVENT
|
||||||
################################################
|
################################################
|
||||||
|
|
||||||
LIBTEVENT_OBJ_FILES = $(addprefix $(libteventsrcdir)/, tevent.o tevent_timed.o tevent_signal.o tevent_debug.o tevent_util.o tevent_s4.o)
|
LIBTEVENT_OBJ_FILES = $(addprefix $(libteventsrcdir)/, tevent.o tevent_timed.o tevent_signal.o tevent_debug.o tevent_util.o)
|
||||||
|
|
||||||
PUBLIC_HEADERS += $(addprefix $(libteventsrcdir)/, tevent.h tevent_internal.h)
|
PUBLIC_HEADERS += $(addprefix $(libteventsrcdir)/, tevent.h tevent_internal.h)
|
||||||
|
|
||||||
# TODO: Change python stuff to tevent
|
|
||||||
[PYTHON::swig_events]
|
|
||||||
LIBRARY_REALNAME = tevent.$(SHLIBEXT)
|
|
||||||
PRIVATE_DEPENDENCIES = LIBTEVENT PYTALLOC LIBSAMBA-UTIL
|
|
||||||
|
|
||||||
swig_events_OBJ_FILES = $(libteventsrcdir)/pytevent.o
|
|
||||||
|
|
||||||
$(swig_events_OBJ_FILES): CFLAGS+=$(CFLAG_NO_CAST_QUAL)
|
|
||||||
|
|
||||||
PC_FILES += $(libteventsrcdir)/tevent.pc
|
|
||||||
|
@ -19,9 +19,13 @@
|
|||||||
#include <Python.h>
|
#include <Python.h>
|
||||||
#include <tevent.h>
|
#include <tevent.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <../talloc/pytalloc.h>
|
|
||||||
#include <tevent_util.h>
|
#include <tevent_util.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
struct event_context *ev_ctx;
|
||||||
|
} PyEventContextObject;
|
||||||
|
|
||||||
PyAPI_DATA(PyTypeObject) PyEventContext;
|
PyAPI_DATA(PyTypeObject) PyEventContext;
|
||||||
|
|
||||||
static PyObject *py_set_default_backend(PyObject *self, PyObject *args)
|
static PyObject *py_set_default_backend(PyObject *self, PyObject *args)
|
||||||
@ -62,6 +66,7 @@ static PyObject *py_event_ctx_new(PyTypeObject *type, PyObject *args, PyObject *
|
|||||||
const char *kwnames[] = { "name", NULL };
|
const char *kwnames[] = { "name", NULL };
|
||||||
char *name = NULL;
|
char *name = NULL;
|
||||||
struct event_context *ev_ctx;
|
struct event_context *ev_ctx;
|
||||||
|
PyEventContextObject *ret;
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|s", (char **)kwnames, &name))
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|s", (char **)kwnames, &name))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -70,17 +75,19 @@ static PyObject *py_event_ctx_new(PyTypeObject *type, PyObject *args, PyObject *
|
|||||||
else
|
else
|
||||||
ev_ctx = event_context_init_byname(NULL, name);
|
ev_ctx = event_context_init_byname(NULL, name);
|
||||||
|
|
||||||
return py_talloc_import(&PyEventContext, ev_ctx);
|
ret = (PyEventContextObject *)type->tp_alloc(type, 0);
|
||||||
|
ret->ev_ctx = ev_ctx;
|
||||||
|
return (PyObject *)ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_event_ctx_loop_once(py_talloc_Object *self)
|
static PyObject *py_event_ctx_loop_once(PyEventContextObject *self)
|
||||||
{
|
{
|
||||||
return PyInt_FromLong(event_loop_once(self->ptr));
|
return PyInt_FromLong(event_loop_once(self->ev_ctx));
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_event_ctx_loop_wait(py_talloc_Object *self)
|
static PyObject *py_event_ctx_loop_wait(PyEventContextObject *self)
|
||||||
{
|
{
|
||||||
return PyInt_FromLong(event_loop_wait(self->ptr));
|
return PyInt_FromLong(event_loop_wait(self->ev_ctx));
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyMethodDef py_event_ctx_methods[] = {
|
static PyMethodDef py_event_ctx_methods[] = {
|
||||||
@ -91,11 +98,17 @@ static PyMethodDef py_event_ctx_methods[] = {
|
|||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void py_event_ctx_dealloc(PyEventContextObject * self)
|
||||||
|
{
|
||||||
|
talloc_free(self->ev_ctx);
|
||||||
|
self->ob_type->tp_free(self);
|
||||||
|
}
|
||||||
|
|
||||||
PyTypeObject PyEventContext = {
|
PyTypeObject PyEventContext = {
|
||||||
.tp_name = "EventContext",
|
.tp_name = "EventContext",
|
||||||
.tp_methods = py_event_ctx_methods,
|
.tp_methods = py_event_ctx_methods,
|
||||||
.tp_basicsize = sizeof(py_talloc_Object),
|
.tp_basicsize = sizeof(PyEventContextObject),
|
||||||
.tp_dealloc = py_talloc_dealloc,
|
.tp_dealloc = (destructor)py_event_ctx_dealloc,
|
||||||
.tp_flags = Py_TPFLAGS_DEFAULT,
|
.tp_flags = Py_TPFLAGS_DEFAULT,
|
||||||
.tp_new = py_event_ctx_new,
|
.tp_new = py_event_ctx_new,
|
||||||
};
|
};
|
||||||
|
10
lib/tevent/python.mk
Normal file
10
lib/tevent/python.mk
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# TODO: Change python stuff to tevent
|
||||||
|
[PYTHON::swig_events]
|
||||||
|
LIBRARY_REALNAME = tevent.$(SHLIBEXT)
|
||||||
|
PRIVATE_DEPENDENCIES = LIBTEVENT PYTALLOC LIBSAMBA-UTIL
|
||||||
|
|
||||||
|
swig_events_OBJ_FILES = $(libteventsrcdir)/pytevent.o
|
||||||
|
|
||||||
|
$(swig_events_OBJ_FILES): CFLAGS+=$(CFLAG_NO_CAST_QUAL)
|
||||||
|
|
||||||
|
PC_FILES += $(libteventsrcdir)/tevent.pc
|
@ -1,8 +1,9 @@
|
|||||||
TEVENT_SONAME = libtevent.$(SHLIBEXT).0
|
TEVENT_SONAME = libtevent.$(SHLIBEXT).0
|
||||||
TEVENT_SOLIB = libtevent.$(SHLIBEXT).$(PACKAGE_VERSION)
|
TEVENT_SOLIB = libtevent.$(SHLIBEXT).$(PACKAGE_VERSION)
|
||||||
|
TEVENT_STLIB = libtevent.a
|
||||||
|
|
||||||
libtevent.a: $(TEVENT_OBJ)
|
$(TEVENT_STLIB): $(TEVENT_OBJ)
|
||||||
ar -rv libtevent.a $(TEVENT_OBJ)
|
ar -rv $(TEVENT_STLIB) $(TEVENT_OBJ)
|
||||||
|
|
||||||
libtevent.$(SHLIBEXT): $(TEVENT_SOLIB)
|
libtevent.$(SHLIBEXT): $(TEVENT_SOLIB)
|
||||||
ln -fs $< $@
|
ln -fs $< $@
|
||||||
@ -23,14 +24,14 @@ installheaders:: installdirs
|
|||||||
|
|
||||||
installlibs:: installdirs
|
installlibs:: installdirs
|
||||||
cp tevent.pc $(DESTDIR)$(libdir)/pkgconfig
|
cp tevent.pc $(DESTDIR)$(libdir)/pkgconfig
|
||||||
cp libtevent.a $(TEVENT_SOLIB) $(DESTDIR)$(libdir)
|
cp $(TEVENT_STLIB) $(TEVENT_SOLIB) $(DESTDIR)$(libdir)
|
||||||
|
|
||||||
install:: all installdirs installheaders installlibs $(PYTHON_INSTALL_TARGET)
|
install:: all installdirs installheaders installlibs $(PYTHON_INSTALL_TARGET)
|
||||||
|
|
||||||
clean::
|
clean::
|
||||||
rm -f $(TEVENT_SONAME) $(TEVENT_SOLIB) libtevent.a libtevent.$(SHLIBEXT)
|
rm -f $(TEVENT_SONAME) $(TEVENT_SOLIB) $(TEVENT_STLIB) libtevent.$(SHLIBEXT)
|
||||||
rm -f tevent.pc
|
rm -f tevent.pc
|
||||||
rm -f _libtevent.$(SHLIBEXT)
|
rm -f tevent.$(SHLIBEXT)
|
||||||
|
|
||||||
#python stuff
|
#python stuff
|
||||||
|
|
||||||
|
@ -58,6 +58,21 @@ static bool test_timestring(struct torture_context *tctx)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool test_get_time_zone(struct torture_context *tctx)
|
||||||
|
{
|
||||||
|
time_t t = time(NULL);
|
||||||
|
int old_extra_time_offset = extra_time_offset;
|
||||||
|
int old_offset, new_offset;
|
||||||
|
/* test that extra_time_offset works */
|
||||||
|
|
||||||
|
old_offset = get_time_zone(t);
|
||||||
|
extra_time_offset = 42;
|
||||||
|
new_offset = get_time_zone(t);
|
||||||
|
extra_time_offset = old_extra_time_offset;
|
||||||
|
torture_assert_int_equal(tctx, old_offset+60*42, new_offset,
|
||||||
|
"time offset not used");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct torture_suite *torture_local_util_time(TALLOC_CTX *mem_ctx)
|
struct torture_suite *torture_local_util_time(TALLOC_CTX *mem_ctx)
|
||||||
@ -65,6 +80,7 @@ struct torture_suite *torture_local_util_time(TALLOC_CTX *mem_ctx)
|
|||||||
struct torture_suite *suite = torture_suite_create(mem_ctx, "TIME");
|
struct torture_suite *suite = torture_suite_create(mem_ctx, "TIME");
|
||||||
|
|
||||||
torture_suite_add_simple_test(suite, "null_time", test_null_time);
|
torture_suite_add_simple_test(suite, "null_time", test_null_time);
|
||||||
|
torture_suite_add_simple_test(suite, "get_time_zone", test_get_time_zone);
|
||||||
torture_suite_add_simple_test(suite, "null_nttime", test_null_nttime);
|
torture_suite_add_simple_test(suite, "null_nttime", test_null_nttime);
|
||||||
torture_suite_add_simple_test(suite, "http_timestring",
|
torture_suite_add_simple_test(suite, "http_timestring",
|
||||||
test_http_timestring);
|
test_http_timestring);
|
||||||
|
@ -628,6 +628,9 @@ static int tm_diff(struct tm *a, struct tm *b)
|
|||||||
return seconds;
|
return seconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int extra_time_offset=0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
return the UTC offset in seconds west of UTC, or 0 if it cannot be determined
|
return the UTC offset in seconds west of UTC, or 0 if it cannot be determined
|
||||||
*/
|
*/
|
||||||
@ -641,7 +644,7 @@ _PUBLIC_ int get_time_zone(time_t t)
|
|||||||
tm = localtime(&t);
|
tm = localtime(&t);
|
||||||
if (!tm)
|
if (!tm)
|
||||||
return 0;
|
return 0;
|
||||||
return tm_diff(&tm_utc,tm);
|
return tm_diff(&tm_utc,tm)+60*extra_time_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct timespec nt_time_to_unix_timespec(NTTIME *nt)
|
struct timespec nt_time_to_unix_timespec(NTTIME *nt)
|
||||||
|
@ -239,4 +239,7 @@ struct timespec convert_time_t_to_timespec(time_t t);
|
|||||||
|
|
||||||
bool null_timespec(struct timespec ts);
|
bool null_timespec(struct timespec ts);
|
||||||
|
|
||||||
|
/** Extra minutes to add to the normal GMT to local time conversion. */
|
||||||
|
extern int extra_time_offset;
|
||||||
|
|
||||||
#endif /* _SAMBA_TIME_H_ */
|
#endif /* _SAMBA_TIME_H_ */
|
||||||
|
@ -131,8 +131,6 @@ time_t convert_uint32_to_time_t(uint32_t u)
|
|||||||
return (time_t)u;
|
return (time_t)u;
|
||||||
}
|
}
|
||||||
|
|
||||||
int extra_time_offset=0;
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
Check if NTTIME is 0.
|
Check if NTTIME is 0.
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
@ -57,12 +57,17 @@ char *ads_build_path(const char *realm, const char *sep, const char *field, int
|
|||||||
strlcat(ret, p, len);
|
strlcat(ret, p, len);
|
||||||
|
|
||||||
while ((p=strtok_r(NULL, sep, &saveptr)) != NULL) {
|
while ((p=strtok_r(NULL, sep, &saveptr)) != NULL) {
|
||||||
char *s;
|
int retval;
|
||||||
|
char *s = NULL;
|
||||||
if (reverse)
|
if (reverse)
|
||||||
asprintf(&s, "%s%s,%s", field, p, ret);
|
retval = asprintf(&s, "%s%s,%s", field, p, ret);
|
||||||
else
|
else
|
||||||
asprintf(&s, "%s,%s%s", ret, field, p);
|
retval = asprintf(&s, "%s,%s%s", ret, field, p);
|
||||||
free(ret);
|
free(ret);
|
||||||
|
if (retval == -1) {
|
||||||
|
free(r);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
ret = SMB_STRDUP(s);
|
ret = SMB_STRDUP(s);
|
||||||
free(s);
|
free(s);
|
||||||
}
|
}
|
||||||
|
@ -299,17 +299,29 @@ int ads_keytab_add_entry(ADS_STRUCT *ads, const char *srvPrinc)
|
|||||||
|
|
||||||
if (strchr_m(srvPrinc, '@')) {
|
if (strchr_m(srvPrinc, '@')) {
|
||||||
/* It's a fully-named principal. */
|
/* It's a fully-named principal. */
|
||||||
asprintf(&princ_s, "%s", srvPrinc);
|
if (asprintf(&princ_s, "%s", srvPrinc) == -1) {
|
||||||
|
ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
} else if (srvPrinc[strlen(srvPrinc)-1] == '$') {
|
} else if (srvPrinc[strlen(srvPrinc)-1] == '$') {
|
||||||
/* It's the machine account, as used by smbclient clients. */
|
/* It's the machine account, as used by smbclient clients. */
|
||||||
asprintf(&princ_s, "%s@%s", srvPrinc, lp_realm());
|
if (asprintf(&princ_s, "%s@%s", srvPrinc, lp_realm()) == -1) {
|
||||||
|
ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/* It's a normal service principal. Add the SPN now so that we
|
/* It's a normal service principal. Add the SPN now so that we
|
||||||
* can obtain credentials for it and double-check the salt value
|
* can obtain credentials for it and double-check the salt value
|
||||||
* used to generate the service's keys. */
|
* used to generate the service's keys. */
|
||||||
|
|
||||||
asprintf(&princ_s, "%s/%s@%s", srvPrinc, my_fqdn, lp_realm());
|
if (asprintf(&princ_s, "%s/%s@%s", srvPrinc, my_fqdn, lp_realm()) == -1) {
|
||||||
asprintf(&short_princ_s, "%s/%s@%s", srvPrinc, machine_name, lp_realm());
|
ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
if (asprintf(&short_princ_s, "%s/%s@%s", srvPrinc, machine_name, lp_realm()) == -1) {
|
||||||
|
ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/* According to http://support.microsoft.com/kb/326985/en-us,
|
/* According to http://support.microsoft.com/kb/326985/en-us,
|
||||||
certain principal names are automatically mapped to the host/...
|
certain principal names are automatically mapped to the host/...
|
||||||
|
@ -605,7 +605,13 @@ ADS_STATUS ads_krb5_set_password(const char *kdc_host, const char *princ,
|
|||||||
}
|
}
|
||||||
realm++;
|
realm++;
|
||||||
|
|
||||||
asprintf(&princ_name, "kadmin/changepw@%s", realm);
|
if (asprintf(&princ_name, "kadmin/changepw@%s", realm) == -1) {
|
||||||
|
krb5_cc_close(context, ccache);
|
||||||
|
krb5_free_context(context);
|
||||||
|
DEBUG(1,("asprintf failed\n"));
|
||||||
|
return ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
|
||||||
|
}
|
||||||
|
|
||||||
ret = smb_krb5_parse_name(context, princ_name, &creds.server);
|
ret = smb_krb5_parse_name(context, princ_name, &creds.server);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
krb5_cc_close(context, ccache);
|
krb5_cc_close(context, ccache);
|
||||||
@ -736,8 +742,13 @@ static ADS_STATUS ads_krb5_chg_password(const char *kdc_host,
|
|||||||
krb5_get_init_creds_opt_set_proxiable(&opts, 0);
|
krb5_get_init_creds_opt_set_proxiable(&opts, 0);
|
||||||
|
|
||||||
/* We have to obtain an INITIAL changepw ticket for changing password */
|
/* We have to obtain an INITIAL changepw ticket for changing password */
|
||||||
asprintf(&chpw_princ, "kadmin/changepw@%s",
|
if (asprintf(&chpw_princ, "kadmin/changepw@%s",
|
||||||
(char *) krb5_princ_realm(context, princ));
|
(char *) krb5_princ_realm(context, princ)) == -1) {
|
||||||
|
krb5_free_context(context);
|
||||||
|
DEBUG(1,("ads_krb5_chg_password: asprintf fail\n"));
|
||||||
|
return ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
|
||||||
|
}
|
||||||
|
|
||||||
password = SMB_STRDUP(oldpw);
|
password = SMB_STRDUP(oldpw);
|
||||||
ret = krb5_get_init_creds_password(context, &creds, princ, password,
|
ret = krb5_get_init_creds_password(context, &creds, princ, password,
|
||||||
kerb_prompter, NULL,
|
kerb_prompter, NULL,
|
||||||
@ -807,16 +818,14 @@ ADS_STATUS ads_set_machine_password(ADS_STRUCT *ads,
|
|||||||
as otherwise the server might end up setting the password for a user
|
as otherwise the server might end up setting the password for a user
|
||||||
instead
|
instead
|
||||||
*/
|
*/
|
||||||
asprintf(&principal, "%s@%s", machine_account, ads->config.realm);
|
if (asprintf(&principal, "%s@%s", machine_account, ads->config.realm) < 0) {
|
||||||
|
return ADS_ERROR_NT(NT_STATUS_NO_MEMORY);
|
||||||
|
}
|
||||||
|
|
||||||
status = ads_krb5_set_password(ads->auth.kdc_server, principal,
|
status = ads_krb5_set_password(ads->auth.kdc_server, principal,
|
||||||
password, ads->auth.time_offset);
|
password, ads->auth.time_offset);
|
||||||
|
|
||||||
free(principal);
|
SAFE_FREE(principal);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -603,7 +603,10 @@ got_connection:
|
|||||||
/* Must use the userPrincipalName value here or sAMAccountName
|
/* Must use the userPrincipalName value here or sAMAccountName
|
||||||
and not servicePrincipalName; found by Guenther Deschner */
|
and not servicePrincipalName; found by Guenther Deschner */
|
||||||
|
|
||||||
asprintf(&ads->auth.user_name, "%s$", global_myname() );
|
if (asprintf(&ads->auth.user_name, "%s$", global_myname() ) == -1) {
|
||||||
|
DEBUG(0,("ads_connect: asprintf fail.\n"));
|
||||||
|
ads->auth.user_name = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ads->auth.realm) {
|
if (!ads->auth.realm) {
|
||||||
@ -619,10 +622,11 @@ got_connection:
|
|||||||
/* this is a really nasty hack to avoid ADS DNS problems. It needs a patch
|
/* this is a really nasty hack to avoid ADS DNS problems. It needs a patch
|
||||||
to MIT kerberos to work (tridge) */
|
to MIT kerberos to work (tridge) */
|
||||||
{
|
{
|
||||||
char *env;
|
char *env = NULL;
|
||||||
asprintf(&env, "KRB5_KDC_ADDRESS_%s", ads->config.realm);
|
if (asprintf(&env, "KRB5_KDC_ADDRESS_%s", ads->config.realm) > 0) {
|
||||||
setenv(env, ads->auth.kdc_server, 1);
|
setenv(env, ads->auth.kdc_server, 1);
|
||||||
free(env);
|
free(env);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
const char *servername)
|
const char *servername)
|
||||||
{
|
{
|
||||||
ADS_STATUS status;
|
ADS_STATUS status;
|
||||||
char *srv_dn, **srv_cn, *s;
|
char *srv_dn, **srv_cn, *s = NULL;
|
||||||
const char *attrs[] = {"*", "nTSecurityDescriptor", NULL};
|
const char *attrs[] = {"*", "nTSecurityDescriptor", NULL};
|
||||||
|
|
||||||
status = ads_find_machine_acct(ads, res, servername);
|
status = ads_find_machine_acct(ads, res, servername);
|
||||||
@ -41,25 +41,43 @@
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
if (ads_count_replies(ads, *res) != 1) {
|
if (ads_count_replies(ads, *res) != 1) {
|
||||||
|
if (res) {
|
||||||
|
ads_msgfree(ads, *res);
|
||||||
|
*res = NULL;
|
||||||
|
}
|
||||||
return ADS_ERROR(LDAP_NO_SUCH_OBJECT);
|
return ADS_ERROR(LDAP_NO_SUCH_OBJECT);
|
||||||
}
|
}
|
||||||
srv_dn = ldap_get_dn(ads->ldap.ld, *res);
|
srv_dn = ldap_get_dn(ads->ldap.ld, *res);
|
||||||
if (srv_dn == NULL) {
|
if (srv_dn == NULL) {
|
||||||
|
if (res) {
|
||||||
|
ads_msgfree(ads, *res);
|
||||||
|
*res = NULL;
|
||||||
|
}
|
||||||
return ADS_ERROR(LDAP_NO_MEMORY);
|
return ADS_ERROR(LDAP_NO_MEMORY);
|
||||||
}
|
}
|
||||||
srv_cn = ldap_explode_dn(srv_dn, 1);
|
srv_cn = ldap_explode_dn(srv_dn, 1);
|
||||||
if (srv_cn == NULL) {
|
if (srv_cn == NULL) {
|
||||||
ldap_memfree(srv_dn);
|
ldap_memfree(srv_dn);
|
||||||
|
if (res) {
|
||||||
|
ads_msgfree(ads, *res);
|
||||||
|
*res = NULL;
|
||||||
|
}
|
||||||
return ADS_ERROR(LDAP_INVALID_DN_SYNTAX);
|
return ADS_ERROR(LDAP_INVALID_DN_SYNTAX);
|
||||||
}
|
}
|
||||||
ads_msgfree(ads, *res);
|
if (res) {
|
||||||
|
ads_msgfree(ads, *res);
|
||||||
|
*res = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
asprintf(&s, "(cn=%s-%s)", srv_cn[0], printer);
|
if (asprintf(&s, "(cn=%s-%s)", srv_cn[0], printer) == -1) {
|
||||||
|
ldap_memfree(srv_dn);
|
||||||
|
return ADS_ERROR(LDAP_NO_MEMORY);
|
||||||
|
}
|
||||||
status = ads_search(ads, res, s, attrs);
|
status = ads_search(ads, res, s, attrs);
|
||||||
|
|
||||||
ldap_memfree(srv_dn);
|
ldap_memfree(srv_dn);
|
||||||
ldap_value_free(srv_cn);
|
ldap_value_free(srv_cn);
|
||||||
free(s);
|
SAFE_FREE(s);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,7 +35,10 @@
|
|||||||
return ADS_ERROR(LDAP_NO_MEMORY);
|
return ADS_ERROR(LDAP_NO_MEMORY);
|
||||||
}
|
}
|
||||||
|
|
||||||
asprintf(&ldap_exp, "(samAccountName=%s)", escaped_user);
|
if (asprintf(&ldap_exp, "(samAccountName=%s)", escaped_user) == -1) {
|
||||||
|
SAFE_FREE(escaped_user);
|
||||||
|
return ADS_ERROR(LDAP_NO_MEMORY);
|
||||||
|
}
|
||||||
status = ads_search(ads, res, ldap_exp, attrs);
|
status = ads_search(ads, res, ldap_exp, attrs);
|
||||||
SAFE_FREE(ldap_exp);
|
SAFE_FREE(ldap_exp);
|
||||||
SAFE_FREE(escaped_user);
|
SAFE_FREE(escaped_user);
|
||||||
|
@ -71,7 +71,11 @@ ADS_STATUS ads_guess_service_principal(ADS_STRUCT *ads,
|
|||||||
|
|
||||||
strlower_m(server);
|
strlower_m(server);
|
||||||
strupper_m(server_realm);
|
strupper_m(server_realm);
|
||||||
asprintf(&princ, "ldap/%s@%s", server, server_realm);
|
if (asprintf(&princ, "ldap/%s@%s", server, server_realm) == -1) {
|
||||||
|
SAFE_FREE(server);
|
||||||
|
SAFE_FREE(server_realm);
|
||||||
|
return ADS_ERROR(LDAP_NO_MEMORY);
|
||||||
|
}
|
||||||
|
|
||||||
SAFE_FREE(server);
|
SAFE_FREE(server);
|
||||||
SAFE_FREE(server_realm);
|
SAFE_FREE(server_realm);
|
||||||
@ -93,7 +97,11 @@ ADS_STATUS ads_guess_service_principal(ADS_STRUCT *ads,
|
|||||||
|
|
||||||
strlower_m(server);
|
strlower_m(server);
|
||||||
strupper_m(server_realm);
|
strupper_m(server_realm);
|
||||||
asprintf(&princ, "ldap/%s@%s", server, server_realm);
|
if (asprintf(&princ, "ldap/%s@%s", server, server_realm) == -1) {
|
||||||
|
SAFE_FREE(server);
|
||||||
|
SAFE_FREE(server_realm);
|
||||||
|
return ADS_ERROR(LDAP_NO_MEMORY);
|
||||||
|
}
|
||||||
|
|
||||||
SAFE_FREE(server);
|
SAFE_FREE(server);
|
||||||
SAFE_FREE(server_realm);
|
SAFE_FREE(server_realm);
|
||||||
|
@ -1019,8 +1019,7 @@ NTSTATUS libnet_join_ok(const char *netbios_domain_name,
|
|||||||
return NT_STATUS_NO_TRUST_LSA_SECRET;
|
return NT_STATUS_NO_TRUST_LSA_SECRET;
|
||||||
}
|
}
|
||||||
|
|
||||||
asprintf(&machine_account, "%s$", machine_name);
|
if (asprintf(&machine_account, "%s$", machine_name) == -1) {
|
||||||
if (!machine_account) {
|
|
||||||
SAFE_FREE(machine_password);
|
SAFE_FREE(machine_password);
|
||||||
return NT_STATUS_NO_MEMORY;
|
return NT_STATUS_NO_MEMORY;
|
||||||
}
|
}
|
||||||
|
@ -586,7 +586,7 @@ static NTSTATUS fetch_account_info_to_ldif(TALLOC_CTX *mem_ctx,
|
|||||||
uchar zero_buf[16];
|
uchar zero_buf[16];
|
||||||
uint32 rid = 0, group_rid = 0, gidNumber = 0;
|
uint32 rid = 0, group_rid = 0, gidNumber = 0;
|
||||||
time_t unix_time;
|
time_t unix_time;
|
||||||
int i;
|
int i, ret;
|
||||||
|
|
||||||
memset(zero_buf, '\0', sizeof(zero_buf));
|
memset(zero_buf, '\0', sizeof(zero_buf));
|
||||||
|
|
||||||
@ -660,7 +660,10 @@ static NTSTATUS fetch_account_info_to_ldif(TALLOC_CTX *mem_ctx,
|
|||||||
return NT_STATUS_UNSUCCESSFUL;
|
return NT_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
gidNumber = groupmap[i].gidNumber;
|
gidNumber = groupmap[i].gidNumber;
|
||||||
snprintf(sambaSID, sizeof(sambaSID), groupmap[i].sambaSID);
|
ret = snprintf(sambaSID, sizeof(sambaSID), "%s", groupmap[i].sambaSID);
|
||||||
|
if (ret < 0 || ret == sizeof(sambaSID)) {
|
||||||
|
return NT_STATUS_UNSUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Set up sambaAcctFlags */
|
/* Set up sambaAcctFlags */
|
||||||
flags = pdb_encode_acct_ctrl(r->acct_flags,
|
flags = pdb_encode_acct_ctrl(r->acct_flags,
|
||||||
|
@ -909,13 +909,12 @@ new: start=%.0f,size=%.0f\n", (double)l_curr->start, (double)l_curr->size,
|
|||||||
*/
|
*/
|
||||||
char *msg = NULL;
|
char *msg = NULL;
|
||||||
|
|
||||||
/* Don't check if alloc succeeds here - we're
|
if (asprintf(&msg, "logic flaw in cases: l_curr: start = %.0f, size = %.0f : \
|
||||||
* forcing a core dump anyway. */
|
lock: start = %.0f, size = %.0f", (double)l_curr->start, (double)l_curr->size, (double)lock->start, (double)lock->size ) != -1) {
|
||||||
|
smb_panic(msg);
|
||||||
asprintf(&msg, "logic flaw in cases: l_curr: start = %.0f, size = %.0f : \
|
} else {
|
||||||
lock: start = %.0f, size = %.0f", (double)l_curr->start, (double)l_curr->size, (double)lock->start, (double)lock->size );
|
smb_panic("posix_lock_list");
|
||||||
|
}
|
||||||
smb_panic(msg);
|
|
||||||
}
|
}
|
||||||
} /* end for ( l_curr = lhead; l_curr;) */
|
} /* end for ( l_curr = lhead; l_curr;) */
|
||||||
} /* end for (i=0; i<num_locks && ul_head; i++) */
|
} /* end for (i=0; i<num_locks && ul_head; i++) */
|
||||||
|
@ -94,8 +94,6 @@ static int config_backend = CONFIG_BACKEND_FILE;
|
|||||||
#define USERSHARE_VALID 1
|
#define USERSHARE_VALID 1
|
||||||
#define USERSHARE_PENDING_DELETE 2
|
#define USERSHARE_PENDING_DELETE 2
|
||||||
|
|
||||||
extern int extra_time_offset;
|
|
||||||
|
|
||||||
static bool defaults_saved = False;
|
static bool defaults_saved = False;
|
||||||
|
|
||||||
struct param_opt_struct {
|
struct param_opt_struct {
|
||||||
|
@ -35,14 +35,13 @@ bool login_cache_init(void)
|
|||||||
/* skip file open if it's already opened */
|
/* skip file open if it's already opened */
|
||||||
if (cache) return True;
|
if (cache) return True;
|
||||||
|
|
||||||
asprintf(&cache_fname, "%s/%s", lp_lockdir(), LOGIN_CACHE_FILE);
|
if (asprintf(&cache_fname, "%s/%s", lp_lockdir(), LOGIN_CACHE_FILE) == -1) {
|
||||||
if (cache_fname)
|
|
||||||
DEBUG(5, ("Opening cache file at %s\n", cache_fname));
|
|
||||||
else {
|
|
||||||
DEBUG(0, ("Filename allocation failed.\n"));
|
DEBUG(0, ("Filename allocation failed.\n"));
|
||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEBUG(5, ("Opening cache file at %s\n", cache_fname));
|
||||||
|
|
||||||
cache = tdb_open_log(cache_fname, 0, TDB_DEFAULT,
|
cache = tdb_open_log(cache_fname, 0, TDB_DEFAULT,
|
||||||
O_RDWR|O_CREAT, 0644);
|
O_RDWR|O_CREAT, 0644);
|
||||||
|
|
||||||
|
@ -686,12 +686,16 @@ NTSTATUS local_password_change(const char *user_name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!NT_STATUS_IS_OK(result)) {
|
if (!NT_STATUS_IS_OK(result)) {
|
||||||
asprintf(pp_err_str, "Failed to " "initialize account for user %s: %s\n",
|
if (asprintf(pp_err_str, "Failed to " "initialize account for user %s: %s\n",
|
||||||
user_name, nt_errstr(result));
|
user_name, nt_errstr(result)) < 0) {
|
||||||
|
*pp_err_str = NULL;
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
asprintf(pp_err_str, "Failed to find entry for user %s.\n", user_name);
|
if (asprintf(pp_err_str, "Failed to find entry for user %s.\n", user_name) < 0) {
|
||||||
|
*pp_err_str = NULL;
|
||||||
|
}
|
||||||
return NT_STATUS_NO_SUCH_USER;
|
return NT_STATUS_NO_SUCH_USER;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -704,19 +708,25 @@ NTSTATUS local_password_change(const char *user_name,
|
|||||||
other_acb = (pdb_get_acct_ctrl(sam_pass) & (~(ACB_WSTRUST|ACB_DOMTRUST|ACB_SVRTRUST|ACB_NORMAL)));
|
other_acb = (pdb_get_acct_ctrl(sam_pass) & (~(ACB_WSTRUST|ACB_DOMTRUST|ACB_SVRTRUST|ACB_NORMAL)));
|
||||||
if (local_flags & LOCAL_TRUST_ACCOUNT) {
|
if (local_flags & LOCAL_TRUST_ACCOUNT) {
|
||||||
if (!pdb_set_acct_ctrl(sam_pass, ACB_WSTRUST | other_acb, PDB_CHANGED) ) {
|
if (!pdb_set_acct_ctrl(sam_pass, ACB_WSTRUST | other_acb, PDB_CHANGED) ) {
|
||||||
asprintf(pp_err_str, "Failed to set 'trusted workstation account' flags for user %s.\n", user_name);
|
if (asprintf(pp_err_str, "Failed to set 'trusted workstation account' flags for user %s.\n", user_name) < 0) {
|
||||||
|
*pp_err_str = NULL;
|
||||||
|
}
|
||||||
TALLOC_FREE(sam_pass);
|
TALLOC_FREE(sam_pass);
|
||||||
return NT_STATUS_UNSUCCESSFUL;
|
return NT_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
} else if (local_flags & LOCAL_INTERDOM_ACCOUNT) {
|
} else if (local_flags & LOCAL_INTERDOM_ACCOUNT) {
|
||||||
if (!pdb_set_acct_ctrl(sam_pass, ACB_DOMTRUST | other_acb, PDB_CHANGED)) {
|
if (!pdb_set_acct_ctrl(sam_pass, ACB_DOMTRUST | other_acb, PDB_CHANGED)) {
|
||||||
asprintf(pp_err_str, "Failed to set 'domain trust account' flags for user %s.\n", user_name);
|
if (asprintf(pp_err_str, "Failed to set 'domain trust account' flags for user %s.\n", user_name) < 0) {
|
||||||
|
*pp_err_str = NULL;
|
||||||
|
}
|
||||||
TALLOC_FREE(sam_pass);
|
TALLOC_FREE(sam_pass);
|
||||||
return NT_STATUS_UNSUCCESSFUL;
|
return NT_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!pdb_set_acct_ctrl(sam_pass, ACB_NORMAL | other_acb, PDB_CHANGED)) {
|
if (!pdb_set_acct_ctrl(sam_pass, ACB_NORMAL | other_acb, PDB_CHANGED)) {
|
||||||
asprintf(pp_err_str, "Failed to set 'normal account' flags for user %s.\n", user_name);
|
if (asprintf(pp_err_str, "Failed to set 'normal account' flags for user %s.\n", user_name) < 0) {
|
||||||
|
*pp_err_str = NULL;
|
||||||
|
}
|
||||||
TALLOC_FREE(sam_pass);
|
TALLOC_FREE(sam_pass);
|
||||||
return NT_STATUS_UNSUCCESSFUL;
|
return NT_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
@ -729,13 +739,17 @@ NTSTATUS local_password_change(const char *user_name,
|
|||||||
|
|
||||||
if (local_flags & LOCAL_DISABLE_USER) {
|
if (local_flags & LOCAL_DISABLE_USER) {
|
||||||
if (!pdb_set_acct_ctrl (sam_pass, pdb_get_acct_ctrl(sam_pass)|ACB_DISABLED, PDB_CHANGED)) {
|
if (!pdb_set_acct_ctrl (sam_pass, pdb_get_acct_ctrl(sam_pass)|ACB_DISABLED, PDB_CHANGED)) {
|
||||||
asprintf(pp_err_str, "Failed to set 'disabled' flag for user %s.\n", user_name);
|
if (asprintf(pp_err_str, "Failed to set 'disabled' flag for user %s.\n", user_name) < 0) {
|
||||||
|
*pp_err_str = NULL;
|
||||||
|
}
|
||||||
TALLOC_FREE(sam_pass);
|
TALLOC_FREE(sam_pass);
|
||||||
return NT_STATUS_UNSUCCESSFUL;
|
return NT_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
} else if (local_flags & LOCAL_ENABLE_USER) {
|
} else if (local_flags & LOCAL_ENABLE_USER) {
|
||||||
if (!pdb_set_acct_ctrl (sam_pass, pdb_get_acct_ctrl(sam_pass)&(~ACB_DISABLED), PDB_CHANGED)) {
|
if (!pdb_set_acct_ctrl (sam_pass, pdb_get_acct_ctrl(sam_pass)&(~ACB_DISABLED), PDB_CHANGED)) {
|
||||||
asprintf(pp_err_str, "Failed to unset 'disabled' flag for user %s.\n", user_name);
|
if (asprintf(pp_err_str, "Failed to unset 'disabled' flag for user %s.\n", user_name) < 0) {
|
||||||
|
*pp_err_str = NULL;
|
||||||
|
}
|
||||||
TALLOC_FREE(sam_pass);
|
TALLOC_FREE(sam_pass);
|
||||||
return NT_STATUS_UNSUCCESSFUL;
|
return NT_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
@ -743,7 +757,9 @@ NTSTATUS local_password_change(const char *user_name,
|
|||||||
|
|
||||||
if (local_flags & LOCAL_SET_NO_PASSWORD) {
|
if (local_flags & LOCAL_SET_NO_PASSWORD) {
|
||||||
if (!pdb_set_acct_ctrl (sam_pass, pdb_get_acct_ctrl(sam_pass)|ACB_PWNOTREQ, PDB_CHANGED)) {
|
if (!pdb_set_acct_ctrl (sam_pass, pdb_get_acct_ctrl(sam_pass)|ACB_PWNOTREQ, PDB_CHANGED)) {
|
||||||
asprintf(pp_err_str, "Failed to set 'no password required' flag for user %s.\n", user_name);
|
if (asprintf(pp_err_str, "Failed to set 'no password required' flag for user %s.\n", user_name) < 0) {
|
||||||
|
*pp_err_str = NULL;
|
||||||
|
}
|
||||||
TALLOC_FREE(sam_pass);
|
TALLOC_FREE(sam_pass);
|
||||||
return NT_STATUS_UNSUCCESSFUL;
|
return NT_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
@ -759,19 +775,25 @@ NTSTATUS local_password_change(const char *user_name,
|
|||||||
*/
|
*/
|
||||||
if ((pdb_get_lanman_passwd(sam_pass)==NULL) && (pdb_get_acct_ctrl(sam_pass)&ACB_DISABLED)) {
|
if ((pdb_get_lanman_passwd(sam_pass)==NULL) && (pdb_get_acct_ctrl(sam_pass)&ACB_DISABLED)) {
|
||||||
if (!pdb_set_acct_ctrl (sam_pass, pdb_get_acct_ctrl(sam_pass)&(~ACB_DISABLED), PDB_CHANGED)) {
|
if (!pdb_set_acct_ctrl (sam_pass, pdb_get_acct_ctrl(sam_pass)&(~ACB_DISABLED), PDB_CHANGED)) {
|
||||||
asprintf(pp_err_str, "Failed to unset 'disabled' flag for user %s.\n", user_name);
|
if (asprintf(pp_err_str, "Failed to unset 'disabled' flag for user %s.\n", user_name) < 0) {
|
||||||
|
*pp_err_str = NULL;
|
||||||
|
}
|
||||||
TALLOC_FREE(sam_pass);
|
TALLOC_FREE(sam_pass);
|
||||||
return NT_STATUS_UNSUCCESSFUL;
|
return NT_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!pdb_set_acct_ctrl (sam_pass, pdb_get_acct_ctrl(sam_pass)&(~ACB_PWNOTREQ), PDB_CHANGED)) {
|
if (!pdb_set_acct_ctrl (sam_pass, pdb_get_acct_ctrl(sam_pass)&(~ACB_PWNOTREQ), PDB_CHANGED)) {
|
||||||
asprintf(pp_err_str, "Failed to unset 'no password required' flag for user %s.\n", user_name);
|
if (asprintf(pp_err_str, "Failed to unset 'no password required' flag for user %s.\n", user_name) < 0) {
|
||||||
|
*pp_err_str = NULL;
|
||||||
|
}
|
||||||
TALLOC_FREE(sam_pass);
|
TALLOC_FREE(sam_pass);
|
||||||
return NT_STATUS_UNSUCCESSFUL;
|
return NT_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pdb_set_plaintext_passwd (sam_pass, new_passwd)) {
|
if (!pdb_set_plaintext_passwd (sam_pass, new_passwd)) {
|
||||||
asprintf(pp_err_str, "Failed to set password for user %s.\n", user_name);
|
if (asprintf(pp_err_str, "Failed to set password for user %s.\n", user_name) < 0) {
|
||||||
|
*pp_err_str = NULL;
|
||||||
|
}
|
||||||
TALLOC_FREE(sam_pass);
|
TALLOC_FREE(sam_pass);
|
||||||
return NT_STATUS_UNSUCCESSFUL;
|
return NT_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
@ -779,34 +801,51 @@ NTSTATUS local_password_change(const char *user_name,
|
|||||||
|
|
||||||
if (local_flags & LOCAL_ADD_USER) {
|
if (local_flags & LOCAL_ADD_USER) {
|
||||||
if (NT_STATUS_IS_OK(pdb_add_sam_account(sam_pass))) {
|
if (NT_STATUS_IS_OK(pdb_add_sam_account(sam_pass))) {
|
||||||
asprintf(pp_msg_str, "Added user %s.\n", user_name);
|
if (asprintf(pp_msg_str, "Added user %s.\n", user_name) < 0) {
|
||||||
|
*pp_msg_str = NULL;
|
||||||
|
}
|
||||||
TALLOC_FREE(sam_pass);
|
TALLOC_FREE(sam_pass);
|
||||||
return NT_STATUS_OK;
|
return NT_STATUS_OK;
|
||||||
} else {
|
} else {
|
||||||
asprintf(pp_err_str, "Failed to add entry for user %s.\n", user_name);
|
if (asprintf(pp_err_str, "Failed to add entry for user %s.\n", user_name) < 0) {
|
||||||
|
*pp_err_str = NULL;
|
||||||
|
}
|
||||||
TALLOC_FREE(sam_pass);
|
TALLOC_FREE(sam_pass);
|
||||||
return NT_STATUS_UNSUCCESSFUL;
|
return NT_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
} else if (local_flags & LOCAL_DELETE_USER) {
|
} else if (local_flags & LOCAL_DELETE_USER) {
|
||||||
if (!NT_STATUS_IS_OK(pdb_delete_sam_account(sam_pass))) {
|
if (!NT_STATUS_IS_OK(pdb_delete_sam_account(sam_pass))) {
|
||||||
asprintf(pp_err_str, "Failed to delete entry for user %s.\n", user_name);
|
if (asprintf(pp_err_str, "Failed to delete entry for user %s.\n", user_name) < 0) {
|
||||||
|
*pp_err_str = NULL;
|
||||||
|
}
|
||||||
TALLOC_FREE(sam_pass);
|
TALLOC_FREE(sam_pass);
|
||||||
return NT_STATUS_UNSUCCESSFUL;
|
return NT_STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
asprintf(pp_msg_str, "Deleted user %s.\n", user_name);
|
if (asprintf(pp_msg_str, "Deleted user %s.\n", user_name) < 0) {
|
||||||
|
*pp_msg_str = NULL;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
result = pdb_update_sam_account(sam_pass);
|
result = pdb_update_sam_account(sam_pass);
|
||||||
if(!NT_STATUS_IS_OK(result)) {
|
if(!NT_STATUS_IS_OK(result)) {
|
||||||
asprintf(pp_err_str, "Failed to modify entry for user %s.\n", user_name);
|
if (asprintf(pp_err_str, "Failed to modify entry for user %s.\n", user_name) < 0) {
|
||||||
|
*pp_err_str = NULL;
|
||||||
|
}
|
||||||
TALLOC_FREE(sam_pass);
|
TALLOC_FREE(sam_pass);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
if(local_flags & LOCAL_DISABLE_USER)
|
if(local_flags & LOCAL_DISABLE_USER) {
|
||||||
asprintf(pp_msg_str, "Disabled user %s.\n", user_name);
|
if (asprintf(pp_msg_str, "Disabled user %s.\n", user_name) < 0) {
|
||||||
else if (local_flags & LOCAL_ENABLE_USER)
|
*pp_msg_str = NULL;
|
||||||
asprintf(pp_msg_str, "Enabled user %s.\n", user_name);
|
}
|
||||||
else if (local_flags & LOCAL_SET_NO_PASSWORD)
|
} else if (local_flags & LOCAL_ENABLE_USER) {
|
||||||
asprintf(pp_msg_str, "User %s password set to none.\n", user_name);
|
if (asprintf(pp_msg_str, "Enabled user %s.\n", user_name) < 0) {
|
||||||
|
*pp_msg_str = NULL;
|
||||||
|
}
|
||||||
|
} else if (local_flags & LOCAL_SET_NO_PASSWORD) {
|
||||||
|
if (asprintf(pp_msg_str, "User %s password set to none.\n", user_name) < 0) {
|
||||||
|
*pp_msg_str = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TALLOC_FREE(sam_pass);
|
TALLOC_FREE(sam_pass);
|
||||||
|
@ -179,20 +179,26 @@ static struct pdb_methods *pdb_get_methods_reload( bool reload )
|
|||||||
pdb->free_private_data( &(pdb->private_data) );
|
pdb->free_private_data( &(pdb->private_data) );
|
||||||
if ( !NT_STATUS_IS_OK( make_pdb_method_name( &pdb, lp_passdb_backend() ) ) ) {
|
if ( !NT_STATUS_IS_OK( make_pdb_method_name( &pdb, lp_passdb_backend() ) ) ) {
|
||||||
char *msg = NULL;
|
char *msg = NULL;
|
||||||
asprintf(&msg, "pdb_get_methods_reload: "
|
if (asprintf(&msg, "pdb_get_methods_reload: "
|
||||||
"failed to get pdb methods for backend %s\n",
|
"failed to get pdb methods for backend %s\n",
|
||||||
lp_passdb_backend());
|
lp_passdb_backend()) > 0) {
|
||||||
smb_panic(msg);
|
smb_panic(msg);
|
||||||
|
} else {
|
||||||
|
smb_panic("pdb_get_methods_reload");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !pdb ) {
|
if ( !pdb ) {
|
||||||
if ( !NT_STATUS_IS_OK( make_pdb_method_name( &pdb, lp_passdb_backend() ) ) ) {
|
if ( !NT_STATUS_IS_OK( make_pdb_method_name( &pdb, lp_passdb_backend() ) ) ) {
|
||||||
char *msg = NULL;
|
char *msg = NULL;
|
||||||
asprintf(&msg, "pdb_get_methods_reload: "
|
if (asprintf(&msg, "pdb_get_methods_reload: "
|
||||||
"failed to get pdb methods for backend %s\n",
|
"failed to get pdb methods for backend %s\n",
|
||||||
lp_passdb_backend());
|
lp_passdb_backend()) > 0) {
|
||||||
smb_panic(msg);
|
smb_panic(msg);
|
||||||
|
} else {
|
||||||
|
smb_panic("pdb_get_methods_reload");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4184,9 +4184,10 @@ static char *get_ldap_filter(TALLOC_CTX *mem_ctx, const char *username)
|
|||||||
char *escaped = NULL;
|
char *escaped = NULL;
|
||||||
char *result = NULL;
|
char *result = NULL;
|
||||||
|
|
||||||
asprintf(&filter, "(&%s(objectclass=%s))",
|
if (asprintf(&filter, "(&%s(objectclass=%s))",
|
||||||
"(uid=%u)", LDAP_OBJ_SAMBASAMACCOUNT);
|
"(uid=%u)", LDAP_OBJ_SAMBASAMACCOUNT) < 0) {
|
||||||
if (filter == NULL) goto done;
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
escaped = escape_ldap_string_alloc(username);
|
escaped = escape_ldap_string_alloc(username);
|
||||||
if (escaped == NULL) goto done;
|
if (escaped == NULL) goto done;
|
||||||
|
@ -3187,7 +3187,9 @@ static bool map_nt_printer_info2_to_dsspooler(NT_PRINTER_INFO_LEVEL_2 *info2)
|
|||||||
|
|
||||||
map_sz_into_ctr(ctr, SPOOL_REG_SERVERNAME, longname);
|
map_sz_into_ctr(ctr, SPOOL_REG_SERVERNAME, longname);
|
||||||
|
|
||||||
asprintf(&allocated_string, "\\\\%s\\%s", longname, info2->sharename);
|
if (asprintf(&allocated_string, "\\\\%s\\%s", longname, info2->sharename) == -1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
map_sz_into_ctr(ctr, SPOOL_REG_UNCNAME, allocated_string);
|
map_sz_into_ctr(ctr, SPOOL_REG_UNCNAME, allocated_string);
|
||||||
SAFE_FREE(allocated_string);
|
SAFE_FREE(allocated_string);
|
||||||
|
|
||||||
@ -3267,6 +3269,7 @@ static WERROR nt_printer_publish_ads(ADS_STRUCT *ads,
|
|||||||
struct GUID guid;
|
struct GUID guid;
|
||||||
WERROR win_rc = WERR_OK;
|
WERROR win_rc = WERR_OK;
|
||||||
size_t converted_size;
|
size_t converted_size;
|
||||||
|
int ret;
|
||||||
|
|
||||||
DEBUG(5, ("publishing printer %s\n", printer->info_2->printername));
|
DEBUG(5, ("publishing printer %s\n", printer->info_2->printername));
|
||||||
|
|
||||||
@ -3278,27 +3281,23 @@ static WERROR nt_printer_publish_ads(ADS_STRUCT *ads,
|
|||||||
|
|
||||||
srv_dn_utf8 = ldap_get_dn((LDAP *)ads->ldap.ld, (LDAPMessage *)res);
|
srv_dn_utf8 = ldap_get_dn((LDAP *)ads->ldap.ld, (LDAPMessage *)res);
|
||||||
if (!srv_dn_utf8) {
|
if (!srv_dn_utf8) {
|
||||||
ads_destroy(&ads);
|
|
||||||
return WERR_SERVER_UNAVAILABLE;
|
return WERR_SERVER_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
ads_msgfree(ads, res);
|
ads_msgfree(ads, res);
|
||||||
srv_cn_utf8 = ldap_explode_dn(srv_dn_utf8, 1);
|
srv_cn_utf8 = ldap_explode_dn(srv_dn_utf8, 1);
|
||||||
if (!srv_cn_utf8) {
|
if (!srv_cn_utf8) {
|
||||||
ldap_memfree(srv_dn_utf8);
|
ldap_memfree(srv_dn_utf8);
|
||||||
ads_destroy(&ads);
|
|
||||||
return WERR_SERVER_UNAVAILABLE;
|
return WERR_SERVER_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
/* Now convert to CH_UNIX. */
|
/* Now convert to CH_UNIX. */
|
||||||
if (!pull_utf8_allocate(&srv_dn, srv_dn_utf8, &converted_size)) {
|
if (!pull_utf8_allocate(&srv_dn, srv_dn_utf8, &converted_size)) {
|
||||||
ldap_memfree(srv_dn_utf8);
|
ldap_memfree(srv_dn_utf8);
|
||||||
ldap_memfree(srv_cn_utf8);
|
ldap_memfree(srv_cn_utf8);
|
||||||
ads_destroy(&ads);
|
|
||||||
return WERR_SERVER_UNAVAILABLE;
|
return WERR_SERVER_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
if (!pull_utf8_allocate(&srv_cn_0, srv_cn_utf8[0], &converted_size)) {
|
if (!pull_utf8_allocate(&srv_cn_0, srv_cn_utf8[0], &converted_size)) {
|
||||||
ldap_memfree(srv_dn_utf8);
|
ldap_memfree(srv_dn_utf8);
|
||||||
ldap_memfree(srv_cn_utf8);
|
ldap_memfree(srv_cn_utf8);
|
||||||
ads_destroy(&ads);
|
|
||||||
SAFE_FREE(srv_dn);
|
SAFE_FREE(srv_dn);
|
||||||
return WERR_SERVER_UNAVAILABLE;
|
return WERR_SERVER_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
@ -3309,27 +3308,28 @@ static WERROR nt_printer_publish_ads(ADS_STRUCT *ads,
|
|||||||
srv_cn_escaped = escape_rdn_val_string_alloc(srv_cn_0);
|
srv_cn_escaped = escape_rdn_val_string_alloc(srv_cn_0);
|
||||||
if (!srv_cn_escaped) {
|
if (!srv_cn_escaped) {
|
||||||
SAFE_FREE(srv_cn_0);
|
SAFE_FREE(srv_cn_0);
|
||||||
ldap_memfree(srv_dn_utf8);
|
SAFE_FREE(srv_dn);
|
||||||
ads_destroy(&ads);
|
|
||||||
return WERR_SERVER_UNAVAILABLE;
|
return WERR_SERVER_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
sharename_escaped = escape_rdn_val_string_alloc(printer->info_2->sharename);
|
sharename_escaped = escape_rdn_val_string_alloc(printer->info_2->sharename);
|
||||||
if (!sharename_escaped) {
|
if (!sharename_escaped) {
|
||||||
SAFE_FREE(srv_cn_escaped);
|
SAFE_FREE(srv_cn_escaped);
|
||||||
SAFE_FREE(srv_cn_0);
|
SAFE_FREE(srv_cn_0);
|
||||||
ldap_memfree(srv_dn_utf8);
|
SAFE_FREE(srv_dn);
|
||||||
ads_destroy(&ads);
|
|
||||||
return WERR_SERVER_UNAVAILABLE;
|
return WERR_SERVER_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = asprintf(&prt_dn, "cn=%s-%s,%s", srv_cn_escaped, sharename_escaped, srv_dn);
|
||||||
asprintf(&prt_dn, "cn=%s-%s,%s", srv_cn_escaped, sharename_escaped, srv_dn);
|
|
||||||
|
|
||||||
SAFE_FREE(srv_dn);
|
SAFE_FREE(srv_dn);
|
||||||
SAFE_FREE(srv_cn_0);
|
SAFE_FREE(srv_cn_0);
|
||||||
SAFE_FREE(srv_cn_escaped);
|
SAFE_FREE(srv_cn_escaped);
|
||||||
SAFE_FREE(sharename_escaped);
|
SAFE_FREE(sharename_escaped);
|
||||||
|
|
||||||
|
if (ret == -1) {
|
||||||
|
return WERR_NOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
/* build the ads mods */
|
/* build the ads mods */
|
||||||
ctx = talloc_init("nt_printer_publish_ads");
|
ctx = talloc_init("nt_printer_publish_ads");
|
||||||
if (ctx == NULL) {
|
if (ctx == NULL) {
|
||||||
@ -3381,7 +3381,7 @@ static WERROR nt_printer_unpublish_ads(ADS_STRUCT *ads,
|
|||||||
NT_PRINTER_INFO_LEVEL *printer)
|
NT_PRINTER_INFO_LEVEL *printer)
|
||||||
{
|
{
|
||||||
ADS_STATUS ads_rc;
|
ADS_STATUS ads_rc;
|
||||||
LDAPMessage *res;
|
LDAPMessage *res = NULL;
|
||||||
char *prt_dn = NULL;
|
char *prt_dn = NULL;
|
||||||
|
|
||||||
DEBUG(5, ("unpublishing printer %s\n", printer->info_2->printername));
|
DEBUG(5, ("unpublishing printer %s\n", printer->info_2->printername));
|
||||||
@ -3390,7 +3390,7 @@ static WERROR nt_printer_unpublish_ads(ADS_STRUCT *ads,
|
|||||||
ads_rc = ads_find_printer_on_server(ads, &res,
|
ads_rc = ads_find_printer_on_server(ads, &res,
|
||||||
printer->info_2->sharename, global_myname());
|
printer->info_2->sharename, global_myname());
|
||||||
|
|
||||||
if (ADS_ERR_OK(ads_rc) && ads_count_replies(ads, res)) {
|
if (ADS_ERR_OK(ads_rc) && res && ads_count_replies(ads, res)) {
|
||||||
prt_dn = ads_get_dn(ads, res);
|
prt_dn = ads_get_dn(ads, res);
|
||||||
if (!prt_dn) {
|
if (!prt_dn) {
|
||||||
ads_msgfree(ads, res);
|
ads_msgfree(ads, res);
|
||||||
@ -3400,7 +3400,9 @@ static WERROR nt_printer_unpublish_ads(ADS_STRUCT *ads,
|
|||||||
ads_memfree(ads, prt_dn);
|
ads_memfree(ads, prt_dn);
|
||||||
}
|
}
|
||||||
|
|
||||||
ads_msgfree(ads, res);
|
if (res) {
|
||||||
|
ads_msgfree(ads, res);
|
||||||
|
}
|
||||||
return WERR_OK;
|
return WERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,7 +205,9 @@ static int generic_job_submit(int snum, struct printjob *pjob)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
chdir(wd);
|
if (chdir(wd) == -1) {
|
||||||
|
smb_panic("chdir failed in generic_job_submit");
|
||||||
|
}
|
||||||
TALLOC_FREE(current_directory);
|
TALLOC_FREE(current_directory);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -54,10 +54,13 @@ bool init_pipe_handle_list(pipes_struct *p, const char *pipe_name)
|
|||||||
(is_samr_lsa_pipe(plist->name) && is_samr_lsa_pipe(pipe_name))) {
|
(is_samr_lsa_pipe(plist->name) && is_samr_lsa_pipe(pipe_name))) {
|
||||||
if (!plist->pipe_handles) {
|
if (!plist->pipe_handles) {
|
||||||
char *msg;
|
char *msg;
|
||||||
asprintf(&msg, "init_pipe_handles: NULL "
|
if (asprintf(&msg, "init_pipe_handles: NULL "
|
||||||
"pipe_handle pointer in pipe %s",
|
"pipe_handle pointer in pipe %s",
|
||||||
pipe_name);
|
pipe_name) != -1) {
|
||||||
smb_panic(msg);
|
smb_panic(msg);
|
||||||
|
} else {
|
||||||
|
smb_panic("init_pipe_handle_list");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
hl = plist->pipe_handles;
|
hl = plist->pipe_handles;
|
||||||
break;
|
break;
|
||||||
|
@ -867,11 +867,14 @@ void set_filelen_write_cache(files_struct *fsp, SMB_OFF_T file_size)
|
|||||||
/* The cache *must* have been flushed before we do this. */
|
/* The cache *must* have been flushed before we do this. */
|
||||||
if (fsp->wcp->data_size != 0) {
|
if (fsp->wcp->data_size != 0) {
|
||||||
char *msg;
|
char *msg;
|
||||||
asprintf(&msg, "set_filelen_write_cache: size change "
|
if (asprintf(&msg, "set_filelen_write_cache: size change "
|
||||||
"on file %s with write cache size = %lu\n",
|
"on file %s with write cache size = %lu\n",
|
||||||
fsp->fsp_name,
|
fsp->fsp_name,
|
||||||
(unsigned long)fsp->wcp->data_size);
|
(unsigned long)fsp->wcp->data_size) != -1) {
|
||||||
smb_panic(msg);
|
smb_panic(msg);
|
||||||
|
} else {
|
||||||
|
smb_panic("set_filelen_write_cache");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fsp->wcp->file_size = file_size;
|
fsp->wcp->file_size = file_size;
|
||||||
}
|
}
|
||||||
|
@ -128,8 +128,7 @@ static NTSTATUS get_srv_gss_creds(const char *service,
|
|||||||
gss_OID_desc nt_hostbased_service =
|
gss_OID_desc nt_hostbased_service =
|
||||||
{10, CONST_DISCARD(char *,"\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x04")};
|
{10, CONST_DISCARD(char *,"\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x04")};
|
||||||
|
|
||||||
asprintf(&host_princ_s, "%s@%s", service, name);
|
if (asprintf(&host_princ_s, "%s@%s", service, name) == -1) {
|
||||||
if (host_princ_s == NULL) {
|
|
||||||
return NT_STATUS_NO_MEMORY;
|
return NT_STATUS_NO_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3687,7 +3687,7 @@ static NTSTATUS marshall_stream_info(unsigned int num_streams,
|
|||||||
unsigned int i;
|
unsigned int i;
|
||||||
unsigned int ofs = 0;
|
unsigned int ofs = 0;
|
||||||
|
|
||||||
for (i=0; i<num_streams; i++) {
|
for (i = 0; i < num_streams && ofs <= max_data_bytes; i++) {
|
||||||
unsigned int next_offset;
|
unsigned int next_offset;
|
||||||
size_t namelen;
|
size_t namelen;
|
||||||
smb_ucs2_t *namebuf;
|
smb_ucs2_t *namebuf;
|
||||||
@ -3706,11 +3706,6 @@ static NTSTATUS marshall_stream_info(unsigned int num_streams,
|
|||||||
|
|
||||||
namelen -= 2;
|
namelen -= 2;
|
||||||
|
|
||||||
if (ofs + 24 + namelen > max_data_bytes) {
|
|
||||||
TALLOC_FREE(namebuf);
|
|
||||||
return NT_STATUS_BUFFER_TOO_SMALL;
|
|
||||||
}
|
|
||||||
|
|
||||||
SIVAL(data, ofs+4, namelen);
|
SIVAL(data, ofs+4, namelen);
|
||||||
SOFF_T(data, ofs+8, streams[i].size);
|
SOFF_T(data, ofs+8, streams[i].size);
|
||||||
SOFF_T(data, ofs+16, streams[i].alloc_size);
|
SOFF_T(data, ofs+16, streams[i].alloc_size);
|
||||||
@ -3725,10 +3720,6 @@ static NTSTATUS marshall_stream_info(unsigned int num_streams,
|
|||||||
else {
|
else {
|
||||||
unsigned int align = ndr_align_size(next_offset, 8);
|
unsigned int align = ndr_align_size(next_offset, 8);
|
||||||
|
|
||||||
if (next_offset + align > max_data_bytes) {
|
|
||||||
return NT_STATUS_BUFFER_TOO_SMALL;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(data+next_offset, 0, align);
|
memset(data+next_offset, 0, align);
|
||||||
next_offset += align;
|
next_offset += align;
|
||||||
|
|
||||||
|
@ -23,6 +23,9 @@
|
|||||||
#ifndef __GENSEC_H__
|
#ifndef __GENSEC_H__
|
||||||
#define __GENSEC_H__
|
#define __GENSEC_H__
|
||||||
|
|
||||||
|
#include "../lib/util/data_blob.h"
|
||||||
|
#include "libcli/util/ntstatus.h"
|
||||||
|
|
||||||
#define GENSEC_OID_NTLMSSP "1.3.6.1.4.1.311.2.2.10"
|
#define GENSEC_OID_NTLMSSP "1.3.6.1.4.1.311.2.2.10"
|
||||||
#define GENSEC_OID_SPNEGO "1.3.6.1.5.5.2"
|
#define GENSEC_OID_SPNEGO "1.3.6.1.5.5.2"
|
||||||
#define GENSEC_OID_KERBEROS5 "1.2.840.113554.1.2.2"
|
#define GENSEC_OID_KERBEROS5 "1.2.840.113554.1.2.2"
|
||||||
|
@ -57,6 +57,7 @@ sub show($$)
|
|||||||
showisexternal($output, "popt", "LIBPOPT");
|
showisexternal($output, "popt", "LIBPOPT");
|
||||||
showisexternal($output, "talloc", "LIBTALLOC");
|
showisexternal($output, "talloc", "LIBTALLOC");
|
||||||
showisexternal($output, "tdb", "LIBTDB");
|
showisexternal($output, "tdb", "LIBTDB");
|
||||||
|
showisexternal($output, "tevent", "LIBTEVENT");
|
||||||
showisexternal($output, "ldb", "LIBLDB");
|
showisexternal($output, "ldb", "LIBLDB");
|
||||||
print "Developer mode: ".(enabled($config->{developer})?"yes":"no")."\n";
|
print "Developer mode: ".(enabled($config->{developer})?"yes":"no")."\n";
|
||||||
print "Automatic dependencies: ".
|
print "Automatic dependencies: ".
|
||||||
|
@ -34,7 +34,6 @@ m4_include(../nsswitch/nsstest.m4)
|
|||||||
m4_include(../pidl/config.m4)
|
m4_include(../pidl/config.m4)
|
||||||
|
|
||||||
AC_CONFIG_FILES(lib/registry/registry.pc)
|
AC_CONFIG_FILES(lib/registry/registry.pc)
|
||||||
AC_CONFIG_FILES(../lib/tevent/tevent.pc)
|
|
||||||
AC_CONFIG_FILES(librpc/dcerpc.pc)
|
AC_CONFIG_FILES(librpc/dcerpc.pc)
|
||||||
AC_CONFIG_FILES(../librpc/ndr.pc)
|
AC_CONFIG_FILES(../librpc/ndr.pc)
|
||||||
AC_CONFIG_FILES(../lib/torture/torture.pc)
|
AC_CONFIG_FILES(../lib/torture/torture.pc)
|
||||||
@ -61,6 +60,17 @@ SMB_EXT_LIB_FROM_PKGCONFIG(LIBTDB, tdb >= 1.1.3,
|
|||||||
|
|
||||||
SMB_INCLUDE_MK(../lib/tdb/python.mk)
|
SMB_INCLUDE_MK(../lib/tdb/python.mk)
|
||||||
|
|
||||||
|
SMB_EXT_LIB_FROM_PKGCONFIG(LIBTEVENT, tevent >= 1.0.0,
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
m4_include(../lib/tevent/libtevent.m4)
|
||||||
|
SMB_INCLUDE_MK(../lib/tevent/config.mk)
|
||||||
|
AC_CONFIG_FILES(../lib/tevent/tevent.pc)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
SMB_INCLUDE_MK(../lib/tevent/python.mk)
|
||||||
|
|
||||||
SMB_EXT_LIB_FROM_PKGCONFIG(LIBLDB, ldb = 0.9.1,
|
SMB_EXT_LIB_FROM_PKGCONFIG(LIBLDB, ldb = 0.9.1,
|
||||||
[
|
[
|
||||||
SMB_INCLUDE_MK(lib/ldb/ldb_ildap/config.mk)
|
SMB_INCLUDE_MK(lib/ldb/ldb_ildap/config.mk)
|
||||||
@ -96,7 +106,6 @@ SMB_EXT_LIB_FROM_PKGCONFIG(LIBLDB, ldb = 0.9.1,
|
|||||||
SMB_INCLUDE_MK(lib/ldb/python.mk)
|
SMB_INCLUDE_MK(lib/ldb/python.mk)
|
||||||
|
|
||||||
m4_include(lib/tls/config.m4)
|
m4_include(lib/tls/config.m4)
|
||||||
m4_include(../lib/tevent/libtevent.m4)
|
|
||||||
|
|
||||||
dnl m4_include(auth/kerberos/config.m4)
|
dnl m4_include(auth/kerberos/config.m4)
|
||||||
m4_include(auth/gensec/config.m4)
|
m4_include(auth/gensec/config.m4)
|
||||||
|
@ -23,3 +23,4 @@ TDB_WRAP_OBJ_FILES = $(libsrcdir)/tdb_wrap.o
|
|||||||
PUBLIC_HEADERS += $(libsrcdir)/tdb_wrap.h
|
PUBLIC_HEADERS += $(libsrcdir)/tdb_wrap.h
|
||||||
|
|
||||||
SMBREADLINE_OBJ_LIST = $(SMBREADLINE_OBJ_FILES)
|
SMBREADLINE_OBJ_LIST = $(SMBREADLINE_OBJ_FILES)
|
||||||
|
|
||||||
|
@ -2,6 +2,6 @@
|
|||||||
PUBLIC_DEPENDENCIES = LIBTEVENT
|
PUBLIC_DEPENDENCIES = LIBTEVENT
|
||||||
CFLAGS = -Ilib/events
|
CFLAGS = -Ilib/events
|
||||||
|
|
||||||
LIBEVENTS_OBJ_FILES = $(addprefix $(libeventssrcdir)/, events_dummy.o)
|
LIBEVENTS_OBJ_FILES = $(addprefix $(libeventssrcdir)/, tevent_s4.o)
|
||||||
|
|
||||||
PUBLIC_HEADERS += $(addprefix $(libeventssrcdir)/, events.h events_internal.h)
|
PUBLIC_HEADERS += $(addprefix $(libeventssrcdir)/, events.h events_internal.h)
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
void __events_dummy(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
@ -32,9 +32,9 @@ TDB_LIBS = @TDB_LIBS@
|
|||||||
TDB_CFLAGS = @TDB_CFLAGS@
|
TDB_CFLAGS = @TDB_CFLAGS@
|
||||||
TDB_OBJ = @TDB_OBJ@
|
TDB_OBJ = @TDB_OBJ@
|
||||||
|
|
||||||
EVENTS_LIBS = @EVENTS_LIBS@
|
TEVENT_LIBS = @TEVENT_LIBS@
|
||||||
EVENTS_CFLAGS = @EVENTS_CFLAGS@
|
TEVENT_CFLAGS = @TEVENT_CFLAGS@
|
||||||
EVENTS_OBJ = @EVENTS_OBJ@
|
TEVENT_OBJ = @TEVENT_OBJ@
|
||||||
|
|
||||||
POPT_LIBS = @POPT_LIBS@
|
POPT_LIBS = @POPT_LIBS@
|
||||||
POPT_CFLAGS = @POPT_CFLAGS@
|
POPT_CFLAGS = @POPT_CFLAGS@
|
||||||
@ -55,13 +55,13 @@ LIBS = @LIBS@
|
|||||||
|
|
||||||
PICFLAG = @PICFLAG@
|
PICFLAG = @PICFLAG@
|
||||||
CFLAGS=-g -I$(srcdir)/include -Iinclude -I$(srcdir) -I$(srcdir)/.. \
|
CFLAGS=-g -I$(srcdir)/include -Iinclude -I$(srcdir) -I$(srcdir)/.. \
|
||||||
$(POPT_CFLAGS) $(TALLOC_CFLAGS) $(TDB_CFLAGS) $(EVENTS_CFLAGS) \
|
$(POPT_CFLAGS) $(TALLOC_CFLAGS) $(TDB_CFLAGS) $(TEVENT_CFLAGS) \
|
||||||
-DLIBDIR=\"$(libdir)\" -DSHLIBEXT=\"$(SHLIBEXT)\" -DUSE_MMAP=1 @CFLAGS@
|
-DLIBDIR=\"$(libdir)\" -DSHLIBEXT=\"$(SHLIBEXT)\" -DUSE_MMAP=1 @CFLAGS@
|
||||||
|
|
||||||
MDLD = @MDLD@
|
MDLD = @MDLD@
|
||||||
MDLD_FLAGS = @MDLD_FLAGS@
|
MDLD_FLAGS = @MDLD_FLAGS@
|
||||||
|
|
||||||
OBJS = $(MODULES_OBJ) $(COMMON_OBJ) $(LDB_TDB_OBJ) $(TDB_OBJ) $(EVENTS_OBJ) $(TALLOC_OBJ) $(POPT_OBJ) $(LDB_MAP_OBJ) @LIBREPLACEOBJ@ $(EXTRA_OBJ)
|
OBJS = $(MODULES_OBJ) $(COMMON_OBJ) $(LDB_TDB_OBJ) $(TDB_OBJ) $(TEVENT_OBJ) $(TALLOC_OBJ) $(POPT_OBJ) $(LDB_MAP_OBJ) @LIBREPLACEOBJ@ $(EXTRA_OBJ)
|
||||||
|
|
||||||
headers = $(srcdir)/include/ldb.h $(srcdir)/include/ldb_errors.h $(srcdir)/include/ldb_handlers.h
|
headers = $(srcdir)/include/ldb.h $(srcdir)/include/ldb_errors.h $(srcdir)/include/ldb_handlers.h
|
||||||
|
|
||||||
@ -88,14 +88,14 @@ STATICLIB = lib/libldb.a
|
|||||||
lib/$(SONAME): $(LIBSOLIB)
|
lib/$(SONAME): $(LIBSOLIB)
|
||||||
ln -fs libldb.$(SHLIBEXT).$(PACKAGE_VERSION) $@
|
ln -fs libldb.$(SHLIBEXT).$(PACKAGE_VERSION) $@
|
||||||
|
|
||||||
lib/libldb.$(SHLIBEXT): $(LIBSOLIB)
|
lib/libldb.$(SHLIBEXT): $(LIBSOLIB) lib/$(SONAME)
|
||||||
ln -fs libldb.$(SHLIBEXT).$(PACKAGE_VERSION) $@
|
ln -fs libldb.$(SHLIBEXT).$(PACKAGE_VERSION) $@
|
||||||
|
|
||||||
lib/libnss_ldb.$(SHLIBEXT).2: $(NSS_OBJ) $(LIBSOLIB)
|
lib/libnss_ldb.$(SHLIBEXT).2: $(NSS_OBJ) $(LIBSOLIB)
|
||||||
$(SHLD) $(SHLD_FLAGS) -o $@ $(NSS_OBJ) $(LDFLAGS) $(LIBSOLIB) @SONAMEFLAG@libnss_ldb.$(SHLIBEXT).2
|
$(SHLD) $(SHLD_FLAGS) -o $@ $(NSS_OBJ) $(LDFLAGS) $(LIBSOLIB) @SONAMEFLAG@libnss_ldb.$(SHLIBEXT).2
|
||||||
|
|
||||||
$(LIBSOLIB): $(OBJS)
|
$(LIBSOLIB): $(OBJS)
|
||||||
$(SHLD) $(SHLD_FLAGS) -o $@ $(OBJS) $(LDFLAGS) $(LIBS) $(TALLOC_LIBS) $(TDB_LIBS) $(EVENTS_LIBS) $(LIBDL) $(LDAP_LIBS) @SONAMEFLAG@$(SONAME)
|
$(SHLD) $(SHLD_FLAGS) -o $@ $(OBJS) $(LDFLAGS) $(LIBS) $(TALLOC_LIBS) $(TDB_LIBS) $(TEVENT_LIBS) $(LIBDL) $(LDAP_LIBS) @SONAMEFLAG@$(SONAME)
|
||||||
ln -sf libldb.$(SHLIBEXT).$(PACKAGE_VERSION) lib/libldb.$(SHLIBEXT)
|
ln -sf libldb.$(SHLIBEXT).$(PACKAGE_VERSION) lib/libldb.$(SHLIBEXT)
|
||||||
|
|
||||||
all: showflags dirs $(OBJS) $(STATICLIB) $(LIBSOLIB) $(BINS) $(EXAMPLES) manpages \
|
all: showflags dirs $(OBJS) $(STATICLIB) $(LIBSOLIB) $(BINS) $(EXAMPLES) manpages \
|
||||||
|
12
source4/lib/ldb/external/libevents.m4
vendored
12
source4/lib/ldb/external/libevents.m4
vendored
@ -1,7 +1,7 @@
|
|||||||
AC_SUBST(EVENTS_OBJ)
|
AC_SUBST(TEVENT_OBJ)
|
||||||
AC_SUBST(EVENTS_CFLAGS)
|
AC_SUBST(TEVENT_CFLAGS)
|
||||||
AC_SUBST(EVENTS_LIBS)
|
AC_SUBST(TEVENT_LIBS)
|
||||||
|
|
||||||
AC_CHECK_HEADER(events.h,
|
AC_CHECK_HEADER(tevent.h,
|
||||||
[AC_CHECK_LIB(events, event_context_init, [EVENTS_LIBS="-levents"]) ],
|
[AC_CHECK_LIB(tevent, event_context_init, [TEVENT_LIBS="-ltevent"]) ],
|
||||||
[PKG_CHECK_MODULES(EVENTS, events)])
|
[PKG_CHECK_MODULES(TEVENT, tevent)])
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#include "system/filesys.h"
|
#include "system/filesys.h"
|
||||||
#include "system/time.h"
|
#include "system/time.h"
|
||||||
#include "talloc.h"
|
#include "talloc.h"
|
||||||
#include "events.h"
|
#include "tevent.h"
|
||||||
#include "ldb.h"
|
#include "ldb.h"
|
||||||
#include "ldb_errors.h"
|
#include "ldb_errors.h"
|
||||||
#include "ldb_private.h"
|
#include "ldb_private.h"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
LDB_LIB = -Llib -lldb
|
LDB_LIB = -Llib -lldb
|
||||||
|
|
||||||
LIB_FLAGS=$(LDFLAGS) $(LIBS) $(LDB_LIB) $(POPT_LIBS) $(TALLOC_LIBS) \
|
LIB_FLAGS=$(LDFLAGS) $(LIBS) $(LDB_LIB) $(POPT_LIBS) $(TALLOC_LIBS) \
|
||||||
$(TDB_LIBS) $(EVENTS_LIBS) $(LDAP_LIBS) $(LIBDL)
|
$(TDB_LIBS) $(TEVENT_LIBS) $(LDAP_LIBS) $(LIBDL)
|
||||||
|
|
||||||
LDB_TDB_DIR=ldb_tdb
|
LDB_TDB_DIR=ldb_tdb
|
||||||
LDB_TDB_OBJ=$(LDB_TDB_DIR)/ldb_tdb.o \
|
LDB_TDB_OBJ=$(LDB_TDB_DIR)/ldb_tdb.o \
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
#include "ldb_includes.h"
|
#include "ldb_includes.h"
|
||||||
|
|
||||||
#include "lib/events/events.h"
|
#include "tevent.h"
|
||||||
#include "libcli/ldap/ldap.h"
|
#include "libcli/ldap/ldap.h"
|
||||||
#include "libcli/ldap/ldap_client.h"
|
#include "libcli/ldap/ldap_client.h"
|
||||||
#include "auth/auth.h"
|
#include "auth/auth.h"
|
||||||
|
@ -25,19 +25,21 @@
|
|||||||
License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdint.h>
|
#include "ldb_includes.h"
|
||||||
#include <stdbool.h>
|
|
||||||
#include "pyldb.h"
|
#include "pyldb.h"
|
||||||
#include "events.h"
|
|
||||||
#include "ldb.h"
|
/* There's no Py_ssize_t in 2.4, apparently */
|
||||||
#include "ldb_errors.h"
|
#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 5
|
||||||
#include "ldb_private.h"
|
typedef int Py_ssize_t;
|
||||||
|
typedef inquiry lenfunc;
|
||||||
|
typedef intargfunc ssizeargfunc;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Picked out of thin air. To do this properly, we should probably have some part of the
|
/* Picked out of thin air. To do this properly, we should probably have some part of the
|
||||||
* errors in LDB be allocated to bindings ? */
|
* errors in LDB be allocated to bindings ? */
|
||||||
#define LDB_ERR_PYTHON_EXCEPTION 142
|
#define LDB_ERR_PYTHON_EXCEPTION 142
|
||||||
|
|
||||||
PyObject *PyExc_LdbError;
|
static PyObject *PyExc_LdbError;
|
||||||
|
|
||||||
void PyErr_SetLdbError(int ret, struct ldb_context *ldb_ctx)
|
void PyErr_SetLdbError(int ret, struct ldb_context *ldb_ctx)
|
||||||
{
|
{
|
||||||
@ -45,7 +47,7 @@ void PyErr_SetLdbError(int ret, struct ldb_context *ldb_ctx)
|
|||||||
return; /* Python exception should already be set, just keep that */
|
return; /* Python exception should already be set, just keep that */
|
||||||
PyErr_SetObject(PyExc_LdbError, Py_BuildValue((char *)"(i,s)", ret, ldb_ctx == NULL?ldb_strerror(ret):ldb_errstring(ldb_ctx)));
|
PyErr_SetObject(PyExc_LdbError, Py_BuildValue((char *)"(i,s)", ret, ldb_ctx == NULL?ldb_strerror(ret):ldb_errstring(ldb_ctx)));
|
||||||
}
|
}
|
||||||
PyObject *PyObject_FromLdbValue(struct ldb_context *ldb_ctx,
|
static PyObject *PyObject_FromLdbValue(struct ldb_context *ldb_ctx,
|
||||||
struct ldb_message_element *el,
|
struct ldb_message_element *el,
|
||||||
struct ldb_val *val)
|
struct ldb_val *val)
|
||||||
{
|
{
|
||||||
@ -129,47 +131,47 @@ static struct ldb_result *PyLdbResult_AsResult(TALLOC_CTX *mem_ctx, PyObject *ob
|
|||||||
|
|
||||||
static PyObject *py_ldb_dn_validate(PyLdbDnObject *self)
|
static PyObject *py_ldb_dn_validate(PyLdbDnObject *self)
|
||||||
{
|
{
|
||||||
return PyBool_FromLong(ldb_dn_validate(self->ptr));
|
return PyBool_FromLong(ldb_dn_validate(self->dn));
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_ldb_dn_is_valid(PyLdbDnObject *self)
|
static PyObject *py_ldb_dn_is_valid(PyLdbDnObject *self)
|
||||||
{
|
{
|
||||||
return PyBool_FromLong(ldb_dn_is_valid(self->ptr));
|
return PyBool_FromLong(ldb_dn_is_valid(self->dn));
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_ldb_dn_is_special(PyLdbDnObject *self)
|
static PyObject *py_ldb_dn_is_special(PyLdbDnObject *self)
|
||||||
{
|
{
|
||||||
return PyBool_FromLong(ldb_dn_is_special(self->ptr));
|
return PyBool_FromLong(ldb_dn_is_special(self->dn));
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_ldb_dn_is_null(PyLdbDnObject *self)
|
static PyObject *py_ldb_dn_is_null(PyLdbDnObject *self)
|
||||||
{
|
{
|
||||||
return PyBool_FromLong(ldb_dn_is_null(self->ptr));
|
return PyBool_FromLong(ldb_dn_is_null(self->dn));
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_ldb_dn_get_casefold(PyLdbDnObject *self)
|
static PyObject *py_ldb_dn_get_casefold(PyLdbDnObject *self)
|
||||||
{
|
{
|
||||||
return PyString_FromString(ldb_dn_get_casefold(self->ptr));
|
return PyString_FromString(ldb_dn_get_casefold(self->dn));
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_ldb_dn_get_linearized(PyLdbDnObject *self)
|
static PyObject *py_ldb_dn_get_linearized(PyLdbDnObject *self)
|
||||||
{
|
{
|
||||||
return PyString_FromString(ldb_dn_get_linearized(self->ptr));
|
return PyString_FromString(ldb_dn_get_linearized(self->dn));
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_ldb_dn_canonical_str(PyLdbDnObject *self)
|
static PyObject *py_ldb_dn_canonical_str(PyLdbDnObject *self)
|
||||||
{
|
{
|
||||||
return PyString_FromString(ldb_dn_canonical_string(self->ptr, self->ptr));
|
return PyString_FromString(ldb_dn_canonical_string(self->dn, self->dn));
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_ldb_dn_canonical_ex_str(PyLdbDnObject *self)
|
static PyObject *py_ldb_dn_canonical_ex_str(PyLdbDnObject *self)
|
||||||
{
|
{
|
||||||
return PyString_FromString(ldb_dn_canonical_ex_string(self->ptr, self->ptr));
|
return PyString_FromString(ldb_dn_canonical_ex_string(self->dn, self->dn));
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_ldb_dn_repr(PyLdbDnObject *self)
|
static PyObject *py_ldb_dn_repr(PyLdbDnObject *self)
|
||||||
{
|
{
|
||||||
return PyString_FromFormat("Dn(%s)", PyObject_REPR(PyString_FromString(ldb_dn_get_linearized(self->ptr))));
|
return PyString_FromFormat("Dn(%s)", PyObject_REPR(PyString_FromString(ldb_dn_get_linearized(self->dn))));
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_ldb_dn_check_special(PyLdbDnObject *self, PyObject *args)
|
static PyObject *py_ldb_dn_check_special(PyLdbDnObject *self, PyObject *args)
|
||||||
@ -179,12 +181,12 @@ static PyObject *py_ldb_dn_check_special(PyLdbDnObject *self, PyObject *args)
|
|||||||
if (!PyArg_ParseTuple(args, "s", &name))
|
if (!PyArg_ParseTuple(args, "s", &name))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return ldb_dn_check_special(self->ptr, name)?Py_True:Py_False;
|
return ldb_dn_check_special(self->dn, name)?Py_True:Py_False;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int py_ldb_dn_compare(PyLdbDnObject *dn1, PyLdbDnObject *dn2)
|
static int py_ldb_dn_compare(PyLdbDnObject *dn1, PyLdbDnObject *dn2)
|
||||||
{
|
{
|
||||||
return ldb_dn_compare(dn1->ptr, dn2->ptr);
|
return ldb_dn_compare(dn1->dn, dn2->dn);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_ldb_dn_get_parent(PyLdbDnObject *self)
|
static PyObject *py_ldb_dn_get_parent(PyLdbDnObject *self)
|
||||||
@ -289,6 +291,7 @@ static PyObject *py_ldb_dn_new(PyTypeObject *type, PyObject *args, PyObject *kwa
|
|||||||
char *str;
|
char *str;
|
||||||
PyObject *py_ldb;
|
PyObject *py_ldb;
|
||||||
struct ldb_context *ldb_ctx;
|
struct ldb_context *ldb_ctx;
|
||||||
|
PyLdbDnObject *py_ret;
|
||||||
const char *kwnames[] = { "ldb", "dn", NULL };
|
const char *kwnames[] = { "ldb", "dn", NULL };
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Os", (char **)kwnames, &py_ldb, &str))
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Os", (char **)kwnames, &py_ldb, &str))
|
||||||
@ -306,12 +309,32 @@ static PyObject *py_ldb_dn_new(PyTypeObject *type, PyObject *args, PyObject *kwa
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return py_talloc_import(&PyLdbDn, ret);
|
py_ret = (PyLdbDnObject *)type->tp_alloc(type, 0);
|
||||||
|
if (ret == NULL) {
|
||||||
|
PyErr_NoMemory();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
py_ret->dn = ret;
|
||||||
|
return (PyObject *)py_ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *PyLdbDn_FromDn(struct ldb_dn *dn)
|
PyObject *PyLdbDn_FromDn(struct ldb_dn *dn)
|
||||||
{
|
{
|
||||||
return py_talloc_import(&PyLdbDn, dn);
|
PyLdbDnObject *py_ret;
|
||||||
|
py_ret = (PyLdbDnObject *)PyLdbDn.tp_alloc(&PyLdbDn, 0);
|
||||||
|
if (py_ret == NULL) {
|
||||||
|
PyErr_NoMemory();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
py_ret->mem_ctx = talloc_new(NULL);
|
||||||
|
py_ret->dn = talloc_reference(py_ret->mem_ctx, dn);
|
||||||
|
return (PyObject *)py_ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void py_ldb_dn_dealloc(PyLdbDnObject *self)
|
||||||
|
{
|
||||||
|
talloc_free(self->mem_ctx);
|
||||||
|
self->ob_type->tp_free(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
PyTypeObject PyLdbDn = {
|
PyTypeObject PyLdbDn = {
|
||||||
@ -323,7 +346,7 @@ PyTypeObject PyLdbDn = {
|
|||||||
.tp_as_sequence = &py_ldb_dn_seq,
|
.tp_as_sequence = &py_ldb_dn_seq,
|
||||||
.tp_doc = "A LDB distinguished name.",
|
.tp_doc = "A LDB distinguished name.",
|
||||||
.tp_new = py_ldb_dn_new,
|
.tp_new = py_ldb_dn_new,
|
||||||
.tp_dealloc = py_talloc_dealloc,
|
.tp_dealloc = (destructor)py_ldb_dn_dealloc,
|
||||||
.tp_basicsize = sizeof(PyLdbObject),
|
.tp_basicsize = sizeof(PyLdbObject),
|
||||||
.tp_flags = Py_TPFLAGS_DEFAULT,
|
.tp_flags = Py_TPFLAGS_DEFAULT,
|
||||||
};
|
};
|
||||||
@ -345,7 +368,7 @@ static PyObject *py_ldb_set_debug(PyLdbObject *self, PyObject *args)
|
|||||||
|
|
||||||
Py_INCREF(cb);
|
Py_INCREF(cb);
|
||||||
/* FIXME: Where do we DECREF cb ? */
|
/* FIXME: Where do we DECREF cb ? */
|
||||||
PyErr_LDB_ERROR_IS_ERR_RAISE(ldb_set_debug(self->ptr, py_ldb_debug, cb), PyLdb_AsLdbContext(self));
|
PyErr_LDB_ERROR_IS_ERR_RAISE(ldb_set_debug(self->ldb_ctx, py_ldb_debug, cb), PyLdb_AsLdbContext(self));
|
||||||
|
|
||||||
return Py_None;
|
return Py_None;
|
||||||
}
|
}
|
||||||
@ -495,6 +518,7 @@ static int py_ldb_init(PyLdbObject *self, PyObject *args, PyObject *kwargs)
|
|||||||
|
|
||||||
static PyObject *py_ldb_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
|
static PyObject *py_ldb_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
|
||||||
{
|
{
|
||||||
|
PyLdbObject *ret;
|
||||||
struct ldb_context *ldb;
|
struct ldb_context *ldb;
|
||||||
ldb = ldb_init(NULL, event_context_init(NULL));
|
ldb = ldb_init(NULL, event_context_init(NULL));
|
||||||
if (ldb == NULL) {
|
if (ldb == NULL) {
|
||||||
@ -502,7 +526,13 @@ static PyObject *py_ldb_new(PyTypeObject *type, PyObject *args, PyObject *kwargs
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return py_talloc_import(type, ldb);
|
ret = (PyLdbObject *)type->tp_alloc(type, 0);
|
||||||
|
if (ret == NULL) {
|
||||||
|
PyErr_NoMemory();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
ret->ldb_ctx = ldb;
|
||||||
|
return (PyObject *)ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_ldb_connect(PyLdbObject *self, PyObject *args, PyObject *kwargs)
|
static PyObject *py_ldb_connect(PyLdbObject *self, PyObject *args, PyObject *kwargs)
|
||||||
@ -701,7 +731,7 @@ static PyObject *py_ldb_parse_ldif(PyLdbObject *self, PyObject *args)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
list = PyList_New(0);
|
list = PyList_New(0);
|
||||||
while ((ldif = ldb_ldif_read_string(self->ptr, &s)) != NULL) {
|
while ((ldif = ldb_ldif_read_string(self->ldb_ctx, &s)) != NULL) {
|
||||||
PyList_Append(list, ldb_ldif_to_pyobject(ldif));
|
PyList_Append(list, ldb_ldif_to_pyobject(ldif));
|
||||||
}
|
}
|
||||||
return PyObject_GetIter(list);
|
return PyObject_GetIter(list);
|
||||||
@ -949,7 +979,16 @@ static PyMethodDef py_ldb_methods[] = {
|
|||||||
|
|
||||||
PyObject *PyLdbModule_FromModule(struct ldb_module *mod)
|
PyObject *PyLdbModule_FromModule(struct ldb_module *mod)
|
||||||
{
|
{
|
||||||
return py_talloc_import(&PyLdbModule, mod);
|
PyLdbModuleObject *ret;
|
||||||
|
|
||||||
|
ret = (PyLdbModuleObject *)PyLdbModule.tp_alloc(&PyLdbModule, 0);
|
||||||
|
if (ret == NULL) {
|
||||||
|
PyErr_NoMemory();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
ret->mem_ctx = talloc_new(NULL);
|
||||||
|
ret->mod = talloc_reference(ret->mem_ctx, mod);
|
||||||
|
return (PyObject *)ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_ldb_get_firstmodule(PyLdbObject *self, void *closure)
|
static PyObject *py_ldb_get_firstmodule(PyLdbObject *self, void *closure)
|
||||||
@ -992,7 +1031,22 @@ static PySequenceMethods py_ldb_seq = {
|
|||||||
|
|
||||||
PyObject *PyLdb_FromLdbContext(struct ldb_context *ldb_ctx)
|
PyObject *PyLdb_FromLdbContext(struct ldb_context *ldb_ctx)
|
||||||
{
|
{
|
||||||
return py_talloc_import(&PyLdb, ldb_ctx);
|
PyLdbObject *ret;
|
||||||
|
|
||||||
|
ret = (PyLdbObject *)PyLdb.tp_alloc(&PyLdb, 0);
|
||||||
|
if (ret == NULL) {
|
||||||
|
PyErr_NoMemory();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
ret->mem_ctx = talloc_new(NULL);
|
||||||
|
ret->ldb_ctx = talloc_reference(ret->mem_ctx, ldb_ctx);
|
||||||
|
return (PyObject *)ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void py_ldb_dealloc(PyLdbObject *self)
|
||||||
|
{
|
||||||
|
talloc_free(self->mem_ctx);
|
||||||
|
self->ob_type->tp_free(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
PyTypeObject PyLdb = {
|
PyTypeObject PyLdb = {
|
||||||
@ -1001,7 +1055,7 @@ PyTypeObject PyLdb = {
|
|||||||
.tp_repr = (reprfunc)py_ldb_repr,
|
.tp_repr = (reprfunc)py_ldb_repr,
|
||||||
.tp_new = py_ldb_new,
|
.tp_new = py_ldb_new,
|
||||||
.tp_init = (initproc)py_ldb_init,
|
.tp_init = (initproc)py_ldb_init,
|
||||||
.tp_dealloc = py_talloc_dealloc,
|
.tp_dealloc = (destructor)py_ldb_dealloc,
|
||||||
.tp_getset = py_ldb_getset,
|
.tp_getset = py_ldb_getset,
|
||||||
.tp_getattro = PyObject_GenericGetAttr,
|
.tp_getattro = PyObject_GenericGetAttr,
|
||||||
.tp_basicsize = sizeof(PyLdbObject),
|
.tp_basicsize = sizeof(PyLdbObject),
|
||||||
@ -1049,7 +1103,7 @@ static PyObject *py_ldb_module_search(PyLdbModuleObject *self, PyObject *args, P
|
|||||||
&py_base, &scope, &py_tree, &py_attrs))
|
&py_base, &scope, &py_tree, &py_attrs))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
mod = self->ptr;
|
mod = self->mod;
|
||||||
|
|
||||||
ret = ldb_build_search_req(&req, mod->ldb, NULL, PyLdbDn_AsDn(py_base),
|
ret = ldb_build_search_req(&req, mod->ldb, NULL, PyLdbDn_AsDn(py_base),
|
||||||
scope, NULL /* expr */, py_attrs == Py_None?NULL:PyList_AsStringList(req, py_attrs),
|
scope, NULL /* expr */, py_attrs == Py_None?NULL:PyList_AsStringList(req, py_attrs),
|
||||||
@ -1163,13 +1217,19 @@ static PyMethodDef py_ldb_module_methods[] = {
|
|||||||
{ NULL },
|
{ NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void py_ldb_module_dealloc(PyLdbModuleObject *self)
|
||||||
|
{
|
||||||
|
talloc_free(self->mem_ctx);
|
||||||
|
self->ob_type->tp_free(self);
|
||||||
|
}
|
||||||
|
|
||||||
PyTypeObject PyLdbModule = {
|
PyTypeObject PyLdbModule = {
|
||||||
.tp_name = "LdbModule",
|
.tp_name = "LdbModule",
|
||||||
.tp_methods = py_ldb_module_methods,
|
.tp_methods = py_ldb_module_methods,
|
||||||
.tp_repr = (reprfunc)py_ldb_module_repr,
|
.tp_repr = (reprfunc)py_ldb_module_repr,
|
||||||
.tp_str = (reprfunc)py_ldb_module_str,
|
.tp_str = (reprfunc)py_ldb_module_str,
|
||||||
.tp_basicsize = sizeof(py_talloc_Object),
|
.tp_basicsize = sizeof(PyLdbModuleObject),
|
||||||
.tp_dealloc = py_talloc_dealloc,
|
.tp_dealloc = (destructor)py_ldb_module_dealloc,
|
||||||
.tp_flags = Py_TPFLAGS_DEFAULT,
|
.tp_flags = Py_TPFLAGS_DEFAULT,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1190,14 +1250,16 @@ struct ldb_message_element *PyObject_AsMessageElement(TALLOC_CTX *mem_ctx,
|
|||||||
me->num_values = 1;
|
me->num_values = 1;
|
||||||
me->values = talloc_array(me, struct ldb_val, me->num_values);
|
me->values = talloc_array(me, struct ldb_val, me->num_values);
|
||||||
me->values[0].length = PyString_Size(set_obj);
|
me->values[0].length = PyString_Size(set_obj);
|
||||||
me->values[0].data = (uint8_t *)talloc_strdup(me->values,
|
me->values[0].data = (uint8_t *)talloc_strndup(me->values,
|
||||||
PyString_AsString(set_obj));
|
PyString_AsString(set_obj),
|
||||||
|
me->values[0].length);
|
||||||
} else if (PySequence_Check(set_obj)) {
|
} else if (PySequence_Check(set_obj)) {
|
||||||
int i;
|
int i;
|
||||||
me->num_values = PySequence_Size(set_obj);
|
me->num_values = PySequence_Size(set_obj);
|
||||||
me->values = talloc_array(me, struct ldb_val, me->num_values);
|
me->values = talloc_array(me, struct ldb_val, me->num_values);
|
||||||
for (i = 0; i < me->num_values; i++) {
|
for (i = 0; i < me->num_values; i++) {
|
||||||
PyObject *obj = PySequence_GetItem(set_obj, i);
|
PyObject *obj = PySequence_GetItem(set_obj, i);
|
||||||
|
|
||||||
me->values[i].length = PyString_Size(obj);
|
me->values[i].length = PyString_Size(obj);
|
||||||
me->values[i].data = (uint8_t *)PyString_AsString(obj);
|
me->values[i].data = (uint8_t *)PyString_AsString(obj);
|
||||||
}
|
}
|
||||||
@ -1210,7 +1272,7 @@ struct ldb_message_element *PyObject_AsMessageElement(TALLOC_CTX *mem_ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PyObject *ldb_msg_element_to_set(struct ldb_context *ldb_ctx,
|
static PyObject *ldb_msg_element_to_set(struct ldb_context *ldb_ctx,
|
||||||
struct ldb_message_element *me)
|
struct ldb_message_element *me)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -1227,7 +1289,7 @@ PyObject *ldb_msg_element_to_set(struct ldb_context *ldb_ctx,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *py_ldb_msg_element_get(PyLdbMessageElementObject *self, PyObject *args)
|
static PyObject *py_ldb_msg_element_get(PyLdbMessageElementObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
if (!PyArg_ParseTuple(args, "i", &i))
|
if (!PyArg_ParseTuple(args, "i", &i))
|
||||||
@ -1277,7 +1339,19 @@ static PyObject *py_ldb_msg_element_iter(PyLdbMessageElementObject *self)
|
|||||||
|
|
||||||
PyObject *PyLdbMessageElement_FromMessageElement(struct ldb_message_element *el, TALLOC_CTX *mem_ctx)
|
PyObject *PyLdbMessageElement_FromMessageElement(struct ldb_message_element *el, TALLOC_CTX *mem_ctx)
|
||||||
{
|
{
|
||||||
return py_talloc_import_ex(&PyLdbMessageElement, mem_ctx, el);
|
PyLdbMessageElementObject *ret;
|
||||||
|
ret = (PyLdbMessageElementObject *)PyLdbMessageElement.tp_alloc(&PyLdbMessageElement, 0);
|
||||||
|
if (ret == NULL) {
|
||||||
|
PyErr_NoMemory();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
ret->mem_ctx = talloc_new(NULL);
|
||||||
|
if (talloc_reference(ret->mem_ctx, mem_ctx) == NULL) {
|
||||||
|
PyErr_NoMemory();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
ret->el = el;
|
||||||
|
return (PyObject *)ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_ldb_msg_element_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
|
static PyObject *py_ldb_msg_element_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
|
||||||
@ -1287,6 +1361,7 @@ static PyObject *py_ldb_msg_element_new(PyTypeObject *type, PyObject *args, PyOb
|
|||||||
int flags = 0;
|
int flags = 0;
|
||||||
char *name = NULL;
|
char *name = NULL;
|
||||||
const char *kwnames[] = { "elements", "flags", "name", NULL };
|
const char *kwnames[] = { "elements", "flags", "name", NULL };
|
||||||
|
PyLdbMessageElementObject *ret;
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Ois", (char **)kwnames, &py_elements, &flags, &name))
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|Ois", (char **)kwnames, &py_elements, &flags, &name))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -1294,12 +1369,12 @@ static PyObject *py_ldb_msg_element_new(PyTypeObject *type, PyObject *args, PyOb
|
|||||||
|
|
||||||
if (py_elements != NULL) {
|
if (py_elements != NULL) {
|
||||||
int i;
|
int i;
|
||||||
if (!PySequence_Check(py_elements)) {
|
if (PyString_Check(py_elements)) {
|
||||||
el->num_values = 1;
|
el->num_values = 1;
|
||||||
el->values = talloc_array(el, struct ldb_val, 1);
|
el->values = talloc_array(el, struct ldb_val, 1);
|
||||||
el->values[0].data = (uint8_t *)PyString_AsString(py_elements);
|
el->values[0].data = (uint8_t *)PyString_AsString(py_elements);
|
||||||
el->values[0].length = PyString_Size(py_elements);
|
el->values[0].length = PyString_Size(py_elements);
|
||||||
} else {
|
} else if (PySequence_Check(py_elements)) {
|
||||||
el->num_values = PySequence_Size(py_elements);
|
el->num_values = PySequence_Size(py_elements);
|
||||||
el->values = talloc_array(el, struct ldb_val, el->num_values);
|
el->values = talloc_array(el, struct ldb_val, el->num_values);
|
||||||
for (i = 0; i < el->num_values; i++) {
|
for (i = 0; i < el->num_values; i++) {
|
||||||
@ -1307,13 +1382,27 @@ static PyObject *py_ldb_msg_element_new(PyTypeObject *type, PyObject *args, PyOb
|
|||||||
el->values[i].data = (uint8_t *)PyString_AsString(item);
|
el->values[i].data = (uint8_t *)PyString_AsString(item);
|
||||||
el->values[i].length = PyString_Size(item);
|
el->values[i].length = PyString_Size(item);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
PyErr_SetString(PyExc_TypeError,
|
||||||
|
"Expected string or list");
|
||||||
|
talloc_free(el);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
el->flags = flags;
|
el->flags = flags;
|
||||||
el->name = talloc_strdup(el, name);
|
el->name = talloc_strdup(el, name);
|
||||||
|
|
||||||
return py_talloc_import(&PyLdbMessageElement, el);
|
ret = (PyLdbMessageElementObject *)PyLdbMessageElement.tp_alloc(&PyLdbMessageElement, 0);
|
||||||
|
if (ret == NULL) {
|
||||||
|
PyErr_NoMemory();
|
||||||
|
talloc_free(el);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret->mem_ctx = talloc_new(NULL);
|
||||||
|
ret->el = talloc_reference(ret->mem_ctx, el);
|
||||||
|
return (PyObject *)ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_ldb_msg_element_repr(PyLdbMessageElementObject *self)
|
static PyObject *py_ldb_msg_element_repr(PyLdbMessageElementObject *self)
|
||||||
@ -1348,10 +1437,16 @@ static PyObject *py_ldb_msg_element_str(PyLdbMessageElementObject *self)
|
|||||||
return Py_None;
|
return Py_None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void py_ldb_msg_element_dealloc(PyLdbMessageElementObject *self)
|
||||||
|
{
|
||||||
|
talloc_free(self->mem_ctx);
|
||||||
|
self->ob_type->tp_free(self);
|
||||||
|
}
|
||||||
|
|
||||||
PyTypeObject PyLdbMessageElement = {
|
PyTypeObject PyLdbMessageElement = {
|
||||||
.tp_name = "MessageElement",
|
.tp_name = "MessageElement",
|
||||||
.tp_basicsize = sizeof(PyLdbMessageElementObject),
|
.tp_basicsize = sizeof(PyLdbMessageElementObject),
|
||||||
.tp_dealloc = py_talloc_dealloc,
|
.tp_dealloc = (destructor)py_ldb_msg_element_dealloc,
|
||||||
.tp_repr = (reprfunc)py_ldb_msg_element_repr,
|
.tp_repr = (reprfunc)py_ldb_msg_element_repr,
|
||||||
.tp_str = (reprfunc)py_ldb_msg_element_str,
|
.tp_str = (reprfunc)py_ldb_msg_element_str,
|
||||||
.tp_methods = py_ldb_msg_element_methods,
|
.tp_methods = py_ldb_msg_element_methods,
|
||||||
@ -1368,7 +1463,7 @@ static PyObject *py_ldb_msg_remove_attr(PyLdbMessageObject *self, PyObject *args
|
|||||||
if (!PyArg_ParseTuple(args, "s", &name))
|
if (!PyArg_ParseTuple(args, "s", &name))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
ldb_msg_remove_attr(self->ptr, name);
|
ldb_msg_remove_attr(self->msg, name);
|
||||||
|
|
||||||
return Py_None;
|
return Py_None;
|
||||||
}
|
}
|
||||||
@ -1393,13 +1488,14 @@ static PyObject *py_ldb_msg_getitem_helper(PyLdbMessageObject *self, PyObject *p
|
|||||||
{
|
{
|
||||||
struct ldb_message_element *el;
|
struct ldb_message_element *el;
|
||||||
char *name = PyString_AsString(py_name);
|
char *name = PyString_AsString(py_name);
|
||||||
|
struct ldb_message *msg = PyLdbMessage_AsMessage(self);
|
||||||
if (!strcmp(name, "dn"))
|
if (!strcmp(name, "dn"))
|
||||||
return PyLdbDn_FromDn(PyLdbMessage_AsMessage(self)->dn);
|
return PyLdbDn_FromDn(msg->dn);
|
||||||
el = ldb_msg_find_element(PyLdbMessage_AsMessage(self), name);
|
el = ldb_msg_find_element(msg, name);
|
||||||
if (el == NULL) {
|
if (el == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return (PyObject *)PyLdbMessageElement_FromMessageElement(el, self->talloc_ctx);
|
return (PyObject *)PyLdbMessageElement_FromMessageElement(el, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_ldb_msg_getitem(PyLdbMessageObject *self, PyObject *py_name)
|
static PyObject *py_ldb_msg_getitem(PyLdbMessageObject *self, PyObject *py_name)
|
||||||
@ -1435,7 +1531,7 @@ static PyObject *py_ldb_msg_items(PyLdbMessageObject *self)
|
|||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
for (i = 0; i < msg->num_elements; i++, j++) {
|
for (i = 0; i < msg->num_elements; i++, j++) {
|
||||||
PyList_SetItem(l, j, Py_BuildValue("(sO)", msg->elements[i].name, PyLdbMessageElement_FromMessageElement(&msg->elements[i], self->talloc_ctx)));
|
PyList_SetItem(l, j, Py_BuildValue("(sO)", msg->elements[i].name, PyLdbMessageElement_FromMessageElement(&msg->elements[i], self->msg)));
|
||||||
}
|
}
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
@ -1462,13 +1558,13 @@ static int py_ldb_msg_setitem(PyLdbMessageObject *self, PyObject *name, PyObject
|
|||||||
{
|
{
|
||||||
char *attr_name = PyString_AsString(name);
|
char *attr_name = PyString_AsString(name);
|
||||||
if (value == NULL) {
|
if (value == NULL) {
|
||||||
ldb_msg_remove_attr(self->ptr, attr_name);
|
ldb_msg_remove_attr(self->msg, attr_name);
|
||||||
} else {
|
} else {
|
||||||
struct ldb_message_element *el = PyObject_AsMessageElement(NULL,
|
struct ldb_message_element *el = PyObject_AsMessageElement(NULL,
|
||||||
value, 0, attr_name);
|
value, 0, attr_name);
|
||||||
if (el == NULL)
|
if (el == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
talloc_steal(self->ptr, el);
|
talloc_steal(self->msg, el);
|
||||||
ldb_msg_remove_attr(PyLdbMessage_AsMessage(self), attr_name);
|
ldb_msg_remove_attr(PyLdbMessage_AsMessage(self), attr_name);
|
||||||
ldb_msg_add(PyLdbMessage_AsMessage(self), el, el->flags);
|
ldb_msg_add(PyLdbMessage_AsMessage(self), el, el->flags);
|
||||||
}
|
}
|
||||||
@ -1491,6 +1587,7 @@ static PyObject *py_ldb_msg_new(PyTypeObject *type, PyObject *args, PyObject *kw
|
|||||||
const char *kwnames[] = { "dn", NULL };
|
const char *kwnames[] = { "dn", NULL };
|
||||||
struct ldb_message *ret;
|
struct ldb_message *ret;
|
||||||
PyObject *pydn = NULL;
|
PyObject *pydn = NULL;
|
||||||
|
PyLdbMessageObject *py_ret;
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", (char **)kwnames, &pydn))
|
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O", (char **)kwnames, &pydn))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -1504,12 +1601,29 @@ static PyObject *py_ldb_msg_new(PyTypeObject *type, PyObject *args, PyObject *kw
|
|||||||
if (!PyObject_AsDn(NULL, pydn, NULL, &ret->dn))
|
if (!PyObject_AsDn(NULL, pydn, NULL, &ret->dn))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return py_talloc_import(type, ret);
|
py_ret = (PyLdbMessageObject *)type->tp_alloc(type, 0);
|
||||||
|
if (py_ret == NULL) {
|
||||||
|
PyErr_NoMemory();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
py_ret->mem_ctx = talloc_new(NULL);
|
||||||
|
py_ret->msg = talloc_reference(py_ret->mem_ctx, ret);
|
||||||
|
return (PyObject *)py_ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *PyLdbMessage_FromMessage(struct ldb_message *msg)
|
PyObject *PyLdbMessage_FromMessage(struct ldb_message *msg)
|
||||||
{
|
{
|
||||||
return py_talloc_import(&PyLdbMessage, msg);
|
PyLdbMessageObject *ret;
|
||||||
|
|
||||||
|
ret = (PyLdbMessageObject *)PyLdbMessage.tp_alloc(&PyLdbMessage, 0);
|
||||||
|
if (ret == NULL) {
|
||||||
|
PyErr_NoMemory();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
ret->mem_ctx = talloc_new(NULL);
|
||||||
|
ret->msg = talloc_reference(ret->mem_ctx, msg);
|
||||||
|
return (PyObject *)ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *py_ldb_msg_get_dn(PyLdbMessageObject *self, void *closure)
|
static PyObject *py_ldb_msg_get_dn(PyLdbMessageObject *self, void *closure)
|
||||||
@ -1538,13 +1652,19 @@ static PyObject *py_ldb_msg_repr(PyLdbMessageObject *self)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void py_ldb_msg_dealloc(PyLdbMessageObject *self)
|
||||||
|
{
|
||||||
|
talloc_free(self->mem_ctx);
|
||||||
|
self->ob_type->tp_free(self);
|
||||||
|
}
|
||||||
|
|
||||||
PyTypeObject PyLdbMessage = {
|
PyTypeObject PyLdbMessage = {
|
||||||
.tp_name = "Message",
|
.tp_name = "Message",
|
||||||
.tp_methods = py_ldb_msg_methods,
|
.tp_methods = py_ldb_msg_methods,
|
||||||
.tp_getset = py_ldb_msg_getset,
|
.tp_getset = py_ldb_msg_getset,
|
||||||
.tp_as_mapping = &py_ldb_msg_mapping,
|
.tp_as_mapping = &py_ldb_msg_mapping,
|
||||||
.tp_basicsize = sizeof(PyLdbMessageObject),
|
.tp_basicsize = sizeof(PyLdbMessageObject),
|
||||||
.tp_dealloc = py_talloc_dealloc,
|
.tp_dealloc = (destructor)py_ldb_msg_dealloc,
|
||||||
.tp_new = py_ldb_msg_new,
|
.tp_new = py_ldb_msg_new,
|
||||||
.tp_repr = (reprfunc)py_ldb_msg_repr,
|
.tp_repr = (reprfunc)py_ldb_msg_repr,
|
||||||
.tp_flags = Py_TPFLAGS_DEFAULT,
|
.tp_flags = Py_TPFLAGS_DEFAULT,
|
||||||
@ -1553,18 +1673,34 @@ PyTypeObject PyLdbMessage = {
|
|||||||
|
|
||||||
PyObject *PyLdbTree_FromTree(struct ldb_parse_tree *tree)
|
PyObject *PyLdbTree_FromTree(struct ldb_parse_tree *tree)
|
||||||
{
|
{
|
||||||
return py_talloc_import(&PyLdbTree, tree);
|
PyLdbTreeObject *ret;
|
||||||
|
|
||||||
|
ret = (PyLdbTreeObject *)PyLdbTree.tp_alloc(&PyLdbTree, 0);
|
||||||
|
if (ret == NULL) {
|
||||||
|
PyErr_NoMemory();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret->mem_ctx = talloc_new(NULL);
|
||||||
|
ret->tree = talloc_reference(ret->mem_ctx, tree);
|
||||||
|
return (PyObject *)ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void py_ldb_tree_dealloc(PyLdbTreeObject *self)
|
||||||
|
{
|
||||||
|
talloc_free(self->mem_ctx);
|
||||||
|
self->ob_type->tp_free(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
PyTypeObject PyLdbTree = {
|
PyTypeObject PyLdbTree = {
|
||||||
.tp_name = "Tree",
|
.tp_name = "Tree",
|
||||||
.tp_basicsize = sizeof(PyLdbTreeObject),
|
.tp_basicsize = sizeof(PyLdbTreeObject),
|
||||||
.tp_dealloc = py_talloc_dealloc,
|
.tp_dealloc = (destructor)py_ldb_tree_dealloc,
|
||||||
.tp_flags = Py_TPFLAGS_DEFAULT,
|
.tp_flags = Py_TPFLAGS_DEFAULT,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Ldb_module */
|
/* Ldb_module */
|
||||||
int py_module_search(struct ldb_module *mod, struct ldb_request *req)
|
static int py_module_search(struct ldb_module *mod, struct ldb_request *req)
|
||||||
{
|
{
|
||||||
PyObject *py_ldb = mod->private_data;
|
PyObject *py_ldb = mod->private_data;
|
||||||
PyObject *py_result, *py_base, *py_attrs, *py_tree;
|
PyObject *py_result, *py_base, *py_attrs, *py_tree;
|
||||||
@ -1609,7 +1745,7 @@ int py_module_search(struct ldb_module *mod, struct ldb_request *req)
|
|||||||
return LDB_SUCCESS;
|
return LDB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int py_module_add(struct ldb_module *mod, struct ldb_request *req)
|
static int py_module_add(struct ldb_module *mod, struct ldb_request *req)
|
||||||
{
|
{
|
||||||
PyObject *py_ldb = mod->private_data;
|
PyObject *py_ldb = mod->private_data;
|
||||||
PyObject *py_result, *py_msg;
|
PyObject *py_result, *py_msg;
|
||||||
@ -1633,7 +1769,7 @@ int py_module_add(struct ldb_module *mod, struct ldb_request *req)
|
|||||||
return LDB_SUCCESS;
|
return LDB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int py_module_modify(struct ldb_module *mod, struct ldb_request *req)
|
static int py_module_modify(struct ldb_module *mod, struct ldb_request *req)
|
||||||
{
|
{
|
||||||
PyObject *py_ldb = mod->private_data;
|
PyObject *py_ldb = mod->private_data;
|
||||||
PyObject *py_result, *py_msg;
|
PyObject *py_result, *py_msg;
|
||||||
@ -1657,7 +1793,7 @@ int py_module_modify(struct ldb_module *mod, struct ldb_request *req)
|
|||||||
return LDB_SUCCESS;
|
return LDB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int py_module_del(struct ldb_module *mod, struct ldb_request *req)
|
static int py_module_del(struct ldb_module *mod, struct ldb_request *req)
|
||||||
{
|
{
|
||||||
PyObject *py_ldb = mod->private_data;
|
PyObject *py_ldb = mod->private_data;
|
||||||
PyObject *py_result, *py_dn;
|
PyObject *py_result, *py_dn;
|
||||||
@ -1678,7 +1814,7 @@ int py_module_del(struct ldb_module *mod, struct ldb_request *req)
|
|||||||
return LDB_SUCCESS;
|
return LDB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int py_module_rename(struct ldb_module *mod, struct ldb_request *req)
|
static int py_module_rename(struct ldb_module *mod, struct ldb_request *req)
|
||||||
{
|
{
|
||||||
PyObject *py_ldb = mod->private_data;
|
PyObject *py_ldb = mod->private_data;
|
||||||
PyObject *py_result, *py_olddn, *py_newdn;
|
PyObject *py_result, *py_olddn, *py_newdn;
|
||||||
@ -1707,7 +1843,7 @@ int py_module_rename(struct ldb_module *mod, struct ldb_request *req)
|
|||||||
return LDB_SUCCESS;
|
return LDB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int py_module_request(struct ldb_module *mod, struct ldb_request *req)
|
static int py_module_request(struct ldb_module *mod, struct ldb_request *req)
|
||||||
{
|
{
|
||||||
PyObject *py_ldb = mod->private_data;
|
PyObject *py_ldb = mod->private_data;
|
||||||
PyObject *py_result;
|
PyObject *py_result;
|
||||||
@ -1717,7 +1853,7 @@ int py_module_request(struct ldb_module *mod, struct ldb_request *req)
|
|||||||
return LDB_ERR_OPERATIONS_ERROR;
|
return LDB_ERR_OPERATIONS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
int py_module_extended(struct ldb_module *mod, struct ldb_request *req)
|
static int py_module_extended(struct ldb_module *mod, struct ldb_request *req)
|
||||||
{
|
{
|
||||||
PyObject *py_ldb = mod->private_data;
|
PyObject *py_ldb = mod->private_data;
|
||||||
PyObject *py_result;
|
PyObject *py_result;
|
||||||
@ -1727,7 +1863,7 @@ int py_module_extended(struct ldb_module *mod, struct ldb_request *req)
|
|||||||
return LDB_ERR_OPERATIONS_ERROR;
|
return LDB_ERR_OPERATIONS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
int py_module_start_transaction(struct ldb_module *mod)
|
static int py_module_start_transaction(struct ldb_module *mod)
|
||||||
{
|
{
|
||||||
PyObject *py_ldb = mod->private_data;
|
PyObject *py_ldb = mod->private_data;
|
||||||
PyObject *py_result;
|
PyObject *py_result;
|
||||||
@ -1743,7 +1879,7 @@ int py_module_start_transaction(struct ldb_module *mod)
|
|||||||
return LDB_SUCCESS;
|
return LDB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int py_module_end_transaction(struct ldb_module *mod)
|
static int py_module_end_transaction(struct ldb_module *mod)
|
||||||
{
|
{
|
||||||
PyObject *py_ldb = mod->private_data;
|
PyObject *py_ldb = mod->private_data;
|
||||||
PyObject *py_result;
|
PyObject *py_result;
|
||||||
@ -1759,7 +1895,7 @@ int py_module_end_transaction(struct ldb_module *mod)
|
|||||||
return LDB_SUCCESS;
|
return LDB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int py_module_del_transaction(struct ldb_module *mod)
|
static int py_module_del_transaction(struct ldb_module *mod)
|
||||||
{
|
{
|
||||||
PyObject *py_ldb = mod->private_data;
|
PyObject *py_ldb = mod->private_data;
|
||||||
PyObject *py_result;
|
PyObject *py_result;
|
||||||
@ -1781,7 +1917,7 @@ static int py_module_destructor(struct ldb_module *mod)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int py_module_init (struct ldb_module *mod)
|
static int py_module_init (struct ldb_module *mod)
|
||||||
{
|
{
|
||||||
PyObject *py_class = mod->ops->private_data;
|
PyObject *py_class = mod->ops->private_data;
|
||||||
PyObject *py_result, *py_next, *py_ldb;
|
PyObject *py_result, *py_next, *py_ldb;
|
||||||
|
@ -27,48 +27,68 @@
|
|||||||
#define _PYLDB_H_
|
#define _PYLDB_H_
|
||||||
|
|
||||||
#include <Python.h>
|
#include <Python.h>
|
||||||
#include <pytalloc.h>
|
|
||||||
#include <ldb.h>
|
|
||||||
#include <ldb_private.h>
|
|
||||||
#include <ldb_errors.h>
|
|
||||||
|
|
||||||
typedef py_talloc_Object PyLdbObject;
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
struct ldb_context *ldb_ctx;
|
||||||
|
TALLOC_CTX *mem_ctx;
|
||||||
|
} PyLdbObject;
|
||||||
|
|
||||||
PyAPI_DATA(PyTypeObject) PyLdb;
|
PyAPI_DATA(PyTypeObject) PyLdb;
|
||||||
PyObject *PyLdb_FromLdbContext(struct ldb_context *ldb_ctx);
|
PyObject *PyLdb_FromLdbContext(struct ldb_context *ldb_ctx);
|
||||||
#define PyLdb_AsLdbContext(pyobj) py_talloc_get_type(pyobj, struct ldb_context)
|
#define PyLdb_AsLdbContext(pyobj) ((PyLdbObject *)pyobj)->ldb_ctx
|
||||||
#define PyLdb_Check(ob) PyObject_TypeCheck(ob, &PyLdb)
|
#define PyLdb_Check(ob) PyObject_TypeCheck(ob, &PyLdb)
|
||||||
|
|
||||||
typedef py_talloc_Object PyLdbDnObject;
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
struct ldb_dn *dn;
|
||||||
|
TALLOC_CTX *mem_ctx;
|
||||||
|
} PyLdbDnObject;
|
||||||
|
|
||||||
PyAPI_DATA(PyTypeObject) PyLdbDn;
|
PyAPI_DATA(PyTypeObject) PyLdbDn;
|
||||||
struct ldb_dn *PyLdbDn_AsDn(PyObject *);
|
|
||||||
PyObject *PyLdbDn_FromDn(struct ldb_dn *);
|
PyObject *PyLdbDn_FromDn(struct ldb_dn *);
|
||||||
bool PyObject_AsDn(TALLOC_CTX *mem_ctx, PyObject *object, struct ldb_context *ldb_ctx, struct ldb_dn **dn);
|
bool PyObject_AsDn(TALLOC_CTX *mem_ctx, PyObject *object, struct ldb_context *ldb_ctx, struct ldb_dn **dn);
|
||||||
#define PyLdbDn_AsDn(pyobj) py_talloc_get_type(pyobj, struct ldb_dn)
|
#define PyLdbDn_AsDn(pyobj) ((PyLdbDnObject *)pyobj)->dn
|
||||||
#define PyLdbDn_Check(ob) PyObject_TypeCheck(ob, &PyLdbDn)
|
#define PyLdbDn_Check(ob) PyObject_TypeCheck(ob, &PyLdbDn)
|
||||||
|
|
||||||
typedef py_talloc_Object PyLdbMessageObject;
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
struct ldb_message *msg;
|
||||||
|
TALLOC_CTX *mem_ctx;
|
||||||
|
} PyLdbMessageObject;
|
||||||
PyAPI_DATA(PyTypeObject) PyLdbMessage;
|
PyAPI_DATA(PyTypeObject) PyLdbMessage;
|
||||||
PyObject *PyLdbMessage_FromMessage(struct ldb_message *message);
|
PyObject *PyLdbMessage_FromMessage(struct ldb_message *message);
|
||||||
struct ldb_message *PyLdbMessage_AsMessage(PyObject *obj);
|
|
||||||
#define PyLdbMessage_Check(ob) PyObject_TypeCheck(ob, &PyLdbMessage)
|
#define PyLdbMessage_Check(ob) PyObject_TypeCheck(ob, &PyLdbMessage)
|
||||||
#define PyLdbMessage_AsMessage(pyobj) py_talloc_get_type(pyobj, struct ldb_message)
|
#define PyLdbMessage_AsMessage(pyobj) ((PyLdbMessageObject *)pyobj)->msg
|
||||||
|
|
||||||
typedef py_talloc_Object PyLdbModuleObject;
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
struct ldb_module *mod;
|
||||||
|
TALLOC_CTX *mem_ctx;
|
||||||
|
} PyLdbModuleObject;
|
||||||
PyAPI_DATA(PyTypeObject) PyLdbModule;
|
PyAPI_DATA(PyTypeObject) PyLdbModule;
|
||||||
PyObject *PyLdbModule_FromModule(struct ldb_module *mod);
|
PyObject *PyLdbModule_FromModule(struct ldb_module *mod);
|
||||||
#define PyLdbModule_AsModule(pyobj) ((struct ldb_module *)py_talloc_get_ptr(pyobj))
|
#define PyLdbModule_AsModule(pyobj) ((PyLdbModuleObject *)pyobj)->mod
|
||||||
|
|
||||||
typedef py_talloc_Object PyLdbMessageElementObject;
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
struct ldb_message_element *el;
|
||||||
|
TALLOC_CTX *mem_ctx;
|
||||||
|
} PyLdbMessageElementObject;
|
||||||
PyAPI_DATA(PyTypeObject) PyLdbMessageElement;
|
PyAPI_DATA(PyTypeObject) PyLdbMessageElement;
|
||||||
struct ldb_message_element *PyObject_AsMessageElement(TALLOC_CTX *mem_ctx, PyObject *obj, int flags, const char *name);
|
struct ldb_message_element *PyObject_AsMessageElement(TALLOC_CTX *mem_ctx, PyObject *obj, int flags, const char *name);
|
||||||
PyObject *PyLdbMessageElement_FromMessageElement(struct ldb_message_element *, TALLOC_CTX *mem_ctx);
|
PyObject *PyLdbMessageElement_FromMessageElement(struct ldb_message_element *, TALLOC_CTX *mem_ctx);
|
||||||
#define PyLdbMessageElement_AsMessageElement(pyobj) ((struct ldb_message_element *)py_talloc_get_ptr(pyobj))
|
#define PyLdbMessageElement_AsMessageElement(pyobj) ((PyLdbMessageElementObject *)pyobj)->el
|
||||||
#define PyLdbMessageElement_Check(ob) PyObject_TypeCheck(ob, &PyLdbMessageElement)
|
#define PyLdbMessageElement_Check(ob) PyObject_TypeCheck(ob, &PyLdbMessageElement)
|
||||||
|
|
||||||
typedef py_talloc_Object PyLdbTreeObject;
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
struct ldb_parse_tree *tree;
|
||||||
|
TALLOC_CTX *mem_ctx;
|
||||||
|
} PyLdbTreeObject;
|
||||||
PyAPI_DATA(PyTypeObject) PyLdbTree;
|
PyAPI_DATA(PyTypeObject) PyLdbTree;
|
||||||
PyObject *PyLdbTree_FromTree(struct ldb_parse_tree *);
|
PyObject *PyLdbTree_FromTree(struct ldb_parse_tree *);
|
||||||
#define PyLdbTree_AsTree(pyobj) py_talloc_get_type(pyobj, struct ldb_parse_tree)
|
#define PyLdbTree_AsTree(pyobj) ((PyLdbTreeObject *)pyobj)->tree
|
||||||
|
|
||||||
void PyErr_SetLdbError(int ret, struct ldb_context *ldb_ctx);
|
void PyErr_SetLdbError(int ret, struct ldb_context *ldb_ctx);
|
||||||
#define PyErr_LDB_ERROR_IS_ERR_RAISE(ret,ldb) \
|
#define PyErr_LDB_ERROR_IS_ERR_RAISE(ret,ldb) \
|
||||||
|
@ -24,13 +24,10 @@
|
|||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
#include "libcli/composite/composite.h"
|
#include "libcli/composite/composite.h"
|
||||||
#include "libnet/composite.h"
|
|
||||||
#include "librpc/gen_ndr/security.h"
|
#include "librpc/gen_ndr/security.h"
|
||||||
#include "libcli/security/security.h"
|
#include "libcli/security/security.h"
|
||||||
#include "libnet/userman.h"
|
#include "libnet/libnet.h"
|
||||||
#include "libnet/groupinfo.h"
|
|
||||||
#include "librpc/gen_ndr/ndr_samr_c.h"
|
#include "librpc/gen_ndr/ndr_samr_c.h"
|
||||||
#include "libnet/libnet_proto.h"
|
|
||||||
|
|
||||||
|
|
||||||
struct groupinfo_state {
|
struct groupinfo_state {
|
||||||
|
@ -23,10 +23,8 @@
|
|||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
#include "libcli/composite/composite.h"
|
#include "libcli/composite/composite.h"
|
||||||
#include "libnet/composite.h"
|
#include "libnet/libnet.h"
|
||||||
#include "libnet/groupman.h"
|
|
||||||
#include "librpc/gen_ndr/ndr_samr_c.h"
|
#include "librpc/gen_ndr/ndr_samr_c.h"
|
||||||
#include "libnet/libnet_proto.h"
|
|
||||||
|
|
||||||
|
|
||||||
struct groupadd_state {
|
struct groupadd_state {
|
||||||
|
@ -1511,8 +1511,8 @@ static void becomeDC_drsuapi_connect_send(struct libnet_BecomeDC_state *s,
|
|||||||
drsuapi->s = s;
|
drsuapi->s = s;
|
||||||
|
|
||||||
if (!drsuapi->binding) {
|
if (!drsuapi->binding) {
|
||||||
char *krb5_str = "";
|
const char *krb5_str = "";
|
||||||
char *print_str = "";
|
const char *print_str = "";
|
||||||
/*
|
/*
|
||||||
* Note: Replication only works with Windows 2000 when 'krb5' is
|
* Note: Replication only works with Windows 2000 when 'krb5' is
|
||||||
* passed as auth_type here. If NTLMSSP is used, Windows
|
* passed as auth_type here. If NTLMSSP is used, Windows
|
||||||
|
@ -1223,6 +1223,8 @@ NTSTATUS libnet_Join(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, struct lib
|
|||||||
case SEC_CHAN_BDC:
|
case SEC_CHAN_BDC:
|
||||||
return libnet_Join_primary_domain(ctx, mem_ctx, r);
|
return libnet_Join_primary_domain(ctx, mem_ctx, r);
|
||||||
case SEC_CHAN_DOMAIN:
|
case SEC_CHAN_DOMAIN:
|
||||||
|
case SEC_CHAN_DNS_DOMAIN:
|
||||||
|
case SEC_CHAN_NULL:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,13 +23,10 @@
|
|||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
#include "libcli/composite/composite.h"
|
#include "libcli/composite/composite.h"
|
||||||
#include "libnet/composite.h"
|
|
||||||
#include "librpc/gen_ndr/security.h"
|
#include "librpc/gen_ndr/security.h"
|
||||||
#include "libcli/security/security.h"
|
#include "libcli/security/security.h"
|
||||||
#include "libnet/userman.h"
|
#include "libnet/libnet.h"
|
||||||
#include "libnet/userinfo.h"
|
|
||||||
#include "librpc/gen_ndr/ndr_samr_c.h"
|
#include "librpc/gen_ndr/ndr_samr_c.h"
|
||||||
#include "libnet/libnet_proto.h"
|
|
||||||
|
|
||||||
|
|
||||||
struct userinfo_state {
|
struct userinfo_state {
|
||||||
|
@ -23,11 +23,8 @@
|
|||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
#include "libcli/composite/composite.h"
|
#include "libcli/composite/composite.h"
|
||||||
#include "libnet/composite.h"
|
#include "libnet/libnet.h"
|
||||||
#include "libnet/userman.h"
|
|
||||||
#include "libnet/userinfo.h"
|
|
||||||
#include "librpc/gen_ndr/ndr_samr_c.h"
|
#include "librpc/gen_ndr/ndr_samr_c.h"
|
||||||
#include "libnet/libnet_proto.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Composite USER ADD functionality
|
* Composite USER ADD functionality
|
||||||
@ -684,7 +681,7 @@ static NTSTATUS usermod_change(struct composite_context *c,
|
|||||||
s->queryuser.in.user_handle = &s->user_handle;
|
s->queryuser.in.user_handle = &s->user_handle;
|
||||||
s->queryuser.in.level = level;
|
s->queryuser.in.level = level;
|
||||||
s->queryuser.out.info = talloc(s, union samr_UserInfo *);
|
s->queryuser.out.info = talloc(s, union samr_UserInfo *);
|
||||||
if (composite_nomem(s->queryuser.out.info, c)) return;
|
if (composite_nomem(s->queryuser.out.info, c)) return NT_STATUS_NO_MEMORY;
|
||||||
|
|
||||||
|
|
||||||
/* send query user info request to retrieve complete data of
|
/* send query user info request to retrieve complete data of
|
||||||
|
@ -14,7 +14,6 @@ mkinclude lib/ldb-samba/config.mk
|
|||||||
mkinclude lib/tls/config.mk
|
mkinclude lib/tls/config.mk
|
||||||
mkinclude lib/registry/config.mk
|
mkinclude lib/registry/config.mk
|
||||||
mkinclude lib/messaging/config.mk
|
mkinclude lib/messaging/config.mk
|
||||||
mkinclude ../lib/tevent/config.mk
|
|
||||||
mkinclude lib/events/config.mk
|
mkinclude lib/events/config.mk
|
||||||
mkinclude lib/cmdline/config.mk
|
mkinclude lib/cmdline/config.mk
|
||||||
mkinclude ../lib/socket_wrapper/config.mk
|
mkinclude ../lib/socket_wrapper/config.mk
|
||||||
|
@ -25,6 +25,12 @@
|
|||||||
#include "param/loadparm.h"
|
#include "param/loadparm.h"
|
||||||
#include "pytalloc.h"
|
#include "pytalloc.h"
|
||||||
|
|
||||||
|
/* There's no Py_ssize_t in 2.4, apparently */
|
||||||
|
#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 5
|
||||||
|
typedef int Py_ssize_t;
|
||||||
|
typedef inquiry lenfunc;
|
||||||
|
#endif
|
||||||
|
|
||||||
#define PyLoadparmContext_AsLoadparmContext(obj) py_talloc_get_ptr(obj)
|
#define PyLoadparmContext_AsLoadparmContext(obj) py_talloc_get_ptr(obj)
|
||||||
|
|
||||||
PyAPI_DATA(PyTypeObject) PyLoadparmContext;
|
PyAPI_DATA(PyTypeObject) PyLoadparmContext;
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
#include "ldb.h"
|
#include "ldb.h"
|
||||||
|
#include "ldb_errors.h"
|
||||||
#include "param/param.h"
|
#include "param/param.h"
|
||||||
#include "auth/credentials/credentials.h"
|
#include "auth/credentials/credentials.h"
|
||||||
#include "dsdb/samdb/samdb.h"
|
#include "dsdb/samdb/samdb.h"
|
||||||
|
@ -22,7 +22,7 @@ import os
|
|||||||
from samba.provision import setup_samdb, guess_names, setup_templatesdb, make_smbconf
|
from samba.provision import setup_samdb, guess_names, setup_templatesdb, make_smbconf
|
||||||
from samba.samdb import SamDB
|
from samba.samdb import SamDB
|
||||||
from samba.tests import cmdline_loadparm, TestCaseInTempDir
|
from samba.tests import cmdline_loadparm, TestCaseInTempDir
|
||||||
from samba import security
|
from samba.dcerpc import security
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
import uuid
|
import uuid
|
||||||
from samba import param
|
from samba import param
|
||||||
|
Loading…
Reference in New Issue
Block a user