Example #1
0
 def set_protection(self, lock, ami_path, mask):
     sys_path = self.path_mgr.ami_to_sys_path(lock, ami_path)
     if sys_path == None or not os.path.exists(sys_path):
         log_file.info("file to set proteciton not found: '%s'", ami_path)
         return ERROR_OBJECT_NOT_FOUND
     prot = DosProtection(mask)
     posix_mask = 0
     if prot.is_e():
         posix_mask |= stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
     if prot.is_w():
         posix_mask |= stat.S_IWUSR | stat.S_IWGRP | stat.S_IWOTH
     if prot.is_r():
         posix_mask |= stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH
     posix_mask &= ~self.umask
     log_file.info(
         "set protection: '%s': %s -> '%s': posix_mask=%03o umask=%03o",
         ami_path,
         prot,
         sys_path,
         posix_mask,
         self.umask,
     )
     try:
         os.chmod(sys_path, posix_mask)
         return NO_ERROR
     except OSError:
         return ERROR_OBJECT_WRONG_TYPE
Example #2
0
 def examine_file(self, fib_mem, name, sys_path):
     # name
     name_addr = fib_mem.s_get_addr('fib_FileName')
     # clear 32 name bytes
     mem = fib_mem.mem
     mem.clear_block(name_addr, 32, 0)
     mem.w_cstr(name_addr, name)
     # comment
     comment_addr = fib_mem.s_get_addr('fib_Comment')
     mem.w_cstr(comment_addr, "")
     # create the "inode" information
     key = self.keygen(sys_path)
     fib_mem.w_s('fib_DiskKey', key)
     log_lock.debug("examine key: %08x", key)
     # type
     if os.path.isdir(sys_path):
         dirEntryType = 2
     else:
         dirEntryType = -3
     fib_mem.w_s('fib_DirEntryType', dirEntryType)
     fib_mem.w_s('fib_EntryType', dirEntryType)
     # protection
     prot = DosProtection(0)
     try:
         os_stat = os.stat(sys_path)
         mode = os_stat.st_mode
         if mode & stat.S_IXUSR == 0:
             prot.clr(DosProtection.FIBF_EXECUTE)
         if mode & stat.S_IRUSR == 0:
             prot.clr(DosProtection.FIBF_READ)
         if mode & stat.S_IWUSR == 0:
             prot.clr(DosProtection.FIBF_WRITE)
         log_lock.debug("examine lock: '%s' mode=%03o: prot=%s", name, mode,
                        prot)
     except OSError:
         return ERROR_OBJECT_IN_USE
     fib_mem.w_s('fib_Protection', prot.mask)
     # size
     if os.path.isfile(sys_path):
         size = os.path.getsize(sys_path)
         fib_mem.w_s('fib_Size', size)
         blocks = int((size + 511) / 512)
         fib_mem.w_s('fib_NumBlocks', blocks)
     else:
         fib_mem.w_s('fib_NumBlocks', 1)
     # date (use mtime here)
     date_addr = fib_mem.s_get_addr('fib_Date')
     date = AccessStruct(fib_mem.mem, DateStampStruct, date_addr)
     t = os.path.getmtime(sys_path)
     at = sys_to_ami_time(t)
     date.w_s('ds_Days', at.tday)
     date.w_s('ds_Minute', at.tmin)
     date.w_s('ds_Tick', at.tick)
     # fill in UID/GID
     fib_mem.w_s('fib_OwnerUID', 0)
     fib_mem.w_s('fib_OwnerGID', 0)
     return NO_ERROR
Example #3
0
 def set_protection(self, lock, ami_path, mask):
     sys_path = self.path_mgr.ami_to_sys_path(lock, ami_path)
     if sys_path == None or not os.path.exists(sys_path):
         log_file.info("file to set proteciton not found: '%s'", ami_path)
         return ERROR_OBJECT_NOT_FOUND
     prot = DosProtection(mask)
     posix_mask = 0
     if prot.is_e():
         posix_mask |= stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
     if prot.is_w():
         posix_mask |= stat.S_IWUSR | stat.S_IWGRP | stat.S_IWOTH
     if prot.is_r():
         posix_mask |= stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH
     posix_mask &= ~self.umask
     if prot.is_p():
         posix_mask |= stat.S_ISUID
     if prot.is_s():
         posix_mask |= stat.S_ISGID
     log_file.info(
         "set protection: '%s': %s -> '%s': posix_mask=%03o umask=%03o",
         ami_path, prot, sys_path, posix_mask, self.umask)
     try:
         os.chmod(sys_path, posix_mask)
         return NO_ERROR
     except OSError:
         return ERROR_OBJECT_WRONG_TYPE
