Operation: chmod


Require Export DACandMAC.

Require Export setACLdata.

Section Chmod.

Variable s:SFSstate.


Some preliminary definitions



Local ChangeGAR
   [o:OBJECT; oct:RIGHTS] : (Exc (set GRPNAME)) :=
   Cases (facl (acl s) o) of
    |None => (None (set GRPNAME))
    |(Some y) =>
        (Some (set GRPNAME)
               (ChangeGroupR (AllGrp s)
                             oct
                             (ChangeGroupR (group y)
                                           oct
                                           (GroupReaders y))))
   end.

Local ChangeGAW
   [o:OBJECT; oct:RIGHTS] : (Exc (set GRPNAME)) :=
   Cases (facl (acl s) o) of
    |None => (None (set GRPNAME))
    |(Some y) =>
        (Some (set GRPNAME)
               (ChangeGroupW (AllGrp s)
                             oct
                             (ChangeGroupW (group y)
                                           oct
                                           (GroupWriters y))))
   end.



Local NEW [u:SUBJECT; o:OBJECT; perms:PERMS]:(Exc AccessCtrlListData):=
 
 Cases (facl (acl s) o)
       (ChangeGAR o (groupp perms))
       (ChangeGAW o (groupp perms)) of
  |None _ _ => (None AccessCtrlListData)
  |_ None _ => (None AccessCtrlListData)
  |_ _ None => (None AccessCtrlListData)
  |(Some y)
   (Some gar)
   (Some gaw) =>
      (Some AccessCtrlListData
             (acldata (owner y)
                      (group y)
                      (ChangeUserR u (UsersReaders y) (ownerp perms))
                      gar
                      (ChangeUserW u (UsersWriters y) (ownerp perms))
                      gaw
                      (UsersOwners y)
                      (GroupOwners y)))
 end.



Definition chmod_acl
 [u:SUBJECT; o:OBJECT; perms:PERMS] : (set OBJECT*AccessCtrlListData):=

 Cases (facl (acl s) o)
       (NEW u o perms) of
 |None _ => (acl s)
 |_ None => (acl s)
 |(Some y)
  (Some z) => (set_add ACLeq_dec
                          (o,z)
                          (set_remove ACLeq_dec (o,y) (acl s)))
 end.


Next state definition



Local t [u:SUBJECT; o:OBJECT; perms:PERMS] : SFSstate :=

   (mkSFS (groups s) (primaryGrp s) (subjectSC s) (AllGrp s)
          (RootGrp s) (SecAdmGrp s) (objectSC s)
          (chmod_acl u o perms) (secmat s) (files s) (directories s)).


Operation definition


Inductive chmod
  [u:SUBJECT; o:OBJECT; perms:PERMS] : SFSstate -> Prop :=

  |ChmodOK:
     (ExecuterIsOwner s u o)
     ->~(set_In o (domsecmat (secmat s)))
     ->(chmod u o perms (t u o perms)).




Hints Resolve ChangeGAR ChangeGAW chmod_acl t.



End Chmod.


Index
This page has been generated by coqdoc