1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-25 17:57:42 +03:00

Add manually written Python binding for libnet_Join.

(This used to be commit 374654b43d9f9e8381991cedc433ce410a914f7a)
This commit is contained in:
Jelmer Vernooij 2008-04-08 05:16:07 +02:00
parent 1f474f4a54
commit 8db14bf26b
6 changed files with 81 additions and 4890 deletions

View File

@ -31,6 +31,6 @@ PUBLIC_DEPENDENCIES = CREDENTIALS dcerpc dcerpc_samr RPC_NDR_LSA RPC_NDR_SRVSVC
# userinfo.h userman.h)
[PYTHON::swig_net]
PRIVATE_DEPENDENCIES = LIBSAMBA-NET
SWIG_FILE = net.i
[PYTHON::python_net]
PRIVATE_DEPENDENCIES = LIBSAMBA-NET LIBPYTHON
OBJ_FILES = py_net.o

View File

@ -1,73 +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(package="samba.net") net
%{
#include "includes.h"
#include "libnet/libnet.h"
#include "lib/events/events.h"
#include "param/param.h"
typedef struct libnet_context libnet;
%}
%import "../libcli/util/errors.i"
%import "../lib/events/events.i"
%import "../lib/talloc/talloc.i"
%import "../param/param.i"
%talloctype(libnet_context);
typedef struct libnet_context {
struct cli_credentials *cred;
%extend {
libnet(struct event_context *ev, struct loadparm_context *lp_ctx) {
return libnet_context_init(ev, lp_ctx);
}
NTSTATUS samsync_ldb(TALLOC_CTX *mem_ctx, struct libnet_samsync_ldb *r);
NTSTATUS DomainList(TALLOC_CTX *mem_ctx, struct libnet_DomainList *io);
NTSTATUS DomainClose(TALLOC_CTX *mem_ctx, struct libnet_DomainClose *io);
NTSTATUS DomainOpen(TALLOC_CTX *mem_ctx, struct libnet_DomainOpen *io);
NTSTATUS LookupName(TALLOC_CTX *mem_ctx, struct libnet_LookupName *io);
NTSTATUS LookupDCs(TALLOC_CTX *mem_ctx, struct libnet_LookupDCs *io);
NTSTATUS LookupHost(TALLOC_CTX *mem_ctx, struct libnet_Lookup *io);
NTSTATUS Lookup(TALLOC_CTX *mem_ctx, struct libnet_Lookup *io);
NTSTATUS ListShares(TALLOC_CTX *mem_ctx, struct libnet_ListShares *r);
NTSTATUS AddShare(TALLOC_CTX *mem_ctx, struct libnet_AddShare *r);
NTSTATUS DelShare(TALLOC_CTX *mem_ctx, struct libnet_DelShare *r);
NTSTATUS GroupList(TALLOC_CTX *mem_ctx, struct libnet_GroupList *io);
NTSTATUS GroupInfo(TALLOC_CTX *mem_ctx, struct libnet_GroupInfo *io);
NTSTATUS UserList(TALLOC_CTX *mem_ctx, struct libnet_UserList *r);
NTSTATUS UserInfo(TALLOC_CTX *mem_ctx, struct libnet_UserInfo *r);
NTSTATUS ModifyUser(TALLOC_CTX *mem_ctx, struct libnet_ModifyUser *r);
NTSTATUS DeleteUser(TALLOC_CTX *mem_ctx, struct libnet_DeleteUser *r);
NTSTATUS CreateUser(TALLOC_CTX *mem_ctx, struct libnet_CreateUser *r);
NTSTATUS SamDump_keytab(TALLOC_CTX *mem_ctx, struct libnet_SamDump_keytab *r);
NTSTATUS SamDump(TALLOC_CTX *mem_ctx, struct libnet_SamDump *r);
NTSTATUS SamSync_netlogon(TALLOC_CTX *mem_ctx, struct libnet_SamSync *r);
NTSTATUS UnbecomeDC(TALLOC_CTX *mem_ctx, struct libnet_UnbecomeDC *r);
NTSTATUS BecomeDC(TALLOC_CTX *mem_ctx, struct libnet_BecomeDC *r);
NTSTATUS JoinSite(struct ldb_context *remote_ldb, struct libnet_JoinDomain *libnet_r);
NTSTATUS JoinDomain(TALLOC_CTX *mem_ctx, struct libnet_JoinDomain *r);
NTSTATUS Join(TALLOC_CTX *mem_ctx, struct libnet_Join *r);
NTSTATUS RpcConnect(TALLOC_CTX *mem_ctx, struct libnet_RpcConnect *r);
NTSTATUS RemoteTOD(TALLOC_CTX *mem_ctx, union libnet_RemoteTOD *r);
NTSTATUS ChangePassword(TALLOC_CTX *mem_ctx, union libnet_ChangePassword *r);
NTSTATUS SetPassword(TALLOC_CTX *mem_ctx, union libnet_SetPassword *r);
}
} libnet;

View File

