X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fvfs%2Facls.c;h=ac3e8bac6aa061b243f24a1eb416936a9d51f153;hb=975f0f89b7a643abd7cc463d788dad34ac014b65;hp=c0225caaacbb3360d2cbd00b01be3bb702d6b5f1;hpb=df7ea67ff0aa02ec50cee1f9635f989bad1bf90d;p=tpg%2Facess2.git diff --git a/Kernel/vfs/acls.c b/Kernel/vfs/acls.c index c0225caa..ac3e8bac 100644 --- a/Kernel/vfs/acls.c +++ b/Kernel/vfs/acls.c @@ -1,7 +1,7 @@ /* * Acess Micro VFS */ -#include +#include #include "vfs.h" #include "vfs_int.h" @@ -64,21 +64,15 @@ int VFS_GetACL(int FD, tVFS_ACL *Dest) int i; tVFS_Handle *h = VFS_GetHandle(FD); - ENTER("ph pDest", h, Dest); - // Error check if(!h) { - LEAVE('i', -1); return -1; } - LOG("h->Node = %p", h->Node); - // Root can do anything if(Dest->Group == 0 && Dest->ID == 0) { Dest->Inv = 0; Dest->Perms = -1; - LEAVE('i', 1); return 1; } @@ -86,7 +80,6 @@ int VFS_GetACL(int FD, tVFS_ACL *Dest) if( h->Node->NumACLs == 0 ) { Dest->Inv = 0; Dest->Perms = 0; - LEAVE('i', 0); return 0; } @@ -98,13 +91,55 @@ int VFS_GetACL(int FD, tVFS_ACL *Dest) Dest->Inv = h->Node->ACLs[i].Inv; Dest->Perms = h->Node->ACLs[i].Perms; - LEAVE('i', 1); return 1; } Dest->Inv = 0; Dest->Perms = 0; - LEAVE('i', 0); return 0; } + +/** + * \fn tVFS_ACL *VFS_UnixToAcessACL(Uint Mode, Uint Owner, Uint Group) + * \brief Converts UNIX permissions to three Acess ACL entries + */ +tVFS_ACL *VFS_UnixToAcessACL(Uint Mode, Uint Owner, Uint Group) +{ + tVFS_ACL *ret = malloc(sizeof(tVFS_ACL)*3); + + // Error Check + if(!ret) return NULL; + + // Owner + ret[0].Group = 0; ret[0].ID = Owner; + ret[0].Inv = 0; ret[0].Perms = 0; + if(Mode & 0400) ret[0].Perms |= VFS_PERM_READ; + if(Mode & 0200) ret[0].Perms |= VFS_PERM_WRITE; + if(Mode & 0100) ret[0].Perms |= VFS_PERM_EXECUTE; + + // Group + ret[1].Group = 1; ret[1].ID = Group; + ret[1].Inv = 0; ret[1].Perms = 0; + if(Mode & 0040) ret[1].Perms |= VFS_PERM_READ; + if(Mode & 0020) ret[1].Perms |= VFS_PERM_WRITE; + if(Mode & 0010) ret[1].Perms |= VFS_PERM_EXECUTE; + + // Global + ret[2].Group = 1; ret[2].ID = Group; + ret[2].Inv = 0; ret[2].Perms = 0; + if(Mode & 0004) ret[2].Perms |= VFS_PERM_READ; + if(Mode & 0002) ret[2].Perms |= VFS_PERM_WRITE; + if(Mode & 0001) ret[2].Perms |= VFS_PERM_EXECUTE; + + // Return buffer + return ret; +} + +// === EXPORTS === +// --- Variables --- +EXPORTV(gVFS_ACL_EveryoneRWX); +EXPORTV(gVFS_ACL_EveryoneRW); +EXPORTV(gVFS_ACL_EveryoneRX); +// --- Functions --- +EXPORT(VFS_UnixToAcessACL);