All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH] HFSPlus: fix mount uid/gid bug
@ 2007-06-20 21:15 Wyatt Banks
  0 siblings, 0 replies; only message in thread
From: Wyatt Banks @ 2007-06-20 21:15 UTC (permalink / raw)
  To: linux-kernel

From:	Wyatt Banks <wyatt@banksresearch.com>

HFSPlus: fix broken logic for mount uid=xxx,gid=xxx. (bug 3533)

Signed-off-by	Wyatt Banks <wyatt@banksresearch.com>

---

Patched against 2.6.21.5

Tested on an x86 machine with USB hard drive formatted by a
PowerPC Mac.

This is a patch to address bug 3533.

The 2 lines that should be setting the uid/gid:

if (!inode->i_uid && !mode)
if (!inode->i_gid && !mode)

always evaluate as false.  mode is the BSD file type and mode bits.
These lines do nothing since the file type bits are not masked off
with S_IFMT.

References:

http://bugzilla.kernel.org/show_bug.cgi?id=3533
http://developer.apple.com/technotes/tn/tn1150.html


diff -uprN -X linux-2.6.21.5/Documentation/dontdiff linux-2.6.21.5/fs/hfsplus/hfsplus_fs.h linux-2.6.21.5-devel/fs/hfsplus/hfsplus_fs.h
--- linux-2.6.21.5/fs/hfsplus/hfsplus_fs.h	2007-06-11 14:37:06.000000000 -0400
+++ linux-2.6.21.5-devel/fs/hfsplus/hfsplus_fs.h	2007-06-16 23:35:43.000000000 -0400
@@ -139,6 +139,8 @@ struct hfsplus_sb_info {
	uid_t uid;
	gid_t gid;

+	int uid_provided, gid_provided;
+
	int part, session;

	unsigned long flags;
diff -uprN -X linux-2.6.21.5/Documentation/dontdiff linux-2.6.21.5/fs/hfsplus/inode.c linux-2.6.21.5-devel/fs/hfsplus/inode.c
--- linux-2.6.21.5/fs/hfsplus/inode.c	2007-06-11 14:37:06.000000000 -0400
+++ linux-2.6.21.5-devel/fs/hfsplus/inode.c	2007-06-18 20:11:18.000000000 -0400
@@ -181,11 +181,11 @@ static void hfsplus_get_perms(struct ino
	mode = be16_to_cpu(perms->mode);

	inode->i_uid = be32_to_cpu(perms->owner);
-	if (!inode->i_uid && !mode)
+	if (HFSPLUS_SB(sb).uid_provided)
		inode->i_uid = HFSPLUS_SB(sb).uid;

	inode->i_gid = be32_to_cpu(perms->group);
-	if (!inode->i_gid && !mode)
+	if (HFSPLUS_SB(sb).gid_provided)
		inode->i_gid = HFSPLUS_SB(sb).gid;

	if (dir) {
diff -uprN -X linux-2.6.21.5/Documentation/dontdiff linux-2.6.21.5/fs/hfsplus/options.c linux-2.6.21.5-devel/fs/hfsplus/options.c
--- linux-2.6.21.5/fs/hfsplus/options.c	2007-06-11 14:37:06.000000000 -0400
+++ linux-2.6.21.5-devel/fs/hfsplus/options.c	2007-06-16 23:36:30.000000000 -0400
@@ -106,6 +106,7 @@ int hfsplus_parse_options(char *input, s
				return 0;
			}
			sbi->uid = (uid_t)tmp;
+			sbi->uid_provided = 1;
			break;
		case opt_gid:
			if (match_int(&args[0], &tmp)) {
@@ -113,6 +114,7 @@ int hfsplus_parse_options(char *input, s
				return 0;
			}
			sbi->gid = (gid_t)tmp;
+			sbi->gid_provided = 1;
			break;
		case opt_part:
			if (match_int(&args[0], &sbi->part)) {
	

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2007-06-20 21:16 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-06-20 21:15 [RFC PATCH] HFSPlus: fix mount uid/gid bug Wyatt Banks

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.