diff options
| author | Phillip Susi <psusi@cfl.rr.com> | 2006-03-25 06:08:14 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-25 11:23:00 -0500 |
| commit | 0e6b3e5e97e2e8a25bcfc528dad94edf5220dfeb (patch) | |
| tree | de537ca068cd7fc2a1d20a47f16c9091cf4c64ff | |
| parent | 11b0b5abb2097a63c1081d9b7e825b987b227972 (diff) | |
[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>
| -rw-r--r-- | Documentation/filesystems/udf.txt | 14 | ||||
| -rw-r--r-- | fs/udf/inode.c | 6 |
2 files changed, 16 insertions, 4 deletions
diff --git a/Documentation/filesystems/udf.txt b/Documentation/filesystems/udf.txt index e5213bc301f7..511b4230c053 100644 --- a/Documentation/filesystems/udf.txt +++ b/Documentation/filesystems/udf.txt | |||
| @@ -26,6 +26,20 @@ The following mount options are supported: | |||
| 26 | nostrict Unset strict conformance | 26 | nostrict Unset strict conformance |
| 27 | iocharset= Set the NLS character set | 27 | iocharset= Set the NLS character set |
| 28 | 28 | ||
| 29 | The uid= and gid= options need a bit more explaining. They will accept a | ||
| 30 | decimal numeric value which will be used as the default ID for that mount. | ||
| 31 | They will also accept the string "ignore" and "forget". For files on the disk | ||
| 32 | that are owned by nobody ( -1 ), they will instead look as if they are owned | ||
| 33 | by the default ID. The ignore option causes the default ID to override all | ||
| 34 | IDs on the disk, not just -1. The forget option causes all IDs to be written | ||
| 35 | to disk as -1, so when the media is later remounted, they will appear to be | ||
| 36 | owned by whatever default ID it is mounted with at that time. | ||
| 37 | |||
| 38 | For typical desktop use of removable media, you should set the ID to that | ||
| 39 | of the interactively logged on user, and also specify both the forget and | ||
| 40 | ignore options. This way the interactive user will always see the files | ||
| 41 | on the disk as belonging to him. | ||
| 42 | |||
| 29 | The remaining are for debugging and disaster recovery: | 43 | The remaining are for debugging and disaster recovery: |
| 30 | 44 | ||
| 31 | novrs Skip volume sequence recognition | 45 | novrs Skip volume sequence recognition |
diff --git a/fs/udf/inode.c b/fs/udf/inode.c index d04cff2273b6..81e0e8459af1 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c | |||
| @@ -1341,13 +1341,11 @@ udf_update_inode(struct inode *inode, int do_sync) | |||
| 1341 | 1341 | ||
| 1342 | if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_FORGET)) | 1342 | if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_UID_FORGET)) |
| 1343 | fe->uid = cpu_to_le32(-1); | 1343 | fe->uid = cpu_to_le32(-1); |
| 1344 | else if (inode->i_uid != UDF_SB(inode->i_sb)->s_uid) | 1344 | else fe->uid = cpu_to_le32(inode->i_uid); |
| 1345 | fe->uid = cpu_to_le32(inode->i_uid); | ||
| 1346 | 1345 | ||
| 1347 | if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_FORGET)) | 1346 | if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_GID_FORGET)) |
| 1348 | fe->gid = cpu_to_le32(-1); | 1347 | fe->gid = cpu_to_le32(-1); |
| 1349 | else if (inode->i_gid != UDF_SB(inode->i_sb)->s_gid) | 1348 | else fe->gid = cpu_to_le32(inode->i_gid); |
| 1350 | fe->gid = cpu_to_le32(inode->i_gid); | ||
| 1351 | 1349 | ||
| 1352 | udfperms = ((inode->i_mode & S_IRWXO) ) | | 1350 | udfperms = ((inode->i_mode & S_IRWXO) ) | |
| 1353 | ((inode->i_mode & S_IRWXG) << 2) | | 1351 | ((inode->i_mode & S_IRWXG) << 2) | |
