Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 54a696bd authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6: (31 commits)
  [CIFS] Remove redundant test
  [CIFS] make sure that DFS pathnames are properly formed
  Remove an already-checked error condition in SendReceiveBlockingLock
  Streamline SendReceiveBlockingLock: Use "goto out:" in an error condition
  Streamline SendReceiveBlockingLock: Use "goto out:" in an error condition
  [CIFS] Streamline SendReceive[2] by using "goto out:" in an error condition
  Slightly streamline SendReceive[2]
  Check the return value of cifs_sign_smb[2]
  [CIFS] Cleanup: Move the check for too large R/W requests
  [CIFS] Slightly simplify wait_for_free_request(), remove an unnecessary "else" branch
  Simplify allocate_mid() slightly: Remove some unnecessary "else" branches
  [CIFS] In SendReceive, move consistency check out of the mutexed region
  cifs: store password in tcon
  cifs: have calc_lanman_hash take more granular args
  cifs: zero out session password before freeing it
  cifs: fix wait_for_response to time out sleeping processes correctly
  [CIFS] Can not mount with prefixpath if root directory of share is inaccessible
  [CIFS] various minor cleanups pointed out by checkpatch script
  [CIFS] fix typo
  [CIFS] remove sparse warning
  ...

Fix trivial conflict in fs/cifs/cifs_fs_sb.h due to comment changes for
the CIFS_MOUNT_xyz bit definitions between cifs updates and security
updates.
parents 1d248b25 359d67d6
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -36,7 +36,9 @@ Miklos Szeredi
Kazeon team for various fixes especially for 2.4 version.
Kazeon team for various fixes especially for 2.4 version.
Asser Ferno (Change Notify support)
Asser Ferno (Change Notify support)
Shaggy (Dave Kleikamp) for inumerable small fs suggestions and some good cleanup
Shaggy (Dave Kleikamp) for inumerable small fs suggestions and some good cleanup
Gunter Kukkukk (testing and suggestions for support of old servers)
Igor Mammedov (DFS support)
Igor Mammedov (DFS support)
Jeff Layton (many, many fixes, as well as great work on the cifs Kerberos code)


Test case and Bug Report contributors
Test case and Bug Report contributors
-------------------------------------
-------------------------------------
+9 −0
Original line number Original line Diff line number Diff line
Version 1.56
------------
Add "forcemandatorylock" mount option to allow user to use mandatory
rather than posix (advisory) byte range locks, even though server would
support posix byte range locks.  Fix query of root inode when prefixpath
specified and user does not have access to query information about the
top of the share.  Fix problem in 2.6.28 resolving DFS paths to
Samba servers (worked to Windows).

Version 1.55
Version 1.55
------------
------------
Various fixes to make delete of open files behavior more predictable
Various fixes to make delete of open files behavior more predictable
+11 −1
Original line number Original line Diff line number Diff line
@@ -463,9 +463,19 @@ A partial list of the supported mount options follows:
		with cifs style mandatory byte range locks (and most
		with cifs style mandatory byte range locks (and most
		cifs servers do not yet support requesting advisory
		cifs servers do not yet support requesting advisory
		byte range locks).
		byte range locks).
 forcemandatorylock Even if the server supports posix (advisory) byte range
		locking, send only mandatory lock requests.  For some
		(presumably rare) applications, originally coded for
		DOS/Windows, which require Windows style mandatory byte range
		locking, they may be able to take advantage of this option,
		forcing the cifs client to only send mandatory locks
		even if the cifs server would support posix advisory locks.
		"forcemand" is accepted as a shorter form of this mount
		option.
 nodfs          Disable DFS (global name space support) even if the
 nodfs          Disable DFS (global name space support) even if the
		server claims to support it.  This can help work around
		server claims to support it.  This can help work around
		a problem with parsing of DFS paths with Samba 3.0.24 server.
		a problem with parsing of DFS paths with Samba server
		versions 3.0.24 and 3.0.25.
 remount        remount the share (often used to change from ro to rw mounts
 remount        remount the share (often used to change from ro to rw mounts
	        or vice versa)
	        or vice versa)
 cifsacl        Report mode bits (e.g. on stat) based on the Windows ACL for
 cifsacl        Report mode bits (e.g. on stat) based on the Windows ACL for
