summaryrefslogtreecommitdiffstats
path: root/opcache-blacklist.patch
blob: 2bfda57ca3e32c1848f47c9b9226877490ab54cd (plain)
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
From dc416b995f4560f73558d2567c7c45b665b58685 Mon Sep 17 00:00:00 2001
From: Dmitry Stogov <dmitry@zend.com>
Date: Tue, 9 Apr 2013 10:51:19 +0400
Subject: [PATCH] Fixed issue #82 (allow comments in blacklist file, lines
 started with ";")

---
 zend_accelerator_blacklist.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/zend_accelerator_blacklist.c b/zend_accelerator_blacklist.c
index 0ccd62e..764c950 100644
--- a/zend_accelerator_blacklist.c
+++ b/zend_accelerator_blacklist.c
@@ -212,6 +212,11 @@ void zend_accel_blacklist_load(zend_blacklist *blacklist, char *filename)
 			continue;
 		}
 
+		/* skip comments */
+		if (pbuf[0]==';') {
+			continue;
+		}
+
 		path_dup = zend_strndup(pbuf, path_length);
 		expand_filepath(path_dup, real_path TSRMLS_CC);
 		path_length = strlen(real_path);
-- 
1.8.1.5

From f80a5538063f470d7c42b386a357d47794108a74 Mon Sep 17 00:00:00 2001
From: Dmitry Stogov <dmitry@zend.com>
Date: Wed, 10 Apr 2013 21:41:30 +0400
Subject: [PATCH] Allow wilcards in opcache.blacklist_filename

---
 README                       |  8 ++++----
 tests/blacklist.phpt         | 20 ++++++++++++++++++++
 tests/opcache-1.blacklist    |  5 +++++
 tests/opcache-2.blacklist    |  1 +
 zend_accelerator_blacklist.c | 36 ++++++++++++++++++++++++++++++++++++
 5 files changed, 66 insertions(+), 4 deletions(-)
 create mode 100644 tests/blacklist.phpt
 create mode 100644 tests/opcache-1.blacklist
 create mode 100644 tests/opcache-2.blacklist

diff --git a/README b/README
index 03386a0..3110012 100644
--- a/README
+++ b/README
@@ -151,13 +151,13 @@ opcache.dups_fix (default "0")
 	Enable this hack as a workaround for "Cannot redeclare class" errors.
 
 opcache.blacklist_filename
-	The location of the OPcache blacklist file.
-	The OPcache blacklist file is a text file that holds the names of files
+	The location of the OPcache blacklist file (wildcards allowed).
+	Each OPcache blacklist file is a text file that holds the names of files
 	that should not be accelerated. The file format is to add each filename
 	to a new line. The filename may be a full path or just a file prefix
 	(i.e., /var/www/x  blacklists all the files and directories in /var/www
-	that start with 'x'). Files are usually triggered by one of the following
-	three reasons:
+	that start with 'x'). Line starting with a ; are ignored (comments).
+	Files are usually triggered by one of the following three reasons:
 	1) Directories that contain auto generated code, like Smarty or ZFW cache.
 	2) Code that does not work well when accelerated, due to some delayed
 	   compile time evaluation.
diff --git a/tests/blacklist.phpt b/tests/blacklist.phpt
new file mode 100644
index 0000000..f4a3472
--- /dev/null
+++ b/tests/blacklist.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Blacklist (with glob, quote and comments)
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.blacklist_filename={PWD}/opcache-*.blacklist
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$conf = opcache_get_configuration();
+print_r($conf['blacklist']);
+?>
+--EXPECT--
+Array
+(
+    [0] => /path/to/foo
+    [1] => /path/to/foo2
+    [2] => /path/to/bar
+)
\ No newline at end of file
diff --git a/tests/opcache-1.blacklist b/tests/opcache-1.blacklist
new file mode 100644
index 0000000..5f498d6
--- /dev/null
+++ b/tests/opcache-1.blacklist
@@ -0,0 +1,5 @@
+; comments are allowed in blacklist file
+; and empty line are ignored
+
+/path/to/foo
+"/path/to/foo2"
\ No newline at end of file
diff --git a/tests/opcache-2.blacklist b/tests/opcache-2.blacklist
new file mode 100644
index 0000000..4f6580a
--- /dev/null
+++ b/tests/opcache-2.blacklist
@@ -0,0 +1 @@
+/path/to/bar
diff --git a/zend_accelerator_blacklist.c b/zend_accelerator_blacklist.c
index 764c950..b09d0e5 100644
--- a/zend_accelerator_blacklist.c
+++ b/zend_accelerator_blacklist.c
@@ -36,6 +36,14 @@
 # define REGEX_MODE (REG_EXTENDED|REG_NOSUB)
 #endif
 
+#ifdef HAVE_GLOB
+#ifdef PHP_WIN32
+#include "win32/glob.h"
+#else
+#include <glob.h>
+#endif
+#endif
+
 #define ZEND_BLACKLIST_BLOCK_SIZE	32
 
 struct _zend_regexp_list {
@@ -168,7 +176,11 @@ static inline void zend_accel_blacklist_allocate(zend_blacklist *blacklist)
 	}
 }
 
+#ifdef HAVE_GLOB
+static void zend_accel_blacklist_loadone(zend_blacklist *blacklist, char *filename)
+#else
 void zend_accel_blacklist_load(zend_blacklist *blacklist, char *filename)
+#endif
 {
 	char buf[MAXPATHLEN + 1], real_path[MAXPATHLEN + 1];
 	FILE *fp;
@@ -238,6 +250,30 @@ void zend_accel_blacklist_load(zend_blacklist *blacklist, char *filename)
 	zend_accel_blacklist_update_regexp(blacklist);
 }
 
+#ifdef HAVE_GLOB
+void zend_accel_blacklist_load(zend_blacklist *blacklist, char *filename)
+{
+	glob_t globbuf;
+	int    ret, i;
+
+	memset(&globbuf, 0, sizeof(glob_t));
+
+	ret = glob(filename, 0, NULL, &globbuf);
+#ifdef GLOB_NOMATCH
+	if (ret == GLOB_NOMATCH || !globbuf.gl_pathc) {
+#else
+	if (!globbuf.gl_pathc) {
+#endif
+		zend_accel_error(ACCEL_LOG_WARNING, "No blacklist file found matching: %s\n", filename);
+	} else {
+		for(i=0 ; i<globbuf.gl_pathc; i++) {
+			zend_accel_blacklist_loadone(blacklist, globbuf.gl_pathv[i]);
+		}
+		globfree(&globbuf);
+	}
+}
+#endif
+
 zend_bool zend_accel_blacklist_is_blacklisted(zend_blacklist *blacklist, char *verify_path)
 {
 	int ret = 0;
-- 
1.8.1.5