The branch, master has been updated via 5c31e5d s3:selftest: run SMB2-SESSION-RECONNECT via fbad41b selftest/known: samba3.smb2.session.*reconnect passes now via 45cd2bc s3:smb2_sesssetup: make use of smb2srv_session_close_previous_send/recv via 299b63f s3:smbXsrv_session: react on MSG_SMBXSRV_SESSION_CLOSE via 8acf6c9 s3:smbXsrv_session: add smb2srv_session_close_previous_send/recv via 9f2c89c s3:smbXsrv.idl: add smbXsrv_session_close* via da40aa0 s3:messaging.idl: define MSG_SMBXSRV_SESSION_CLOSE via ed75069 s3:smb2_sesssetup: inline gensec_session_info() call via 1b8bcae s3:smb2_sesssetup: make use of gensec_update_send/recv via f32e99a s3:smb2_sesssetup: inline most of smbd_smb2_session_setup() via ed96b39 s3:selftest: run raw.session via c0b9fa8 s3:selftest: run rpc.samba3.smb-reauth1 and rpc.samba3.smb-reauth2 via e770002 s3:smbd/sesssetup: implement dynamic re-authentication and expire session if client supports it via 842f1c8 s3:selftest: run smbtorture3 SMB2-SESSION-REAUTH via ce22037 s3:selftest: run smb2.session as ntlm and krb5 via 500e646 selftest/knownfail: only reauth5 still fails via d2e1058 s3:smb2_sesssetup: implement dynamic re-authentication and expire sessions via f3c606b docs-xml: document "server max protocol" SMB3 and SMB3_00 via 6aec0ce docs-xml: fix reference from "server min protocol" to "server max protocol" via 9146e56 selftest/Samba3: 'server max protocol = SMB3' via 9798149 lib/param: add "SMB3" as alias for PROTOCOL_SMB3_00 via 9854ed6 s3:smbd: remove now unused invalidate_all_vuids() via 77d1173 s3:smbd: remove now unused conn_close_all() via d693ff5 s3:smbd: use smbXsrv_session_logoff_all() and smb1srv_tcon_disconnect_all() in exit_server_common() via a129e27 s3:smbd: make use of smbXsrv_session for smb1 via faa8edc s3:smbd: make use of smbXsrv_tcon for smb1 via 463b308 s3:smbd: make use of smbXsrv_tcon and smbXsrv_session for smb2 via ef408e5 s3:smb2_sesssetup: add support for SMB 2.24/3.00 signing via 02d206e s3:smb2_sesssetup: make use of the smbXsrv_session infrastructure via 1fffd35 s3:smbXsrv_session: init and disconnect smbXsrv_tcon for SMB2/3 via c36bd67 s3:smbd: add smbXsrv_tcon infrastructure via 80f9abf s3:smbXsrv.idl: add smbXsrv_tcon* structures via f3dce4c sq smbXsrv_session_global_store no connection via 85f8c14 s3:smbd: add smbXsrv_session infrastructure via 5b3c07f s3:smbXsrv.idl: add smbXsrv_session* structures via 130436f s3:smbd: add smbXsrv_version_* infrastructure via e098060 s3:librpc/idl/smbXsrv.idl: add smbXsrv_version_* structures via 47ddfe2 s3:librpc: add smbXsrv.idl from cf244a1 s3:test: make shell code more porable by elimnating "local" keyword
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 5c31e5d553c9db748e0ca83b83bf9f0ca3261440 Author: Stefan Metzmacher <me...@samba.org> Date: Fri Jun 22 14:08:30 2012 +0200 s3:selftest: run SMB2-SESSION-RECONNECT metze Autobuild-User(master): Stefan Metzmacher <me...@samba.org> Autobuild-Date(master): Mon Jun 25 22:42:03 CEST 2012 on sn-devel-104 commit fbad41b1a4e8d7da59507c0e15ec2a04879925e8 Author: Stefan Metzmacher <me...@samba.org> Date: Fri Jun 22 14:26:42 2012 +0200 selftest/known: samba3.smb2.session.*reconnect passes now metze commit 45cd2bc2b33230b69eeaa6f82be6f7af36770f0a Author: Stefan Metzmacher <me...@samba.org> Date: Thu May 17 00:32:40 2012 +0200 s3:smb2_sesssetup: make use of smb2srv_session_close_previous_send/recv metze commit 299b63f8759c39cfda1d936dea154d085ca3264e Author: Stefan Metzmacher <me...@samba.org> Date: Mon May 14 16:17:49 2012 +0200 s3:smbXsrv_session: react on MSG_SMBXSRV_SESSION_CLOSE metze commit 8acf6c90bdf2a2888c99d5216ef99a63c512292f Author: Stefan Metzmacher <me...@samba.org> Date: Tue Apr 17 20:39:58 2012 +0200 s3:smbXsrv_session: add smb2srv_session_close_previous_send/recv metze commit 9f2c89cbeaf98ee5041156a525c561dbc9536a1f Author: Stefan Metzmacher <me...@samba.org> Date: Mon Jun 11 19:29:25 2012 +0200 s3:smbXsrv.idl: add smbXsrv_session_close* metze commit da40aa0e6839022f99786bd003bcd4ec587b4196 Author: Stefan Metzmacher <me...@samba.org> Date: Wed Apr 18 12:44:12 2012 +0200 s3:messaging.idl: define MSG_SMBXSRV_SESSION_CLOSE metze commit ed750694607827a3d35ad0980c3aad4a406108d0 Author: Stefan Metzmacher <me...@samba.org> Date: Thu May 17 00:30:43 2012 +0200 s3:smb2_sesssetup: inline gensec_session_info() call metze commit 1b8bcaeda3ea1b292c8b9a5a6c1a25e0d40aa2b6 Author: Stefan Metzmacher <me...@samba.org> Date: Wed May 16 16:05:48 2012 +0200 s3:smb2_sesssetup: make use of gensec_update_send/recv metze commit f32e99a0fc754916e611a90933b7874d7502db50 Author: Stefan Metzmacher <me...@samba.org> Date: Wed May 16 15:56:15 2012 +0200 s3:smb2_sesssetup: inline most of smbd_smb2_session_setup() metze commit ed96b397f74b3893e56065dd348fbcfd7a08fc50 Author: Stefan Metzmacher <me...@samba.org> Date: Fri Jun 22 12:11:43 2012 +0200 s3:selftest: run raw.session Note: raw.session.reauth2 still fails: failure: samba3.raw.session.reauth2(s3dc) [ _StringException: _StringException: ../source4/torture/raw/session.c:186: status was NT_STATUS_ACCESS_DENIED, expected NT_STATUS_OK: 2nd open failed But it's not critical as real clients won't reauth as anonymous. metze commit c0b9fa8b2cfdef6327bdb99de03a57a3b91c256f Author: Stefan Metzmacher <me...@samba.org> Date: Fri Jun 22 13:06:41 2012 +0200 s3:selftest: run rpc.samba3.smb-reauth1 and rpc.samba3.smb-reauth2 metze commit e77000259c9ccd8762f8b752555ff92c8fc41559 Author: Stefan Metzmacher <me...@samba.org> Date: Wed Apr 25 19:36:20 2012 +0200 s3:smbd/sesssetup: implement dynamic re-authentication and expire session if client supports it metze commit 842f1c85b67b7a621a1ed98260809be85300494c Author: Stefan Metzmacher <me...@samba.org> Date: Fri Jun 22 13:06:01 2012 +0200 s3:selftest: run smbtorture3 SMB2-SESSION-REAUTH metze commit ce2203762132391e8df117b89c9ad45b57c2143d Author: Stefan Metzmacher <me...@samba.org> Date: Fri Jun 22 13:03:16 2012 +0200 s3:selftest: run smb2.session as ntlm and krb5 This activates the smb2.session.expire1 test, when krb5 is used. metze commit 500e646e2d5ed7a10211ab2309f1f800560918e9 Author: Stefan Metzmacher <me...@samba.org> Date: Thu May 17 19:28:06 2012 +0200 selftest/knownfail: only reauth5 still fails metze commit d2e1058f42ad544dfeebfa80b4695cec6f46f00c Author: Stefan Metzmacher <me...@samba.org> Date: Mon May 14 14:24:08 2012 +0200 s3:smb2_sesssetup: implement dynamic re-authentication and expire sessions metze commit f3c606b13178c56bd82aaef2a3c022d2bf8b195b Author: Stefan Metzmacher <me...@samba.org> Date: Sun Jun 3 23:09:33 2012 +0200 docs-xml: document "server max protocol" SMB3 and SMB3_00 metze commit 6aec0ce288c36581d6e9911781892bc3dae5e674 Author: Stefan Metzmacher <me...@samba.org> Date: Sun Jun 3 23:12:57 2012 +0200 docs-xml: fix reference from "server min protocol" to "server max protocol" metze commit 9146e56ebb414f48739238f8eab17f8565f7efc9 Author: Stefan Metzmacher <me...@samba.org> Date: Fri May 18 10:43:18 2012 +0200 selftest/Samba3: 'server max protocol = SMB3' metze commit 97981491ebb282730045ac5f3bbc893805232cc3 Author: Stefan Metzmacher <me...@samba.org> Date: Sun Jun 3 23:03:54 2012 +0200 lib/param: add "SMB3" as alias for PROTOCOL_SMB3_00 metze commit 9854ed6d0115d4a4ef562ccf87b879082eb480bb Author: Stefan Metzmacher <me...@samba.org> Date: Sun Jun 3 17:02:16 2012 +0200 s3:smbd: remove now unused invalidate_all_vuids() Pair-Programmed-With: Michael Adam <ob...@samba.org> metze commit 77d1173aa2a74644ced83cd37ceb3481530670e6 Author: Michael Adam <ob...@samba.org> Date: Tue May 22 13:23:13 2012 +0200 s3:smbd: remove now unused conn_close_all() Pair-Programmed-With: Stefan Metzmacher <me...@samba.org> commit d693ff54dbb3fa7ab44034775de1609f419ac879 Author: Michael Adam <ob...@samba.org> Date: Tue May 22 13:18:06 2012 +0200 s3:smbd: use smbXsrv_session_logoff_all() and smb1srv_tcon_disconnect_all() in exit_server_common() This removes the use of conn_close_all() and invalidate_all_vuids() Pair-Programmed-With: Stefan Metzmacher <me...@samba.org> commit a129e271b5385853fb39a8e54b56b508b00a3e41 Author: Stefan Metzmacher <me...@samba.org> Date: Sun Apr 1 21:19:53 2012 +0200 s3:smbd: make use of smbXsrv_session for smb1 Pair-Programmed-With: Michael Adam <ob...@samba.org> metze commit faa8edccef556fb281d24b76b9739c994128f6ef Author: Stefan Metzmacher <me...@samba.org> Date: Wed Mar 28 16:14:09 2012 +0200 s3:smbd: make use of smbXsrv_tcon for smb1 Pair-Programmed-With: Michael Adam <ob...@samba.org> metze commit 463b308f16733b5a0bd896c46347d39064cee170 Author: Stefan Metzmacher <me...@samba.org> Date: Tue Mar 27 11:09:05 2012 +0200 s3:smbd: make use of smbXsrv_tcon and smbXsrv_session for smb2 The removes the protocol specific smbd_smb2_session and smbd_smb2_tcon. Pair-Programmed-With: Michael Adam <ob...@samba.org> metze commit ef408e5068255449eda9b4fc5c483713e91e560d Author: Stefan Metzmacher <me...@samba.org> Date: Fri Mar 16 15:01:27 2012 +0100 s3:smb2_sesssetup: add support for SMB 2.24/3.00 signing metze commit 02d206ee64d8b08d40204a948b696bf0b4156c5b Author: Stefan Metzmacher <me...@samba.org> Date: Fri Mar 16 15:01:27 2012 +0100 s3:smb2_sesssetup: make use of the smbXsrv_session infrastructure We still have smbd_smb2_session as primary structure, but that will went away once we got rid of smbd_smb2_tcon. metze commit 1fffd35692c58349267079f770ced1eb33201553 Author: Stefan Metzmacher <me...@samba.org> Date: Mon Jun 4 10:30:27 2012 +0200 s3:smbXsrv_session: init and disconnect smbXsrv_tcon for SMB2/3 metze commit c36bd677f325f052869418d3e74811e86567d206 Author: Stefan Metzmacher <me...@samba.org> Date: Fri Mar 16 16:32:28 2012 +0100 s3:smbd: add smbXsrv_tcon infrastructure Pair-Programmed-With: Michael Adam <ob...@samba.org> metze commit 80f9abf637c0959666b6d8d79dd8efb4115a1f3f Author: Stefan Metzmacher <me...@samba.org> Date: Fri Mar 16 16:18:40 2012 +0100 s3:smbXsrv.idl: add smbXsrv_tcon* structures struct smbXsrv_tcon will represent a SMB 1 or SMB 2 tree connect. It will replace 'struct smbd_smb2_tcon' and 'connection_struct' will be changed to handle just the protocol independent glue for the SMB_VFS layer. metze commit f3dce4cc9526840ec0d9b451b36e08525f06041b Author: Stefan Metzmacher <me...@samba.org> Date: Mon Jun 25 09:17:40 2012 +0200 sq smbXsrv_session_global_store no connection commit 85f8c14f3084121f58f31ebd11d80bfa01c8d6ce Author: Stefan Metzmacher <me...@samba.org> Date: Thu Dec 15 14:45:56 2011 +0100 s3:smbd: add smbXsrv_session infrastructure Pair-Programmed-With: Michael Adam <ob...@samba.org> metze commit 5b3c07fa898604791401050f1772844ef2ac622a Author: Stefan Metzmacher <me...@samba.org> Date: Thu Dec 15 14:45:56 2011 +0100 s3:smbXsrv.idl: add smbXsrv_session* structures struct smbXsrv_session will represent a SMB 1 or SMB 2 session. It will replace 'struct smbd_smb2_session' and 'user_struct' will be changed to handle just the protocol independent glue for the SMB_VFS layer. metze commit 130436f2fcb7926ad5b27b4255700082ee3ece76 Author: Stefan Metzmacher <me...@samba.org> Date: Tue May 8 16:01:21 2012 +0200 s3:smbd: add smbXsrv_version_* infrastructure metze commit e09806000b31a3653f44ec65eeaf94b961ebef7a Author: Stefan Metzmacher <me...@samba.org> Date: Tue May 8 15:57:22 2012 +0200 s3:librpc/idl/smbXsrv.idl: add smbXsrv_version_* structures metze commit 47ddfe2e59998b3184d6ac5ae8af8c46d58d1a6a Author: Stefan Metzmacher <me...@samba.org> Date: Thu Dec 15 14:45:56 2011 +0100 s3:librpc: add smbXsrv.idl metze ----------------------------------------------------------------------- Summary of changes: docs-xml/smbdotconf/protocol/servermaxprotocol.xml | 11 +- docs-xml/smbdotconf/protocol/serverminprotocol.xml | 2 +- lib/param/param_enums.c | 1 + librpc/wscript_build | 2 +- selftest/knownfail | 6 +- selftest/target/Samba3.pm | 2 +- source3/Makefile.in | 4 + source3/include/smb.h | 1 - source3/include/vfs.h | 1 + source3/librpc/idl/messaging.idl | 3 + source3/librpc/idl/smbXsrv.idl | 256 ++++ source3/librpc/idl/wscript_build | 4 +- source3/librpc/wscript_build | 5 + source3/selftest/tests.py | 8 +- source3/smbd/conn.c | 118 -- source3/smbd/conn_idle.c | 102 +- source3/smbd/files.c | 8 +- source3/smbd/globals.h | 110 +- source3/smbd/ipc.c | 24 +- source3/smbd/password.c | 200 --- source3/smbd/process.c | 86 +- source3/smbd/proto.h | 18 +- source3/smbd/reply.c | 84 +- source3/smbd/server.c | 18 +- source3/smbd/server_exit.c | 36 +- source3/smbd/service.c | 54 +- source3/smbd/sesssetup.c | 303 ++++- source3/smbd/smb2_close.c | 2 +- source3/smbd/smb2_create.c | 4 +- source3/smbd/smb2_find.c | 2 +- source3/smbd/smb2_getinfo.c | 2 +- source3/smbd/smb2_glue.c | 6 +- source3/smbd/smb2_notify.c | 2 +- source3/smbd/smb2_read.c | 2 +- source3/smbd/smb2_server.c | 133 ++- source3/smbd/smb2_sesssetup.c | 535 +++++--- source3/smbd/smb2_setinfo.c | 2 +- source3/smbd/smb2_tcon.c | 100 +- source3/smbd/smb2_write.c | 2 +- source3/smbd/smbXsrv_session.c | 1511 ++++++++++++++++++++ source3/smbd/smbXsrv_tcon.c | 1151 +++++++++++++++ source3/smbd/smbXsrv_version.c | 260 ++++ source3/wscript_build | 4 + 43 files changed, 4342 insertions(+), 843 deletions(-) create mode 100644 source3/librpc/idl/smbXsrv.idl create mode 100644 source3/smbd/smbXsrv_session.c create mode 100644 source3/smbd/smbXsrv_tcon.c create mode 100644 source3/smbd/smbXsrv_version.c Changeset truncated at 500 lines: diff --git a/docs-xml/smbdotconf/protocol/servermaxprotocol.xml b/docs-xml/smbdotconf/protocol/servermaxprotocol.xml index 459bce8..5eb79f3 100644 --- a/docs-xml/smbdotconf/protocol/servermaxprotocol.xml +++ b/docs-xml/smbdotconf/protocol/servermaxprotocol.xml @@ -47,10 +47,19 @@ <para><constant>SMB2_22</constant>: Early Windows 8 SMB2 version.</para> </listitem> <listitem> - <para><constant>SMB2_24</constant>: Windows 8 SMB2 version.</para> + <para><constant>SMB2_24</constant>: Windows 8 beta SMB2 version.</para> </listitem> </itemizedlist> <para>By default SMB2 selects the SMB2_02 varient.</para> + <listitem> + <para><constant>SMB3</constant>: The same as SMB2. + Used by Windows 8. SMB3 has sub protocols available.</para> + <itemizedlist> + <listitem> + <para><constant>SMB3_00</constant>: Windows 8 SMB3 version. (mostly the same as SMB2_24)</para> + </listitem> + </itemizedlist> + <para>By default SMB3 selects the SMB3_00 varient.</para> </listitem> </itemizedlist> diff --git a/docs-xml/smbdotconf/protocol/serverminprotocol.xml b/docs-xml/smbdotconf/protocol/serverminprotocol.xml index c72ae59..d313908 100644 --- a/docs-xml/smbdotconf/protocol/serverminprotocol.xml +++ b/docs-xml/smbdotconf/protocol/serverminprotocol.xml @@ -6,7 +6,7 @@ <description> <para>The value of the parameter (a string) is the lowest SMB protocol dialect than Samba will support. Please refer - to the <smbconfoption name="max protocol"/> + to the <smbconfoption name="server max protocol"/> parameter for a list of valid protocol names and a brief description of each. You may also wish to refer to the C source code in <filename moreinfo="none">source/smbd/negprot.c</filename> for a listing of known protocol diff --git a/lib/param/param_enums.c b/lib/param/param_enums.c index afcf2f0..baf1696 100644 --- a/lib/param/param_enums.c +++ b/lib/param/param_enums.c @@ -29,6 +29,7 @@ static const struct enum_list enum_protocol[] = { {PROTOCOL_SMB2_02, "SMB2"}, /* for now keep PROTOCOL_SMB2_02 */ + {PROTOCOL_SMB3_00, "SMB3"}, /* for now keep PROTOCOL_SMB3_00 */ {PROTOCOL_SMB3_00, "SMB3_00"}, {PROTOCOL_SMB2_24, "SMB2_24"}, {PROTOCOL_SMB2_22, "SMB2_22"}, diff --git a/librpc/wscript_build b/librpc/wscript_build index 46570ae..fbe0223 100644 --- a/librpc/wscript_build +++ b/librpc/wscript_build @@ -594,7 +594,7 @@ bld.SAMBA_LIBRARY('ndr-samba', source=[], deps='''NDR_DRSBLOBS NDR_DRSUAPI NDR_IDMAP NDR_NTLMSSP NDR_SCHANNEL NDR_MGMT NDR_DNSP NDR_EPMAPPER NDR_XATTR NDR_UNIXINFO NDR_NAMED_PIPE_AUTH NDR_DCOM - NDR_NTPRINTING NDR_FSRVP''', + NDR_NTPRINTING NDR_FSRVP NDR_OPEN_FILES NDR_SMBXSRV''', private_library=True, grouping_library=True ) diff --git a/selftest/knownfail b/selftest/knownfail index d7078d6..b888afc 100644 --- a/selftest/knownfail +++ b/selftest/knownfail @@ -19,6 +19,8 @@ ^samba3.smbtorture_s3.plain\(dc\).NTTRANS-FSCTL # Fails against the s4 ntvfs server ^samba3.smbtorture_s3.plain\(dc\).SMB2-NEGPROT # Fails against the s4 ntvfs server ^samba3.smbtorture_s3.plain\(dc\).BAD-NBT-SESSION # Fails against the s4 ntvfs server +^samba3.smbtorture_s3.plain\(dc\).SMB2-SESSION-REAUTH # Fails against the s4 ntvfs server +^samba3.smbtorture_s3.plain\(dc\).SMB2-SESSION-RECONNECT # Fails against the s4 ntvfs server ^samba3.nbt.dgram.*netlogon2\(s3dc\) ^samba3.*rap.sam.*.useradd # Not provided by Samba 3 ^samba3.*rap.sam.*.userdelete # Not provided by Samba 3 @@ -191,8 +193,8 @@ ^samba3.smb2.streams.attributes ^samba3.smb2.getinfo.getinfo ^samba3.smb2.setinfo.setinfo -^samba3.smb2.session.reconnect -^samba3.smb2.session.reauth +^samba3.smb2.session.*reauth5 # some special anonymous checks? +^samba3.raw.session.*reauth2 # maybe fix this? ^samba3.rpc.spoolss.printer.addprinter.driver_info_winreg # knownfail or flapping? ^samba3.rpc.spoolss.printer.addprinterex.driver_info_winreg # knownfail or flapping? # diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm index a84b4e1..5dfafe4 100755 --- a/selftest/target/Samba3.pm +++ b/selftest/target/Samba3.pm @@ -892,7 +892,7 @@ sub provision($$$$$$) # min receivefile size = 4000 - max protocol = SMB2 + server max protocol = SMB3 read only = no server signing = auto diff --git a/source3/Makefile.in b/source3/Makefile.in index abdeb72..4adbaa0 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -974,6 +974,10 @@ SMBD_OBJ_SRV = smbd/server_reload.o \ smbd/smb2_getinfo.o \ smbd/smb2_setinfo.o \ smbd/smb2_break.o \ + autoconf/librpc/gen_ndr/ndr_smbXsrv.o \ + smbd/smbXsrv_version.o \ + smbd/smbXsrv_session.o \ + smbd/smbXsrv_tcon.o \ $(MANGLE_OBJ) @VFS_STATIC@ SMBD_OBJ_BASE = $(PARAM_WITHOUT_REG_OBJ) $(SMBD_OBJ_SRV) $(LIBSMB_OBJ) \ diff --git a/source3/include/smb.h b/source3/include/smb.h index 1c05459..f58095e 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -673,7 +673,6 @@ enum acl_compatibility {ACL_COMPAT_AUTO, ACL_COMPAT_WINNT, ACL_COMPAT_WIN2K}; #define VUID_OFFSET 100 /* Amount to bias returned vuid numbers */ #define TID_FIELD_INVALID 0 -#define CNUM_OFFSET 1 /* shift for bitmap index */ #define FNUM_FIELD_INVALID 0 diff --git a/source3/include/vfs.h b/source3/include/vfs.h index e6a9ef4..bd66d34 100644 --- a/source3/include/vfs.h +++ b/source3/include/vfs.h @@ -280,6 +280,7 @@ struct share_params { typedef struct connection_struct { struct connection_struct *next, *prev; struct smbd_server_connection *sconn; /* can be NULL */ + struct smbXsrv_tcon0 *tcon; /* can be NULL */ uint32_t cnum; /* an index passed over the wire */ struct share_params *params; bool force_user; diff --git a/source3/librpc/idl/messaging.idl b/source3/librpc/idl/messaging.idl index 5493d75..df1f321 100644 --- a/source3/librpc/idl/messaging.idl +++ b/source3/librpc/idl/messaging.idl @@ -103,6 +103,9 @@ interface messaging /* event messages */ MSG_DUMP_EVENT_LIST = 0x0500, + /* smbXsrv messages */ + MSG_SMBXSRV_SESSION_CLOSE = 0x0600, + /* dbwrap messages 4001-4999 (0x0FA0 - 0x1387) */ /* MSG_DBWRAP_TDB2_CHANGES = 4001, */ MSG_DBWRAP_G_LOCK_RETRY = 4002, diff --git a/source3/librpc/idl/smbXsrv.idl b/source3/librpc/idl/smbXsrv.idl new file mode 100644 index 0000000..9d9f855 --- /dev/null +++ b/source3/librpc/idl/smbXsrv.idl @@ -0,0 +1,256 @@ +#include "idl_types.h" + +import "server_id.idl"; +import "security.idl"; +import "auth.idl"; + +/* + * The main server code should just work with + * 'struct smbXsrv_session' and never use + * smbXsrv_session0, smbXsrv_sessionU + * and smbXsrv_sessionB directly. + * + * If we need to change the smbXsrv_session, + * we can just point it to smbXsrv_session1 + * and could implement transparent mapping. + */ +cpp_quote("#define smbXsrv_session smbXsrv_session0") + +/* + * The main server code should just work with + * 'struct smbXsrv_tcon' and never use + * smbXsrv_tcon0, smbXsrv_tconU + * and smbXsrv_tconB directly. + * + * If we need to change the smbXsrv_tcon, + * we can just point it to smbXsrv_tcon1 + * and could implement transparent mapping. + */ +cpp_quote("#define smbXsrv_tcon smbXsrv_tcon0") + +[ + uuid("07408340-ae31-11e1-97dc-539f7fddc06f"), + version(0.0), + pointer_default(unique), + helpstring("smbXsrv structures") +] +interface smbXsrv +{ + /* + * smbXsrv_version* is designed to allow + * rolling code upgrades in future (within a cluster). + * + * This just adds the infrastructure, + * but we does not implement it yet! + * + * Currently it only prevents that + * nodes with a different version numbers + * cannot run at the same time. + * + * Each node checks at startup, if the version + * matches the version of all other nodes. + * And it exits if the version does not match + * to avoid corruption. + * + * While it would be possible to add versioning + * to each of our internal databases it is easier + * use a dedicated database "smbXsrv_version_global.tdb" + * to hold the global version information. + * + * This removes extra complexity from the individual + * databases and allows that we add/remove databases + * or use different indexing keys. + * + */ + typedef [v1_enum] enum { + /* + * NOTE: Version 0 is designed to be unstable and the format + * may change during development. + */ + SMBXSRV_VERSION_0 = 0x00000000 + } smbXsrv_version_values; + + const uint32 SMBXSRV_VERSION_CURRENT = SMBXSRV_VERSION_0; + + typedef struct { + server_id server_id; + smbXsrv_version_values min_version; + smbXsrv_version_values max_version; + smbXsrv_version_values current_version; + } smbXsrv_version_node0; + + typedef struct { + [ignore] db_record *db_rec; + [range(1, 1024)] uint32 num_nodes; + smbXsrv_version_node0 nodes[num_nodes]; + } smbXsrv_version_global0; + + typedef union { + [case(0)] smbXsrv_version_global0 *info0; + [default] hyper *dummy; + } smbXsrv_version_globalU; + + typedef [public] struct { + smbXsrv_version_values version; + uint32 seqnum; + [switch_is(version)] smbXsrv_version_globalU info; + } smbXsrv_version_globalB; + + void smbXsrv_version_global_decode( + [in] smbXsrv_version_globalB blob + ); + + /* sessions */ + + typedef struct { + server_id server_id; + [charset(UTF8),string] char local_address[]; + [charset(UTF8),string] char remote_address[]; + [charset(UTF8),string] char remote_name[]; + [noprint] DATA_BLOB signing_key; + uint32 auth_session_info_seqnum; + } smbXsrv_channel_global0; + + typedef struct { + [ignore] db_record *db_rec; + uint32 session_global_id; + hyper session_wire_id; + NTTIME creation_time; + NTTIME expiration_time; + /* + * auth_session is NULL until the + * session is valid for the first time. + */ + uint32 auth_session_info_seqnum; + auth_session_info *auth_session_info; + uint16 connection_dialect; + boolean8 signing_required; + boolean8 encryption_required; + [noprint] DATA_BLOB signing_key; + [noprint] DATA_BLOB encryption_key; + [noprint] DATA_BLOB decryption_key; + [noprint] DATA_BLOB application_key; + [range(1, 1024)] uint32 num_channels; + smbXsrv_channel_global0 channels[num_channels]; + } smbXsrv_session_global0; + + typedef union { + [case(0)] smbXsrv_session_global0 *info0; + [default] hyper *dummy; + } smbXsrv_session_globalU; + + typedef [public] struct { + smbXsrv_version_values version; + uint32 seqnum; + [switch_is(version)] smbXsrv_session_globalU info; + } smbXsrv_session_globalB; + + void smbXsrv_session_global_decode( + [in] smbXsrv_session_globalB blob + ); + + typedef struct { + [ignore] smbXsrv_session_table *table; + [ignore] db_record *db_rec; + [ignore] smbXsrv_connection *connection; + uint32 local_id; + [ref] smbXsrv_session_global0 *global; + NTSTATUS status; + NTTIME idle_time; + [ignore] gensec_security *gensec; + [ignore] user_struct *compat; + [ignore] smbXsrv_tcon_table *tcon_table; + } smbXsrv_session0; + + typedef union { + [case(0)] smbXsrv_session0 *info0; + [default] hyper *dummy; + } smbXsrv_sessionU; + + typedef [public] struct { + smbXsrv_version_values version; + [value(0)] uint32 reserved; + [switch_is(version)] smbXsrv_sessionU info; + } smbXsrv_sessionB; + + void smbXsrv_session_decode( + [in] smbXsrv_sessionB blob + ); + + /* + * smbXsrv_session_close is use in the MSG_SMBXSRV_SESSION_CLOSE + * message + */ + typedef struct { + uint32 old_session_global_id; + hyper old_session_wire_id; + NTTIME old_creation_time; + hyper new_session_wire_id; + } smbXsrv_session_close0; + + typedef union { + [case(0)] smbXsrv_session_close0 *info0; + [default] hyper *dummy; + } smbXsrv_session_closeU; + + typedef [public] struct { + smbXsrv_version_values version; + [value(0)] uint32 reserved; + [switch_is(version)] smbXsrv_session_closeU info; + } smbXsrv_session_closeB; + + void smbXsrv_session_close_decode( + [in] smbXsrv_session_closeB blob + ); + + /* tree connects */ + + typedef struct { + [ignore] db_record *db_rec; + uint32 tcon_global_id; + uint32 tcon_wire_id; + server_id server_id; + NTTIME creation_time; + [charset(UTF8),string] char share_name[]; + } smbXsrv_tcon_global0; + + typedef union { + [case(0)] smbXsrv_tcon_global0 *info0; + [default] hyper *dummy; + } smbXsrv_tcon_globalU; + + typedef [public] struct { + smbXsrv_version_values version; + uint32 seqnum; + [switch_is(version)] smbXsrv_tcon_globalU info; + } smbXsrv_tcon_globalB; + + void smbXsrv_tcon_global_decode( + [in] smbXsrv_tcon_globalB blob + ); + + typedef struct { + [ignore] smbXsrv_tcon_table *table; + [ignore] db_record *db_rec; + uint32 local_id; + [ref] smbXsrv_tcon_global0 *global; + NTSTATUS status; + NTTIME idle_time; + [ignore] connection_struct *compat; + } smbXsrv_tcon0; + + typedef union { + [case(0)] smbXsrv_tcon0 *info0; + [default] hyper *dummy; + } smbXsrv_tconU; + + typedef [public] struct { + smbXsrv_version_values version; + [value(0)] uint32 reserved; + [switch_is(version)] smbXsrv_tconU info; + } smbXsrv_tconB; + + void smbXsrv_tcon_decode( + [in] smbXsrv_tconB blob + ); +} diff --git a/source3/librpc/idl/wscript_build b/source3/librpc/idl/wscript_build index 949eecd..712108d 100644 --- a/source3/librpc/idl/wscript_build +++ b/source3/librpc/idl/wscript_build @@ -6,7 +6,9 @@ topinclude=os.path.join(bld.srcnode.abspath(), 'librpc/idl') bld.SAMBA_PIDL_LIST('PIDL', '''messaging.idl libnetapi.idl open_files.idl - perfcount.idl secrets.idl libnet_join.idl''', + perfcount.idl secrets.idl libnet_join.idl + smbXsrv.idl + ''', options='--includedir=%s --header --ndr-parser' % topinclude, output_dir='../gen_ndr') diff --git a/source3/librpc/wscript_build b/source3/librpc/wscript_build index ab4c23f..c0dc9b4 100644 --- a/source3/librpc/wscript_build +++ b/source3/librpc/wscript_build @@ -20,6 +20,11 @@ bld.SAMBA3_SUBSYSTEM('NDR_OPEN_FILES', public_deps='ndr NDR_SERVER_ID NDR_FILE_ID NDR_SECURITY' ) +bld.SAMBA3_SUBSYSTEM('NDR_SMBXSRV', + source='gen_ndr/ndr_smbXsrv.c', + public_deps='ndr NDR_SERVER_ID NDR_SECURITY NDR_AUTH' + ) + bld.SAMBA3_SUBSYSTEM('NDR_SECRETS', source='gen_ndr/ndr_secrets.c', public_deps='ndr' diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py index 4aedbf8..264f93a 100755 --- a/source3/selftest/tests.py +++ b/source3/selftest/tests.py @@ -87,6 +87,7 @@ tests=[ "FDPASS", "LOCK1", "LOCK2", "LOCK3", "LOCK4", "LOCK5", "LOCK6", "LOCK7", "CHAIN3", "GETADDRINFO", "UID-REGRESSION-TEST", "SHORTNAME-TEST", "CASE-INSENSITIVE-CREATE", "SMB2-BASIC", "NTTRANS-FSCTL", "SMB2-NEGPROT", + "SMB2-SESSION-REAUTH", "SMB2-SESSION-RECONNECT", "CLEANUP1", "CLEANUP2", "BAD-NBT-SESSION"] @@ -257,7 +258,7 @@ raw = ["raw.acls", "raw.chkpath", "raw.close", "raw.composite", "raw.context", " "raw.ioctl", "raw.lock", "raw.mkdir", "raw.mux", "raw.notify", "raw.open", "raw.oplock" "raw.qfileinfo", "raw.qfsinfo", "raw.read", "raw.rename", "raw.search", "raw.seek", "raw.sfileinfo.base", "raw.sfileinfo.bug", "raw.streams", "raw.unlink", "raw.write", - "raw.samba3hide", "raw.samba3badpath", "raw.sfileinfo.rename", + "raw.samba3hide", "raw.samba3badpath", "raw.sfileinfo.rename", "raw.session", "raw.samba3caseinsensitive", "raw.samba3posixtimedlock", "raw.samba3rootdirfid", "raw.sfileinfo.end-of-file", "raw.bench-oplock", "raw.bench-lock", "raw.bench-open", "raw.bench-tcon", @@ -270,6 +271,7 @@ rpc = ["rpc.authcontext", "rpc.samba3.bind", "rpc.samba3.srvsvc", "rpc.samba3.sh "rpc.samba3.getaliasmembership-0", "rpc.samba3.netlogon", "rpc.samba3.sessionkey", "rpc.samba3.getusername", "rpc.samba3.smb1-pipe-name", "rpc.samba3.smb2-pipe-name", + "rpc.samba3.smb-reauth1", "rpc.samba3.smb-reauth2", "rpc.svcctl", "rpc.ntsvcs", "rpc.winreg", "rpc.eventlog", "rpc.spoolss.printserver", "rpc.spoolss.win", "rpc.spoolss.notify", "rpc.spoolss.printer", "rpc.spoolss.driver", @@ -318,6 +320,10 @@ for t in tests: plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD') plansmbtorturetestsuite(t, "secshare", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD') plansmbtorturetestsuite(t, "plugin_s4_dc", '//$SERVER/tmp -U$USERNAME%$PASSWORD') + elif t == "raw.session" or t == "smb2.session": + plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD') + plansmbtorturetestsuite(t, "plugin_s4_dc", '//$SERVER/tmp -k no -U$USERNAME%$PASSWORD', 'ntlm') + plansmbtorturetestsuite(t, "plugin_s4_dc", '//$SERVER/tmp -k yes -U$USERNAME%$PASSWORD', 'krb5') else: plansmbtorturetestsuite(t, "s3dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD') plansmbtorturetestsuite(t, "plugin_s4_dc", '//$SERVER/tmp -U$USERNAME%$PASSWORD') diff --git a/source3/smbd/conn.c b/source3/smbd/conn.c index 399935a..28e1850 100644 --- a/source3/smbd/conn.c +++ b/source3/smbd/conn.c @@ -24,22 +24,6 @@ #include "smbd/globals.h" #include "lib/util/bitmap.h" -/* The connections bitmap is expanded in increments of BITMAP_BLOCK_SZ. The - * maximum size of the bitmap is the largest positive integer, but you will hit - * the "max connections" limit, looong before that. - */ - -#define BITMAP_BLOCK_SZ 128 -- Samba Shared Repository