+36 −12
Original line number Original line Diff line number Diff line
@@ -122,7 +122,7 @@ static char *compose_mount_options(const char *sb_mountdata,
				   char **devname)
				   char **devname)
{
{
	int rc;
	int rc;
	char *mountdata;
	char *mountdata = NULL;
	int md_len;
	int md_len;
	char *tkn_e;
	char *tkn_e;
	char *srvIP = NULL;
	char *srvIP = NULL;
@@ -136,10 +136,9 @@ static char *compose_mount_options(const char *sb_mountdata,
	*devname = cifs_get_share_name(ref->node_name);
	*devname = cifs_get_share_name(ref->node_name);
	rc = dns_resolve_server_name_to_ip(*devname, &srvIP);
	rc = dns_resolve_server_name_to_ip(*devname, &srvIP);
	if (rc != 0) {
	if (rc != 0) {
		cERROR(1, ("%s: Failed to resolve server part of %s to IP",
		cERROR(1, ("%s: Failed to resolve server part of %s to IP: %d",
			  __func__, *devname));
			  __func__, *devname, rc));;
		mountdata = ERR_PTR(rc);
		goto compose_mount_options_err;
		goto compose_mount_options_out;
	}
	}
	/* md_len = strlen(...) + 12 for 'sep+prefixpath='
	/* md_len = strlen(...) + 12 for 'sep+prefixpath='
	 * assuming that we have 'unc=' and 'ip=' in
	 * assuming that we have 'unc=' and 'ip=' in
@@ -149,8 +148,8 @@ static char *compose_mount_options(const char *sb_mountdata,
		strlen(ref->node_name) + 12;
		strlen(ref->node_name) + 12;
	mountdata = kzalloc(md_len+1, GFP_KERNEL);
	mountdata = kzalloc(md_len+1, GFP_KERNEL);
	if (mountdata == NULL) {
	if (mountdata == NULL) {
		mountdata = ERR_PTR(-ENOMEM);
		rc = -ENOMEM;
		goto compose_mount_options_out;
		goto compose_mount_options_err;
	}
	}


	/* copy all options except of unc,ip,prefixpath */
	/* copy all options except of unc,ip,prefixpath */
@@ -197,18 +196,32 @@ static char *compose_mount_options(const char *sb_mountdata,


	/* find & copy prefixpath */
	/* find & copy prefixpath */
	tkn_e = strchr(ref->node_name + 2, '\\');
	tkn_e = strchr(ref->node_name + 2, '\\');
	if (tkn_e == NULL) /* invalid unc, missing share name*/
	if (tkn_e == NULL) {
		goto compose_mount_options_out;
		/* invalid unc, missing share name*/
		rc = -EINVAL;
		goto compose_mount_options_err;
	}


	/*
	 * this function gives us a path with a double backslash prefix. We
	 * require a single backslash for DFS. Temporarily increment fullpath
	 * to put it in the proper form and decrement before freeing it.
	 */
	fullpath = build_path_from_dentry(dentry);
	fullpath = build_path_from_dentry(dentry);
	if (!fullpath) {
		rc = -ENOMEM;
		goto compose_mount_options_err;
	}
	++fullpath;
	tkn_e = strchr(tkn_e + 1, '\\');
	tkn_e = strchr(tkn_e + 1, '\\');
	if (tkn_e || strlen(fullpath) - (ref->path_consumed)) {
	if (tkn_e || (strlen(fullpath) - ref->path_consumed)) {
		strncat(mountdata, &sep, 1);
		strncat(mountdata, &sep, 1);
		strcat(mountdata, "prefixpath=");
		strcat(mountdata, "prefixpath=");
		if (tkn_e)
		if (tkn_e)
			strcat(mountdata, tkn_e + 1);
			strcat(mountdata, tkn_e + 1);
		strcat(mountdata, fullpath + (ref->path_consumed));
		strcat(mountdata, fullpath + ref->path_consumed);
	}
	}
	--fullpath;
	kfree(fullpath);
	kfree(fullpath);


	/*cFYI(1,("%s: parent mountdata: %s", __func__,sb_mountdata));*/
	/*cFYI(1,("%s: parent mountdata: %s", __func__,sb_mountdata));*/
@@ -217,6 +230,11 @@ static char *compose_mount_options(const char *sb_mountdata,
compose_mount_options_out:
compose_mount_options_out:
	kfree(srvIP);
	kfree(srvIP);
	return mountdata;
	return mountdata;

compose_mount_options_err:
	kfree(mountdata);
	mountdata = ERR_PTR(rc);
	goto compose_mount_options_out;
}
}




@@ -309,13 +327,19 @@ cifs_dfs_follow_mountpoint(struct dentry *dentry, struct nameidata *nd)
		goto out_err;
		goto out_err;
	}
	}


	/*
	 * The MSDFS spec states that paths in DFS referral requests and
	 * responses must be prefixed by a single '\' character instead of
	 * the double backslashes usually used in the UNC. This function
	 * gives us the latter, so we must adjust the result.
	 */
	full_path = build_path_from_dentry(dentry);
	full_path = build_path_from_dentry(dentry);
	if (full_path == NULL) {
	if (full_path == NULL) {
		rc = -ENOMEM;
		rc = -ENOMEM;
		goto out_err;
		goto out_err;
	}
	}


	rc = get_dfs_path(xid, ses , full_path, cifs_sb->local_nls,
	rc = get_dfs_path(xid, ses , full_path + 1, cifs_sb->local_nls,
		&num_referrals, &referrals,
		&num_referrals, &referrals,
		cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);
		cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);


+3 −2
Original line number Original line Diff line number Diff line
@@ -31,6 +31,7 @@
#define CIFS_MOUNT_OVERR_UID    0x400 /* override uid returned from server    */
#define CIFS_MOUNT_OVERR_UID    0x400 /* override uid returned from server    */
#define CIFS_MOUNT_OVERR_GID    0x800 /* override gid returned from server    */
#define CIFS_MOUNT_OVERR_GID    0x800 /* override gid returned from server    */
#define CIFS_MOUNT_DYNPERM      0x1000 /* allow in-memory only mode setting   */
#define CIFS_MOUNT_DYNPERM      0x1000 /* allow in-memory only mode setting   */
#define CIFS_MOUNT_NOPOSIXBRL   0x2000 /* mandatory not posix byte range lock */


struct cifs_sb_info {
struct cifs_sb_info {
	struct cifsTconInfo *tcon;	/* primary mount */
	struct cifsTconInfo *tcon;	/* primary mount */
Loading