diff options
-rw-r--r-- | fs/cifs/cifsglob.h | 2 | ||||
-rw-r--r-- | fs/cifs/connect.c | 26 |
2 files changed, 19 insertions, 9 deletions
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h index 8fb1d10b874..7b91cb4f0da 100644 --- a/fs/cifs/cifsglob.h +++ b/fs/cifs/cifsglob.h | |||
@@ -37,7 +37,7 @@ | |||
37 | #define MAX_SHARE_SIZE 64 /* used to be 20, this should still be enough */ | 37 | #define MAX_SHARE_SIZE 64 /* used to be 20, this should still be enough */ |
38 | #define MAX_USERNAME_SIZE 32 /* 32 is to allow for 15 char names + null | 38 | #define MAX_USERNAME_SIZE 32 /* 32 is to allow for 15 char names + null |
39 | termination then *2 for unicode versions */ | 39 | termination then *2 for unicode versions */ |
40 | #define MAX_PASSWORD_SIZE 16 | 40 | #define MAX_PASSWORD_SIZE 512 /* max for windows seems to be 256 wide chars */ |
41 | 41 | ||
42 | #define CIFS_MIN_RCV_POOL 4 | 42 | #define CIFS_MIN_RCV_POOL 4 |
43 | 43 | ||
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index b24e4cea4e3..b2063ce113e 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c | |||
@@ -1644,17 +1644,27 @@ out_err: | |||
1644 | } | 1644 | } |
1645 | 1645 | ||
1646 | static struct cifsSesInfo * | 1646 | static struct cifsSesInfo * |
1647 | cifs_find_smb_ses(struct TCP_Server_Info *server, char *username) | 1647 | cifs_find_smb_ses(struct TCP_Server_Info *server, struct smb_vol *vol) |
1648 | { | 1648 | { |
1649 | struct list_head *tmp; | ||
1650 | struct cifsSesInfo *ses; | 1649 | struct cifsSesInfo *ses; |
1651 | 1650 | ||
1652 | write_lock(&cifs_tcp_ses_lock); | 1651 | write_lock(&cifs_tcp_ses_lock); |
1653 | list_for_each(tmp, &server->smb_ses_list) { | 1652 | list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) { |
1654 | ses = list_entry(tmp, struct cifsSesInfo, smb_ses_list); | 1653 | switch (server->secType) { |
1655 | if (strncmp(ses->userName, username, MAX_USERNAME_SIZE)) | 1654 | case Kerberos: |
1656 | continue; | 1655 | if (vol->linux_uid != ses->linux_uid) |
1657 | 1656 | continue; | |
1657 | break; | ||
1658 | default: | ||
1659 | /* anything else takes username/password */ | ||
1660 | if (strncmp(ses->userName, vol->username, | ||
1661 | MAX_USERNAME_SIZE)) | ||
1662 | continue; | ||
1663 | if (strlen(vol->username) != 0 && | ||
1664 | strncmp(ses->password, vol->password, | ||
1665 | MAX_PASSWORD_SIZE)) | ||
1666 | continue; | ||
1667 | } | ||
1658 | ++ses->ses_count; | 1668 | ++ses->ses_count; |
1659 | write_unlock(&cifs_tcp_ses_lock); | 1669 | write_unlock(&cifs_tcp_ses_lock); |
1660 | return ses; | 1670 | return ses; |
@@ -1696,7 +1706,7 @@ cifs_get_smb_ses(struct TCP_Server_Info *server, struct smb_vol *volume_info) | |||
1696 | 1706 | ||
1697 | xid = GetXid(); | 1707 | xid = GetXid(); |
1698 | 1708 | ||
1699 | ses = cifs_find_smb_ses(server, volume_info->username); | 1709 | ses = cifs_find_smb_ses(server, volume_info); |
1700 | if (ses) { | 1710 | if (ses) { |
1701 | cFYI(1, "Existing smb sess found (status=%d)", ses->status); | 1711 | cFYI(1, "Existing smb sess found (status=%d)", ses->status); |
1702 | 1712 | ||