--- source3/include/smb.h.orig 2016-07-27 13:09:58.000000000 +0000 +++ source3/include/smb.h 2016-09-09 09:46:43.989298379 +0000 @@ -528,7 +528,7 @@ /* Remote architectures we know about, keep in sync with remote_arch_strings */ enum remote_arch_types {RA_UNKNOWN, RA_WFWG, RA_OS2, RA_WIN95, RA_WINNT, - RA_WIN2K, RA_WINXP, RA_WIN2K3, RA_VISTA, + RA_WIN2K, RA_WINXP, RA_WIN2K3, RA_VISTA, RA_WIN7, RA_WIN8, RA_WIN81, RA_WIN10, RA_SAMBA, RA_CIFSFS, RA_WINXP64, RA_OSX}; /* --- source3/lib/util.c.orig 2016-09-09 09:45:32.950101541 +0000 +++ source3/lib/util.c 2016-09-09 09:45:43.926445661 +0000 @@ -1271,6 +1271,10 @@ [RA_WINXP] = "WinXP", [RA_WIN2K3] = "Win2K3", [RA_VISTA] = "Vista", + [RA_WIN7] = "Win7", + [RA_WIN8] = "Win8", + [RA_WIN81] = "Win8.1", + [RA_WIN10] = "Win10", [RA_SAMBA] = "Samba", [RA_CIFSFS] = "CIFSFS", [RA_WINXP64] = "WinXP64", --- source3/smbd/smb2_negprot.c.orig 2016-07-27 13:09:58.000000000 +0000 +++ source3/smbd/smb2_negprot.c 2016-09-09 09:46:43.989298379 +0000 @@ -195,6 +195,8 @@ dialect_count, &dialect); + enum protocol_types protocol_max = protocol; + for (c=0; protocol == PROTOCOL_NONE && c < dialect_count; c++) { if (lp_server_max_protocol() < PROTOCOL_SMB2_10) { break; @@ -273,13 +275,22 @@ } switch (get_remote_arch()) { - case RA_VISTA: case RA_SAMBA: case RA_CIFSFS: case RA_OSX: break; default: - set_remote_arch(RA_VISTA); + if (protocol_max < PROTOCOL_SMB2_10) { + set_remote_arch(RA_VISTA); + } else if (protocol_max < PROTOCOL_SMB2_22) { + set_remote_arch(RA_WIN7); + } else if (protocol_max < PROTOCOL_SMB3_02) { + set_remote_arch(RA_WIN8); + } else if (protocol_max < PROTOCOL_SMB3_10) { + set_remote_arch(RA_WIN81); + } else { + set_remote_arch(RA_WIN10); + } break; }