@ -1,103 +0,0 @@
# This file was automatically generated by SWIG (http://www.swig.org).
# Version 1.3.33
#
# Don't modify this file, modify the SWIG interface instead.
import _net
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 events
import param
class libnet(object):
thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
__repr__ = _swig_repr
cred = _swig_property(_net.libnet_cred_get, _net.libnet_cred_set)
def __init__(self, *args, **kwargs):
_net.libnet_swiginit(self,_net.new_libnet(*args, **kwargs))
__swig_destroy__ = _net.delete_libnet
libnet.samsync_ldb = new_instancemethod(_net.libnet_samsync_ldb,None,libnet)
libnet.DomainList = new_instancemethod(_net.libnet_DomainList,None,libnet)
libnet.DomainClose = new_instancemethod(_net.libnet_DomainClose,None,libnet)
libnet.DomainOpen = new_instancemethod(_net.libnet_DomainOpen,None,libnet)
libnet.LookupName = new_instancemethod(_net.libnet_LookupName,None,libnet)
libnet.LookupDCs = new_instancemethod(_net.libnet_LookupDCs,None,libnet)
libnet.LookupHost = new_instancemethod(_net.libnet_LookupHost,None,libnet)
libnet.Lookup = new_instancemethod(_net.libnet_Lookup,None,libnet)
libnet.ListShares = new_instancemethod(_net.libnet_ListShares,None,libnet)
libnet.AddShare = new_instancemethod(_net.libnet_AddShare,None,libnet)
libnet.DelShare = new_instancemethod(_net.libnet_DelShare,None,libnet)
libnet.GroupList = new_instancemethod(_net.libnet_GroupList,None,libnet)
libnet.GroupInfo = new_instancemethod(_net.libnet_GroupInfo,None,libnet)
libnet.UserList = new_instancemethod(_net.libnet_UserList,None,libnet)
libnet.UserInfo = new_instancemethod(_net.libnet_UserInfo,None,libnet)
libnet.ModifyUser = new_instancemethod(_net.libnet_ModifyUser,None,libnet)
libnet.DeleteUser = new_instancemethod(_net.libnet_DeleteUser,None,libnet)
libnet.CreateUser = new_instancemethod(_net.libnet_CreateUser,None,libnet)
libnet.SamDump_keytab = new_instancemethod(_net.libnet_SamDump_keytab,None,libnet)
libnet.SamDump = new_instancemethod(_net.libnet_SamDump,None,libnet)
libnet.SamSync_netlogon = new_instancemethod(_net.libnet_SamSync_netlogon,None,libnet)
libnet.UnbecomeDC = new_instancemethod(_net.libnet_UnbecomeDC,None,libnet)
libnet.BecomeDC = new_instancemethod(_net.libnet_BecomeDC,None,libnet)
libnet.JoinSite = new_instancemethod(_net.libnet_JoinSite,None,libnet)
libnet.JoinDomain = new_instancemethod(_net.libnet_JoinDomain,None,libnet)
libnet.Join = new_instancemethod(_net.libnet_Join,None,libnet)
libnet.RpcConnect = new_instancemethod(_net.libnet_RpcConnect,None,libnet)
libnet.RemoteTOD = new_instancemethod(_net.libnet_RemoteTOD,None,libnet)
libnet.ChangePassword = new_instancemethod(_net.libnet_ChangePassword,None,libnet)
libnet.SetPassword = new_instancemethod(_net.libnet_SetPassword,None,libnet)
libnet_swigregister = _net.libnet_swigregister
libnet_swigregister(libnet)

File diff suppressed because it is too large Load Diff

77
source4/libnet/py_net.c Normal file
View File

@ -0,0 +1,77 @@
/*
Unix SMB/CIFS implementation.
Samba utility functions
Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2008
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 <Python.h>
#include "libnet.h"
#include "param/param.h"
#include "libcli/security/security.h"
struct libnet_context *py_net_ctx(PyObject *obj)
{
/* FIXME: Use obj */
return libnet_context_init(NULL, global_loadparm);
}
static PyObject *py_net_join(PyObject *cls, PyObject *args, PyObject *kwargs)
{
struct libnet_Join r;
NTSTATUS status;
PyObject *result;
TALLOC_CTX *mem_ctx;
struct libnet_context *libnet_ctx;
const char *kwnames[] = { "domain_name", "netbios_name", "join_type", "level", NULL };
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ssii:Join", discard_const_p(char *, kwnames),
&r.in.domain_name, &r.in.netbios_name,
&r.in.join_type, &r.in.level))
return NULL;
mem_ctx = talloc_new(NULL);
libnet_ctx = py_net_ctx(cls);
status = libnet_Join(libnet_ctx, mem_ctx, &r);
if (NT_STATUS_IS_ERR(status)) {
PyErr_SetString(PyExc_RuntimeError, r.out.error_string);
talloc_free(mem_ctx);
return NULL;
}
result = Py_BuildValue("sss", r.out.join_password,
dom_sid_string(mem_ctx, r.out.domain_sid),
r.out.domain_name);
talloc_free(mem_ctx);
if (result == NULL)
return NULL;
return result;
}
static struct PyMethodDef net_methods[] = {
{"Join", (PyCFunction)py_net_join, METH_VARARGS|METH_KEYWORDS},
{NULL }
};
void initnet(void)
{
Py_InitModule("net", net_methods);
}

View File

@ -42,6 +42,7 @@ extern void initepmapper(void);
extern void initinitshutdown(void);
static void initdcerpc_misc(void) {}
extern void initmgmt(void);
extern void initnet(void);
extern void initatsvc(void);
extern void initsamr(void);
static void initdcerpc_security(void) {}