[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Sat Jan 26 03:06:02 UTC 2019


The branch, master has been updated
       via  80685fd823f s4:libcli: Remove (now unused) pysmb.c bindings
       via  8c097b4a317 s3:pylibsmb: Initialize pointers to NULL in new API code
      from  d93f901ed7d Fix tests when building with selftest but without developer

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 80685fd823f3bdb47876e5ec5985420df506ce4e
Author: Tim Beale <timbeale at catalyst.net.nz>
Date:   Tue Jan 22 11:18:50 2019 +1300

    s4:libcli: Remove (now unused) pysmb.c bindings
    
    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 at catalyst.net.nz>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Sat Jan 26 04:05:25 CET 2019 on sn-devel-144

commit 8c097b4a3177c8c5786ed599fe7c39ce8421fb2c
Author: Tim Beale <timbeale at catalyst.net.nz>
Date:   Thu Jan 17 10:52:24 2019 +1300

    s3:pylibsmb: Initialize pointers to NULL in new API code
    
    Fix a few uninitialized pointers that managed to sneak through review.
    
    Signed-off-by: Tim Beale <timbeale at catalyst.net.nz>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
    Reviewed-by: Jeremy Allison <jra at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 source3/libsmb/pylibsmb.c    |   8 +-
 source4/libcli/pysmb.c       | 747 -------------------------------------------
 source4/libcli/wscript_build |  10 -
 3 files changed, 4 insertions(+), 761 deletions(-)
 delete mode 100644 source4/libcli/pysmb.c


Changeset truncated at 500 lines:

diff --git a/source3/libsmb/pylibsmb.c b/source3/libsmb/pylibsmb.c
index b4903a9b8c5..629ff0a4fd3 100644
--- a/source3/libsmb/pylibsmb.c
+++ b/source3/libsmb/pylibsmb.c
@@ -1223,7 +1223,7 @@ static PyObject *py_cli_list(struct py_cli_state *self,
 	char *user_mask = NULL;
 	unsigned int attribute = LIST_ATTRIBUTE_MASK;
 	NTSTATUS status;
-	PyObject *result;
+	PyObject *result = NULL;
 	const char *kwlist[] = { "directory", "mask", "attribs", NULL };
 
 	if (!ParseTupleAndKeywords(args, kwds, "z|sH:list", kwlist,
@@ -1313,7 +1313,7 @@ static NTSTATUS remove_dir(struct py_cli_state *self, const char *dirname)
 static PyObject *py_smb_rmdir(struct py_cli_state *self, PyObject *args)
 {
 	NTSTATUS status;
-	const char *dirname;
+	const char *dirname = NULL;
 
 	if (!PyArg_ParseTuple(args, "s:rmdir", &dirname)) {
 		return NULL;
@@ -1331,7 +1331,7 @@ static PyObject *py_smb_rmdir(struct py_cli_state *self, PyObject *args)
 static PyObject *py_smb_mkdir(struct py_cli_state *self, PyObject *args)
 {
 	NTSTATUS status;
-	const char *dirname;
+	const char *dirname = NULL;
 
 	if (!PyArg_ParseTuple(args, "s:mkdir", &dirname)) {
 		return NULL;
@@ -1379,7 +1379,7 @@ static bool check_dir_path(struct py_cli_state *self, const char *path)
 
 static PyObject *py_smb_chkpath(struct py_cli_state *self, PyObject *args)
 {
-	const char *path;
+	const char *path = NULL;
 	bool dir_exists;
 
 	if (!PyArg_ParseTuple(args, "s:chkpath", &path)) {
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 |


-- 
Samba Shared Repository



More information about the samba-cvs mailing list