mirror of
https://github.com/samba-team/samba.git
synced 2025-07-14 12:59:07 +03:00
Use plain C implementation for misc Python module rather than SWIG.
This commit is contained in:
@ -16,19 +16,17 @@ PRIVATE_DEPENDENCIES = LIBNDR
|
||||
python_uuid_OBJ_FILES = $(pyscriptsrcdir)/uuidmodule.o
|
||||
|
||||
[PYTHON::python_misc]
|
||||
LIBRARY_REALNAME = samba/_misc.$(SHLIBEXT)
|
||||
PRIVATE_DEPENDENCIES = LIBNDR LIBLDB SAMDB CREDENTIALS
|
||||
LIBRARY_REALNAME = samba/misc.$(SHLIBEXT)
|
||||
PRIVATE_DEPENDENCIES = LIBNDR LIBLDB SAMDB CREDENTIALS swig_ldb
|
||||
|
||||
python_misc_OBJ_FILES = $(pyscriptsrcdir)/misc_wrap.o
|
||||
python_misc_OBJ_FILES = $(pyscriptsrcdir)/pymisc.o
|
||||
|
||||
$(python_misc_OBJ_FILES): CFLAGS+=$(CFLAG_NO_UNUSED_MACROS) $(CFLAG_NO_CAST_QUAL)
|
||||
$(python_misc_OBJ_FILES): CFLAGS+=$(CFLAG_NO_CAST_QUAL) -I$(ldbsrcdir)
|
||||
|
||||
_PY_FILES = $(shell find $(pyscriptsrcdir)/samba ../lib/subunit/python -name "*.py")
|
||||
|
||||
$(eval $(foreach pyfile, $(_PY_FILES),$(call python_py_module_template,$(patsubst $(pyscriptsrcdir)/%,%,$(pyfile)),$(pyfile))))
|
||||
|
||||
$(eval $(call python_py_module_template,samba/misc.py,$(pyscriptsrcdir)/misc.py))
|
||||
|
||||
EPYDOC_OPTIONS = --no-private --url http://www.samba.org/ --no-sourcecode
|
||||
|
||||
epydoc:: pythonmods
|
||||
|
@ -1,121 +0,0 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
%module(docstring="Python bindings for miscellaneous Samba functions.",package="samba.misc") misc
|
||||
|
||||
%{
|
||||
#include "includes.h"
|
||||
#include "ldb.h"
|
||||
#include "param/param.h"
|
||||
#include "auth/credentials/credentials.h"
|
||||
#include "dsdb/samdb/samdb.h"
|
||||
#include "lib/ldb-samba/ldif_handlers.h"
|
||||
#include "librpc/ndr/libndr.h"
|
||||
#include "version.h"
|
||||
%}
|
||||
|
||||
%import "stdint.i"
|
||||
%include "exception.i"
|
||||
%import "../../../lib/talloc/talloc.i"
|
||||
%import "../../lib/ldb/ldb.i"
|
||||
%import "../../auth/credentials/credentials.i"
|
||||
%import "../../param/param.i"
|
||||
%import "../../libcli/security/security.i"
|
||||
%include "../../libcli/util/errors.i"
|
||||
|
||||
%feature("docstring") generate_random_str "S.random_password(len) -> string\n" \
|
||||
"Generate random password with specified length.";
|
||||
|
||||
%rename(random_password) generate_random_str;
|
||||
char *generate_random_str(TALLOC_CTX *mem_ctx, size_t len);
|
||||
|
||||
%feature("docstring") ldb_set_credentials "S.set_credentials(credentials)\n"
|
||||
"Set credentials to use when connecting.";
|
||||
|
||||
%feature("docstring") ldb_set_session_info "S.set_session_info(session_info)\n"
|
||||
"Set session info to use when connecting.";
|
||||
|
||||
%feature("docstring") ldb_set_loadparm "S.set_loadparm(session_info)\n"
|
||||
"Set loadparm context to use when connecting.";
|
||||
|
||||
%inline %{
|
||||
void ldb_set_credentials(struct ldb_context *ldb, struct cli_credentials *creds)
|
||||
{
|
||||
ldb_set_opaque(ldb, "credentials", creds);
|
||||
}
|
||||
|
||||
void ldb_set_session_info(struct ldb_context *ldb, struct auth_session_info *session_info)
|
||||
{
|
||||
ldb_set_opaque(ldb, "sessionInfo", session_info);
|
||||
}
|
||||
|
||||
void ldb_set_loadparm(struct ldb_context *ldb, struct loadparm_context *lp_ctx)
|
||||
{
|
||||
ldb_set_opaque(ldb, "loadparm", lp_ctx);
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
%feature("docstring") samdb_set_domain_sid "S.set_domain_sid(sid)\n"
|
||||
"Set SID of domain to use.";
|
||||
bool samdb_set_domain_sid(struct ldb_context *ldb,
|
||||
const struct dom_sid *dom_sid_in);
|
||||
|
||||
WERROR dsdb_attach_schema_from_ldif_file(struct ldb_context *ldb, const char *pf, const char *df);
|
||||
|
||||
%feature("docstring") version "version()\n"
|
||||
"Obtain the Samba version.";
|
||||
|
||||
%inline {
|
||||
const char *version(void)
|
||||
{
|
||||
return SAMBA_VERSION_STRING;
|
||||
}
|
||||
}
|
||||
int dsdb_set_global_schema(struct ldb_context *ldb);
|
||||
%feature("docstring") ldb_register_samba_handlers "register_samba_handlers()\n"
|
||||
"Register Samba-specific LDB modules and schemas.";
|
||||
int ldb_register_samba_handlers(struct ldb_context *ldb);
|
||||
|
||||
%inline %{
|
||||
bool dsdb_set_ntds_invocation_id(struct ldb_context *ldb, const char *guid)
|
||||
{
|
||||
struct GUID invocation_id_in;
|
||||
if (NT_STATUS_IS_ERR(GUID_from_string(guid, &invocation_id_in))) {
|
||||
return false;
|
||||
}
|
||||
return samdb_set_ntds_invocation_id(ldb, &invocation_id_in);
|
||||
}
|
||||
%}
|
||||
|
||||
char *private_path(TALLOC_CTX* mem_ctx, struct loadparm_context *lp_ctx,
|
||||
const char *name);
|
||||
|
||||
typedef unsigned long time_t;
|
||||
|
||||
/*
|
||||
convert from unix time to NT time
|
||||
*/
|
||||
%inline %{
|
||||
uint64_t unix2nttime(time_t t)
|
||||
{
|
||||
NTTIME nt;
|
||||
unix_to_nt_time(&nt, t);
|
||||
return (uint64_t)nt;
|
||||
}
|
||||
%}
|
@ -1,123 +0,0 @@
|
||||
# This file was automatically generated by SWIG (http://www.swig.org).
|
||||
# Version 1.3.36
|
||||
#
|
||||
# Don't modify this file, modify the SWIG interface instead.
|
||||
|
||||
"""
|
||||
Python bindings for miscellaneous Samba functions.
|
||||
"""
|
||||
|
||||
import _misc
|
||||
import new
|
||||
new_instancemethod = new.instancemethod
|
||||
try:
|
||||
_swig_property = property
|
||||
except NameError:
|
||||
pass # Python < 2.2 doesn't have 'property'.
|
||||
def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
|
||||
if (name == "thisown"): return self.this.own(value)
|
||||
if (name == "this"):
|
||||
if type(value).__name__ == 'PySwigObject':
|
||||
self.__dict__[name] = value
|
||||
return
|
||||
method = class_type.__swig_setmethods__.get(name,None)
|
||||
if method: return method(self,value)
|
||||
if (not static) or hasattr(self,name):
|
||||
self.__dict__[name] = value
|
||||
else:
|
||||
raise AttributeError("You cannot add attributes to %s" % self)
|
||||
|
||||
def _swig_setattr(self,class_type,name,value):
|
||||
return _swig_setattr_nondynamic(self,class_type,name,value,0)
|
||||
|
||||
def _swig_getattr(self,class_type,name):
|
||||
if (name == "thisown"): return self.this.own()
|
||||
method = class_type.__swig_getmethods__.get(name,None)
|
||||
if method: return method(self)
|
||||
raise AttributeError,name
|
||||
|
||||
def _swig_repr(self):
|
||||
try: strthis = "proxy of " + self.this.__repr__()
|
||||
except: strthis = ""
|
||||
return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
|
||||
|
||||
import types
|
||||
try:
|
||||
_object = types.ObjectType
|
||||
_newclass = 1
|
||||
except AttributeError:
|
||||
class _object : pass
|
||||
_newclass = 0
|
||||
del types
|
||||
|
||||
|
||||
def _swig_setattr_nondynamic_method(set):
|
||||
def set_attr(self,name,value):
|
||||
if (name == "thisown"): return self.this.own(value)
|
||||
if hasattr(self,name) or (name == "this"):
|
||||
set(self,name,value)
|
||||
else:
|
||||
raise AttributeError("You cannot add attributes to %s" % self)
|
||||
return set_attr
|
||||
|
||||
|
||||
import ldb
|
||||
import credentials
|
||||
import param
|
||||
import security
|
||||
|
||||
def random_password(*args, **kwargs):
|
||||
"""
|
||||
S.random_password(len) -> string
|
||||
Generate random password with specified length.
|
||||
"""
|
||||
return _misc.random_password(*args, **kwargs)
|
||||
|
||||
def ldb_set_credentials(*args, **kwargs):
|
||||
"""
|
||||
S.set_credentials(credentials)
|
||||
Set credentials to use when connecting.
|
||||
"""
|
||||
return _misc.ldb_set_credentials(*args, **kwargs)
|
||||
|
||||
def ldb_set_session_info(*args, **kwargs):
|
||||
"""
|
||||
S.set_session_info(session_info)
|
||||
Set session info to use when connecting.
|
||||
"""
|
||||
return _misc.ldb_set_session_info(*args, **kwargs)
|
||||
|
||||
def ldb_set_loadparm(*args, **kwargs):
|
||||
"""
|
||||
S.set_loadparm(session_info)
|
||||
Set loadparm context to use when connecting.
|
||||
"""
|
||||
return _misc.ldb_set_loadparm(*args, **kwargs)
|
||||
|
||||
def samdb_set_domain_sid(*args, **kwargs):
|
||||
"""
|
||||
S.set_domain_sid(sid)
|
||||
Set SID of domain to use.
|
||||
"""
|
||||
return _misc.samdb_set_domain_sid(*args, **kwargs)
|
||||
dsdb_attach_schema_from_ldif_file = _misc.dsdb_attach_schema_from_ldif_file
|
||||
|
||||
def version(*args):
|
||||
"""
|
||||
version()
|
||||
Obtain the Samba version.
|
||||
"""
|
||||
return _misc.version(*args)
|
||||
dsdb_set_global_schema = _misc.dsdb_set_global_schema
|
||||
|
||||
def ldb_register_samba_handlers(*args, **kwargs):
|
||||
"""
|
||||
register_samba_handlers()
|
||||
Register Samba-specific LDB modules and schemas.
|
||||
"""
|
||||
return _misc.ldb_register_samba_handlers(*args, **kwargs)
|
||||
dsdb_set_ntds_invocation_id = _misc.dsdb_set_ntds_invocation_id
|
||||
private_path = _misc.private_path
|
||||
unix2nttime = _misc.unix2nttime
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
238
source4/scripting/python/pymisc.c
Normal file
238
source4/scripting/python/pymisc.c
Normal file
@ -0,0 +1,238 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
#include "ldb.h"
|
||||
#include "param/param.h"
|
||||
#include "auth/credentials/credentials.h"
|
||||
#include "dsdb/samdb/samdb.h"
|
||||
#include "lib/ldb-samba/ldif_handlers.h"
|
||||
#include "librpc/ndr/libndr.h"
|
||||
#include "version.h"
|
||||
#include <Python.h>
|
||||
#include "pyldb.h"
|
||||
#include "libcli/util/pyerrors.h"
|
||||
|
||||
static PyObject *py_generate_random_str(PyObject *self, PyObject *args)
|
||||
{
|
||||
int len;
|
||||
PyObject *ret;
|
||||
char *retstr;
|
||||
if (!PyArg_ParseTuple(args, "i", &len))
|
||||
return NULL;
|
||||
|
||||
retstr = generate_random_str(NULL, len);
|
||||
ret = PyString_FromString(retstr);
|
||||
talloc_free(retstr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static PyObject *py_unix2nttime(PyObject *self, PyObject *args)
|
||||
{
|
||||
time_t t;
|
||||
NTTIME nt;
|
||||
if (!PyArg_ParseTuple(args, "I", &t))
|
||||
return NULL;
|
||||
|
||||
unix_to_nt_time(&nt, t);
|
||||
|
||||
return PyInt_FromLong((uint64_t)nt);
|
||||
}
|
||||
|
||||
static PyObject *py_ldb_set_credentials(PyObject *self, PyObject *args)
|
||||
{
|
||||
PyObject *py_creds, *py_ldb;
|
||||
struct cli_credentials *creds;
|
||||
struct ldb_context *ldb;
|
||||
if (!PyArg_ParseTuple(args, "OO", &py_ldb, &py_creds))
|
||||
return NULL;
|
||||
|
||||
/* FIXME: Magic py_creds -> creds */
|
||||
/* FIXME: Magic py_ldb -> ldb */
|
||||
|
||||
ldb_set_opaque(ldb, "credentials", creds);
|
||||
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static PyObject *py_ldb_set_loadparm(PyObject *self, PyObject *args)
|
||||
{
|
||||
PyObject *py_lp_ctx, *py_ldb;
|
||||
struct loadparm_context *lp_ctx;
|
||||
struct ldb_context *ldb;
|
||||
if (!PyArg_ParseTuple(args, "OO", &py_ldb, &py_lp_ctx))
|
||||
return NULL;
|
||||
|
||||
/* FIXME: Magic py_lp_ctx -> lp_ctx */
|
||||
/* FIXME: Magic py_ldb -> ldb */
|
||||
|
||||
ldb_set_opaque(ldb, "loadparm", lp_ctx);
|
||||
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
|
||||
static PyObject *py_ldb_set_session_info(PyObject *self, PyObject *args)
|
||||
{
|
||||
PyObject *py_session_info, *py_ldb;
|
||||
struct auth_session_info *info;
|
||||
struct ldb_context *ldb;
|
||||
if (!PyArg_ParseTuple(args, "OO", &py_ldb, &py_session_info))
|
||||
return NULL;
|
||||
|
||||
/* FIXME: Magic py_session_info -> info */
|
||||
/* FIXME: Magic py_ldb -> ldb */
|
||||
|
||||
ldb_set_opaque(ldb, "sessionInfo", info);
|
||||
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static PyObject *py_samdb_set_domain_sid(PyLdbObject *self, PyObject *args)
|
||||
{
|
||||
PyObject *py_ldb, *py_sid;
|
||||
struct ldb_context *ldb;
|
||||
struct dom_sid *sid;
|
||||
bool ret;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "OO", &py_ldb, &py_sid))
|
||||
return NULL;
|
||||
|
||||
/* FIXME: Magic py_ldb -> ldb */
|
||||
/* FIXME: Magic py_sid -> sid */
|
||||
|
||||
ret = samdb_set_domain_sid(ldb, sid);
|
||||
if (!ret) {
|
||||
PyErr_SetString(PyExc_RuntimeError, "set_domain_sid failed");
|
||||
return NULL;
|
||||
}
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static PyObject *py_ldb_register_samba_handlers(PyObject *self, PyObject *args)
|
||||
{
|
||||
PyObject *py_ldb;
|
||||
struct ldb_context *ldb;
|
||||
int ret;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O", &py_ldb))
|
||||
return NULL;
|
||||
|
||||
/* FIXME: Magic py_ldb -> ldb */
|
||||
ret = ldb_register_samba_handlers(ldb);
|
||||
|
||||
PyErr_LDB_ERROR_IS_ERR_RAISE(ret, ldb);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static PyObject *py_dsdb_set_ntds_invocation_id(PyObject *self, PyObject *args)
|
||||
{
|
||||
PyObject *py_ldb, *py_guid;
|
||||
bool ret;
|
||||
struct GUID *guid;
|
||||
struct ldb_context *ldb;
|
||||
if (!PyArg_ParseTuple(args, "OO", &py_ldb, &py_guid))
|
||||
return NULL;
|
||||
|
||||
/* FIXME: Magic py_ldb -> ldb */
|
||||
/* FIXME: Magic py_guid -> guid */
|
||||
|
||||
ret = samdb_set_ntds_invocation_id(ldb, guid);
|
||||
if (!ret) {
|
||||
PyErr_SetString(PyExc_RuntimeError, "set_ntds_invocation_id failed");
|
||||
return NULL;
|
||||
}
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static PyObject *py_dsdb_set_global_schema(PyObject *self, PyObject *args)
|
||||
{
|
||||
PyObject *py_ldb;
|
||||
struct ldb_context *ldb;
|
||||
int ret;
|
||||
if (!PyArg_ParseTuple(args, "O", &py_ldb))
|
||||
return NULL;
|
||||
|
||||
/* FIXME: Magic py_ldb -> ldb */
|
||||
|
||||
ret = dsdb_set_global_schema(ldb);
|
||||
PyErr_LDB_ERROR_IS_ERR_RAISE(ret, ldb);
|
||||
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static PyObject *py_dsdb_attach_schema_from_ldif_file(PyObject *self, PyObject *args)
|
||||
{
|
||||
WERROR result;
|
||||
char *pf, *df;
|
||||
PyObject *py_ldb;
|
||||
struct ldb_context *ldb;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "Oss", &py_ldb, &pf, &df))
|
||||
return NULL;
|
||||
|
||||
/* FIXME: Magic py_ldb -> ldb */
|
||||
|
||||
result = dsdb_attach_schema_from_ldif_file(ldb, pf, df);
|
||||
PyErr_WERROR_IS_ERR_RAISE(result);
|
||||
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static PyMethodDef py_misc_methods[] = {
|
||||
{ "generate_random_str", (PyCFunction)py_generate_random_str, METH_VARARGS,
|
||||
"random_password(len) -> string\n"
|
||||
"Generate random password with specified length." },
|
||||
{ "unix2nttime", (PyCFunction)py_unix2nttime, METH_VARARGS,
|
||||
"unix2nttime(timestamp) -> nttime" },
|
||||
{ "ldb_set_credentials", (PyCFunction)py_ldb_set_credentials, METH_VARARGS,
|
||||
"ldb_set_credentials(ldb, credentials) -> None\n"
|
||||
"Set credentials to use when connecting." },
|
||||
{ "ldb_set_session_info", (PyCFunction)py_ldb_set_session_info, METH_VARARGS,
|
||||
"ldb_set_session_info(ldb, session_info)\n"
|
||||
"Set session info to use when connecting." },
|
||||
{ "ldb_set_loadparm", (PyCFunction)py_ldb_set_loadparm, METH_VARARGS,
|
||||
"ldb_set_loadparm(ldb, session_info)\n"
|
||||
"Set loadparm context to use when connecting." },
|
||||
{ "samdb_set_domain_sid", (PyCFunction)py_samdb_set_domain_sid, METH_VARARGS,
|
||||
"samdb_set_domain_sid(samdb, sid)\n"
|
||||
"Set SID of domain to use." },
|
||||
{ "ldb_register_samba_handlers", (PyCFunction)py_ldb_register_samba_handlers, METH_VARARGS,
|
||||
"ldb_register_samba_handlers(ldb)\n"
|
||||
"Register Samba-specific LDB modules and schemas." },
|
||||
{ "dsdb_set_ntds_invocation_id", (PyCFunction)py_dsdb_set_ntds_invocation_id, METH_VARARGS,
|
||||
NULL },
|
||||
{ "dsdb_set_global_schema", (PyCFunction)py_dsdb_set_global_schema, METH_VARARGS,
|
||||
NULL },
|
||||
{ "dsdb_attach_schema_from_ldif_file", (PyCFunction)py_dsdb_attach_schema_from_ldif_file, METH_VARARGS,
|
||||
NULL },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
void initmisc(void)
|
||||
{
|
||||
PyObject *m;
|
||||
|
||||
m = Py_InitModule3("misc", py_misc_methods,
|
||||
"Python bindings for miscellaneous Samba functions.");
|
||||
if (m == NULL)
|
||||
return;
|
||||
|
||||
PyModule_AddObject(m, "version", PyString_FromString(SAMBA_VERSION_STRING));
|
||||
}
|
||||
|
Reference in New Issue
Block a user