Commit 86262279 authored by Pavel Shilovsky's avatar Pavel Shilovsky

Update 2.6.34 sources from stable (v2.6.34.13)

parent 2e8e3946
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
#define MAX_SHARE_SIZE 64 /* used to be 20, this should still be enough */ #define MAX_SHARE_SIZE 64 /* used to be 20, this should still be enough */
#define MAX_USERNAME_SIZE 32 /* 32 is to allow for 15 char names + null #define MAX_USERNAME_SIZE 32 /* 32 is to allow for 15 char names + null
termination then *2 for unicode versions */ termination then *2 for unicode versions */
#define MAX_PASSWORD_SIZE 16 #define MAX_PASSWORD_SIZE 512 /* max for windows seems to be 256 wide chars */
#define CIFS_MIN_RCV_POOL 4 #define CIFS_MIN_RCV_POOL 4
......
...@@ -3761,7 +3761,8 @@ int CIFSFindNext(const int xid, struct cifsTconInfo *tcon, ...@@ -3761,7 +3761,8 @@ int CIFSFindNext(const int xid, struct cifsTconInfo *tcon,
T2_FNEXT_RSP_PARMS *parms; T2_FNEXT_RSP_PARMS *parms;
char *response_data; char *response_data;
int rc = 0; int rc = 0;
int bytes_returned, name_len; int bytes_returned;
unsigned int name_len;
__u16 params, byte_count; __u16 params, byte_count;
cFYI(1, ("In FindNext")); cFYI(1, ("In FindNext"));
......
...@@ -1627,17 +1627,29 @@ out_err: ...@@ -1627,17 +1627,29 @@ out_err:
} }
static struct cifsSesInfo * static struct cifsSesInfo *
cifs_find_smb_ses(struct TCP_Server_Info *server, char *username) cifs_find_smb_ses(struct TCP_Server_Info *server, struct smb_vol *vol)
{ {
struct list_head *tmp;
struct cifsSesInfo *ses; struct cifsSesInfo *ses;
write_lock(&cifs_tcp_ses_lock); write_lock(&cifs_tcp_ses_lock);
list_for_each(tmp, &server->smb_ses_list) { list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) {
ses = list_entry(tmp, struct cifsSesInfo, smb_ses_list); switch (server->secType) {
if (strncmp(ses->userName, username, MAX_USERNAME_SIZE)) case Kerberos:
continue; if (vol->linux_uid != ses->linux_uid)
continue;
break;
default:
/* anything else takes username/password */
if (strncmp(ses->userName, vol->username,
MAX_USERNAME_SIZE))
continue;
if (strlen(vol->username) != 0 &&
ses->password != NULL &&
strncmp(ses->password,
vol->password ? vol->password : "",
MAX_PASSWORD_SIZE))
continue;
}
++ses->ses_count; ++ses->ses_count;
write_unlock(&cifs_tcp_ses_lock); write_unlock(&cifs_tcp_ses_lock);
return ses; return ses;
...@@ -2415,7 +2427,7 @@ try_mount_again: ...@@ -2415,7 +2427,7 @@ try_mount_again:
goto out; goto out;
} }
pSesInfo = cifs_find_smb_ses(srvTcp, volume_info->username); pSesInfo = cifs_find_smb_ses(srvTcp, volume_info);
if (pSesInfo) { if (pSesInfo) {
cFYI(1, ("Existing smb sess found (status=%d)", cFYI(1, ("Existing smb sess found (status=%d)",
pSesInfo->status)); pSesInfo->status));
......
...@@ -695,10 +695,26 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry, ...@@ -695,10 +695,26 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
* If either that or op not supported returned, follow * If either that or op not supported returned, follow
* the normal lookup. * the normal lookup.
*/ */
if ((rc == 0) || (rc == -ENOENT)) switch (rc) {
case 0:
/*
* The server may allow us to open things like
* FIFOs, but the client isn't set up to deal
* with that. If it's not a regular file, just
* close it and proceed as if it were a normal
* lookup.
*/
if (newInode && !S_ISREG(newInode->i_mode)) {
CIFSSMBClose(xid, pTcon, fileHandle);
break;
}
case -ENOENT:
posix_open = true; posix_open = true;
else if ((rc == -EINVAL) || (rc != -EOPNOTSUPP)) case -EOPNOTSUPP:
break;
default:
pTcon->broken_posix_open = true; pTcon->broken_posix_open = true;
}
} }
if (!posix_open) if (!posix_open)
rc = cifs_get_inode_info_unix(&newInode, full_path, rc = cifs_get_inode_info_unix(&newInode, full_path,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment