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:
parent
1f474f4a54
commit
8db14bf26b
@ -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
|
||||
|
@ -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;
|
@ -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
77
source4/libnet/py_net.c
Normal 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);
|
||||
}
|
@ -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) {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user