* [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.