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
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
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
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
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
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