/*****************************************************************************\ * Copyright (c) 2002 Pelle Johansson. * * All rights reserved. * * * * This file is part of the moftpd package. Use and distribution of * * this software is governed by the terms in the file LICENCE, which * * should have come with this package. * \*****************************************************************************/ /* $moftpd: file.h 1224 2004-10-28 22:42:00Z morth $ */ #ifndef _FILE_H #define _FILE_H typedef struct access access_t; enum { // These are allowed in allow and deny only. // They are checked automatically. Putting these in required will fail // those tests without errno being set (which is bad, obviously). acSearch = 1 << 0, acReadFile = 1 << 1, acListing = 1 << 2, acCreateFile = 1 << 3, acCreateDir = 1 << 4, acAppend = 1 << 5, acOverwrite = 1 << 6, acDelete = 1 << 7, acRename = 1 << 8, // These are also allowed in require. // They must be checked explicitly (interpretation up to program). acEncrypted = 1 << 9, acSigned = 1 << 10 }; enum { tfType = 1 << 0, tfUnique = 1 << 1, tfModify = 1 << 2, tfCreate = 1 << 4, // N/A tfPerm = 1 << 5, tfLang = 1 << 6, // N/A tfSize = 1 << 7, tfMediaType = 1 << 8, // N/A tfCharset = 1 << 9, // These are used internally. tfRootDir = 1 << 30, tfPartOfList = 1 << 31 }; struct access { char *path; int numMasks; char **masks; int deny, allow, require; unsigned int hidden:1; int hardlink:2; char *fakeUser, *fakeGroup, *fakeFile, *fakeDir; char *dirMsgFile; struct access *next; }; const char *set_root(const char *root); char *full_path(const char *path, const char *cwd, const char *home); char *chroot_path(const char *path, const char *cwd, const char *home); const char *strip_path (const char *path); const char *print_path(const char *path); char *make_file_list(const char *mask, const char *cwd, const char *home, int verbose, const char *prepend); char *recurse_file_list(char *path, char *mask, int verbose, int dotFiles, const char *prepend, int recurse_level); const char *tagged_file_data (const char *path, const char *name, int tags); const char *tagged_file_list (const char *path, int tags); const char *set_cwd(const char *dir, const char *home); int open_file_reading(const char *path, long long offset); int open_file_writing(const char *path, long long offset, int flags); int open_file_appending(const char *path); int open_temp_file(char *path); DIR *open_dir_listing(const char *path); int rename_file(const char *from, const char *to); int delete_file(const char *path); int delete_dir(const char *path); int create_dir(const char *path); void set_access (access_t *start, int defHardLink, int rFd, int wFd); int check_access(const char *path, int tests); int check_hidden(const char *path); int check_hardlink (const char *path); const char *dir_msg_file(const char *path); int open_shared (const char *path); void close_shared (int fd); const char *scan_strings (int fd, const char *search); int match_pattern(const char *pat, const char *str); void *read_file (const char *file, size_t *sz); #endif /*_FILE_H*/