def _CheckFileStoragePath(path, allowed, exact_match_ok=False): """Checks if a path is in a list of allowed paths for file storage. @type path: string @param path: Path to check @type allowed: list @param allowed: List of allowed paths @type exact_match_ok: bool @param exact_match_ok: whether or not it is okay when the path is exactly equal to an allowed path and not a subdir of it @raise errors.FileStoragePathError: If the path is not allowed """ if not os.path.isabs(path): raise errors.FileStoragePathError("File storage path must be absolute," " got '%s'" % path) for i in allowed: if not os.path.isabs(i): logging.info("Ignoring relative path '%s' for file storage", i) continue if exact_match_ok: if os.path.normpath(i) == os.path.normpath(path): break if utils.IsBelowDir(i, path): break else: raise errors.FileStoragePathError("Path '%s' is not acceptable for file" " storage" % path)
def _CheckFileStoragePathExistance(path): """Checks whether the given path is usable on the file system. This checks wether the path is existing, a directory and writable. @type path: string @param path: path to check """ if not os.path.isdir(path): raise errors.FileStoragePathError("Path '%s' does not exist or is not a" " directory." % path) if not os.access(path, os.W_OK): raise errors.FileStoragePathError("Path '%s' is not writable" % path)
def CheckFileStoragePathAcceptance( path, _filename=pathutils.FILE_STORAGE_PATHS_FILE, exact_match_ok=False): """Checks if a path is allowed for file storage. @type path: string @param path: Path to check @raise errors.FileStoragePathError: If the path is not allowed """ allowed = _LoadAllowedFileStoragePaths(_filename) if not allowed: raise errors.FileStoragePathError("No paths are valid or path file '%s'" " was not accessible." % _filename) if _ComputeWrongFileStoragePaths([path]): raise errors.FileStoragePathError("Path '%s' uses a forbidden prefix" % path) _CheckFileStoragePath(path, allowed, exact_match_ok=exact_match_ok)