[PATCH] udf: fix uid/gid options and add uid/gid=ignore and forget options
As Pekka Enberg pointed out, with the if still following the else, you can still get a null uid written to the disk if you specify a default uid= without uid=forget. In other words, if the desktop user is uid=1000 and the mount option uid=1000 is given ( which is done on ubuntu automatically and probably other distributions that use hal ), then if any other user besides uid 1000 owns a file then a 0 will be written to the media as the owning uid instead. Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
11b0b5abb2
commit
0e6b3e5e97
2 changed files with 16 additions and 4 deletions
|
@ -26,6 +26,20 @@ The following mount options are supported:
|
||||||
nostrict Unset strict conformance
|
nostrict Unset strict conformance
|
||||||
iocharset= Set the NLS character set
|
iocharset= Set the NLS character set
|
||||||
|
|
||||||
|
The uid= and gid= options need a bit more explaining. They will accept a
|
||||||
|
decimal numeric value which will be used as the default ID for that mount.
|
||||||
|
They will also accept the string "ignore" and "forget". For files on the disk
|
||||||
|
that are owned by nobody ( -1 ), they will instead look as if they are owned
|
||||||
|
by the default ID. The ignore option causes the default ID to override all
|
||||||
|
IDs on the disk, not just -1. The forget option causes all IDs to be written
|
||||||
|
to disk as -1, so when the media is later remounted, they will appear to be
|
||||||
|
owned by whatever default ID it is mounted with at that time.
|
||||||
|
|
||||||
|
For typical desktop use of removable media, you should set the ID to that
|
||||||
|
of the interactively logged on user, and also specify both the forget and
|
||||||
|
ignore options. This way the interactive user will always see the files
|
||||||
|
on the disk as belonging to him.
|
||||||
|
|
||||||
The remaining are for debugging and disaster recovery:
|
The remaining are for debugging and disaster recovery:
|
||||||
|
|
||||||
novrs Skip volume sequence recognition
|
novrs Skip volume sequence recognition
|
||||||
|
|
|
@ -1341,13 +1341,11 @@ udf_update_inode(struct inode *inode, int do_sync)
|
||||||
|
|
||||||
if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_FORGET))
|
if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_FORGET))
|
||||||
fe->uid = cpu_to_le32(-1);
|
fe->uid = cpu_to_le32(-1);
|
||||||
else if (inode->i_uid != UDF_SB(inode->i_sb)->s_uid)
|
else fe->uid = cpu_to_le32(inode->i_uid);
|
||||||
fe->uid = cpu_to_le32(inode->i_uid);
|
|
||||||
|
|
||||||
if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_FORGET))
|
if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_FORGET))
|
||||||
fe->gid = cpu_to_le32(-1);
|
fe->gid = cpu_to_le32(-1);
|
||||||
else if (inode->i_gid != UDF_SB(inode->i_sb)->s_gid)
|
else fe->gid = cpu_to_le32(inode->i_gid);
|
||||||
fe->gid = cpu_to_le32(inode->i_gid);
|
|
||||||
|
|
||||||
udfperms = ((inode->i_mode & S_IRWXO) ) |
|
udfperms = ((inode->i_mode & S_IRWXO) ) |
|
||||||
((inode->i_mode & S_IRWXG) << 2) |
|
((inode->i_mode & S_IRWXG) << 2) |
|
||||||
|
|
Loading…
Reference in a new issue