[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Wed Jul 13 04:35:03 UTC 2016
The branch, master has been updated
via be39b73 dsdb: Fix CID 1363810: Null pointer dereferences
via f9db6fb smbtorture: Add smb2.maxfid
via f18a920 selftest: Disable full audit logging in selftest
via b7d2132 Remove unused stf directory
from 8a5a904 dsdb: Improve debugging during SD recursion failure
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit be39b73ccd0f44a53b1b03c47cc0b5687d20eda2
Author: Volker Lendecke <vl at samba.org>
Date: Tue Jul 12 18:28:23 2016 +0200
dsdb: Fix CID 1363810: Null pointer dereferences
The if-condition explicitly tests for new_schema==NULL, so this seems to be a
valid error case. The DEBUG statement would segfault in this case.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Ira Cooper <ira at samba.org>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Wed Jul 13 06:34:33 CEST 2016 on sn-devel-144
commit f9db6fb893820fbf583b8c57ac151c16a239dd15
Author: Christof Schmitt <cs at samba.org>
Date: Mon Jul 11 11:32:19 2016 -0700
smbtorture: Add smb2.maxfid
This is the same as base.maxfid, but for the SMB2 protocol: Keep opening
file handles until an error is returned, print the number of file
handles opened and finally close the file handles again.
Signed-off-by: Christof Schmitt <cs at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit f18a920b0345768181e604d129d9235c193e89db
Author: Christof Schmitt <cs at samba.org>
Date: Mon Jul 11 10:49:34 2016 -0700
selftest: Disable full audit logging in selftest
Commit 6eba42f activated the full_audit and time_audit modules for the
simpleserver config to trigger the check that all VFS functions are
implemented in these two modules. This resulted in all operations being
logged to syslog during a test run.
Change the full_audit configuration to keep loading the modules, but not
log anything from full_audit to not slow down the test or spam the logs.
Signed-off-by: Christof Schmitt <cs at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit b7d2132180333cccb8c53708bf5e24bc3e105d81
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date: Fri Jun 3 14:39:21 2016 +1200
Remove unused stf directory
Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Reviewed-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
-----------------------------------------------------------------------
Summary of changes:
selftest/target/Samba3.pm | 4 +
source3/stf/README.stf | 3 -
source3/stf/comfychair.py | 443 ---------------------------------
source3/stf/example.py | 36 ---
source3/stf/notes.txt | 175 -------------
source3/stf/osver.py | 55 ----
source3/stf/pythoncheck.py | 46 ----
source3/stf/smbcontrol.py | 238 ------------------
source3/stf/spoolss.py | 288 ---------------------
source3/stf/standardcheck.py | 32 ---
source3/stf/stf.py | 101 --------
source3/stf/test.py | 33 ---
source4/dsdb/repl/replicated_objects.c | 9 +-
source4/torture/smb2/maxfid.c | 145 +++++++++++
source4/torture/smb2/smb2.c | 1 +
source4/torture/smb2/wscript_build | 2 +-
16 files changed, 157 insertions(+), 1454 deletions(-)
delete mode 100644 source3/stf/README.stf
delete mode 100644 source3/stf/comfychair.py
delete mode 100755 source3/stf/example.py
delete mode 100644 source3/stf/notes.txt
delete mode 100755 source3/stf/osver.py
delete mode 100755 source3/stf/pythoncheck.py
delete mode 100755 source3/stf/smbcontrol.py
delete mode 100755 source3/stf/spoolss.py
delete mode 100644 source3/stf/standardcheck.py
delete mode 100755 source3/stf/stf.py
delete mode 100755 source3/stf/test.py
create mode 100644 source4/torture/smb2/maxfid.c
Changeset truncated at 500 lines:
diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm
index 4e3169d..8a49cdb 100755
--- a/selftest/target/Samba3.pm
+++ b/selftest/target/Samba3.pm
@@ -553,6 +553,10 @@ sub setup_simpleserver($$)
vfs objects = xattr_tdb streams_depot time_audit full_audit
change notify = no
+ full_audit:syslog = no
+ full_audit:success = none
+ full_audit:failure = none
+
[vfs_aio_fork]
path = $prefix_abs/share
vfs objects = aio_fork
diff --git a/source3/stf/README.stf b/source3/stf/README.stf
deleted file mode 100644
index 3fbd33c..0000000
--- a/source3/stf/README.stf
+++ /dev/null
@@ -1,3 +0,0 @@
-This directory contains the Samba Testing Framework, a Python-based
-system for exercising Samba in various ways. It is quite small at the
-moment.
diff --git a/source3/stf/comfychair.py b/source3/stf/comfychair.py
deleted file mode 100644
index 247915d..0000000
--- a/source3/stf/comfychair.py
+++ /dev/null
@@ -1,443 +0,0 @@
-#! /usr/bin/env python
-
-# Copyright (C) 2002, 2003 by Martin Pool <mbp at samba.org>
-# Copyright (C) 2003 by Tim Potter <tpot at samba.org>
-#
-# 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/>.
-
-"""comfychair: a Python-based instrument of software torture.
-
-Copyright (C) 2002, 2003 by Martin Pool <mbp at samba.org>
-Copyright (C) 2003 by Tim Potter <tpot at samba.org>
-
-This is a test framework designed for testing programs written in
-Python, or (through a fork/exec interface) any other language.
-
-For more information, see the file README.comfychair.
-
-To run a test suite based on ComfyChair, just run it as a program.
-"""
-
-import sys, re
-
-
-class TestCase:
- """A base class for tests. This class defines required functions which
- can optionally be overridden by subclasses. It also provides some
- utility functions for"""
-
- def __init__(self):
- self.test_log = ""
- self.background_pids = []
- self._cleanups = []
- self._enter_rundir()
- self._save_environment()
- self.add_cleanup(self.teardown)
-
-
- # --------------------------------------------------
- # Save and restore directory
- def _enter_rundir(self):
- import os
- self.basedir = os.getcwd()
- self.add_cleanup(self._restore_directory)
- self.rundir = os.path.join(self.basedir,
- 'testtmp',
- self.__class__.__name__)
- self.tmpdir = os.path.join(self.rundir, 'tmp')
- os.system("rm -fr %s" % self.rundir)
- os.makedirs(self.tmpdir)
- os.system("mkdir -p %s" % self.rundir)
- os.chdir(self.rundir)
-
- def _restore_directory(self):
- import os
- os.chdir(self.basedir)
-
- # --------------------------------------------------
- # Save and restore environment
- def _save_environment(self):
- import os
- self._saved_environ = os.environ.copy()
- self.add_cleanup(self._restore_environment)
-
- def _restore_environment(self):
- import os
- os.environ.clear()
- os.environ.update(self._saved_environ)
-
-
- def setup(self):
- """Set up test fixture."""
- pass
-
- def teardown(self):
- """Tear down test fixture."""
- pass
-
- def runtest(self):
- """Run the test."""
- pass
-
-
- def add_cleanup(self, c):
- """Queue a cleanup to be run when the test is complete."""
- self._cleanups.append(c)
-
-
- def fail(self, reason = ""):
- """Say the test failed."""
- raise AssertionError(reason)
-
-
- #############################################################
- # Requisition methods
-
- def require(self, predicate, message):
- """Check a predicate for running this test.
-
-If the predicate value is not true, the test is skipped with a message explaining
-why."""
- if not predicate:
- raise NotRunError, message
-
- def require_root(self):
- """Skip this test unless run by root."""
- import os
- self.require(os.getuid() == 0,
- "must be root to run this test")
-
- #############################################################
- # Assertion methods
-
- def assert_(self, expr, reason = ""):
- if not expr:
- raise AssertionError(reason)
-
- def assert_equal(self, a, b):
- if not a == b:
- raise AssertionError("assertEquals failed: %s" % `(a, b)`)
-
- def assert_notequal(self, a, b):
- if a == b:
- raise AssertionError("assertNotEqual failed: %s" % `(a, b)`)
-
- def assert_re_match(self, pattern, s):
- """Assert that a string matches a particular pattern
-
- Inputs:
- pattern string: regular expression
- s string: to be matched
-
- Raises:
- AssertionError if not matched
- """
- if not re.match(pattern, s):
- raise AssertionError("string does not match regexp\n"
- " string: %s\n"
- " re: %s" % (`s`, `pattern`))
-
- def assert_re_search(self, pattern, s):
- """Assert that a string *contains* a particular pattern
-
- Inputs:
- pattern string: regular expression
- s string: to be searched
-
- Raises:
- AssertionError if not matched
- """
- if not re.search(pattern, s):
- raise AssertionError("string does not contain regexp\n"
- " string: %s\n"
- " re: %s" % (`s`, `pattern`))
-
-
- def assert_no_file(self, filename):
- import os.path
- assert not os.path.exists(filename), ("file exists but should not: %s" % filename)
-
-
- #############################################################
- # Methods for running programs
-
- def runcmd_background(self, cmd):
- import os
- self.test_log = self.test_log + "Run in background:\n" + `cmd` + "\n"
- pid = os.fork()
- if pid == 0:
- # child
- try:
- os.execvp("/bin/sh", ["/bin/sh", "-c", cmd])
- finally:
- os._exit(127)
- self.test_log = self.test_log + "pid: %d\n" % pid
- return pid
-
-
- def runcmd(self, cmd, expectedResult = 0):
- """Run a command, fail if the command returns an unexpected exit
- code. Return the output produced."""
- rc, output, stderr = self.runcmd_unchecked(cmd)
- if rc != expectedResult:
- raise AssertionError("""command returned %d; expected %s: \"%s\"
-stdout:
-%s
-stderr:
-%s""" % (rc, expectedResult, cmd, output, stderr))
-
- return output, stderr
-
-
- def run_captured(self, cmd):
- """Run a command, capturing stdout and stderr.
-
- Based in part on popen2.py
-
- Returns (waitstatus, stdout, stderr)."""
- import os, types
- pid = os.fork()
- if pid == 0:
- # child
- try:
- pid = os.getpid()
- openmode = os.O_WRONLY|os.O_CREAT|os.O_TRUNC
-
- outfd = os.open('%d.out' % pid, openmode, 0666)
- os.dup2(outfd, 1)
- os.close(outfd)
-
- errfd = os.open('%d.err' % pid, openmode, 0666)
- os.dup2(errfd, 2)
- os.close(errfd)
-
- if isinstance(cmd, types.StringType):
- cmd = ['/bin/sh', '-c', cmd]
-
- os.execvp(cmd[0], cmd)
- finally:
- os._exit(127)
- else:
- # parent
- exited_pid, waitstatus = os.waitpid(pid, 0)
- stdout = open('%d.out' % pid).read()
- stderr = open('%d.err' % pid).read()
- return waitstatus, stdout, stderr
-
-
- def runcmd_unchecked(self, cmd, skip_on_noexec = 0):
- """Invoke a command; return (exitcode, stdout, stderr)"""
- import os
- waitstatus, stdout, stderr = self.run_captured(cmd)
- assert not os.WIFSIGNALED(waitstatus), \
- ("%s terminated with signal %d" % (`cmd`, os.WTERMSIG(waitstatus)))
- rc = os.WEXITSTATUS(waitstatus)
- self.test_log = self.test_log + ("""Run command: %s
-Wait status: %#x (exit code %d, signal %d)
-stdout:
-%s
-stderr:
-%s""" % (cmd, waitstatus, os.WEXITSTATUS(waitstatus), os.WTERMSIG(waitstatus),
- stdout, stderr))
- if skip_on_noexec and rc == 127:
- # Either we could not execute the command or the command
- # returned exit code 127. According to system(3) we can't
- # tell the difference.
- raise NotRunError, "could not execute %s" % `cmd`
- return rc, stdout, stderr
-
-
- def explain_failure(self, exc_info = None):
- print "test_log:"
- print self.test_log
-
-
- def log(self, msg):
- """Log a message to the test log. This message is displayed if
- the test fails, or when the runtests function is invoked with
- the verbose option."""
- self.test_log = self.test_log + msg + "\n"
-
-
-class NotRunError(Exception):
- """Raised if a test must be skipped because of missing resources"""
- def __init__(self, value = None):
- self.value = value
-
-
-def _report_error(case, debugger):
- """Ask the test case to explain failure, and optionally run a debugger
-
- Input:
- case TestCase instance
- debugger if true, a debugger function to be applied to the traceback
-"""
- import sys
- ex = sys.exc_info()
- print "-----------------------------------------------------------------"
- if ex:
- import traceback
- traceback.print_exc(file=sys.stdout)
- case.explain_failure()
- print "-----------------------------------------------------------------"
-
- if debugger:
- tb = ex[2]
- debugger(tb)
-
-
-def runtests(test_list, verbose = 0, debugger = None):
- """Run a series of tests.
-
- Inputs:
- test_list sequence of TestCase classes
- verbose print more information as testing proceeds
- debugger debugger object to be applied to errors
-
- Returns:
- unix return code: 0 for success, 1 for failures, 2 for test failure
- """
- import traceback
- ret = 0
- for test_class in test_list:
- print "%-30s" % _test_name(test_class),
- # flush now so that long running tests are easier to follow
- sys.stdout.flush()
-
- obj = None
- try:
- try: # run test and show result
- obj = test_class()
- obj.setup()
- obj.runtest()
- print "OK"
- except KeyboardInterrupt:
- print "INTERRUPT"
- _report_error(obj, debugger)
- ret = 2
- break
- except NotRunError, msg:
- print "NOTRUN, %s" % msg.value
- except:
- print "FAIL"
- _report_error(obj, debugger)
- ret = 1
- finally:
- while obj and obj._cleanups:
- try:
- apply(obj._cleanups.pop())
- except KeyboardInterrupt:
- print "interrupted during teardown"
- _report_error(obj, debugger)
- ret = 2
- break
- except:
- print "error during teardown"
- _report_error(obj, debugger)
- ret = 1
- # Display log file if we're verbose
- if ret == 0 and verbose:
- obj.explain_failure()
-
- return ret
-
-
-def _test_name(test_class):
- """Return a human-readable name for a test class.
- """
- try:
- return test_class.__name__
- except:
- return `test_class`
-
-
-def print_help():
- """Help for people running tests"""
- import sys
- print """%s: software test suite based on ComfyChair
-
-usage:
- To run all tests, just run this program. To run particular tests,
- list them on the command line.
-
-options:
- --help show usage message
- --list list available tests
- --verbose, -v show more information while running tests
- --post-mortem, -p enter Python debugger on error
-""" % sys.argv[0]
-
-
-def print_list(test_list):
- """Show list of available tests"""
- for test_class in test_list:
- print " %s" % _test_name(test_class)
-
-
-def main(tests, extra_tests=[]):
- """Main entry point for test suites based on ComfyChair.
-
- inputs:
- tests Sequence of TestCase subclasses to be run by default.
- extra_tests Sequence of TestCase subclasses that are available but
- not run by default.
-
-Test suites should contain this boilerplate:
-
- if __name__ == '__main__':
- comfychair.main(tests)
-
-This function handles standard options such as --help and --list, and
-by default runs all tests in the suggested order.
-
-Calls sys.exit() on completion.
-"""
- from sys import argv
- import getopt, sys
-
- opt_verbose = 0
- debugger = None
-
- opts, args = getopt.getopt(argv[1:], 'pv',
- ['help', 'list', 'verbose', 'post-mortem'])
- for opt, opt_arg in opts:
- if opt == '--help':
- print_help()
- return
- elif opt == '--list':
- print_list(tests + extra_tests)
- return
- elif opt == '--verbose' or opt == '-v':
- opt_verbose = 1
- elif opt == '--post-mortem' or opt == '-p':
- import pdb
- debugger = pdb.post_mortem
-
- if args:
- all_tests = tests + extra_tests
- by_name = {}
- for t in all_tests:
- by_name[_test_name(t)] = t
- which_tests = []
- for name in args:
- which_tests.append(by_name[name])
- else:
- which_tests = tests
-
- sys.exit(runtests(which_tests, verbose=opt_verbose,
- debugger=debugger))
-
-
-if __name__ == '__main__':
- print __doc__
diff --git a/source3/stf/example.py b/source3/stf/example.py
deleted file mode 100755
index 9c97cb7..0000000
--- a/source3/stf/example.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /usr/bin/env python
-
-# Copyright (C) 2003 by Martin Pool <mbp at samba.org>
-#
-# 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/>.
-
-
-"""example of using ComfyChair"""
-
-import comfychair
--
Samba Shared Repository
More information about the samba-cvs
mailing list