Example #4
0
 def examine_file(self, fib_mem, name, sys_path):
   # name
   name_addr = fib_mem.s_get_addr('fib_FileName')
   # clear 32 name bytes
   mem = fib_mem.mem
   mem.clear_block(name_addr, 32, 0)
   mem.w_cstr(name_addr, name)
   # comment
   comment_addr = fib_mem.s_get_addr('fib_Comment')
   mem.w_cstr(comment_addr, "")
   # create the "inode" information
   key = self.keygen(sys_path)
   fib_mem.w_s('fib_DiskKey',key)
   log_lock.debug("examine key: %08x", key)
   # type
   if os.path.isdir(sys_path):
     dirEntryType = 2
   else:
     dirEntryType = -3
   fib_mem.w_s('fib_DirEntryType', dirEntryType )
   fib_mem.w_s('fib_EntryType',    dirEntryType )
   # protection
   prot = DosProtection(0)
   try:
     os_stat = os.stat(sys_path)
     mode = os_stat.st_mode
     if mode & stat.S_IXUSR == 0:
       prot.clr(DosProtection.FIBF_EXECUTE)
     if mode & stat.S_IRUSR == 0:
       prot.clr(DosProtection.FIBF_READ)
     if mode & stat.S_IWUSR == 0:
       prot.clr(DosProtection.FIBF_WRITE)
     log_lock.debug("examine lock: '%s' mode=%03o: prot=%s", name, mode, prot)
   except OSError:
     return ERROR_OBJECT_IN_USE
   fib_mem.w_s('fib_Protection', prot.mask)
   # size
   if os.path.isfile(sys_path):
     size = os.path.getsize(sys_path)
     fib_mem.w_s('fib_Size', size)
     blocks = int((size + 511) / 512)
     fib_mem.w_s('fib_NumBlocks', blocks)
   else:
     fib_mem.w_s('fib_NumBlocks', 1)
   # date (use mtime here)
   date_addr = fib_mem.s_get_addr('fib_Date')
   date = AccessStruct(fib_mem.mem, DateStampStruct, date_addr)
   t = os.path.getmtime(sys_path)
   at = sys_to_ami_time(t)
   date.w_s('ds_Days', at.tday)
   date.w_s('ds_Minute', at.tmin)
   date.w_s('ds_Tick', at.tick)
   # fill in UID/GID
   fib_mem.w_s('fib_OwnerUID', 0)
   fib_mem.w_s('fib_OwnerGID', 0)
   return NO_ERROR
Example #5
0
 def examine_file(self, fib_mem, name, sys_path):
     # name
     name_addr = fib_mem.s_get_addr('fib_FileName')
     fib_mem.w_cstr(name_addr, name)
     # create the "inode" information
     key = self.keygen(sys_path)
     fib_mem.w_s('fib_DiskKey', key)
     # type
     if os.path.isdir(sys_path):
         dirEntryType = 2
     else:
         dirEntryType = (-3) & 0xffffffff
     fib_mem.w_s('fib_DirEntryType', dirEntryType)
     fib_mem.w_s('fib_EntryType', dirEntryType)
     # protection
     prot = DosProtection(0)
     try:
         os_stat = os.stat(sys_path)
         mode = os_stat.st_mode
         if mode & stat.S_IXUSR == 0:
             prot.clr(DosProtection.FIBF_EXECUTE)
         if mode & stat.S_IRUSR == 0:
             prot.clr(DosProtection.FIBF_READ)
         if mode & stat.S_IWUSR == 0:
             prot.clr(DosProtection.FIBF_WRITE)
         log_lock.debug("examine lock: '%s' mode=%03o: prot=%s", name, mode,
                        prot)
     except OSError:
         return ERROR_OBJECT_IN_USE
     fib_mem.w_s('fib_Protection', prot.mask)
     # size
     if os.path.isfile(sys_path):
         size = os.path.getsize(sys_path)
         fib_mem.w_s('fib_Size', size)
     # date (use mtime here)
     date_addr = fib_mem.s_get_addr('fib_Date')
     date = AccessStruct(fib_mem.mem, DateStampDef, date_addr)
     t = os.path.getmtime(sys_path)
     at = sys_to_ami_time(t)
     date.w_s('ds_Days', at.tday)
     date.w_s('ds_Minute', at.tmin)
     date.w_s('ds_Tick', at.tick)
     return NO_ERROR
Example #6
0
 def examine_file(self, fib_mem, name, sys_path):
   # name
   name_addr = fib_mem.s_get_addr('fib_FileName')
   fib_mem.w_cstr(name_addr, name)
   # create the "inode" information
   key = self.keygen(sys_path)
   fib_mem.w_s('fib_DiskKey',key)
   # type
   if os.path.isdir(sys_path):
     dirEntryType = 2
   else:
     dirEntryType = (-3) & 0xffffffff
   fib_mem.w_s('fib_DirEntryType', dirEntryType )
   fib_mem.w_s('fib_EntryType',    dirEntryType )
   # protection
   prot = DosProtection(0)
   try:
     os_stat = os.stat(sys_path)
     mode = os_stat.st_mode
     if mode & stat.S_IXUSR == 0:
       prot.clr(DosProtection.FIBF_EXECUTE)
     if mode & stat.S_IRUSR == 0:
       prot.clr(DosProtection.FIBF_READ)
     if mode & stat.S_IWUSR == 0:
       prot.clr(DosProtection.FIBF_WRITE)
     log_lock.debug("examine lock: '%s' mode=%03o: prot=%s", name, mode, prot)
   except OSError:
     return ERROR_OBJECT_IN_USE
   fib_mem.w_s('fib_Protection', prot.mask)
   # size
   if os.path.isfile(sys_path):
     size = os.path.getsize(sys_path)
     fib_mem.w_s('fib_Size', size)
   # date (use mtime here)
   date_addr = fib_mem.s_get_addr('fib_Date')
   date = AccessStruct(fib_mem.mem, DateStampDef, date_addr)
   t = os.path.getmtime(sys_path)
   at = sys_to_ami_time(t)
   date.w_s('ds_Days', at.tday)
   date.w_s('ds_Minute', at.tmin)
   date.w_s('ds_Tick', at.tick)
   return NO_ERROR