s4:libcli: Remove (now unused) pysmb.c bindings
authorTim Beale <timbeale@catalyst.net.nz>
Mon, 21 Jan 2019 22:18:50 +0000 (11:18 +1300)
committerJeremy Allison <jra@samba.org>
Sat, 26 Jan 2019 03:05:25 +0000 (04:05 +0100)
The s4 SMB client bindings don't support SMBv2, so we've made the
decision to use the s3 SMB client bindings/library code instead.
Everything in the Samba codebase now uses the s3 bindings, and we'll
add a warning message to Samba v4.10 that the s4 bindings are
deprecated. This patch removes the unused s4 bindings completely for
the next (i.e. v4.11) release.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=13676

Signed-off-by: Tim Beale <timbeale@catalyst.net.nz>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Sat Jan 26 04:05:25 CET 2019 on sn-devel-144

source4/libcli/pysmb.c [deleted file]
source4/libcli/wscript_build

diff --git a/source4/libcli/pysmb.c b/source4/libcli/pysmb.c
deleted file mode 100644 (file)
index 5a02816..0000000
+++ /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;
-}
index d3641f538af34e61fdfe33e1e101e9ec66d67876..f1bb6bd3260bd855683703d4a298ef66070b1194 100644 (file)
@@ -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'