summary refs log tree commit diff
path: root/pkgs/servers/mail/opensmtpd/proc_path.diff
blob: 0e8eac0bb83b231bbf0994b0af45f555ac460d3d (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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
diff -Naur opensmtpd-5.7.1p1/smtpd/parse.y opensmtpd-5.7.1p1.patched/smtpd/parse.y
--- opensmtpd-5.7.1p1/smtpd/parse.y	2015-06-30 10:13:34.000000000 +0200
+++ opensmtpd-5.7.1p1.patched/smtpd/parse.y	2015-09-26 08:41:17.012472516 +0200
@@ -2519,13 +2519,19 @@
 {
 	struct filter_conf	*f;
 	char			*path;
+        const char              *proc_path;
 
 	if (dict_get(&conf->sc_filters, name)) {
 		yyerror("filter \"%s\" already defined", name);
 		return (NULL);
 	}
 
-	if (asprintf(&path, "%s/filter-%s", PATH_LIBEXEC, prog) == -1) {
+        proc_path = getenv("OPENSMTPD_PROC_PATH");
+        if (proc_path == NULL) {
+                proc_path = PATH_LIBEXEC;
+        }
+
+	if (asprintf(&path, "%s/filter-%s", proc_path, prog) == -1) {
 		yyerror("filter \"%s\" asprintf failed", name);
 		return (0);
 	}
diff -Naur opensmtpd-5.7.1p1/smtpd/smtpd.c opensmtpd-5.7.1p1.patched/smtpd/smtpd.c
--- opensmtpd-5.7.1p1/smtpd/smtpd.c	2015-06-30 10:13:34.000000000 +0200
+++ opensmtpd-5.7.1p1.patched/smtpd/smtpd.c	2015-09-26 08:41:16.998472557 +0200
@@ -854,6 +854,7 @@
 	char		path[PATH_MAX];
 	char		name[PATH_MAX];
 	char		*arg;
+        char            *proc_path;
 
 	if (strlcpy(name, conf, sizeof(name)) >= sizeof(name)) {
 		log_warnx("warn: %s-proc: conf too long", key);
@@ -864,7 +865,12 @@
 	if (arg)
 		*arg++ = '\0';
 
-	if (snprintf(path, sizeof(path), PATH_LIBEXEC "/%s-%s", key, name) >=
+        proc_path = getenv("OPENSMTPD_PROC_PATH");
+        if (proc_path == NULL) {
+                proc_path = PATH_LIBEXEC;
+        }
+
+	if (snprintf(path, sizeof(path), "%s/%s-%s", proc_path, key, name) >=
 	    (ssize_t)sizeof(path)) {
 		log_warn("warn: %s-proc: exec path too long", key);
 		return (-1);
diff -Naur opensmtpd-5.7.1p1/smtpd/table.c opensmtpd-5.7.1p1.patched/smtpd/table.c
--- opensmtpd-5.7.1p1/smtpd/table.c	2015-06-30 10:13:34.000000000 +0200
+++ opensmtpd-5.7.1p1.patched/smtpd/table.c	2015-09-26 08:41:17.005472536 +0200
@@ -201,6 +201,7 @@
 	struct table_backend	*tb;
 	char			 buf[LINE_MAX];
 	char			 path[LINE_MAX];
+        const char              *proc_path;
 	size_t			 n;
 	struct stat		 sb;
 
@@ -215,8 +216,14 @@
 	if (name && table_find(name, NULL))
 		fatalx("table_create: table \"%s\" already defined", name);
 
+        proc_path = getenv("OPENSMTPD_PROC_PATH");
+        if (proc_path == NULL) {
+                proc_path = PATH_LIBEXEC;
+        }
+
 	if ((tb = table_backend_lookup(backend)) == NULL) {
-		if ((size_t)snprintf(path, sizeof(path), PATH_LIBEXEC "/table-%s",
+		if ((size_t)snprintf(path, sizeof(path), "%s/table-%s",
+                    proc_path,
 		    backend) >= sizeof(path)) {
 			fatalx("table_create: path too long \""
 			    PATH_LIBEXEC "/table-%s\"", backend);