summaryrefslogtreecommitdiff
path: root/source4/libcli
diff options
context:
space:
mode:
Diffstat (limited to 'source4/libcli')
-rw-r--r--source4/libcli/pysmb.c747
-rw-r--r--source4/libcli/wscript_build10
2 files changed, 0 insertions, 757 deletions
diff --git a/source4/libcli/pysmb.c b/source4/libcli/pysmb.c
deleted file mode 100644
index 5a028169661..00000000000
--- a/source4/libcli/pysmb.c
+++ /dev/null
@@ -1,747 +0,0 @@
-/*
- Unix SMB/CIFS implementation.
-
- Copyright (C) Amitay Isaacs 2011
-
- 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 <Python.h>
-#include "python/py3compat.h"
-#include <tevent.h>
-#include <pytalloc.h>
-#include "includes.h"
-#include "param/param.h"
-#include "param/pyparam.h"
-#include "system/dir.h"
-#include "system/filesys.h"
-#include "lib/events/events.h"
-#include "auth/credentials/credentials.h"
-#include "auth/credentials/pycredentials.h"
-#include "auth/gensec/gensec.h"
-#include "libcli/libcli.h"
-#include "libcli/raw/libcliraw.h"
-#include "libcli/raw/raw_proto.h"
-#include "libcli/resolve/resolve.h"
-#include "libcli/util/pyerrors.h"
-#include "libcli/smb_composite/smb_composite.h"
-#include "libcli/security/security_descriptor.h"
-#include "librpc/rpc/pyrpc_util.h"
-
-static PyTypeObject PySMB;
-
-void initsmb(void);
-
-struct smb_private_data {
- struct loadparm_context *lp_ctx;
- struct cli_credentials *creds;
- struct tevent_context *ev_ctx;
- struct smbcli_tree *tree;
-};
-
-static void dos_format(char *s)
-{
- string_replace(s, '/', '\\');
-}
-
-
-/*
- * Connect to SMB share using smb_full_connection
- */
-static NTSTATUS do_smb_connect(TALLOC_CTX *mem_ctx, struct smb_private_data *spdata,
- const char *hostname, const char *service,
- struct smbcli_options *options,
- struct smbcli_session_options *session_options,
- struct smbcli_tree **tree)
-{
- struct smbcli_state *smb_state;
- NTSTATUS status;
-
- *tree = NULL;
-
- gensec_init();
-
- smb_state = smbcli_state_init(mem_ctx);
-
- status = smbcli_full_connection(mem_ctx, &smb_state, hostname,
- lpcfg_smb_ports(spdata->lp_ctx),
- service,
- NULL,
- lpcfg_socket_options(spdata->lp_ctx),
- spdata->creds,
- lpcfg_resolve_context(spdata->lp_ctx),
- spdata->ev_ctx,
- options,
- session_options,
- lpcfg_gensec_settings(mem_ctx, spdata->lp_ctx));
-
- if (NT_STATUS_IS_OK(status)) {
- *tree = smb_state->tree;
- }
-
- return status;
-}
-
-
-/*
- * Read SMB file and return the contents of the file as python string
- */
-static PyObject * py_smb_loadfile(PyObject *self, PyObject *args)
-{
- struct smb_composite_loadfile io;
- const char *filename;
- NTSTATUS status;
- struct smb_private_data *spdata;
-
- if (!PyArg_ParseTuple(args, "s:loadfile", &filename)) {
- return NULL;
- }
-
- ZERO_STRUCT(io);
-
- io.in.fname = filename;
-
- spdata = pytalloc_get_ptr(self);
- status = smb_composite_loadfile(spdata->tree, pytalloc_get_mem_ctx(self), &io);
- PyErr_NTSTATUS_IS_ERR_RAISE(status);
-
- return Py_BuildValue(PYARG_BYTES_LEN, io.out.data, io.out.size);
-}
-
-/*
- * Create a SMB file with given string as the contents
- */
-static PyObject * py_smb_savefile(PyObject *self, PyObject *args)
-{
- struct smb_composite_savefile io;
- const char *filename;
- char *data = NULL;
- Py_ssize_t size = 0;
- NTSTATUS status;
- struct smb_private_data *spdata;
-
- if (!PyArg_ParseTuple(args, "s"PYARG_BYTES_LEN":savefile", &filename, &data, &size )) {
- return NULL;
- }
-
- io.in.fname = filename;
- io.in.data = (unsigned char *)data;
- io.in.size = size;
-
- spdata = pytalloc_get_ptr(self);
- status = smb_composite_savefile(spdata->tree, &io);
- PyErr_NTSTATUS_IS_ERR_RAISE(status);
-
- Py_RETURN_NONE;
-}
-
-/*
- * Callback function to accumulate directory contents in a python list
- */
-static void py_smb_list_callback(struct clilist_file_info *f, const char *mask, void *state)
-{
- PyObject *py_dirlist;
- PyObject *dict;
-
- if(!ISDOT(f->name) && !ISDOTDOT(f->name)) {
- py_dirlist = (PyObject *)state;
-
- dict = PyDict_New();
- if(dict) {
- PyDict_SetItemString(dict, "name", PyStr_FromString(f->name));
-
- /* Windows does not always return short_name */
- if (f->short_name) {
- PyDict_SetItemString(dict, "short_name", PyStr_FromString(f->short_name));
- } else {
- PyDict_SetItemString(dict, "short_name", Py_None);
- }
-
- PyDict_SetItemString(dict, "size", PyLong_FromUnsignedLongLong(f->size));
- PyDict_SetItemString(dict, "attrib", PyInt_FromLong(f->attrib));
- PyDict_SetItemString(dict, "mtime", PyInt_FromLong(f->mtime));
-
- PyList_Append(py_dirlist, dict);
- }
- }
-}
-
-/*
- * List the directory contents for specified directory (Ignore '.' and '..' dirs)
- */
-static PyObject *py_smb_list(PyObject *self, PyObject *args, PyObject *kwargs)
-{
- struct smb_private_data *spdata;
- PyObject *py_dirlist;
- const char *kwnames[] = { "directory", "mask", "attribs", NULL };
- char *base_dir;
- char *user_mask = NULL;
- char *mask;
- uint16_t attribute = FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_DIRECTORY
- | FILE_ATTRIBUTE_ARCHIVE;
-
- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "z|sH:list",
- discard_const_p(char *, kwnames),
- &base_dir, &user_mask, &attribute)) {
- return NULL;
- }
-
- if (user_mask == NULL) {
- mask = talloc_asprintf(pytalloc_get_mem_ctx(self), "%s\\*", base_dir);
- } else {
- mask = talloc_asprintf(pytalloc_get_mem_ctx(self), "%s\\%s", base_dir, user_mask);
- }
- dos_format(mask);
-
- spdata = pytalloc_get_ptr(self);
-
- if((py_dirlist = PyList_New(0)) == NULL) {
- PyErr_NoMemory();
- return NULL;
- }
-
- smbcli_list(spdata->tree, mask, attribute, py_smb_list_callback, (void *)py_dirlist);
-
- talloc_free(mask);
-
- return py_dirlist;
-}
-
-/*
- * Create a directory
- */
-static PyObject *py_smb_mkdir(PyObject *self, PyObject *args)
-{
- NTSTATUS status;
- const char *dirname;
- struct smb_private_data *spdata;
-
- if (!PyArg_ParseTuple(args, "s:mkdir", &dirname)) {
- return NULL;
- }
-
- spdata = pytalloc_get_ptr(self);
- status = smbcli_mkdir(spdata->tree, dirname);
- PyErr_NTSTATUS_IS_ERR_RAISE(status);
-
- Py_RETURN_NONE;
-}
-
-/*
- * Remove a directory
- */
-static PyObject *py_smb_rmdir(PyObject *self, PyObject *args)
-{
- NTSTATUS status;
- const char *dirname;
- struct smb_private_data *spdata;
-
- if (!PyArg_ParseTuple(args, "s:rmdir", &dirname)) {
- return NULL;
- }
-
- spdata = pytalloc_get_ptr(self);
- status = smbcli_rmdir(spdata->tree, dirname);
- PyErr_NTSTATUS_IS_ERR_RAISE(status);
-
- Py_RETURN_NONE;
-}
-
-
-/*
- * Remove a file
- */
-static PyObject *py_smb_unlink(PyObject *self, PyObject *args)
-{
- NTSTATUS status;
- const char *filename;
- struct smb_private_data *spdata;
-
- if (!PyArg_ParseTuple(args, "s:unlink", &filename)) {
- return NULL;
- }
-
- spdata = pytalloc_get_ptr(self);
- status = smbcli_unlink(spdata->tree, filename);
- PyErr_NTSTATUS_IS_ERR_RAISE(status);
-
- Py_RETURN_NONE;
-}
-
-/*
- * Remove a directory and all its contents
- */
-static PyObject *py_smb_deltree(PyObject *self, PyObject *args)
-{
- int status;
- const char *dirname;
- struct smb_private_data *spdata;
-
- if (!PyArg_ParseTuple(args, "s:deltree", &dirname)) {
- return NULL;
- }
-
- spdata = pytalloc_get_ptr(self);
- status = smbcli_deltree(spdata->tree, dirname);
- if (status <= 0) {
- return NULL;
- }
-
- Py_RETURN_NONE;
-}
-
-/*
- * Check existence of a path
- */
-static PyObject *py_smb_chkpath(PyObject *self, PyObject *args)
-{
- NTSTATUS status;
- const char *path;
- struct smb_private_data *spdata;
-
- if (!PyArg_ParseTuple(args, "s:chkpath", &path)) {
- return NULL;
- }
-
- spdata = pytalloc_get_ptr(self);
- status = smbcli_chkpath(spdata->tree, path);
-
- if (NT_STATUS_IS_OK(status)) {
- Py_RETURN_TRUE;
- }
-
- Py_RETURN_FALSE;
-}
-
-/*
- * Read ACL on a given file/directory as a security descriptor object
- */
-static PyObject *py_smb_getacl(PyObject *self, PyObject *args, PyObject *kwargs)
-{
- NTSTATUS status;
- union smb_open io;
- union smb_fileinfo fio;
- struct smb_private_data *spdata;
- const char *filename;
- uint32_t sinfo = 0;
- int access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
- int fnum;
-
- if (!PyArg_ParseTuple(args, "s|Ii:get_acl", &filename, &sinfo, &access_mask)) {
- return NULL;
- }
-
- ZERO_STRUCT(io);
-
- spdata = pytalloc_get_ptr(self);
-
- io.generic.level = RAW_OPEN_NTCREATEX;
- io.ntcreatex.in.root_fid.fnum = 0;
- io.ntcreatex.in.flags = 0;
- io.ntcreatex.in.access_mask = access_mask;
- io.ntcreatex.in.create_options = 0;
- io.ntcreatex.in.file_attr = FILE_ATTRIBUTE_NORMAL;
- io.ntcreatex.in.share_access = NTCREATEX_SHARE_ACCESS_READ |
- NTCREATEX_SHARE_ACCESS_WRITE;
- io.ntcreatex.in.alloc_size = 0;
- io.ntcreatex.in.open_disposition = NTCREATEX_DISP_OPEN;
- io.ntcreatex.in.impersonation = NTCREATEX_IMPERSONATION_ANONYMOUS;
- io.ntcreatex.in.security_flags = 0;
- io.ntcreatex.in.fname = filename;
-
- status = smb_raw_open(spdata->tree, pytalloc_get_mem_ctx(self), &io);
- PyErr_NTSTATUS_IS_ERR_RAISE(status);
-
- fnum = io.ntcreatex.out.file.fnum;
-
- ZERO_STRUCT(fio);
-
- fio.query_secdesc.level = RAW_FILEINFO_SEC_DESC;
- fio.query_secdesc.in.file.fnum = fnum;
- if (sinfo)
- fio.query_secdesc.in.secinfo_flags = sinfo;
- else
- fio.query_secdesc.in.secinfo_flags = SECINFO_OWNER |
- SECINFO_GROUP |
- SECINFO_DACL |
- SECINFO_PROTECTED_DACL |
- SECINFO_UNPROTECTED_DACL |
- SECINFO_SACL |
- SECINFO_PROTECTED_SACL |
- SECINFO_UNPROTECTED_SACL;
-
- status = smb_raw_query_secdesc(spdata->tree, pytalloc_get_mem_ctx(self), &fio);
- smbcli_close(spdata->tree, fnum);
-
- PyErr_NTSTATUS_IS_ERR_RAISE(status);
-
- return py_return_ndr_struct("samba.dcerpc.security", "descriptor",
- pytalloc_get_mem_ctx(self), fio.query_secdesc.out.sd);
-}
-
-/*
- * Set ACL on file/directory using given security descriptor object
- */
-static PyObject *py_smb_setacl(PyObject *self, PyObject *args, PyObject *kwargs)
-{
- NTSTATUS status;
- union smb_open io;
- union smb_setfileinfo fio;
- struct smb_private_data *spdata;
- const char *filename;
- PyObject *py_sd;
- struct security_descriptor *sd;
- uint32_t sinfo = 0;
- int fnum;
-
- if (!PyArg_ParseTuple(args, "sO|I:get_acl", &filename, &py_sd, &sinfo)) {
- return NULL;
- }
-
- spdata = pytalloc_get_ptr(self);
-
- sd = pytalloc_get_type(py_sd, struct security_descriptor);
- if (!sd) {
- PyErr_Format(PyExc_TypeError,
- "Expected dcerpc.security.descriptor as argument, got %s",
- talloc_get_name(pytalloc_get_ptr(py_sd)));
- return NULL;
- }
-
- ZERO_STRUCT(io);
-
- spdata = pytalloc_get_ptr(self);
-
- io.generic.level = RAW_OPEN_NTCREATEX;
- io.ntcreatex.in.root_fid.fnum = 0;
- io.ntcreatex.in.flags = 0;
- io.ntcreatex.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
- io.ntcreatex.in.create_options = 0;
- io.ntcreatex.in.file_attr = FILE_ATTRIBUTE_NORMAL;
- io.ntcreatex.in.share_access = NTCREATEX_SHARE_ACCESS_READ |
- NTCREATEX_SHARE_ACCESS_WRITE;
- io.ntcreatex.in.alloc_size = 0;
- io.ntcreatex.in.open_disposition = NTCREATEX_DISP_OPEN;
- io.ntcreatex.in.impersonation = NTCREATEX_IMPERSONATION_ANONYMOUS;
- io.ntcreatex.in.security_flags = 0;
- io.ntcreatex.in.fname = filename;
-
- status = smb_raw_open(spdata->tree, pytalloc_get_mem_ctx(self), &io);
- PyErr_NTSTATUS_IS_ERR_RAISE(status);
-
- fnum = io.ntcreatex.out.file.fnum;
-
- ZERO_STRUCT(fio);
-
- fio.set_secdesc.level = RAW_SFILEINFO_SEC_DESC;
- fio.set_secdesc.in.file.fnum = fnum;
- if (sinfo)
- fio.set_secdesc.in.secinfo_flags = sinfo;
- else
- fio.set_secdesc.in.secinfo_flags = SECINFO_OWNER |
- SECINFO_GROUP |
- SECINFO_DACL |
- SECINFO_PROTECTED_DACL |
- SECINFO_UNPROTECTED_DACL |
- SECINFO_SACL |
- SECINFO_PROTECTED_SACL |
- SECINFO_UNPROTECTED_SACL;
-
- fio.set_secdesc.in.sd = sd;
-
- status = smb_raw_set_secdesc(spdata->tree, &fio);
- smbcli_close(spdata->tree, fnum);
-
- PyErr_NTSTATUS_IS_ERR_RAISE(status);
-
- Py_RETURN_NONE;
-}
-
-/*
- * Open the file with the parameters passed in and return an object if OK
- */
-static PyObject *py_open_file(PyObject *self, PyObject *args, PyObject *kwargs)
-{
- NTSTATUS status;
- union smb_open io;
- struct smb_private_data *spdata;
- const char *filename;
- uint32_t access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
- uint32_t share_access = NTCREATEX_SHARE_ACCESS_READ |
- NTCREATEX_SHARE_ACCESS_WRITE;
- uint32_t open_disposition = NTCREATEX_DISP_OPEN;
- uint32_t create_options = 0;
- TALLOC_CTX *mem_ctx;
- int fnum;
-
- if (!PyArg_ParseTuple(args, "s|iiii:open_file",
- &filename,
- &access_mask,
- &share_access,
- &open_disposition,
- &create_options)) {
- return NULL;
- }
-
- ZERO_STRUCT(io);
-
- spdata = pytalloc_get_ptr(self);
-
- mem_ctx = talloc_new(NULL);
-
- io.generic.level = RAW_OPEN_NTCREATEX;
- io.ntcreatex.in.root_fid.fnum = 0;
- io.ntcreatex.in.flags = 0;
- io.ntcreatex.in.access_mask = access_mask;
- io.ntcreatex.in.create_options = create_options;
- io.ntcreatex.in.file_attr = FILE_ATTRIBUTE_NORMAL;
- io.ntcreatex.in.share_access = share_access;
- io.ntcreatex.in.alloc_size = 0;
- io.ntcreatex.in.open_disposition = open_disposition;
- io.ntcreatex.in.impersonation = NTCREATEX_IMPERSONATION_ANONYMOUS;
- io.ntcreatex.in.security_flags = 0;
- io.ntcreatex.in.fname = filename;
-
- status = smb_raw_open(spdata->tree, mem_ctx, &io);
- talloc_free(mem_ctx);
-
- PyErr_NTSTATUS_IS_ERR_RAISE(status);
-
- fnum = io.ntcreatex.out.file.fnum;
-
- return Py_BuildValue("i", fnum);
-}
-
-/*
- * Close the file based on the fnum passed in
- */
-static PyObject *py_close_file(PyObject *self, PyObject *args, PyObject *kwargs)
-{
- struct smb_private_data *spdata;
- int fnum;
-
- if (!PyArg_ParseTuple(args, "i:close_file", &fnum)) {
- return NULL;
- }
-
- spdata = pytalloc_get_ptr(self);
-
- /*
- * Should check the status ...
- */
- smbcli_close(spdata->tree, fnum);
-
- Py_RETURN_NONE;
-}
-
-static PyMethodDef py_smb_methods[] = {
- { "loadfile", py_smb_loadfile, METH_VARARGS,
- "loadfile(path) -> file contents as a "
- PY_DESC_PY3_BYTES
- "\n\n Read contents of a file." },
- { "savefile", py_smb_savefile, METH_VARARGS,
- "savefile(path, str) -> None\n\n Write "
- PY_DESC_PY3_BYTES
- " str to file." },
- { "list", (PyCFunction)py_smb_list, METH_VARARGS|METH_KEYWORDS,
- "list(path, access_mask='*', attribs=DEFAULT_ATTRS) -> \
-directory contents as a dictionary\n \
- DEFAULT_ATTRS: FILE_ATTRIBUTE_SYSTEM | \
-FILE_ATTRIBUTE_DIRECTORY | \
-FILE_ATTRIBUTE_ARCHIVE\n\n \
- List contents of a directory. The keys are, \n \
- \tname: Long name of the directory item\n \
- \tshort_name: Short name of the directory item\n \
- \tsize: File size in bytes\n \
- \tattrib: Attributes\n \
- \tmtime: Modification time\n" },
- { "mkdir", py_smb_mkdir, METH_VARARGS,
- "mkdir(path) -> None\n\n \
- Create a directory." },
- { "rmdir", py_smb_rmdir, METH_VARARGS,
- "rmdir(path) -> None\n\n \
- Delete a directory." },
- { "unlink", py_smb_unlink, METH_VARARGS,
- "unlink(path) -> None\n\n \
- Delete a file." },
- { "deltree", py_smb_deltree, METH_VARARGS,
- "deltree(path) -> None\n\n \
- Delete a directory and all its contents." },
- { "chkpath", py_smb_chkpath, METH_VARARGS,
- "chkpath(path) -> True or False\n\n \
- Return true if path exists, false otherwise." },
- { "get_acl", (PyCFunction)py_smb_getacl, METH_VARARGS,
- "get_acl(path[, security_info=0]) -> security_descriptor object\n\n \
- Get security descriptor for file." },
- { "set_acl", (PyCFunction)py_smb_setacl, METH_VARARGS,
- "set_acl(path, security_descriptor[, security_info=0]) -> None\n\n \
- Set security descriptor for file." },
- { "open_file", (PyCFunction)py_open_file, METH_VARARGS,
- "open_file(path, access_mask[, share_access[, open_disposition[, create_options]]] -> fnum\n\n \
- Open a file. Throws NTSTATUS exceptions on errors." },
- { "close_file", (PyCFunction)py_close_file, METH_VARARGS,
- "close_file(fnum) -> None\n\n \
- Close the file based on fnum."},
- { NULL },
-};
-
-static PyObject *py_smb_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
-{
- PyObject *py_creds = Py_None;
- PyObject *py_lp = Py_None;
- const char *kwnames[] = { "hostname", "service", "creds", "lp",
- "ntlmv2_auth", "use_spnego", "sign", NULL };
- const char *hostname = NULL;
- const char *service = NULL;
- PyObject *smb;
- struct smb_private_data *spdata;
- NTSTATUS status;
- TALLOC_CTX *frame = NULL;
- struct smbcli_options options;
- struct smbcli_session_options session_options;
- uint8_t ntlmv2_auth = 0xFF;
- uint8_t use_spnego = 0xFF;
- PyObject *sign = Py_False;
-
- /*
- * These Python bindings are now deprecated because the s4 SMB client
- * code doesn't support SMBv2 (and is unlikely to ever support it).
- * The s3 libsmb_samba_internal bindings are a better choice for use
- * within the Samba codebase, and support much the same API.
- * This warning is mostly for external consumers that might be using
- * these Python bindings (in which case, note libsmb_samba_internal
- * is not a stable API and may change in future).
- */
- DBG_ERR("The smb.SMB() Python bindings are now deprecated "
- "and will be removed in the next samba release\n");
-
- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "zz|OObbO",
- discard_const_p(char *, kwnames),
- &hostname, &service, &py_creds, &py_lp,
- &ntlmv2_auth, &use_spnego, &sign)) {
- return NULL;
- }
-
- frame = talloc_stackframe();
-
- spdata = talloc_zero(frame, struct smb_private_data);
- if (spdata == NULL) {
- PyErr_NoMemory();
- TALLOC_FREE(frame);
- return NULL;
- }
-
- spdata->lp_ctx = lpcfg_from_py_object(spdata, py_lp);
- if (spdata->lp_ctx == NULL) {
- PyErr_SetString(PyExc_TypeError, "Expected loadparm context");
- TALLOC_FREE(frame);
- return NULL;
- }
-
- spdata->creds = cli_credentials_from_py_object(py_creds);
- if (spdata->creds == NULL) {
- PyErr_SetString(PyExc_TypeError, "Expected credentials");
- TALLOC_FREE(frame);
- return NULL;
- }
- spdata->ev_ctx = s4_event_context_init(spdata);
- if (spdata->ev_ctx == NULL) {
- PyErr_NoMemory();
- TALLOC_FREE(frame);
- return NULL;
- }
-
- lpcfg_smbcli_options(spdata->lp_ctx, &options);
- lpcfg_smbcli_session_options(spdata->lp_ctx, &session_options);
-
- if (ntlmv2_auth != 0xFF) {
- session_options.ntlmv2_auth = ntlmv2_auth;
- }
- if (use_spnego != 0xFF) {
- options.use_spnego = use_spnego;
- }
- if (PyObject_IsTrue(sign)) {
- options.signing = SMB_SIGNING_REQUIRED;
- }
-
- status = do_smb_connect(spdata, spdata, hostname, service,
- &options,
- &session_options,
- &spdata->tree);
- PyErr_NTSTATUS_IS_ERR_RAISE(status);
- if (spdata->tree == NULL) {
- TALLOC_FREE(frame);
- return NULL;
- }
-
- smb = pytalloc_steal(type, spdata);
- TALLOC_FREE(frame);
- return smb;
-}
-
-static PyTypeObject PySMB = {
- .tp_name = "smb.SMB",
- .tp_new = py_smb_new,
- .tp_flags = Py_TPFLAGS_DEFAULT,
- .tp_methods = py_smb_methods,
- .tp_doc = "SMB(hostname, service[, creds[, lp]]) -> SMB connection object\n",
-
-};
-
-static struct PyModuleDef moduledef = {
- PyModuleDef_HEAD_INIT,
- .m_name = "smb",
- .m_doc = "SMB File I/O support",
- .m_size = -1,
- .m_methods = NULL,
-};
-
-void initsmb(void);
-
-MODULE_INIT_FUNC(smb)
-{
- PyObject *m = NULL;
-
- if (pytalloc_BaseObject_PyType_Ready(&PySMB) < 0) {
- return m;
- }
-
- m = PyModule_Create(&moduledef);
- if (m == NULL) {
- return m;
- }
-
- Py_INCREF(&PySMB);
- PyModule_AddObject(m, "SMB", (PyObject *)&PySMB);
-
-#define ADD_FLAGS(val) PyModule_AddObject(m, #val, PyInt_FromLong(val))
-
- ADD_FLAGS(FILE_ATTRIBUTE_READONLY);
- ADD_FLAGS(FILE_ATTRIBUTE_HIDDEN);
- ADD_FLAGS(FILE_ATTRIBUTE_SYSTEM);
- ADD_FLAGS(FILE_ATTRIBUTE_VOLUME);
- ADD_FLAGS(FILE_ATTRIBUTE_DIRECTORY);
- ADD_FLAGS(FILE_ATTRIBUTE_ARCHIVE);
- ADD_FLAGS(FILE_ATTRIBUTE_DEVICE);
- ADD_FLAGS(FILE_ATTRIBUTE_NORMAL);
- ADD_FLAGS(FILE_ATTRIBUTE_TEMPORARY);
- ADD_FLAGS(FILE_ATTRIBUTE_SPARSE);
- ADD_FLAGS(FILE_ATTRIBUTE_REPARSE_POINT);
- ADD_FLAGS(FILE_ATTRIBUTE_COMPRESSED);
- ADD_FLAGS(FILE_ATTRIBUTE_OFFLINE);
- ADD_FLAGS(FILE_ATTRIBUTE_NONINDEXED);
- ADD_FLAGS(FILE_ATTRIBUTE_ENCRYPTED);
- ADD_FLAGS(FILE_ATTRIBUTE_ALL_MASK);
- return m;
-}
diff --git a/source4/libcli/wscript_build b/source4/libcli/wscript_build
index d3641f538af..f1bb6bd3260 100644
--- a/source4/libcli/wscript_build
+++ b/source4/libcli/wscript_build
@@ -42,16 +42,6 @@ bld.SAMBA_SUBSYSTEM('LIBCLI_SMB_COMPOSITE',
)
-for env in bld.gen_python_environments():
- pytalloc_util = bld.pyembed_libname('pytalloc-util')
- pyparam_util = bld.pyembed_libname('pyparam_util')
- bld.SAMBA_PYTHON('pysmb',
- source='pysmb.c',
- deps='LIBCLI_SMB_COMPOSITE LIBCLI_SMB2 tevent-util %s %s' % (pytalloc_util, pyparam_util),
- public_deps='cli_composite samba-credentials gensec LIBCLI_RESOLVE tevent param_options',
- realname='samba/smb.so'
- )
-
bld.SAMBA_SUBSYSTEM('LIBCLI_DGRAM',
source='dgram/dgramsocket.c dgram/mailslot.c dgram/netlogon.c dgram/browse.c',
public_deps='cli-nbt ndr LIBCLI_RESOLVE LIBCLI_NETLOGON LIBCLI_RESOLVE'