[SCM] Samba Shared Repository - branch master updated

Andrew Tridgell tridge at samba.org
Mon Apr 19 00:35:29 MDT 2010


The branch, master has been updated
       via  b6dff75... build: added --cross-answers support
       via  5040e2a... s4-dev: expanded selftest-vars.sh to match current testenv
       via  e6cbbd9... s4-python: PyErr_SetString() will crash on NULL strings
       via  93f4f7a... build: fixed a python-3 indent error
       via  4e51bf1... build: expanded testwaf to include cross-compiling and python versions
      from  59fa1e1... Final fix for #7331 - Compound async SMB 2 requests don't work right.

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


- Log -----------------------------------------------------------------
commit b6dff759f7016bb4820fc8f9d660bf565c7caeee
Author: Andrew Tridgell <tridge at samba.org>
Date:   Mon Apr 19 15:58:37 2010 +1000

    build: added --cross-answers support
    
    This allows you to easily cross-compile even without a --cross-execute
    emulator
    
    See http://wiki.samba.org/index.php/Waf#cross-compiling for details

commit 5040e2a6fbe8b240b1d445e1260bb95203618b75
Author: Andrew Tridgell <tridge at samba.org>
Date:   Mon Apr 19 13:49:00 2010 +1000

    s4-dev: expanded selftest-vars.sh to match current testenv

commit e6cbbd9640e0e79653820e6cd5ea7b30c2e0f6bd
Author: Andrew Tridgell <tridge at samba.org>
Date:   Mon Apr 19 13:43:53 2010 +1000

    s4-python: PyErr_SetString() will crash on NULL strings
    
    use nt_errstr() when no error available

commit 93f4f7a0375b95540d7f701c295b88ed9c6322d8
Author: Andrew Tridgell <tridge at samba.org>
Date:   Mon Apr 19 13:43:12 2010 +1000

    build: fixed a python-3 indent error

commit 4e51bf1ffdf55b8292383415bcc23803c8a56bc9
Author: Andrew Tridgell <tridge at samba.org>
Date:   Mon Apr 19 13:42:53 2010 +1000

    build: expanded testwaf to include cross-compiling and python versions

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

Summary of changes:
 buildtools/testwaf.sh                    |   42 ++++++++---
 buildtools/wafsamba/samba_autoconf.py    |    3 +-
 buildtools/wafsamba/samba_conftests.py   |    2 +-
 buildtools/wafsamba/samba_cross.py       |  114 ++++++++++++++++++++++++++++--
 buildtools/wafsamba/samba_utils.py       |    2 +-
 buildtools/wafsamba/wscript              |    4 +
 source4/auth/credentials/pycredentials.c |    2 +-
 source4/libnet/py_net.c                  |   15 +++--
 source4/scripting/devel/selftest-vars.sh |   45 +++++++++++-
 9 files changed, 197 insertions(+), 32 deletions(-)


Changeset truncated at 500 lines:

diff --git a/buildtools/testwaf.sh b/buildtools/testwaf.sh
index 00e37c6..5f24bdd 100755
--- a/buildtools/testwaf.sh
+++ b/buildtools/testwaf.sh
@@ -1,5 +1,8 @@
 #!/bin/bash
 
+set -e
+set -x
+
 d=$(dirname $0)
 
 cd $d/..
@@ -15,28 +18,45 @@ echo "testing in dirs $tests"
 
 for d in $tests; do
     echo "`date`: testing $d"
-    pushd $d || exit 1
+    pushd $d
     rm -rf bin
     type waf
-    waf dist || exit 1
-    waf configure -C --enable-developer --prefix=$PREFIX || exit 1
-    time waf build || exit 1
-    time waf build || exit 1
-    waf install || exit 1
-    waf distcheck || exit 1
+    waf dist
+    waf configure -C --enable-developer --prefix=$PREFIX
+    time waf build
+    time waf build
+    waf install
+    waf distcheck
     case $d in
 	"source4/lib/ldb")
-	    ldd bin/ldbadd || exit 1
+	    ldd bin/ldbadd
 	    ;;
 	"lib/replace")
-	    ldd bin/replace_testsuite || exit 1
+	    ldd bin/replace_testsuite
 	    ;;
 	"lib/talloc")
-	    ldd bin/talloc_testsuite || exit 1
+	    ldd bin/talloc_testsuite
 	    ;;
 	"lib/tdb")
-	    ldd bin/tdbtool || exit 1
+	    ldd bin/tdbtool
 	    ;;
     esac
     popd
 done
