summaryrefslogtreecommitdiff
path: root/filesystems/ext2/files/patch-fuse-ext2_fuse-ext2.c
blob: 6b12035108f46a5085a65f77acfa725ed9371ff5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
--- fuse-ext2/fuse-ext2.c.orig	2019-05-09 08:29:33 UTC
+++ fuse-ext2/fuse-ext2.c
@@ -18,15 +18,14 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include <stdbool.h>
 #include "fuse-ext2.h"
 
 static const char *HOME = "http://github.com/alperakcan/fuse-ext2/";
 
 #if __FreeBSD__ == 10
-static char def_opts[] = "allow_other,default_permissions,local,";
 static char def_opts_rd[] = "noappledouble,";
 #else
-static char def_opts[] = "allow_other,default_permissions,";
 static char def_opts_rd[] = "";
 #endif
 
@@ -171,8 +170,10 @@ static int parse_options (int argc, char *argv[], stru
 static char * parse_mount_options (const char *orig_opts, struct extfs_data *opts)
 {
 	char *options, *s, *opt, *val, *ret;
+	bool allow_other = true;
+	bool default_permissions = true;
 
-	ret = malloc(strlen(def_opts) + strlen(def_opts_rd) + strlen(orig_opts) + 256 + PATH_MAX);
+	ret = malloc(strlen(def_opts_rd) + strlen(orig_opts) + 256 + PATH_MAX);
 	if (!ret) {
 		return NULL;
 	}
@@ -231,6 +232,14 @@ static char * parse_mount_options (const char *orig_op
 #if __FreeBSD__ == 10
 			strcat(ret, "force,");
 #endif
+		} else if (!strcmp(opt, "noallow_other")) {
+			allow_other = false;
+			strcat(ret, opt);
+			strcat(ret, ",");
+		} else if (!strcmp(opt, "nodefault_permissions")) {
+			default_permissions = false;
+			strcat(ret, opt);
+			strcat(ret, ",");
 		} else { /* Probably FUSE option. */
 			strcat(ret, opt);
 			if (val) {
@@ -246,7 +255,13 @@ static char * parse_mount_options (const char *orig_op
 		opts->readonly = 1;
 	}
 
-	strcat(ret, def_opts);
+	if (allow_other)
+		strcat(ret, "allow_other,");
+	if (default_permissions)
+		strcat(ret, "default_permissions,");
+#if __FreeBSD__ == 10
+	strcat(ret, "local,");
+#endif
 	if (opts->readonly == 1) {
 		strcat(ret, def_opts_rd);
 		strcat(ret, "ro,");