get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.2/patches/814457/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 814457,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/814457/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-cifs-client/patch/CAH2r5ms2MG+QoS77v_skYCoRod98xEUmCs2osWJBQUZRAVLhgg@mail.gmail.com/",
    "project": {
        "id": 12,
        "url": "http://patchwork.ozlabs.org/api/1.2/projects/12/?format=api",
        "name": "Linux CIFS Client",
        "link_name": "linux-cifs-client",
        "list_id": "linux-cifs.vger.kernel.org",
        "list_email": "linux-cifs@vger.kernel.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<CAH2r5ms2MG+QoS77v_skYCoRod98xEUmCs2osWJBQUZRAVLhgg@mail.gmail.com>",
    "list_archive_url": null,
    "date": "2017-09-16T03:59:36",
    "name": "[CIFS] Multidialect protocol negotiation for cifs.ko",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "404117a1996005848cbb64e04ea5ec6b8c2e0e8e",
    "submitter": {
        "id": 510,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/510/?format=api",
        "name": "Steve French",
        "email": "smfrench@gmail.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-cifs-client/patch/CAH2r5ms2MG+QoS77v_skYCoRod98xEUmCs2osWJBQUZRAVLhgg@mail.gmail.com/mbox/",
    "series": [
        {
            "id": 3412,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/3412/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-cifs-client/list/?series=3412",
            "date": "2017-09-16T03:59:36",
            "name": "[CIFS] Multidialect protocol negotiation for cifs.ko",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/3412/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/814457/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/814457/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<linux-cifs-owner@vger.kernel.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org",
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=linux-cifs-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)",
            "ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"sjfONPss\"; dkim-atps=neutral"
        ],
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xvJSd3tvMz9t16\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat, 16 Sep 2017 14:00:01 +1000 (AEST)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751494AbdIPD77 (ORCPT <rfc822;incoming@patchwork.ozlabs.org>);\n\tFri, 15 Sep 2017 23:59:59 -0400",
            "from mail-pf0-f172.google.com ([209.85.192.172]:43854 \"EHLO\n\tmail-pf0-f172.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751451AbdIPD75 (ORCPT\n\t<rfc822; linux-cifs@vger.kernel.org>); Fri, 15 Sep 2017 23:59:57 -0400",
            "by mail-pf0-f172.google.com with SMTP id y29so2383023pff.0\n\tfor <linux-cifs@vger.kernel.org>;\n\tFri, 15 Sep 2017 20:59:57 -0700 (PDT)",
            "by 10.100.140.202 with HTTP; Fri, 15 Sep 2017 20:59:36 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=gmail.com; s=20161025;\n\th=mime-version:from:date:message-id:subject:to;\n\tbh=4vk+y3//jyRbRSn5KCKmDn0hoD6CZGFOvEGAQ9QiF8I=;\n\tb=sjfONPss++TyZZZIzd25seu42LgMGxQUOqXzF1yRhRxRnxhF923leZN29WZiJsqm0e\n\t/BZUTsk1vSvwWDp8RVJyIU2m9C4bfRn5zzCf4ybBWejAsjex+W1cKGN+kTc26f1Ifzdv\n\t5gxA6l4BAAgdFIjRruQ2Ztm5OErFX/J0d9IrxkmW6GvcGZ8HGBatWlO3DyzQCdZFJ0zt\n\tIHx67l6nD4bxrUMJ8MVlehHD0RClk9tpmUDFIKlTiRK2EJcAP7NfDrxBU0PizXoG50ql\n\tx87D+KPLwHR1LHlRYSJHI08e5MMeFbA/ud/43lIQDAUZdEkFNQmdC5hqXo+znl7I+7H/\n\tB5oQ==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:from:date:message-id:subject:to;\n\tbh=4vk+y3//jyRbRSn5KCKmDn0hoD6CZGFOvEGAQ9QiF8I=;\n\tb=Mb2YQfVWBNv3jg8zWL7gfIRTN24R5VwywsIIgYceVg+L2cLXuGMs6nO9RVRNtWn3Zv\n\tbMzUxTLRhQh80tvjl4brMZwU/W64U1T1/MvPupVHYpKusqq6nFHQPSYX4cRp2AAQHQnJ\n\tYBXzx16v8eaFMNHWhYxi7rWBl+1c3KMVJ/h6Q3PoDlzQlHFvh/2El3Zr5Czp1Gpf1DQH\n\tXxO8B86TtPxYwjB9Lb++Q+tPry7OTkg5UOrcFXsfMel5kSRF2orWqQXGx2GhNeZ8dZYu\n\td5hsK+E5X77pGgILQqIKSqU0SVIsfgEOYCi9GDLkH8LCcV0KDUT1U/7WKhvxarP1Ehpo\n\tr1GA==",
        "X-Gm-Message-State": "AHPjjUhuMeABJxYUQblWpMo5Js+FRpVkkqA2RQh9aBHa9eeBFUNsLjtI\n\tOyC6SquDXoRLF+BYWwkhOhlUUnYbaUHceF45+tQ+yp2Q",
        "X-Google-Smtp-Source": "ADKCNb4yrMM0P0u6kFgENXV/EQJd+IQfxLW5afVvq7y4OSCE+CjtPmB9P1btEhcqBYjcY4lxa7+U2eiTtRNE2CuC7p0=",
        "X-Received": "by 10.84.217.206 with SMTP id d14mr30470380plj.157.1505534397181;\n\tFri, 15 Sep 2017 20:59:57 -0700 (PDT)",
        "MIME-Version": "1.0",
        "From": "Steve French <smfrench@gmail.com>",
        "Date": "Fri, 15 Sep 2017 22:59:36 -0500",
        "Message-ID": "<CAH2r5ms2MG+QoS77v_skYCoRod98xEUmCs2osWJBQUZRAVLhgg@mail.gmail.com>",
        "Subject": "[CIFS] [PATCH] Multidialect protocol negotiation for cifs.ko",
        "To": "\"linux-cifs@vger.kernel.org\" <linux-cifs@vger.kernel.org>,\n\tsamba-technical <samba-technical@lists.samba.org>",
        "Content-Type": "multipart/mixed; boundary=\"f403045c612af1139f0559468afc\"",
        "Sender": "linux-cifs-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<linux-cifs.vger.kernel.org>",
        "X-Mailing-List": "linux-cifs@vger.kernel.org"
    },
    "content": "SMB2.1 or later dialect (instead of forcing only SMB3) for cifs.ko -\nmakes it easier if server is Windows 7 (last release dialect default\nwas upgraded from smb1/cifs to smb3 - but multidialect negotiation was\nnot supported until now)\n\nhttps://git.samba.org/?p=sfrench/cifs-2.6.git;a=commit;h=0e0f8ad440ac117685aeed4df16f320c7e9ac1c6\n\nor see attached",
    "diff": "From 0e0f8ad440ac117685aeed4df16f320c7e9ac1c6 Mon Sep 17 00:00:00 2001\nFrom: Steve French <smfrench@gmail.com>\nDate: Fri, 15 Sep 2017 22:51:15 -0500\nSubject: [PATCH] [SMB3] Add support for multidialect negotiation (SMB2.1 and\n later)\n\nWith the need to discourage use of less secure dialect, SMB1 (CIFS),\nwe temporarily upgraded the dialect to SMB3, but since there are\nvarious servers which only support SMB2.1 (still much secure than\nCIFS/SMB1) but not optimal for a default dialect - add support\nfor multidialect negotiation.  cifs.ko will now request SMB2.1\nor later (ie SMB2.1 or SMB3.0, SMB3.02) and the server will\npick the latest most secure one it can support.\n\nIn addition since we are sending multidialect negotiate, add\nsupport for secure negotiate to validate that a man in the\nmiddle didn't downgrade us.\n\nSigned-off-by: Steve French <smfrench@gmail.com>\n---\n fs/cifs/cifsglob.h |  6 ++++++\n fs/cifs/connect.c  | 23 ++++++++++++++++-------\n fs/cifs/smb2ops.c  | 40 ++++++++++++++++++++++++++++++++++++++++\n fs/cifs/smb2pdu.c  | 53 ++++++++++++++++++++++++++++++++++++++++++++++-------\n fs/cifs/smb2pdu.h  |  2 +-\n 5 files changed, 109 insertions(+), 15 deletions(-)\n\ndiff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h\nindex 808486c..ae4ffb1 100644\n--- a/fs/cifs/cifsglob.h\n+++ b/fs/cifs/cifsglob.h\n@@ -188,6 +188,8 @@ enum smb_version {\n #ifdef CONFIG_CIFS_SMB311\n \tSmb_311,\n #endif /* SMB311 */\n+\tSmb_3any,\n+\tSmb_default,\n \tSmb_version_err\n };\n \n@@ -1701,6 +1703,10 @@ extern struct smb_version_values smb20_values;\n #define SMB21_VERSION_STRING\t\"2.1\"\n extern struct smb_version_operations smb21_operations;\n extern struct smb_version_values smb21_values;\n+#define SMB3DEFAULT_VERSION_STRING \"default\"\n+extern struct smb_version_values smbdefault_values;\n+#define SMB3ANY_VERSION_STRING \"3\"\n+extern struct smb_version_values smb3any_values;\n #define SMB30_VERSION_STRING\t\"3.0\"\n extern struct smb_version_operations smb30_operations;\n extern struct smb_version_values smb30_values;\ndiff --git a/fs/cifs/connect.c b/fs/cifs/connect.c\nindex 5aa2d27..d353910 100644\n--- a/fs/cifs/connect.c\n+++ b/fs/cifs/connect.c\n@@ -301,6 +301,8 @@ static const match_table_t cifs_smb_version_tokens = {\n \t{ Smb_311, SMB311_VERSION_STRING },\n \t{ Smb_311, ALT_SMB311_VERSION_STRING },\n #endif /* SMB311 */\n+\t{ Smb_3any, SMB3ANY_VERSION_STRING },\n+\t{ Smb_default, SMB3DEFAULT_VERSION_STRING },\n \t{ Smb_version_err, NULL }\n };\n \n@@ -1148,6 +1150,14 @@ cifs_parse_smb_version(char *value, struct smb_vol *vol)\n \t\tvol->vals = &smb311_values;\n \t\tbreak;\n #endif /* SMB311 */\n+\tcase Smb_3any:\n+\t\tvol->ops = &smb30_operations; /* currently identical with 3.0 */\n+\t\tvol->vals = &smb3any_values;\n+\t\tbreak;\n+\tcase Smb_default:\n+\t\tvol->ops = &smb30_operations; /* currently identical with 3.0 */\n+\t\tvol->vals = &smbdefault_values;\n+\t\tbreak;\n \tdefault:\n \t\tcifs_dbg(VFS, \"Unknown vers= option specified: %s\\n\", value);\n \t\treturn 1;\n@@ -1274,9 +1284,9 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,\n \n \tvol->actimeo = CIFS_DEF_ACTIMEO;\n \n-\t/* FIXME: add autonegotiation for SMB3 or later rather than just SMB3 */\n-\tvol->ops = &smb30_operations; /* both secure and accepted widely */\n-\tvol->vals = &smb30_values;\n+\t/* offer SMB2.1 and later (SMB3 etc). Secure and widely accepted */\n+\tvol->ops = &smb30_operations;\n+\tvol->vals = &smbdefault_values;\n \n \tvol->echo_interval = SMB_ECHO_INTERVAL_DEFAULT;\n \n@@ -1988,11 +1998,10 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,\n \n \tif (got_version == false)\n \t\tpr_warn(\"No dialect specified on mount. Default has changed to \"\n-\t\t\t\"a more secure dialect, SMB3 (vers=3.0), from CIFS \"\n+\t\t\t\"a more secure dialect, SMB2.1 or later (e.g. SMB3), from CIFS \"\n \t\t\t\"(SMB1). To use the less secure SMB1 dialect to access \"\n-\t\t\t\"old servers which do not support SMB3 specify vers=1.0\"\n-\t\t\t\" on mount. For somewhat newer servers such as Windows \"\n-\t\t\t\"7 try vers=2.1.\\n\");\n+\t\t\t\"old servers which do not support SMB3 (or SMB2.1) specify vers=1.0\"\n+\t\t\t\" on mount.\\n\");\n \n \tkfree(mountdata_copy);\n \treturn 0;\ndiff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c\nindex fb2934b..7c1ab9f 100644\n--- a/fs/cifs/smb2ops.c\n+++ b/fs/cifs/smb2ops.c\n@@ -3110,6 +3110,46 @@ struct smb_version_values smb21_values = {\n \t.create_lease_size = sizeof(struct create_lease),\n };\n \n+struct smb_version_values smb3any_values = {\n+\t.version_string = SMB3ANY_VERSION_STRING,\n+\t.protocol_id = SMB302_PROT_ID, /* doesn't matter, send protocol array */\n+\t.req_capabilities = SMB2_GLOBAL_CAP_DFS | SMB2_GLOBAL_CAP_LEASING | SMB2_GLOBAL_CAP_LARGE_MTU | SMB2_GLOBAL_CAP_PERSISTENT_HANDLES | SMB2_GLOBAL_CAP_ENCRYPTION,\n+\t.large_lock_type = 0,\n+\t.exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE_LOCK,\n+\t.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,\n+\t.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,\n+\t.header_size = sizeof(struct smb2_hdr),\n+\t.max_header_size = MAX_SMB2_HDR_SIZE,\n+\t.read_rsp_size = sizeof(struct smb2_read_rsp) - 1,\n+\t.lock_cmd = SMB2_LOCK,\n+\t.cap_unix = 0,\n+\t.cap_nt_find = SMB2_NT_FIND,\n+\t.cap_large_files = SMB2_LARGE_FILES,\n+\t.signing_enabled = SMB2_NEGOTIATE_SIGNING_ENABLED | SMB2_NEGOTIATE_SIGNING_REQUIRED,\n+\t.signing_required = SMB2_NEGOTIATE_SIGNING_REQUIRED,\n+\t.create_lease_size = sizeof(struct create_lease_v2),\n+};\n+\n+struct smb_version_values smbdefault_values = {\n+\t.version_string = SMB3DEFAULT_VERSION_STRING,\n+\t.protocol_id = SMB302_PROT_ID, /* doesn't matter, send protocol array */\n+\t.req_capabilities = SMB2_GLOBAL_CAP_DFS | SMB2_GLOBAL_CAP_LEASING | SMB2_GLOBAL_CAP_LARGE_MTU | SMB2_GLOBAL_CAP_PERSISTENT_HANDLES | SMB2_GLOBAL_CAP_ENCRYPTION,\n+\t.large_lock_type = 0,\n+\t.exclusive_lock_type = SMB2_LOCKFLAG_EXCLUSIVE_LOCK,\n+\t.shared_lock_type = SMB2_LOCKFLAG_SHARED_LOCK,\n+\t.unlock_lock_type = SMB2_LOCKFLAG_UNLOCK,\n+\t.header_size = sizeof(struct smb2_hdr),\n+\t.max_header_size = MAX_SMB2_HDR_SIZE,\n+\t.read_rsp_size = sizeof(struct smb2_read_rsp) - 1,\n+\t.lock_cmd = SMB2_LOCK,\n+\t.cap_unix = 0,\n+\t.cap_nt_find = SMB2_NT_FIND,\n+\t.cap_large_files = SMB2_LARGE_FILES,\n+\t.signing_enabled = SMB2_NEGOTIATE_SIGNING_ENABLED | SMB2_NEGOTIATE_SIGNING_REQUIRED,\n+\t.signing_required = SMB2_NEGOTIATE_SIGNING_REQUIRED,\n+\t.create_lease_size = sizeof(struct create_lease_v2),\n+};\n+\n struct smb_version_values smb30_values = {\n \t.version_string = SMB30_VERSION_STRING,\n \t.protocol_id = SMB30_PROT_ID,\ndiff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c\nindex 69a751b..c32c394 100644\n--- a/fs/cifs/smb2pdu.c\n+++ b/fs/cifs/smb2pdu.c\n@@ -491,10 +491,25 @@ SMB2_negotiate(const unsigned int xid, struct cifs_ses *ses)\n \n \treq->hdr.sync_hdr.SessionId = 0;\n \n-\treq->Dialects[0] = cpu_to_le16(ses->server->vals->protocol_id);\n-\n-\treq->DialectCount = cpu_to_le16(1); /* One vers= at a time for now */\n-\tinc_rfc1001_len(req, 2);\n+\tif (strcmp(ses->server->vals->version_string,\n+\t\tSMB3ANY_VERSION_STRING) == 0) {\n+\t\treq->Dialects[0] = cpu_to_le16(SMB30_PROT_ID);\n+\t\treq->Dialects[1] = cpu_to_le16(SMB302_PROT_ID);\n+\t\treq->DialectCount = cpu_to_le16(2);\n+\t\tinc_rfc1001_len(req, 4);\n+\t} else if (strcmp(ses->server->vals->version_string,\n+\t\tSMB3DEFAULT_VERSION_STRING) == 0) {\n+\t\treq->Dialects[0] = cpu_to_le16(SMB21_PROT_ID);\n+\t\treq->Dialects[1] = cpu_to_le16(SMB30_PROT_ID);\n+\t\treq->Dialects[2] = cpu_to_le16(SMB302_PROT_ID);\n+\t\treq->DialectCount = cpu_to_le16(3);\n+\t\tinc_rfc1001_len(req, 6);\n+\t} else {\n+\t\t/* otherwise send specific dialect */\n+\t\treq->Dialects[0] = cpu_to_le16(ses->server->vals->protocol_id);\n+\t\treq->DialectCount = cpu_to_le16(1);\n+\t\tinc_rfc1001_len(req, 2);\n+\t}\n \n \t/* only one of SMB2 signing flags may be set in SMB2 request */\n \tif (ses->sign)\n@@ -558,6 +573,8 @@ SMB2_negotiate(const unsigned int xid, struct cifs_ses *ses)\n \t}\n \tserver->dialect = le16_to_cpu(rsp->DialectRevision);\n \n+\t/* BB: add check that dialect was valid given dialect(s) we asked for */\n+\n \t/* SMB2 only has an extended negflavor */\n \tserver->negflavor = CIFS_NEGFLAVOR_EXTENDED;\n \t/* set it to the maximum buffer size value we can send with 1 credit */\n@@ -606,6 +623,7 @@ int smb3_validate_negotiate(const unsigned int xid, struct cifs_tcon *tcon)\n \tstruct validate_negotiate_info_req vneg_inbuf;\n \tstruct validate_negotiate_info_rsp *pneg_rsp;\n \tu32 rsplen;\n+\tu32 inbuflen; /* max of 4 dialects */\n \n \tcifs_dbg(FYI, \"validate negotiate\\n\");\n \n@@ -634,9 +652,30 @@ int smb3_validate_negotiate(const unsigned int xid, struct cifs_tcon *tcon)\n \telse\n \t\tvneg_inbuf.SecurityMode = 0;\n \n-\tvneg_inbuf.DialectCount = cpu_to_le16(1);\n-\tvneg_inbuf.Dialects[0] =\n-\t\tcpu_to_le16(tcon->ses->server->vals->protocol_id);\n+\n+\tif (strcmp(tcon->ses->server->vals->version_string,\n+\t\tSMB3ANY_VERSION_STRING) == 0) {\n+\t\tvneg_inbuf.Dialects[0] = cpu_to_le16(SMB30_PROT_ID);\n+\t\tvneg_inbuf.Dialects[1] = cpu_to_le16(SMB302_PROT_ID);\n+\t\tvneg_inbuf.DialectCount = cpu_to_le16(2);\n+\t\t/* structure is big enough for 3 dialects, sending only 2 */\n+\t\tinbuflen = sizeof(struct validate_negotiate_info_req) - 2;\n+\t} else if (strcmp(tcon->ses->server->vals->version_string,\n+\t\tSMB3DEFAULT_VERSION_STRING) == 0) {\n+\t\tvneg_inbuf.Dialects[0] = cpu_to_le16(SMB21_PROT_ID);\n+\t\tvneg_inbuf.Dialects[1] = cpu_to_le16(SMB30_PROT_ID);\n+\t\tvneg_inbuf.Dialects[2] = cpu_to_le16(SMB302_PROT_ID);\n+\t\tvneg_inbuf.DialectCount = cpu_to_le16(3);\n+\t\t/* structure is big enough for 3 dialects */\n+\t\tinbuflen = sizeof(struct validate_negotiate_info_req);\n+\t} else {\n+\t\t/* otherwise specific dialect was requested */\n+\t\tvneg_inbuf.Dialects[0] =\n+\t\t\tcpu_to_le16(tcon->ses->server->vals->protocol_id);\n+\t\tvneg_inbuf.DialectCount = cpu_to_le16(1);\n+\t\t/* structure is big enough for 3 dialects, sending only 1 */\n+\t\tinbuflen = sizeof(struct validate_negotiate_info_req) - 4;\n+\t}\n \n \trc = SMB2_ioctl(xid, tcon, NO_FILE_ID, NO_FILE_ID,\n \t\tFSCTL_VALIDATE_NEGOTIATE_INFO, true /* is_fsctl */,\ndiff --git a/fs/cifs/smb2pdu.h b/fs/cifs/smb2pdu.h\nindex 393ed5f..6c9653a 100644\n--- a/fs/cifs/smb2pdu.h\n+++ b/fs/cifs/smb2pdu.h\n@@ -716,7 +716,7 @@ struct validate_negotiate_info_req {\n \t__u8   Guid[SMB2_CLIENT_GUID_SIZE];\n \t__le16 SecurityMode;\n \t__le16 DialectCount;\n-\t__le16 Dialects[1]; /* dialect (someday maybe list) client asked for */\n+\t__le16 Dialects[3]; /* BB expand this if autonegotiate > 3 dialects */\n } __packed;\n \n struct validate_negotiate_info_rsp {\n-- \n2.7.4\n\n",
    "prefixes": [
        "CIFS"
    ]
}