+
+echo "testing python portability"
+pushd lib/talloc
+#versions="python2.4 python2.5 python2.6 python3.0 python3.1"
+versions="python2.4 python2.5 python2.6"
+for p in $versions; do
+    echo "Testing $p"
+    $p ../../buildtools/bin/waf configure -C --enable-developer --prefix=$PREFIX
+    $p ../../buildtools/bin/waf build install
+done
+popd
+
+echo "testing cross compiling"
+pushd lib/talloc
+CC=arm-linux-gnu-gcc ./configure -C --prefix=$PREFIX  --cross-compile --cross-execute='qemu-arm-static -L /usr/arm-linux-gnu'
+make && make install
+popd
diff --git a/buildtools/wafsamba/samba_autoconf.py b/buildtools/wafsamba/samba_autoconf.py
index dd7abe2..fa58e8f 100644
--- a/buildtools/wafsamba/samba_autoconf.py
+++ b/buildtools/wafsamba/samba_autoconf.py
@@ -372,7 +372,7 @@ def CHECK_CODE(conf, code, define,
     cflags = TO_LIST(cflags)
     cflags.extend(ccflags)
 
-    exec_args = conf.SAMBA_CROSS_ARGS()
+    exec_args = conf.SAMBA_CROSS_ARGS(msg=msg)
 
     ret = conf.check(fragment=fragment,
                      execute=execute,
@@ -567,6 +567,7 @@ def SAMBA_CONFIG_H(conf, path=None):
         conf.write_config_header('config.h', top=True)
     else:
         conf.write_config_header(path)
+    conf.SAMBA_CROSS_CHECK_COMPLETE()
 
 
 @conf
diff --git a/buildtools/wafsamba/samba_conftests.py b/buildtools/wafsamba/samba_conftests.py
index ccd4763..e86f939 100644
--- a/buildtools/wafsamba/samba_conftests.py
+++ b/buildtools/wafsamba/samba_conftests.py
@@ -165,7 +165,7 @@ def CHECK_LIBRARY_SUPPORT(conf, rpath=False, msg=None):
         ADD_LD_LIBRARY_PATH(os.path.join(bdir, 'default/libdir'))
 
     # we need to run the program, try to get its result
-    args = conf.SAMBA_CROSS_ARGS()
+    args = conf.SAMBA_CROSS_ARGS(msg=msg)
     proc = Utils.pproc.Popen([lastprog] + args, stdout=Utils.pproc.PIPE, stderr=Utils.pproc.PIPE)
     (out, err) = proc.communicate()
     w = conf.log.write
diff --git a/buildtools/wafsamba/samba_cross.py b/buildtools/wafsamba/samba_cross.py
index 70d74e0..7c3e7d2 100644
--- a/buildtools/wafsamba/samba_cross.py
+++ b/buildtools/wafsamba/samba_cross.py
@@ -1,15 +1,83 @@
 # functions for handling cross-compilation
 
-import pproc, Utils
+import Utils, Logs, sys, os, Options, re
 from Configure import conf
-from pproc import Popen
 
 real_Popen = None
 
-class cross_Popen(Popen):
+ANSWER_UNKNOWN = (254, "")
+ANSWER_FAIL    = (255, "")
+ANSWER_OK      = (0, "")
+
+cross_answers_incomplete = False
+
+
+def add_answer(ca_file, msg, answer):
+    '''add an answer to a set of cross answers'''
+    try:
+        f = open(ca_file, 'a')
+    except:
+        Logs.error("Unable to open cross-answers file %s" % ca_file)
+        sys.exit(1)
+    if answer == ANSWER_OK:
+        f.write('%s: OK\n' % msg)
+    elif answer == ANSWER_UNKNOWN:
+        f.write('%s: UNKNOWN\n' % msg)
+    elif answer == ANSWER_FAIL:
+        f.write('%s: FAIL\n' % msg)
+    else:
+        (retcode, retstring) = answer
+        f.write('%s: (%d, "%s")' % (msg, retcode, retstring))
+    f.close()
+
+
+def cross_answer(ca_file, msg):
+    '''return a (retcode,retstring) tuple from a answers file'''
+    try:
+        f = open(ca_file, 'r')
+    except:
+        add_answer(ca_file, msg, ANSWER_UNKNOWN)
+        return ANSWER_UNKNOWN
+    for line in f:
+        line = line.strip()
+        if line == '' or line[0] == '#':
+            continue
+        if line.find(':') != -1:
+            a = line.split(':')
+            thismsg = a[0].strip()
+            if thismsg != msg:
+                continue
+            ans = a[1].strip()
+            if ans == "OK" or ans == "YES":
+                f.close()
+                return ANSWER_OK
+            elif ans == "UNKNOWN":
+                f.close()
+                return ANSWER_UNKNOWN
+            elif ans == "FAIL" or ans == "NO":
+                f.close()
+                return ANSWER_FAIL
+            elif ans[0] == '"':
+                return (0, ans.strip('"'))
+            elif ans[0] == "'":
+                return (0, ans.strip("'"))
+            else:
+                m = re.match('\(\s*(-?\d+)\s*,\s*\"(.*)\"\s*\)', ans)
+                if m:
+                    f.close()
+                    return (int(m.group(1)), m.group(2))
+                else:
+                    raise Utils.WafError("Bad answer format '%s' in %s" % (line, ca_file))
+    f.close()
+    add_answer(ca_file, msg, ANSWER_UNKNOWN)
+    return ANSWER_UNKNOWN
+
+
+class cross_Popen(Utils.pproc.Popen):
     '''cross-compilation wrapper for Popen'''
     def __init__(*k, **kw):
         (obj, args) = k
+
         if '--cross-execute' in args:
             # when --cross-execute is set, then change the arguments
             # to use the cross emulator
@@ -17,13 +85,25 @@ class cross_Popen(Popen):
             newargs = args[i+1].split()
             newargs.extend(args[0:i])
             args = newargs
-        Popen.__init__(*(obj, args), **kw)
+        elif '--cross-answers' in args:
+            # when --cross-answers is set, then change the arguments
+            # to use the cross answers if available
+            i = args.index('--cross-answers')
+            ca_file = args[i+1]
+            msg     = args[i+2]
+            ans = cross_answer(ca_file, msg)
+            if ans == ANSWER_UNKNOWN:
+                global cross_answers_incomplete
+                cross_answers_incomplete = True
+            (retcode, retstring) = ans
+            args = ['/bin/sh', '-c', 'echo %s; exit %d' % (retstring, retcode)]
+        real_Popen.__init__(*(obj, args), **kw)
 
 
 @conf
-def SAMBA_CROSS_ARGS(conf):
+def SAMBA_CROSS_ARGS(conf, msg=None):
     '''get exec_args to pass when running cross compiled binaries'''
-    if not conf.env.CROSS_COMPILE or not conf.env.CROSS_EXECUTE:
+    if not conf.env.CROSS_COMPILE:
         return []
 
     global real_Popen
@@ -31,4 +111,24 @@ def SAMBA_CROSS_ARGS(conf):
         real_Popen  = Utils.pproc.Popen
         Utils.pproc.Popen = cross_Popen
 
-    return ['--cross-execute', conf.env.CROSS_EXECUTE]
+    ret = []
+
+    if conf.env.CROSS_EXECUTE:
+        ret.extend(['--cross-execute', conf.env.CROSS_EXECUTE])
+    elif conf.env.CROSS_ANSWERS:
+        if msg is None:
+            raise Utils.WafError("Cannot have NULL msg in cross-answers")
+        ret.extend(['--cross-answers', os.path.join(Options.launch_dir, conf.env.CROSS_ANSWERS), msg])
+
+    if ret == []:
+        raise Utils.WafError("Cannot cross-compile without either --cross-execute or --cross-answers")
+
+    return ret
+
+ at conf
+def SAMBA_CROSS_CHECK_COMPLETE(conf):
+    '''check if we have some unanswered questions'''
+    global cross_answers_incomplete
+    if conf.env.CROSS_COMPILE and cross_answers_incomplete:
+        raise Utils.WafError("Cross answers file %s is incomplete" % conf.env.CROSS_ANSWERS)
+    return True
diff --git a/buildtools/wafsamba/samba_utils.py b/buildtools/wafsamba/samba_utils.py
index cbea755..b989f91 100644
--- a/buildtools/wafsamba/samba_utils.py
+++ b/buildtools/wafsamba/samba_utils.py
@@ -452,7 +452,7 @@ def CHECK_MAKEFLAGS(bld):
         if opt[0:2] == 'V=':
             Options.options.verbose = Logs.verbose = int(opt[2:])
             if Logs.verbose > 0:
-		Logs.zones = ['runner']
+                Logs.zones = ['runner']
             if Logs.verbose > 2:
                 Logs.zones = ['*']
         elif opt[0].isupper() and opt.find('=') != -1:
diff --git a/buildtools/wafsamba/wscript b/buildtools/wafsamba/wscript
index a611797..a49e5e7 100644
--- a/buildtools/wafsamba/wscript
+++ b/buildtools/wafsamba/wscript
@@ -93,6 +93,9 @@ def set_options(opt):
     gr.add_option('--cross-execute',
 		   help=("command prefix to use for cross-execution in configure"),
 		   action='store', dest='CROSS_EXECUTE', default='')
+    gr.add_option('--cross-answers',
+		   help=("answers to cross-compilation configuration (auto modified)"),
+		   action='store', dest='CROSS_ANSWERS', default='')
     gr.add_option('--hostcc',
 		   help=("set host compiler when cross compiling"),
 		   action='store', dest='HOSTCC', default=False)
@@ -152,6 +155,7 @@ def configure(conf):
 
     conf.env.CROSS_COMPILE = Options.options.CROSS_COMPILE
     conf.env.CROSS_EXECUTE = Options.options.CROSS_EXECUTE
+    conf.env.CROSS_ANSWERS = Options.options.CROSS_ANSWERS
     conf.env.HOSTCC        = Options.options.HOSTCC
 
     conf.env.AUTOCONF_BUILD = Options.options.AUTOCONF_BUILD
diff --git a/source4/auth/credentials/pycredentials.c b/source4/auth/credentials/pycredentials.c
index c5cca4f..361e4c9 100644
--- a/source4/auth/credentials/pycredentials.c
+++ b/source4/auth/credentials/pycredentials.c
@@ -283,7 +283,7 @@ static PyObject *py_creds_get_named_ccache(py_talloc_Object *self, PyObject *arg
 		return PyCredentialCacheContainer_from_ccache_container(ccc);
 	}
 
-	PyErr_SetString(PyExc_RuntimeError, error_string);
+	PyErr_SetString(PyExc_RuntimeError, error_string?error_string:"NULL");
 
 	talloc_free(event_ctx);
 	return NULL;
diff --git a/source4/libnet/py_net.c b/source4/libnet/py_net.c
index ec41ca3..6bd4c0c 100644
--- a/source4/libnet/py_net.c
+++ b/source4/libnet/py_net.c
@@ -52,7 +52,7 @@ static PyObject *py_net_join(py_net_Object *self, PyObject *args, PyObject *kwar
 
 	status = libnet_Join(self->libnet_ctx, mem_ctx, &r);
 	if (NT_STATUS_IS_ERR(status)) {
-		PyErr_SetString(PyExc_RuntimeError, r.out.error_string);
+		PyErr_SetString(PyExc_RuntimeError, r.out.error_string?r.out.error_string:nt_errstr(status));
 		talloc_free(mem_ctx);
 		return NULL;
 	}
@@ -93,7 +93,8 @@ static PyObject *py_net_set_password(py_net_Object *self, PyObject *args, PyObje
 
 	status = libnet_SetPassword(self->libnet_ctx, mem_ctx, &r);
 	if (NT_STATUS_IS_ERR(status)) {
-		PyErr_SetString(PyExc_RuntimeError, r.generic.out.error_string);
+		PyErr_SetString(PyExc_RuntimeError,
+				r.generic.out.error_string?r.generic.out.error_string:nt_errstr(status));
 		talloc_free(mem_ctx);
 		return NULL;
 	}
@@ -127,7 +128,8 @@ static PyObject *py_net_export_keytab(py_net_Object *self, PyObject *args, PyObj
 
 	status = libnet_export_keytab(self->libnet_ctx, mem_ctx, &r);
 	if (NT_STATUS_IS_ERR(status)) {
-		PyErr_SetString(PyExc_RuntimeError, r.out.error_string);
+		PyErr_SetString(PyExc_RuntimeError,
+				r.out.error_string?r.out.error_string:nt_errstr(status));
 		talloc_free(mem_ctx);
 		return NULL;
 	}
@@ -164,7 +166,8 @@ static PyObject *py_net_time(py_net_Object *self, PyObject *args, PyObject *kwar
 
 	status = libnet_RemoteTOD(self->libnet_ctx, mem_ctx, &r);
 	if (!NT_STATUS_IS_OK(status)) {
-		PyErr_SetString(PyExc_RuntimeError, r.generic.out.error_string);
+		PyErr_SetString(PyExc_RuntimeError,
+				r.generic.out.error_string?r.generic.out.error_string:nt_errstr(status));
 		talloc_free(mem_ctx);
 		return NULL;
 	}
@@ -204,7 +207,7 @@ static PyObject *py_net_user_create(py_net_Object *self, PyObject *args, PyObjec
 
 	status = libnet_CreateUser(self->libnet_ctx, mem_ctx, &r);
 	if (!NT_STATUS_IS_OK(status)) {
-		PyErr_SetString(PyExc_RuntimeError, r.out.error_string);
+		PyErr_SetString(PyExc_RuntimeError, r.out.error_string?r.out.error_string:nt_errstr(status));
 		talloc_free(mem_ctx);
 		return NULL;
 	}
@@ -238,7 +241,7 @@ static PyObject *py_net_user_delete(py_net_Object *self, PyObject *args, PyObjec
 
 	status = libnet_DeleteUser(self->libnet_ctx, mem_ctx, &r);
 	if (!NT_STATUS_IS_OK(status)) {
-		PyErr_SetString(PyExc_RuntimeError, r.out.error_string);
+		PyErr_SetString(PyExc_RuntimeError, r.out.error_string?r.out.error_string:nt_errstr(status));
 		talloc_free(mem_ctx);
 		return NULL;
 	}
diff --git a/source4/scripting/devel/selftest-vars.sh b/source4/scripting/devel/selftest-vars.sh
index 1ee9eb3..f275cea 100644
--- a/source4/scripting/devel/selftest-vars.sh
+++ b/source4/scripting/devel/selftest-vars.sh
@@ -1,10 +1,47 @@
 # . these into your shell to allow you to run with socketwrapper
 # outside the test environment
 
-export SELFTEST_INTERFACES=127.0.0.6/8,127.0.0.7/8,127.0.0.8/8,127.0.0.9/8,127.0.0.10/8,127.0.0.11/8
-export SOCKET_WRAPPER_DEFAULT_IFACE=6
-export SOCKET_WRAPPER_DIR=./st/w
 export UID_WRAPPER=1
 export NSS_WRAPPER_PASSWD=st/dc/passwd
 export NSS_WRAPPER_GROUP=st/dc/group
-export KRB5_CONFIG=st/dc/etc/krb5.conf
+export CONFIGURATION="--configfile=$PWD/st/dc/etc/smb.conf"
+export MEMBER_SERVER=localmember3
+export MEMBER_SERVER_IP=127.0.0.3
+export MEMBER_NETBIOSNAME=localmember3
+export MEMBER_NETBIOSALIAS=localmember
+export RPC_PROXY_SERVER=localrpcproxy4
+export RPC_PROXY_SERVER_IP=127.0.0.4
+export RPC_PROXY_NETBIOSNAME=localrpcproxy4
+export RPC_PROXY_NETBIOSALIAS=localrpcproxy
+export SELFTEST_TARGET="samba4"
+export SELFTEST_MAXTIME=1200
+export NETBIOSNAME=localdc1
+export REALM=SAMBA.EXAMPLE.COM
+export SOCKET_WRAPPER_DEFAULT_IFACE=1
+export SERVER=localdc1
+export WINBINDD_SOCKET_DIR=$PWD/st/dc/winbindd_socket
+export SELFTEST_PREFIX=$PWD/st
+export DOMAIN=SAMBADOMAIN
+export BUILDDIR=.
+export DC_SERVER_IP=127.0.0.1
+export SELFTEST_INTERFACES=127.0.0.6/8,127.0.0.7/8,127.0.0.8/8,127.0.0.9/8,127.0.0.10/8,127.0.0.11/8
+export SOCKET_WRAPPER_DIR=$PWD/st/w
+export DC_USERNAME=Administrator
+export USERNAME=Administrator
+export SERVER_IP=127.0.0.1
+export KRB5_CONFIG=$PWD/st/dc/etc/krb5.conf
+export PREFIX_ABS=$PWD/st
+export SRCDIR_ABS=$PWD
+export PREFIX=./st
+export KRB5CCNAME=./st/krb5ticket
+export SRCDIR=.
+export TLS_ENABLED=yes
+export DC_NETBIOSALIAS=localdc
+export DC_NETBIOSNAME=localdc1
+export DC_SERVER=localdc1
+export DC_PASSWORD=localdcpass
+export PYTHONPATH=$PWD/bin/python
+export PASSWORD=localdcpass
+export LDB_MODULES_PATH=$PWD/bin/modules/ldb
+export NETBIOSALIAS=localdc
+export SMB_CONF_PATH=$PWD/st/dc/etc/smb.conf


-- 
Samba Shared Repository


More information about the samba-cvs mailing list