diff options
| -rw-r--r-- | fs/cifs/cifs_debug.c | 92 | ||||
| -rw-r--r-- | fs/cifs/cifssmb.c | 32 |
2 files changed, 29 insertions, 95 deletions
diff --git a/fs/cifs/cifs_debug.c b/fs/cifs/cifs_debug.c index ebd13358cca6..42fafa144f40 100644 --- a/fs/cifs/cifs_debug.c +++ b/fs/cifs/cifs_debug.c | |||
| @@ -901,90 +901,14 @@ security_flags_write(struct file *file, const char __user *buffer, | |||
| 901 | } | 901 | } |
| 902 | /* flags look ok - update the global security flags for cifs module */ | 902 | /* flags look ok - update the global security flags for cifs module */ |
| 903 | extended_security = flags; | 903 | extended_security = flags; |
| 904 | if (extended_security & CIFSSEC_MUST_SIGN) { | ||
| 905 | /* requiring signing implies signing is allowed */ | ||
| 906 | extended_security |= CIFSSEC_MAY_SIGN; | ||
| 907 | cFYI(1, ("packet signing now required")); | ||
| 908 | } else if ((extended_security & CIFSSEC_MAY_SIGN) == 0) { | ||
| 909 | cFYI(1, ("packet signing disabled")); | ||
| 910 | } | ||
| 911 | /* BB should we turn on MAY flags for other MUST options? */ | ||
| 904 | return count; | 912 | return count; |
| 905 | } | 913 | } |
| 906 | |||
| 907 | /* static int | ||
| 908 | ntlmv2_enabled_read(char *page, char **start, off_t off, | ||
| 909 | int count, int *eof, void *data) | ||
| 910 | { | ||
| 911 | int len; | ||
| 912 | |||
| 913 | len = sprintf(page, "%d\n", ntlmv2_support); | ||
| 914 | |||
| 915 | len -= off; | ||
| 916 | *start = page + off; | ||
| 917 | |||
| 918 | if (len > count) | ||
| 919 | len = count; | ||
| 920 | else | ||
| 921 | *eof = 1; | ||
| 922 | |||
| 923 | if (len < 0) | ||
| 924 | len = 0; | ||
| 925 | |||
| 926 | return len; | ||
| 927 | } | ||
| 928 | static int | ||
| 929 | ntlmv2_enabled_write(struct file *file, const char __user *buffer, | ||
| 930 | unsigned long count, void *data) | ||
| 931 | { | ||
| 932 | char c; | ||
| 933 | int rc; | ||
| 934 | |||
| 935 | rc = get_user(c, buffer); | ||
| 936 | if (rc) | ||
| 937 | return rc; | ||
| 938 | if (c == '0' || c == 'n' || c == 'N') | ||
| 939 | ntlmv2_support = 0; | ||
| 940 | else if (c == '1' || c == 'y' || c == 'Y') | ||
| 941 | ntlmv2_support = 1; | ||
| 942 | else if (c == '2') | ||
| 943 | ntlmv2_support = 2; | ||
| 944 | |||
| 945 | return count; | ||
| 946 | } | ||
| 947 | |||
| 948 | static int | ||
| 949 | packet_signing_enabled_read(char *page, char **start, off_t off, | ||
| 950 | int count, int *eof, void *data) | ||
| 951 | { | ||
| 952 | int len; | ||
| 953 | |||
| 954 | len = sprintf(page, "%d\n", sign_CIFS_PDUs); | ||
| 955 | |||
| 956 | len -= off; | ||
| 957 | *start = page + off; | ||
| 958 | |||
| 959 | if (len > count) | ||
| 960 | len = count; | ||
| 961 | else | ||
| 962 | *eof = 1; | ||
| 963 | |||
| 964 | if (len < 0) | ||
| 965 | len = 0; | ||
| 966 | |||
| 967 | return len; | ||
| 968 | } | ||
| 969 | static int | ||
| 970 | packet_signing_enabled_write(struct file *file, const char __user *buffer, | ||
| 971 | unsigned long count, void *data) | ||
| 972 | { | ||
| 973 | char c; | ||
| 974 | int rc; | ||
| 975 | |||
| 976 | rc = get_user(c, buffer); | ||
| 977 | if (rc) | ||
| 978 | return rc; | ||
| 979 | if (c == '0' || c == 'n' || c == 'N') | ||
| 980 | sign_CIFS_PDUs = 0; | ||
| 981 | else if (c == '1' || c == 'y' || c == 'Y') | ||
| 982 | sign_CIFS_PDUs = 1; | ||
| 983 | else if (c == '2') | ||
| 984 | sign_CIFS_PDUs = 2; | ||
| 985 | |||
| 986 | return count; | ||
| 987 | } */ | ||
| 988 | |||
| 989 | |||
| 990 | #endif | 914 | #endif |
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c index 57419a176688..4a2458e78784 100644 --- a/fs/cifs/cifssmb.c +++ b/fs/cifs/cifssmb.c | |||
| @@ -426,11 +426,11 @@ CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses) | |||
| 426 | 426 | ||
| 427 | /* if any of auth flags (ie not sign or seal) are overriden use them */ | 427 | /* if any of auth flags (ie not sign or seal) are overriden use them */ |
| 428 | if(ses->overrideSecFlg & (~(CIFSSEC_MUST_SIGN | CIFSSEC_MUST_SEAL))) | 428 | if(ses->overrideSecFlg & (~(CIFSSEC_MUST_SIGN | CIFSSEC_MUST_SEAL))) |
| 429 | secFlags = ses->overrideSecFlg; | 429 | secFlags = ses->overrideSecFlg; /* BB FIXME fix sign flags? */ |
| 430 | else /* if override flags set only sign/seal OR them with global auth */ | 430 | else /* if override flags set only sign/seal OR them with global auth */ |
| 431 | secFlags = extended_security | ses->overrideSecFlg; | 431 | secFlags = extended_security | ses->overrideSecFlg; |
| 432 | 432 | ||
| 433 | cFYI(1,("secFlags 0x%x",secFlags)); | 433 | cFYI(1, ("secFlags 0x%x", secFlags)); |
| 434 | 434 | ||
| 435 | pSMB->hdr.Mid = GetNextMid(server); | 435 | pSMB->hdr.Mid = GetNextMid(server); |
| 436 | pSMB->hdr.Flags2 |= (SMBFLG2_UNICODE | SMBFLG2_ERR_STATUS); | 436 | pSMB->hdr.Flags2 |= (SMBFLG2_UNICODE | SMBFLG2_ERR_STATUS); |
| @@ -633,22 +633,32 @@ CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses) | |||
| 633 | #ifdef CONFIG_CIFS_WEAK_PW_HASH | 633 | #ifdef CONFIG_CIFS_WEAK_PW_HASH |
| 634 | signing_check: | 634 | signing_check: |
| 635 | #endif | 635 | #endif |
| 636 | if(sign_CIFS_PDUs == FALSE) { | 636 | if ((secFlags & CIFSSEC_MAY_SIGN) == 0) { |
| 637 | /* MUST_SIGN already includes the MAY_SIGN FLAG | ||
| 638 | so if this is zero it means that signing is disabled */ | ||
| 639 | cFYI(1, ("Signing disabled")); | ||
| 637 | if(server->secMode & SECMODE_SIGN_REQUIRED) | 640 | if(server->secMode & SECMODE_SIGN_REQUIRED) |
| 638 | cERROR(1,("Server requires " | 641 | cERROR(1, ("Server requires " |
| 639 | "/proc/fs/cifs/PacketSigningEnabled to be on")); | 642 | "/proc/fs/cifs/PacketSigningEnabled " |
| 643 | "to be on")); | ||
| 640 | server->secMode &= | 644 | server->secMode &= |
| 641 | ~(SECMODE_SIGN_ENABLED | SECMODE_SIGN_REQUIRED); | 645 | ~(SECMODE_SIGN_ENABLED | SECMODE_SIGN_REQUIRED); |
| 642 | } else if(sign_CIFS_PDUs == 1) { | 646 | } else if ((secFlags & CIFSSEC_MUST_SIGN) == CIFSSEC_MUST_SIGN) { |
| 647 | /* signing required */ | ||
| 648 | cFYI(1, ("Must sign - segFlags 0x%x", secFlags)); | ||
| 649 | if ((server->secMode & | ||
| 650 | (SECMODE_SIGN_ENABLED | SECMODE_SIGN_REQUIRED)) == 0) { | ||
| 651 | cERROR(1, | ||
| 652 | ("signing required but server lacks support")); | ||
| 653 | } else | ||
| 654 | server->secMode |= SECMODE_SIGN_REQUIRED; | ||
| 655 | } else { | ||
| 656 | /* signing optional ie CIFSSEC_MAY_SIGN */ | ||
| 643 | if((server->secMode & SECMODE_SIGN_REQUIRED) == 0) | 657 | if((server->secMode & SECMODE_SIGN_REQUIRED) == 0) |
| 644 | server->secMode &= | 658 | server->secMode &= |
| 645 | ~(SECMODE_SIGN_ENABLED | SECMODE_SIGN_REQUIRED); | 659 | ~(SECMODE_SIGN_ENABLED | SECMODE_SIGN_REQUIRED); |
| 646 | } else if(sign_CIFS_PDUs == 2) { | ||
| 647 | if((server->secMode & | ||
| 648 | (SECMODE_SIGN_ENABLED | SECMODE_SIGN_REQUIRED)) == 0) { | ||
| 649 | cERROR(1,("signing required but server lacks support")); | ||
| 650 | } | ||
| 651 | } | 660 | } |
| 661 | |||
| 652 | neg_err_exit: | 662 | neg_err_exit: |
| 653 | cifs_buf_release(pSMB); | 663 | cifs_buf_release(pSMB); |
| 654 | 664 | ||
