At file:///home/jelmer/bzr.samba/4.0-perlselftest/ ------------------------------------------------------------ revno: 11322 revision-id: [EMAIL PROTECTED] parent: [EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: Jelmer Vernooij <[EMAIL PROTECTED]> branch nick: 4.0-perlselftest timestamp: Sat 2007-03-03 02:23:02 +0100 message: Merge upstream. added: source/lib/socket_wrapper/testsuite.c svn-v2:[EMAIL PROTECTED] modified: .bzrignore svn-v2:[EMAIL PROTECTED] source/auth/credentials/credentials.c svn-v2:[EMAIL PROTECTED] source/cluster/ctdb/config.mk svn-v2:[EMAIL PROTECTED] source/lib/socket_wrapper/socket_wrapper.c svn-v2:[EMAIL PROTECTED] source/lib/socket_wrapper/socket_wrapper.h svn-v2:[EMAIL PROTECTED] source/lib/tdr/testsuite.c svn-v2:[EMAIL PROTECTED] source/libcli/raw/trans2.h svn-v2:[EMAIL PROTECTED] source/ntvfs/common/config.mk svn-v2:[EMAIL PROTECTED] source/smbd/config.mk svn-v2:[EMAIL PROTECTED] source/torture/local/config.mk svn-v2:[EMAIL PROTECTED] source/torture/local/local.c svn-v2:[EMAIL PROTECTED] source/torture/rpc/srvsvc.c svn-v2:[EMAIL PROTECTED] source/torture/unix/whoami.c svn-v2:[EMAIL PROTECTED] ------------------------------------------------------------ revno: 11286.1.5.1.27.1.8.1.316 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] parent: [EMAIL PROTECTED] committer: jelmer timestamp: Sat 2007-03-03 01:20:36 +0000 message: Add initial simple tests for socket wrapper ------------------------------------------------------------ revno: 11286.1.5.1.27.1.8.1.315.1.1 merged: [EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: Jelmer Vernooij <[EMAIL PROTECTED]> branch nick: SAMBA_4_0 timestamp: Sat 2007-03-03 02:16:49 +0100 message: Add initial simple tests for socket wrapper ------------------------------------------------------------ revno: 11286.1.5.1.27.1.8.1.315 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] parent: [EMAIL PROTECTED] committer: jelmer timestamp: Sat 2007-03-03 00:57:41 +0000 message: More tests ------------------------------------------------------------ revno: 11286.1.5.1.27.1.8.1.314.1.1 merged: [EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: Jelmer Vernooij <[EMAIL PROTECTED]> branch nick: SAMBA_4_0 timestamp: Sat 2007-03-03 01:54:26 +0100 message: More tests ------------------------------------------------------------ revno: 11286.1.5.1.27.1.8.1.314 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] parent: [EMAIL PROTECTED] committer: jelmer timestamp: Sat 2007-03-03 00:27:46 +0000 message: Fix --enable-dso build ------------------------------------------------------------ revno: 11286.1.5.1.27.1.8.1.313.1.1 merged: [EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: Jelmer Vernooij <[EMAIL PROTECTED]> branch nick: SAMBA_4_0 timestamp: Sat 2007-03-03 01:24:38 +0100 message: Fix --enable-dso build ------------------------------------------------------------ revno: 11286.1.5.1.27.1.8.1.313 merged: svn-v2:[EMAIL PROTECTED] parent: svn-v2:[EMAIL PROTECTED] committer: jpeach timestamp: Fri 2007-03-02 23:24:27 +0000 message: Add SMB_QFS_POSIX_WHOAMI to trans2.h so it's easy to find. Add convenience API to create an anonymous credential. Don't clobber cmdline_credentials in the UNIX-WHOAMI test. === added file 'source/lib/socket_wrapper/testsuite.c' --- a/source/lib/socket_wrapper/testsuite.c 1970-01-01 00:00:00 +0000 +++ b/source/lib/socket_wrapper/testsuite.c 2007-03-03 01:20:36 +0000 @@ -0,0 +1,82 @@ +/* + Unix SMB/CIFS implementation. + + local testing of the socket wrapper + + Copyright (C) Jelmer Vernooij 2007 + + 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 2 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +#include "system/network.h" +#include "lib/socket_wrapper/socket_wrapper.h" +#include "torture/torture.h" + +static char *old_dir = NULL; + +static void backup_env(void) +{ + old_dir = getenv("SOCKET_WRAPPER_DIR"); +} + +static void restore_env(void) +{ + setenv("SOCKET_WRAPPER_DIR", old_dir, 1); +} + +static bool test_socket_wrapper_dir(struct torture_context *tctx) +{ + backup_env(); + + setenv("SOCKET_WRAPPER_DIR", "foo", 1); + torture_assert_str_equal(tctx, socket_wrapper_dir(), "foo", "setting failed"); + setenv("SOCKET_WRAPPER_DIR", "./foo", 1); + torture_assert_str_equal(tctx, socket_wrapper_dir(), "foo", "setting failed"); + unsetenv("SOCKET_WRAPPER_DIR"); + torture_assert_str_equal(tctx, socket_wrapper_dir(), NULL, "resetting failed"); + + restore_env(); + + return true; +} + +static bool test_swrap_socket(struct torture_context *tctx) +{ + backup_env(); + setenv("SOCKET_WRAPPER_DIR", "foo", 1); + + torture_assert_int_equal(tctx, swrap_socket(1337, 1337, 0), -1, "unknown address family fails"); + torture_assert_int_equal(tctx, errno, EAFNOSUPPORT, "correct errno set"); + torture_assert_int_equal(tctx, swrap_socket(AF_INET, 1337, 0), -1, "unknown type fails"); + torture_assert_int_equal(tctx, errno, EPROTONOSUPPORT, "correct errno set"); + torture_assert_int_equal(tctx, swrap_socket(AF_INET, SOCK_DGRAM, 10), -1, "unknown protocol fails"); + torture_assert_int_equal(tctx, errno, EPROTONOSUPPORT, "correct errno set"); + + restore_env(); + + return true; +} + +struct torture_suite *torture_local_socket_wrapper(TALLOC_CTX *mem_ctx) +{ + struct torture_suite *suite = torture_suite_create(mem_ctx, + "SOCKET-WRAPPER"); + + torture_suite_add_simple_test(suite, "socket_wrapper_dir", test_socket_wrapper_dir); + torture_suite_add_simple_test(suite, "socket", test_swrap_socket); + + return suite; +}
=== modified file '.bzrignore' --- a/.bzrignore 2007-02-21 11:54:30 +0000 +++ b/.bzrignore 2007-03-03 01:23:02 +0000 @@ -170,3 +170,4 @@ webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/locale/translation webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/translation/messages.pot source/torture/ndr/proto.h +source/bin/modules/* === modified file 'source/auth/credentials/credentials.c' --- a/source/auth/credentials/credentials.c 2007-02-19 16:43:56 +0000 +++ b/source/auth/credentials/credentials.c 2007-03-02 23:24:27 +0000 @@ -68,6 +68,21 @@ return cred; } +/** + * Create a new anonymous credential + * @param mem_ctx TALLOC_CTX parent for credentials structure + */ +struct cli_credentials *cli_credentials_init_anon(TALLOC_CTX *mem_ctx) +{ + struct cli_credentials *anon_credentials; + + anon_credentials = cli_credentials_init(mem_ctx); + cli_credentials_set_conf(anon_credentials); + cli_credentials_set_anonymous(anon_credentials); + + return anon_credentials; +} + void cli_credentials_set_kerberos_state(struct cli_credentials *creds, enum credentials_use_kerberos use_kerberos) { === modified file 'source/cluster/ctdb/config.mk' --- a/source/cluster/ctdb/config.mk 2007-02-08 02:57:08 +0000 +++ b/source/cluster/ctdb/config.mk 2007-03-03 00:27:46 +0000 @@ -1,19 +1,16 @@ ################## -[MODULE::brlock_ctdb] -SUBSYSTEM = ntvfs_common +[SUBSYSTEM::brlock_ctdb] OBJ_FILES = brlock_ctdb.o ################## -[MODULE::ctdb_tcp] -SUBSYSTEM = CLUSTER +[SUBSYSTEM::ctdb_tcp] OBJ_FILES = \ tcp/tcp_init.o \ tcp/tcp_io.o \ tcp/tcp_connect.o ################## -[MODULE::ctdb] -SUBSYSTEM = CLUSTER +[SUBSYSTEM::ctdb] OBJ_FILES = \ ctdb_cluster.o \ common/ctdb.o \ @@ -21,5 +18,5 @@ common/ctdb_message.o \ common/ctdb_ltdb.o \ common/ctdb_util.o +PUBLIC_DEPENDENCIES = LIBTDB LIBTALLOC PRIVATE_DEPENDENCIES = ctdb_tcp -PUBLIC_DEPENDENCIES = LIBTDB LIBTALLOC === modified file 'source/lib/socket_wrapper/socket_wrapper.c' --- a/source/lib/socket_wrapper/socket_wrapper.c 2006-10-19 04:56:21 +0000 +++ b/source/lib/socket_wrapper/socket_wrapper.c 2007-03-03 01:20:36 +0000 @@ -187,7 +187,7 @@ static struct socket_info *sockets; -static const char *socket_wrapper_dir(void) +const char *socket_wrapper_dir(void) { const char *s = getenv("SOCKET_WRAPPER_DIR"); if (s == NULL) { === modified file 'source/lib/socket_wrapper/socket_wrapper.h' --- a/source/lib/socket_wrapper/socket_wrapper.h 2006-10-08 20:48:34 +0000 +++ b/source/lib/socket_wrapper/socket_wrapper.h 2007-03-03 01:20:36 +0000 @@ -36,6 +36,7 @@ #ifndef __SOCKET_WRAPPER_H__ #define __SOCKET_WRAPPER_H__ +const char *socket_wrapper_dir(void); int swrap_socket(int family, int type, int protocol); int swrap_accept(int s, struct sockaddr *addr, socklen_t *addrlen); int swrap_connect(int s, const struct sockaddr *serv_addr, socklen_t addrlen); === modified file 'source/lib/tdr/testsuite.c' --- a/source/lib/tdr/testsuite.c 2007-03-02 14:53:09 +0000 +++ b/source/lib/tdr/testsuite.c 2007-03-03 00:57:41 +0000 @@ -79,6 +79,93 @@ return true; } +static bool test_push_uint32(struct torture_context *tctx) +{ + uint32_t v = 0x100F32; + struct tdr_push *tdr = talloc_zero(tctx, struct tdr_push); + + torture_assert_ntstatus_ok(tctx, tdr_push_uint32(tdr, &v), "push failed"); + torture_assert_int_equal(tctx, tdr->data.length, 4, "length incorrect"); + torture_assert_int_equal(tctx, tdr->data.data[0], 0x32, "data incorrect"); + torture_assert_int_equal(tctx, tdr->data.data[1], 0x0F, "data incorrect"); + torture_assert_int_equal(tctx, tdr->data.data[2], 0x10, "data incorrect"); + torture_assert_int_equal(tctx, tdr->data.data[3], 0x00, "data incorrect"); + return true; +} + +static bool test_pull_uint32(struct torture_context *tctx) +{ + uint32_t d = 782; + uint32_t l; + struct tdr_pull tdr; + tdr.data.data = (uint8_t *)&d; + tdr.data.length = 4; + tdr.offset = 0; + tdr.flags = 0; + torture_assert_ntstatus_ok(tctx, tdr_pull_uint32(&tdr, tctx, &l), + "pull failed"); + torture_assert_int_equal(tctx, 4, tdr.offset, "offset invalid"); + torture_assert_int_equal(tctx, 782, l, "right int read"); + return true; +} + +static bool test_pull_charset(struct torture_context *tctx) +{ + struct tdr_pull tdr; + const char *l = NULL; + tdr.data.data = (uint8_t *)talloc_strdup(tctx, "bla"); + tdr.data.length = 4; + tdr.offset = 0; + tdr.flags = 0; + torture_assert_ntstatus_ok(tctx, tdr_pull_charset(&tdr, tctx, &l, -1, 1, CH_DOS), + "pull failed"); + torture_assert_int_equal(tctx, 4, tdr.offset, "offset invalid"); + torture_assert_str_equal(tctx, "bla", l, "right int read"); + + tdr.offset = 0; + torture_assert_ntstatus_ok(tctx, tdr_pull_charset(&tdr, tctx, &l, 2, 1, CH_UNIX), + "pull failed"); + torture_assert_int_equal(tctx, 2, tdr.offset, "offset invalid"); + torture_assert_str_equal(tctx, "bl", l, "right int read"); + + return true; +} + +static bool test_pull_charset_empty(struct torture_context *tctx) +{ + struct tdr_pull tdr; + const char *l = NULL; + tdr.data.data = (uint8_t *)talloc_strdup(tctx, "bla"); + tdr.data.length = 4; + tdr.offset = 0; + tdr.flags = 0; + torture_assert_ntstatus_ok(tctx, tdr_pull_charset(&tdr, tctx, &l, 0, 1, CH_DOS), + "pull failed"); + torture_assert_int_equal(tctx, 0, tdr.offset, "offset invalid"); + torture_assert_str_equal(tctx, "", l, "right string read"); + + return true; +} + + + +static bool test_push_charset(struct torture_context *tctx) +{ + const char *l = "bloe"; + struct tdr_push *tdr = talloc_zero(tctx, struct tdr_push); + torture_assert_ntstatus_ok(tctx, tdr_push_charset(tdr, &l, 4, 1, CH_UTF8), + "push failed"); + torture_assert_int_equal(tctx, 4, tdr->data.length, "offset invalid"); + torture_assert(tctx, strcmp("bloe", (const char *)tdr->data.data) == 0, "right string push"); + + torture_assert_ntstatus_ok(tctx, tdr_push_charset(tdr, &l, -1, 1, CH_UTF8), + "push failed"); + torture_assert_int_equal(tctx, 9, tdr->data.length, "offset invalid"); + torture_assert_str_equal(tctx, "bloe", (const char *)tdr->data.data+4, "right string read"); + + return true; +} + struct torture_suite *torture_local_tdr(TALLOC_CTX *mem_ctx) { struct torture_suite *suite = torture_suite_create(mem_ctx, "TDR"); @@ -89,5 +176,12 @@ torture_suite_add_simple_test(suite, "pull_uint16", test_pull_uint16); torture_suite_add_simple_test(suite, "push_uint16", test_push_uint16); + torture_suite_add_simple_test(suite, "pull_uint32", test_pull_uint32); + torture_suite_add_simple_test(suite, "push_uint32", test_push_uint32); + + torture_suite_add_simple_test(suite, "pull_charset", test_pull_charset); + torture_suite_add_simple_test(suite, "pull_charset", test_pull_charset_empty); + torture_suite_add_simple_test(suite, "push_charset", test_push_charset); + return suite; } === modified file 'source/libcli/raw/trans2.h' --- a/source/libcli/raw/trans2.h 2007-01-10 11:50:33 +0000 +++ b/source/libcli/raw/trans2.h 2007-03-02 23:24:27 +0000 @@ -74,6 +74,7 @@ #define SMB_QFS_ATTRIBUTE_INFO 0x105 #define SMB_QFS_UNIX_INFO 0x200 #define SMB_QFS_POSIX_INFO 0x201 +#define SMB_QFS_POSIX_WHOAMI 0x202 #define SMB_QFS_VOLUME_INFORMATION 1001 #define SMB_QFS_SIZE_INFORMATION 1003 #define SMB_QFS_DEVICE_INFORMATION 1004 === modified file 'source/ntvfs/common/config.mk' --- a/source/ntvfs/common/config.mk 2007-01-19 03:58:16 +0000 +++ b/source/ntvfs/common/config.mk 2007-03-03 00:27:46 +0000 @@ -9,5 +9,6 @@ opendb.o \ notify.o PUBLIC_DEPENDENCIES = NDR_OPENDB NDR_NOTIFY sys_notify share +PRIVATE_DEPENDENCIES = brlock_ctdb # End LIBRARY ntvfs_common ################################################ === modified file 'source/smbd/config.mk' --- a/source/smbd/config.mk 2006-11-06 12:05:09 +0000 +++ b/source/smbd/config.mk 2007-03-03 00:27:46 +0000 @@ -46,6 +46,7 @@ registry \ ntptr \ ntvfs \ - share + share \ + CLUSTER # End BINARY smbd ################################# === modified file 'source/torture/local/config.mk' --- a/source/torture/local/config.mk 2007-03-02 14:53:09 +0000 +++ b/source/torture/local/config.mk 2007-03-03 01:20:36 +0000 @@ -19,6 +19,7 @@ ../../librpc/tests/binding_string.o \ ../../lib/util/tests/idtree.o \ ../../lib/socket/testsuite.o \ + ../../lib/socket_wrapper/testsuite.o \ irpc.o \ ../../lib/registry/tests/generic.o \ resolve.o \ === modified file 'source/torture/local/local.c' --- a/source/torture/local/local.c 2007-02-16 15:13:51 +0000 +++ b/source/torture/local/local.c 2007-03-03 01:20:36 +0000 @@ -37,6 +37,7 @@ torture_local_idtree, torture_local_iconv, torture_local_socket, + torture_local_socket_wrapper, torture_pac, torture_registry, torture_local_resolve, === modified file 'source/torture/rpc/srvsvc.c' --- a/source/torture/rpc/srvsvc.c 2006-10-18 14:23:19 +0000 +++ b/source/torture/rpc/srvsvc.c 2007-03-02 23:24:27 +0000 @@ -1125,9 +1125,7 @@ return False; } - anon_credentials = cli_credentials_init(mem_ctx); - cli_credentials_set_conf(anon_credentials); - cli_credentials_set_anonymous(anon_credentials); + anon_credentials = cli_credentials_init_anon(mem_ctx); status = dcerpc_pipe_connect(mem_ctx, &p, binding, &dcerpc_table_srvsvc, === modified file 'source/torture/unix/whoami.c' --- a/source/torture/unix/whoami.c 2007-03-02 17:47:58 +0000 +++ b/source/torture/unix/whoami.c 2007-03-02 23:24:27 +0000 @@ -26,8 +26,6 @@ #include "lib/cmdline/popt_common.h" #include "auth/credentials/credentials.h" -#define SMB_QUERY_POSIX_WHOAMI 0x202 - /* Size (in bytes) of the required fields in the SMBwhoami response. */ #define WHOAMI_REQUIRED_SIZE 40 @@ -68,7 +66,8 @@ struct dom_sid ** sid_list; }; -static struct smbcli_state *connect_to_server(void *mem_ctx) +static struct smbcli_state *connect_to_server(void *mem_ctx, + struct cli_credentials *creds) { NTSTATUS status; struct smbcli_state *cli; @@ -78,7 +77,7 @@ status = smbcli_full_connection(mem_ctx, &cli, host, share, NULL, - cmdline_credentials, NULL); + creds, NULL); if (!NT_STATUS_IS_OK(status)) { printf("failed to connect to //%s/%s: %s\n", @@ -154,13 +153,13 @@ tp.in.max_data = (uint16_t)max_data; tp.in.setup = &setup; tp.in.trans_name = NULL; - SSVAL(&info_level, 0, SMB_QUERY_POSIX_WHOAMI); + SSVAL(&info_level, 0, SMB_QFS_POSIX_WHOAMI); tp.in.params = data_blob_talloc(mem_ctx, &info_level, 2); tp.in.data = data_blob_talloc(mem_ctx, NULL, 0); status = smb_raw_trans2(cli->tree, mem_ctx, &tp); torture_assert_ntstatus_equal(torture, status, NT_STATUS_OK, - "doing SMB_QUERY_POSIX_WHOAMI"); + "doing SMB_QFS_POSIX_WHOAMI"); /* Make sure we got back all the required fields. */ torture_assert(torture, tp.out.params.length == 0, @@ -269,18 +268,19 @@ BOOL torture_unix_whoami(struct torture_context *torture) { struct smbcli_state *cli; + struct cli_credentials *anon_credentials; struct smb_whoami whoami; void *mem_ctx; mem_ctx = talloc_init("smb_query_posix_whoami"); torture_assert(torture, mem_ctx != NULL, "malloc failed"); - if (!(cli = connect_to_server(mem_ctx))) { + if (!(cli = connect_to_server(mem_ctx, cmdline_credentials))) { goto fail; } /* Test basic authenticated mapping. */ - printf("calling SMB_QUERY_POSIX_WHOAMI on an authenticated connection\n"); + printf("calling SMB_QFS_POSIX_WHOAMI on an authenticated connection\n"); if (!smb_raw_query_posix_whoami(mem_ctx, torture, cli, &whoami, 0xFFFF)) { smbcli_tdis(cli); @@ -288,7 +288,7 @@ } /* Test that the server drops the UID and GID list. */ - printf("calling SMB_QUERY_POSIX_WHOAMI with a small buffer\n"); + printf("calling SMB_QFS_POSIX_WHOAMI with a small buffer\n"); if (!smb_raw_query_posix_whoami(mem_ctx, torture, cli, &whoami, 0x40)) { smbcli_tdis(cli); @@ -303,13 +303,14 @@ "invalid SID bytes count"); smbcli_tdis(cli); - cli_credentials_set_anonymous(cmdline_credentials); - - if (!(cli = connect_to_server(mem_ctx))) { + + printf("calling SMB_QFS_POSIX_WHOAMI on an anonymous connection\n"); + anon_credentials = cli_credentials_init_anon(mem_ctx); + + if (!(cli = connect_to_server(mem_ctx, anon_credentials))) { goto fail; } - printf("calling SMB_QUERY_POSIX_WHOAMI on an anonymous connection\n"); if (!smb_raw_query_posix_whoami(mem_ctx, torture, cli, &whoami, 0xFFFF)) { smbcli_tdis(cli);