-o uid=<> on rock ridge cdroms

Marty Leisner (leisner@sdsp.mc.xerox.com)
Tue, 28 May 1996 09:17:39 PDT


I wanted to set uid on improperly mastered rockridge cdroms
(files with r------- are a problem when their owned by some
arbitrary user).

Its against pre2.07

Thanks to Eric Youngdale
for pointing out how to do this...

It works if you specify
uid=!0
in the mount options

(seems reasonable, otherwise I need to have a means to determine if uid isn't
initialized to 0).

--- fs/isofs/inode.c 1996/05/26 20:23:01 1.1
+++ fs/isofs/inode.c 1996/05/28 13:08:43
@@ -455,6 +455,17 @@
return (inode->u.isofs_i.i_first_extent >> ISOFS_BUFFER_BITS(inode)) + block;
}

+
+static void test_and_set_uid(uid_t *p, uid_t value)
+{
+ if(value) {
+ *p = value;
+#if 0
+ printk("Resetting to %d\n", value);
+#endif
+ }
+}
+
void isofs_read_inode(struct inode * inode)
{
unsigned long bufsize = ISOFS_BUFFER_SIZE(inode);
@@ -593,8 +604,11 @@
/* Now test for possible Rock Ridge extensions which will override some of
these numbers in the inode structure. */

- if (!high_sierra)
+ if (!high_sierra) {
parse_rock_ridge_inode(raw_inode, inode);
+ /* hmm..if we want uid or gid set, override the rock ridge setting */
+ test_and_set_uid(&inode->i_uid, inode->i_sb->u.isofs_sb.s_uid);
+ }

#ifdef DEBUG
printk("Inode: %x extent: %x\n",inode->i_ino, inode->u.isofs_i.i_first_extent);

marty leisner@sdsp.mc.xerox.com
Member of the League for Programming Freedom (http://www.lpf.org)
Any sufficiently advanced technology is indistinguishable from magic
Arthur C. Clarke, The Lost Worlds of 2001