Index: samba-3.0.24/source/include/smb.h =================================================================== --- samba-3.0.24.orig/source/include/smb.h 2007-02-08 15:27:50.000000000 -0600 +++ samba-3.0.24/source/include/smb.h 2007-02-08 15:31:14.000000000 -0600 @@ -1436,6 +1436,7 @@ #define FLAGS2_LONG_PATH_COMPONENTS 0x0001 #define FLAGS2_EXTENDED_ATTRIBUTES 0x0002 #define FLAGS2_SMB_SECURITY_SIGNATURES 0x0004 +#define FLAGS2_UNKNOWN_BIT4 0x0010 #define FLAGS2_IS_LONG_NAME 0x0040 #define FLAGS2_EXTENDED_SECURITY 0x0800 #define FLAGS2_DFS_PATHNAMES 0x1000 @@ -1499,7 +1500,8 @@ /* Remote architectures we know about. */ enum remote_arch_types {RA_UNKNOWN, RA_WFWG, RA_OS2, RA_WIN95, RA_WINNT, - RA_WIN2K, RA_WINXP, RA_WIN2K3, RA_SAMBA, RA_CIFSFS}; + RA_WIN2K, RA_WINXP, RA_WIN2K3, RA_VISTA, + RA_SAMBA, RA_CIFSFS}; /* case handling */ enum case_handling {CASE_LOWER,CASE_UPPER}; Index: samba-3.0.24/source/smbd/negprot.c =================================================================== --- samba-3.0.24.orig/source/smbd/negprot.c 2007-02-08 15:27:50.000000000 -0600 +++ samba-3.0.24/source/smbd/negprot.c 2007-02-08 15:42:10.000000000 -0600 @@ -263,6 +263,16 @@ global_encrypted_passwords_negotiated = lp_encrypted_passwords(); + /* Check the flags field to see if this is Vista. + WinXP sets it and Vista does not. But we have to + distinguish from NT which doesn't set it either. */ + + if ( (SVAL(inbuf, smb_flg2) & FLAGS2_EXTENDED_SECURITY) && + ((SVAL(inbuf, smb_flg2) & FLAGS2_UNKNOWN_BIT4) == 0) ) + { + set_remote_arch( RA_VISTA ); + } + /* do spnego in user level security if the client supports it and we can do encrypted passwords */ @@ -393,6 +403,15 @@ protocol [LANMAN2.1] protocol [NT LM 0.12] +Vista: +protocol [PC NETWORK PROGRAM 1.0] +protocol [LANMAN1.0] +protocol [Windows for Workgroups 3.1a] +protocol [LM1.2X002] +protocol [LANMAN2.1] +protocol [NT LM 0.12] +protocol [SMB 2.001] + OS/2: protocol [PC NETWORK PROGRAM 1.0] protocol [XENIX CORE] @@ -406,18 +425,19 @@ * * This appears to be the matrix of which protocol is used by which * MS product. - Protocol WfWg Win95 WinNT Win2K OS/2 - PC NETWORK PROGRAM 1.0 1 1 1 1 1 + Protocol WfWg Win95 WinNT Win2K OS/2 Vista + PC NETWORK PROGRAM 1.0 1 1 1 1 1 1 XENIX CORE 2 2 MICROSOFT NETWORKS 3.0 2 2 DOS LM1.2X002 3 3 MICROSOFT NETWORKS 1.03 3 DOS LANMAN2.1 4 4 - LANMAN1.0 4 2 3 - Windows for Workgroups 3.1a 5 5 5 3 - LM1.2X002 6 4 4 - LANMAN2.1 7 5 5 - NT LM 0.12 6 8 6 + LANMAN1.0 4 2 3 2 + Windows for Workgroups 3.1a 5 5 5 3 3 + LM1.2X002 6 4 4 4 + LANMAN2.1 7 5 5 5 + NT LM 0.12 6 8 6 6 + SMB 2.001 7 * * tim@fsg.com 09/29/95 * Win2K added by matty 17/7/99 @@ -430,6 +450,7 @@ #define ARCH_OS2 0x14 /* Again OS/2 is like NT */ #define ARCH_SAMBA 0x20 #define ARCH_CIFSFS 0x40 +#define ARCH_VISTA 0x8C /* Vista is like XP/2K */ #define ARCH_ALL 0x7F @@ -493,6 +514,8 @@ arch &= ( ARCH_WFWG | ARCH_WIN95 ); else if (strcsequal(p,"NT LM 0.12")) arch &= ( ARCH_WIN95 | ARCH_WINNT | ARCH_WIN2K | ARCH_CIFSFS); + else if (strcsequal(p,"SMB 2.001")) + arch = ARCH_VISTA; else if (strcsequal(p,"LANMAN2.1")) arch &= ( ARCH_WINNT | ARCH_WIN2K | ARCH_OS2 ); else if (strcsequal(p,"LM1.2X002")) @@ -537,7 +560,13 @@ set_remote_arch(RA_WINNT); break; case ARCH_WIN2K: - set_remote_arch(RA_WIN2K); + /* Vista may have been set in the negprot so don't + override it here */ + if ( get_remote_arch() != RA_VISTA ) + set_remote_arch(RA_WIN2K); + break; + case ARCH_VISTA: + set_remote_arch(RA_VISTA); break; case ARCH_OS2: set_remote_arch(RA_OS2); Index: samba-3.0.24/source/lib/util.c =================================================================== --- samba-3.0.24.orig/source/lib/util.c 2007-02-08 15:27:50.000000000 -0600 +++ samba-3.0.24/source/lib/util.c 2007-02-08 15:31:14.000000000 -0600 @@ -2182,6 +2182,9 @@ case RA_WIN2K3: fstrcpy(remote_arch, "Win2K3"); break; + case RA_VISTA: + fstrcpy(remote_arch, "Vista"); + break; case RA_SAMBA: fstrcpy(remote_arch,"Samba"); break;