Overview
Comment: | Changed mount options to remove "direct_io", which breaks mmap and performed additional cleanups |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: | 1c47ca909719f71b553ec4026175767ea1d85abf |
User & Date: | rkeene on 2015-10-14 17:47:24 |
Other Links: | manifest | tags |
Context
2015-10-14
| ||
17:47 | Updated to be more careful about closing files check-in: b357796ad5 user: rkeene tags: trunk | |
17:47 | Changed mount options to remove "direct_io", which breaks mmap and performed additional cleanups check-in: 1c47ca9097 user: rkeene tags: trunk | |
2015-07-31
| ||
03:02 | Fixed inode lookup and determination of a file being packaged or not check-in: 1e2435553a user: rkeene tags: trunk | |
Changes
Modified appfsd.c from [647fdab61a] to [6b6df68529].
1 2 3 4 5 6 7 8 9 ... 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 .... 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 .... 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 .... 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 .... 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 |
/* * Copyright (c) 2014 Roy Keene * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: ................................................................................ } return(ctx->uid); } /* * Determine the GID for the user making the current FUSE filesystem request. * This will be used to lookup the user's home directory so we can search for * locally modified files. */ static gid_t appfs_get_fsgid(void) { struct fuse_context *ctx; if (!appfs_fuse_started) { return(getgid()); } ................................................................................ APPFS_DEBUG("error: open failed"); return(errno * -1); } fi->fh = fh; return(0); } static int appfs_fuse_close(const char *path, struct fuse_file_info *fi) { int close_ret; appfs_get_path_info_cache_rm(path, appfs_get_fsuid()); ................................................................................ return(0); } static int appfs_fuse_read(const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fi) { ssize_t read_ret; int retval; APPFS_DEBUG("Enter (path = %s, buf, %lli, %lli, fd=%lli)", path, (long long) size, (long long) offset, (long long) fi->fh); retval = 0; while (size != 0) { read_ret = pread(fi->fh, buf, size, offset); if (read_ret < 0) { ................................................................................ #else appfs_threaded_tcl = 0; #endif /** ** Add FUSE arguments which we always supply **/ fuse_opt_add_arg(args, "-odefault_permissions,fsname=appfs,subtype=appfsd,use_ino,direct_io,entry_timeout=0,attr_timeout=0,big_writes,intr,hard_remove"); if (getuid() == 0) { fuse_opt_parse(args, NULL, NULL, NULL); fuse_opt_add_arg(args, "-oallow_other"); /* * This should generally be avoided, but if there are security ................................................................................ APPFS_DEBUG("Passing option to FUSE: -s"); fuse_opt_parse(args, NULL, NULL, NULL); fuse_opt_add_arg(args, "-s"); appfs_threaded_tcl = 0; } else if (strcmp(optstr, "allow_other") == 0) { APPFS_DEBUG("Passing option to FUSE: -o allow_Other"); fuse_opt_parse(args, NULL, NULL, NULL); fuse_opt_add_arg(args, "-oallow_other"); } else if (strcmp(optstr, "rw") == 0) { /* Ignored */ } else { fprintf(stderr, "appfsd: invalid option: \"-o %s\"\n", optstr); |
| < < > > | | | |
1 2 3 4 5 6 7 8 9 ... 530 531 532 533 534 535 536 537 538 539 540 541 542 543 .... 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 .... 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 .... 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 .... 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 |
/* * Copyright (c) 2014, 2015 Roy Keene * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: ................................................................................ } return(ctx->uid); } /* * Determine the GID for the user making the current FUSE filesystem request. */ static gid_t appfs_get_fsgid(void) { struct fuse_context *ctx; if (!appfs_fuse_started) { return(getgid()); } ................................................................................ APPFS_DEBUG("error: open failed"); return(errno * -1); } fi->fh = fh; APPFS_DEBUG("Opened \"%s\" (for \"%s\") with file descriptor %i", real_path, path, fh); return(0); } static int appfs_fuse_close(const char *path, struct fuse_file_info *fi) { int close_ret; appfs_get_path_info_cache_rm(path, appfs_get_fsuid()); ................................................................................ return(0); } static int appfs_fuse_read(const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fi) { ssize_t read_ret; int retval; APPFS_DEBUG("Enter (path = %s, buf, size = %lli, offset = %lli, fd = %lli)", path, (long long) size, (long long) offset, (long long) fi->fh); retval = 0; while (size != 0) { read_ret = pread(fi->fh, buf, size, offset); if (read_ret < 0) { ................................................................................ #else appfs_threaded_tcl = 0; #endif /** ** Add FUSE arguments which we always supply **/ fuse_opt_add_arg(args, "-odefault_permissions,fsname=appfs,subtype=appfsd,use_ino,entry_timeout=0,attr_timeout=0,big_writes,intr,hard_remove"); if (getuid() == 0) { fuse_opt_parse(args, NULL, NULL, NULL); fuse_opt_add_arg(args, "-oallow_other"); /* * This should generally be avoided, but if there are security ................................................................................ APPFS_DEBUG("Passing option to FUSE: -s"); fuse_opt_parse(args, NULL, NULL, NULL); fuse_opt_add_arg(args, "-s"); appfs_threaded_tcl = 0; } else if (strcmp(optstr, "allow_other") == 0) { APPFS_DEBUG("Passing option to FUSE: -o allow_other"); fuse_opt_parse(args, NULL, NULL, NULL); fuse_opt_add_arg(args, "-oallow_other"); } else if (strcmp(optstr, "rw") == 0) { /* Ignored */ } else { fprintf(stderr, "appfsd: invalid option: \"-o %s\"\n", optstr); |