2 Unix SMB/CIFS implementation.
3 Samba utility functions
4 Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2008
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #include "libcli/security/security.h"
24 #include "lib/events/events.h"
25 #include "param/param.h"
27 /* FIXME: This prototype should be in param/pyparam.h */
28 struct loadparm_context
*py_default_loadparm_context(TALLOC_CTX
*mem_ctx
);
30 static struct libnet_context
*py_net_ctx(PyObject
*obj
, struct tevent_context
*ev
, struct cli_credentials
*creds
)
33 struct libnet_context
*libnet
;
34 libnet
= libnet_context_init(ev
, py_default_loadparm_context(NULL
));
38 libnet
->credentials
= creds
;
41 static PyObject
*py_net_join(PyObject
*cls
, PyObject
*args
, PyObject
*kwargs
)
47 struct tevent_context
*ev
;
48 struct libnet_context
*libnet_ctx
;
49 struct cli_credentials
*creds
;
51 const char *kwnames
[] = { "domain_name", "netbios_name", "join_type", "level", "credentials", NULL
};
53 if (!PyArg_ParseTupleAndKeywords(args
, kwargs
, "ssiiO:Join", discard_const_p(char *, kwnames
),
54 &r
.in
.domain_name
, &r
.in
.netbios_name
,
55 &r
.in
.join_type
, &r
.in
.level
, &py_creds
))
58 /* FIXME: we really need to get a context from the caller or we may end
59 * up with 2 event contexts */
60 ev
= s4_event_context_init(NULL
);
61 mem_ctx
= talloc_new(ev
);
63 creds
= cli_credentials_from_py_object(py_creds
);
65 PyErr_SetString(PyExc_TypeError
, "Expected credentials object");
69 libnet_ctx
= py_net_ctx(cls
, ev
, creds
);
71 status
= libnet_Join(libnet_ctx
, mem_ctx
, &r
);
72 if (NT_STATUS_IS_ERR(status
)) {
73 PyErr_SetString(PyExc_RuntimeError
, r
.out
.error_string
);
78 result
= Py_BuildValue("sss", r
.out
.join_password
,
79 dom_sid_string(mem_ctx
, r
.out
.domain_sid
),
90 static char py_net_join_doc
[] = "join(domain_name, netbios_name, join_type, level) -> (join_password, domain_sid, domain_name)\n\n" \
91 "Join the domain with the specified name.";
93 static struct PyMethodDef net_methods
[] = {
94 {"Join", (PyCFunction
)py_net_join
, METH_VARARGS
|METH_KEYWORDS
, py_net_join_doc
},
100 Py_InitModule("net", net_methods
);