diff options
Diffstat (limited to 'avfsd.c')
-rw-r--r-- | avfsd.c | 367 |
1 files changed, 0 insertions, 367 deletions
diff --git a/avfsd.c b/avfsd.c deleted file mode 100644 index c86e831..0000000 --- a/avfsd.c +++ /dev/null @@ -1,367 +0,0 @@ -#include <fuse.h> -#include <virtual.h> - -#include <stdio.h> -#include <unistd.h> -#include <errno.h> -#include <fcntl.h> - -static int check_cred(struct fuse_cred *cred) -{ - if(cred->uid != getuid()) - return -EACCES; - else - return 0; -} - -static int avfs_getattr(struct fuse_cred *cred, const char *path, - struct stat *stbuf) -{ - int res; - - res = check_cred(cred); - if(res) - return res; - - res = virt_lstat(path, stbuf); - if(res == -1) - return -errno; - - return 0; -} - -static int avfs_readlink(struct fuse_cred *cred, const char *path, char *buf, - size_t size) -{ - int res; - - res = check_cred(cred); - if(res) - return res; - - res = virt_readlink(path, buf, size - 1); - if(res == -1) - return -errno; - - buf[res] = '\0'; - return 0; -} - - -static int avfs_getdir(struct fuse_cred *cred, const char *path, - fuse_dirh_t h, fuse_dirfil_t filler) -{ - DIR *dp; - struct dirent *de; - int res; - - res = check_cred(cred); - if(res) - return res; - - dp = virt_opendir(path); - if(dp == NULL) - return -errno; - - while((de = virt_readdir(dp)) != NULL) { - res = filler(h, de->d_name, de->d_type); - if(res != 0) - break; - } - - virt_closedir(dp); - return res; -} - -static int avfs_mknod(struct fuse_cred *cred, const char *path, mode_t mode, - dev_t rdev) -{ - int res; - - res = check_cred(cred); - if(res) - return res; - - res = virt_mknod(path, mode, rdev); - if(res == -1) - return -errno; - - return 0; -} - -static int avfs_mkdir(struct fuse_cred *cred, const char *path, mode_t mode) -{ - int res; - - res = check_cred(cred); - if(res) - return res; - - res = virt_mkdir(path, mode); - if(res == -1) - return -errno; - - return 0; -} - -static int avfs_unlink(struct fuse_cred *cred, const char *path) -{ - int res; - - res = check_cred(cred); - if(res) - return res; - - res = virt_unlink(path); - if(res == -1) - return -errno; - - return 0; -} - -static int avfs_rmdir(struct fuse_cred *cred, const char *path) -{ - int res; - - res = check_cred(cred); - if(res) - return res; - - res = virt_rmdir(path); - if(res == -1) - return -errno; - - return 0; -} - -static int avfs_symlink(struct fuse_cred *cred, const char *from, - const char *to) -{ - int res; - - res = check_cred(cred); - if(res) - return res; - - res = virt_symlink(from, to); - if(res == -1) - return -errno; - - return 0; -} - -static int avfs_rename(struct fuse_cred *cred, const char *from, - const char *to) -{ - int res; - - res = check_cred(cred); - if(res) - return res; - - res = virt_rename(from, to); - if(res == -1) - return -errno; - - return 0; -} - -static int avfs_link(struct fuse_cred *cred, const char *from, const char *to) -{ - int res; - - res = check_cred(cred); - if(res) - return res; - - res = virt_link(from, to); - if(res == -1) - return -errno; - - return 0; -} - -static int avfs_chmod(struct fuse_cred *cred, const char *path, mode_t mode) -{ - int res; - - res = check_cred(cred); - if(res) - return res; - - res = virt_chmod(path, mode); - if(res == -1) - return -errno; - - return 0; -} - -static int avfs_chown(struct fuse_cred *cred, const char *path, uid_t uid, - gid_t gid) -{ - int res; - - res = check_cred(cred); - if(res) - return res; - - res = virt_lchown(path, uid, gid); - if(res == -1) - return -errno; - - return 0; -} - -static int avfs_truncate(struct fuse_cred *cred, const char *path, off_t size) -{ - int res; - - res = check_cred(cred); - if(res) - return res; - - res = virt_truncate(path, size); - if(res == -1) - return -errno; - - return 0; -} - -static int avfs_utime(struct fuse_cred *cred, const char *path, - struct utimbuf *buf) -{ - int res; - - res = check_cred(cred); - if(res) - return res; - - res = virt_utime(path, buf); - if(res == -1) - return -errno; - - return 0; -} - - -static int avfs_open(struct fuse_cred *cred, const char *path, int flags) -{ - int res; - - res = check_cred(cred); - if(res) - return res; - - res = virt_open(path, flags, 0); - if(res == -1) - return -errno; - - virt_close(res); - return 0; -} - -static int avfs_read(struct fuse_cred *cred, const char *path, char *buf, - size_t size, off_t offset) -{ - int fd; - int res; - - res = check_cred(cred); - if(res) - return res; - - fd = virt_open(path, O_RDONLY, 0); - if(fd == -1) - return -errno; - - res = virt_lseek(fd, offset, SEEK_SET); - if(res == -1) - res = -errno; - else { - res = virt_read(fd, buf, size); - if(res == -1) - res = -errno; - } - - virt_close(fd); - return res; -} - -static int avfs_write(struct fuse_cred *cred, const char *path, - const char *buf, size_t size, off_t offset) -{ - int fd; - int res; - - res = check_cred(cred); - if(res) - return res; - - fd = virt_open(path, O_WRONLY, 0); - if(fd == -1) - return -errno; - - res = virt_lseek(fd, offset, SEEK_SET); - if(res == -1) - res = -errno; - else { - res = virt_write(fd, buf, size); - if(res == -1) - res = -errno; - } - - virt_close(fd); - return res; -} - -static struct fuse_operations avfs_oper = { - getattr: avfs_getattr, - readlink: avfs_readlink, - getdir: avfs_getdir, - mknod: avfs_mknod, - mkdir: avfs_mkdir, - symlink: avfs_symlink, - unlink: avfs_unlink, - rmdir: avfs_rmdir, - rename: avfs_rename, - link: avfs_link, - chmod: avfs_chmod, - chown: avfs_chown, - truncate: avfs_truncate, - utime: avfs_utime, - open: avfs_open, - read: avfs_read, - write: avfs_write, -}; - - -void avfs_main(struct fuse *fuse) -{ - fuse_set_operations(fuse, &avfs_oper); - fuse_loop(fuse); -} - -#if 0 -int main(int argc, char *argv[]) -{ - int res; - const char *avfs_dir; - struct fuse *fuse; - - if(argc != 2) { - fprintf(stderr, "usage: %s mount_dir\n", argv[0]); - exit(1); - } - - avfs_dir = argv[1]; - - fuse = fuse_new(0); - res = fuse_mount(fuse, avfs_dir); - if(res == -1) - exit(1); - - avfs_main(fuse); - - return 0; -} -#endif |