diff options
Diffstat (limited to 'fs/cifs/cifs_debug.c')
-rw-r--r-- | fs/cifs/cifs_debug.c | 56 |
1 files changed, 40 insertions, 16 deletions
diff --git a/fs/cifs/cifs_debug.c b/fs/cifs/cifs_debug.c index 4e10e21c54fd..7c0015a96959 100644 --- a/fs/cifs/cifs_debug.c +++ b/fs/cifs/cifs_debug.c | |||
@@ -445,8 +445,8 @@ static read_proc_t traceSMB_read; | |||
445 | static write_proc_t traceSMB_write; | 445 | static write_proc_t traceSMB_write; |
446 | static read_proc_t multiuser_mount_read; | 446 | static read_proc_t multiuser_mount_read; |
447 | static write_proc_t multiuser_mount_write; | 447 | static write_proc_t multiuser_mount_write; |
448 | static read_proc_t extended_security_read; | 448 | static read_proc_t security_flags_read; |
449 | static write_proc_t extended_security_write; | 449 | static write_proc_t security_flags_write; |
450 | /* static read_proc_t ntlmv2_enabled_read; | 450 | /* static read_proc_t ntlmv2_enabled_read; |
451 | static write_proc_t ntlmv2_enabled_write; | 451 | static write_proc_t ntlmv2_enabled_write; |
452 | static read_proc_t packet_signing_enabled_read; | 452 | static read_proc_t packet_signing_enabled_read; |
@@ -509,9 +509,9 @@ cifs_proc_init(void) | |||
509 | 509 | ||
510 | pde = | 510 | pde = |
511 | create_proc_read_entry("SecurityFlags", 0, proc_fs_cifs, | 511 | create_proc_read_entry("SecurityFlags", 0, proc_fs_cifs, |
512 | extended_security_read, NULL); | 512 | security_flags_read, NULL); |
513 | if (pde) | 513 | if (pde) |
514 | pde->write_proc = extended_security_write; | 514 | pde->write_proc = security_flags_write; |
515 | 515 | ||
516 | pde = | 516 | pde = |
517 | create_proc_read_entry("LookupCacheEnabled", 0, proc_fs_cifs, | 517 | create_proc_read_entry("LookupCacheEnabled", 0, proc_fs_cifs, |
@@ -832,7 +832,7 @@ multiuser_mount_write(struct file *file, const char __user *buffer, | |||
832 | } | 832 | } |
833 | 833 | ||
834 | static int | 834 | static int |
835 | extended_security_read(char *page, char **start, off_t off, | 835 | security_flags_read(char *page, char **start, off_t off, |
836 | int count, int *eof, void *data) | 836 | int count, int *eof, void *data) |
837 | { | 837 | { |
838 | int len; | 838 | int len; |
@@ -853,26 +853,50 @@ extended_security_read(char *page, char **start, off_t off, | |||
853 | return len; | 853 | return len; |
854 | } | 854 | } |
855 | static int | 855 | static int |
856 | extended_security_write(struct file *file, const char __user *buffer, | 856 | security_flags_write(struct file *file, const char __user *buffer, |
857 | unsigned long count, void *data) | 857 | unsigned long count, void *data) |
858 | { | 858 | { |
859 | unsigned int flags; | ||
860 | char flags_string[12]; | ||
859 | char c; | 861 | char c; |
860 | int rc; | 862 | |
861 | cERROR(1,("size %ld",count)); /* BB removeme BB */ | 863 | cERROR(1,("size %ld",count)); /* BB removeme BB */ |
862 | if((count < 2) || (count > 8)) | 864 | |
865 | if((count < 1) || (count > 11)) | ||
863 | return -EINVAL; | 866 | return -EINVAL; |
864 | 867 | ||
865 | rc = get_user(c, buffer); | 868 | memset(flags_string, 0, 12); |
866 | 869 | ||
867 | /* BB fixme need to parse more characters in order to handle CIFSSEC flags */ | 870 | if(copy_from_user(flags_string, buffer, count)) |
871 | return -EFAULT; | ||
868 | 872 | ||
869 | if (rc) | 873 | if(count < 3) { |
870 | return rc; | 874 | /* single char or single char followed by null */ |
871 | if (c == '0' || c == 'n' || c == 'N') | 875 | c = flags_string[0]; |
872 | extended_security = CIFSSEC_DEF; /* default */ | 876 | if (c == '0' || c == 'n' || c == 'N') |
873 | else if (c == '1' || c == 'y' || c == 'Y') | 877 | extended_security = CIFSSEC_DEF; /* default */ |
874 | extended_security = CIFSSEC_MAX; | 878 | else if (c == '1' || c == 'y' || c == 'Y') |
879 | extended_security = CIFSSEC_MAX; | ||
880 | return count; | ||
881 | } | ||
882 | /* else we have a number */ | ||
883 | |||
884 | flags = simple_strtoul(flags_string, NULL, 0); | ||
885 | |||
886 | cERROR(1,("sec flags 0x%x", flags)); /* BB FIXME make cFYI */ | ||
887 | |||
888 | if(flags <= 0) { | ||
889 | cERROR(1,("invalid security flags %s",flags_string)); | ||
890 | return -EINVAL; | ||
891 | } | ||
875 | 892 | ||
893 | if((flags & CIFSSEC_MASK) != CIFSSEC_MASK) { | ||
894 | cERROR(1,("attempt to set unsupported security flags 0x%d", | ||
895 | flags & ~CIFSSEC_MASK)); | ||
896 | return -EINVAL; | ||
897 | } | ||
898 | /* flags look ok - update the global security flags for cifs module */ | ||
899 | extended_security = flags; | ||
876 | return count; | 900 | return count; |
877 | } | 901 | } |
878 | 902 | ||