Multiuser, Capabilities and Access Controls (#54)
[lunaix-os.git] / lunaix-os / kernel / fs / iso9660 / inode.c
index 3b53b5c31dd49c2961c8e84a6919a72fa2c451a7..ab6a396e1000b2035a0522fece687c5bbf9a0e0e 100644 (file)
@@ -1,6 +1,6 @@
 #include <klibc/string.h>
-#include <lunaix/fs.h>
-#include <lunaix/fs/iso9660.h>
+#include <lunaix/fs/api.h>
+#include "iso9660.h"
 #include <lunaix/mm/cake.h>
 #include <lunaix/mm/valloc.h>
 #include <lunaix/spike.h>
@@ -14,9 +14,9 @@ static struct v_inode_ops iso_inode_ops = {
 
 static struct v_file_ops iso_file_ops = { .close = iso9660_close,
                                           .read = iso9660_read,
-                                          .read_page = iso9660_read,
+                                          .read_page = iso9660_read_page,
                                           .write = iso9660_write,
-                                          .write_page = iso9660_write,
+                                          .write_page = iso9660_write_page,
                                           .seek = iso9660_seek,
                                           .readdir = iso9660_readdir };
 
@@ -61,6 +61,7 @@ iso9660_fill_inode(struct v_inode* inode, struct iso_drecache* dir, int ino)
 
     inode->id = ino;
     inode->lb_addr = dir->extent_addr;
+    inode->lb_usage = ICEIL(dir->data_size, fu_len);
     inode->ops = &iso_inode_ops;
     inode->default_fops = &iso_file_ops;
 
@@ -86,10 +87,17 @@ iso9660_fill_inode(struct v_inode* inode, struct iso_drecache* dir, int ino)
         inode->ctime = iso9660_dt2unix(&xattr->ctime);
         inode->mtime = iso9660_dt2unix(&xattr->mtime);
 
+        fsapi_inode_setaccess(inode, xattr->perm);
+        fsapi_inode_setowner(inode, xattr->owner.le, xattr->group.le);
+
         inode->lb_addr += dir->xattr_len * dir->fu_size;
 
         vfree(xattr);
     }
+    else {
+        fsapi_inode_setaccess(inode, FSACL_u(R, W, _) | FSACL_g(R, W, _));
+        fsapi_inode_setowner(inode,  0, 0);
+    }
 
     inode->ctime = dir->ctime ? dir->ctime : inode->ctime;
     inode->mtime = dir->mtime ? dir->mtime : inode->mtime;