24
24
#include "php_variables.h"
25
25
#include "zend_modules.h"
26
26
27
+ #ifndef ZTS
28
+ #error SRM sapi module is only useable in thread-safe mode
29
+ #endif
30
+
27
31
#include "SAPI.h"
28
32
29
33
#include <stdio.h>
60
64
#include "libmilter/mfapi.h"
61
65
62
66
#define OPTSTRING "ac:d:Def:hnp:vVz:?"
63
- #define MG (v ) TSRMG(milter_globals_id, milter_globals *, v)
67
+ #define MG (v ) TSRMG(milter_globals_id, zend_milter_globals *, v)
64
68
65
69
extern char * ap_php_optarg ;
66
70
extern int ap_php_optind ;
67
71
68
72
/*********************
69
73
* globals
70
74
*/
71
- static int milter_globals_id ;
72
75
static int flag_debug = 0 ;
73
76
static zend_file_handle file_handle ;
74
77
75
78
/* per thread */
76
- typedef struct _milter_globals {
79
+ ZEND_BEGIN_MODULE_GLOBALS ( milter )
77
80
SMFICTX * ctx ;
78
- } milter_globals ;
81
+ ZEND_END_MODULE_GLOBALS (milter )
82
+
83
+ ZEND_DECLARE_MODULE_GLOBALS (milter )
79
84
80
85
/*********************
81
86
* Milter callbacks
@@ -84,7 +89,7 @@ typedef struct _milter_globals {
84
89
/* connection info filter */
85
90
static sfsistat mlfi_connect (SMFICTX * ctx , char * hostname , _SOCK_ADDR * hostaddr )
86
91
{
87
- zval * function_name , * retval , * host , * * params [1 ];
92
+ zval * function_name , * retval , * param [1 ];
88
93
TSRMLS_FETCH ();
89
94
90
95
/* set the milter context for possible use in API functions */
@@ -105,14 +110,12 @@ static sfsistat mlfi_connect(SMFICTX *ctx, char *hostname, _SOCK_ADDR *hostaddr)
105
110
106
111
/* call userland */
107
112
ZVAL_INIT (function_name );
108
- ZVAL_INIT (host );
113
+ ZVAL_INIT (param [ 0 ] );
109
114
110
115
ZVAL_STRING (function_name , "milter_connect" , 1 );
111
- ZVAL_STRING (host , hostname , 1 );
112
-
113
- params [0 ] = & host ;
116
+ ZVAL_STRING (param [0 ], hostname , 1 );
114
117
115
- call_user_function (CG (function_table ), NULL , function_name , retval , 1 , params TSRMLS_CC );
118
+ call_user_function (CG (function_table ), NULL , function_name , retval , 1 , param TSRMLS_CC );
116
119
117
120
if (Z_TYPE_P (retval ) == IS_LONG ) {
118
121
return Z_LONG_P (retval );
@@ -124,22 +127,20 @@ static sfsistat mlfi_connect(SMFICTX *ctx, char *hostname, _SOCK_ADDR *hostaddr)
124
127
/* SMTP HELO command filter */
125
128
static sfsistat mlfi_helo (SMFICTX * ctx , char * helohost )
126
129
{
127
- zval * function_name , * retval , * host , * * params [1 ];
130
+ zval * function_name , * retval , * param [1 ];
128
131
TSRMLS_FETCH ();
129
132
130
133
/* set the milter context for possible use in API functions */
131
134
MG (ctx ) = ctx ;
132
135
133
136
/* call userland */
134
137
ZVAL_INIT (function_name );
135
- ZVAL_INIT (host );
138
+ ZVAL_INIT (param [ 0 ] );
136
139
137
140
ZVAL_STRING (function_name , "milter_helo" , 1 );
138
- ZVAL_STRING (host , helohost , 1 );
141
+ ZVAL_STRING (param [ 0 ] , helohost , 1 );
139
142
140
- params [0 ] = & host ;
141
-
142
- call_user_function (CG (function_table ), NULL , function_name , retval , 1 , params TSRMLS_CC );
143
+ call_user_function (CG (function_table ), NULL , function_name , retval , 1 , param TSRMLS_CC );
143
144
144
145
if (Z_TYPE_P (retval ) == IS_LONG ) {
145
146
return Z_LONG_P (retval );
@@ -151,27 +152,25 @@ static sfsistat mlfi_helo(SMFICTX *ctx, char *helohost)
151
152
/* envelope sender filter */
152
153
static sfsistat mlfi_envfrom (SMFICTX * ctx , char * * argv )
153
154
{
154
- zval * function_name , * retval , * v , * * params [1 ];
155
+ zval * function_name , * retval , * param [1 ];
155
156
TSRMLS_FETCH ();
156
157
157
158
/* set the milter context for possible use in API functions */
158
159
MG (ctx ) = ctx ;
159
160
160
161
/* call userland */
161
162
ZVAL_INIT (function_name );
162
- ZVAL_INIT (v );
163
+ ZVAL_INIT (param [ 0 ] );
163
164
164
165
ZVAL_STRING (function_name , "milter_envelope_from" , 1 );
165
- array_init (v );
166
+ array_init (param [ 0 ] );
166
167
167
168
while (* argv ) {
168
- add_next_index_string (v , * argv , 1 );
169
+ add_next_index_string (param [ 0 ] , * argv , 1 );
169
170
argv ++ ;
170
171
}
171
172
172
- params [0 ] = v ;
173
-
174
- call_user_function (CG (function_table ), NULL , function_name , retval , 1 , params TSRMLS_CC );
173
+ call_user_function (CG (function_table ), NULL , function_name , retval , 1 , param TSRMLS_CC );
175
174
176
175
if (Z_TYPE_P (retval ) == IS_LONG ) {
177
176
return Z_LONG_P (retval );
@@ -183,27 +182,25 @@ static sfsistat mlfi_envfrom(SMFICTX *ctx, char **argv)
183
182
/* envelope recipient filter */
184
183
static sfsistat mlfi_envrcpt (SMFICTX * ctx , char * * argv )
185
184
{
186
- zval * function_name , * retval , * v , * * params [1 ];
185
+ zval * function_name , * retval , * param [1 ];
187
186
TSRMLS_FETCH ();
188
187
189
188
/* set the milter context for possible use in API functions */
190
189
MG (ctx ) = ctx ;
191
190
192
191
/* call userland */
193
192
ZVAL_INIT (function_name );
194
- ZVAL_INIT (v );
193
+ ZVAL_INIT (param [ 0 ] );
195
194
196
195
ZVAL_STRING (function_name , "milter_envelope_recipient" , 1 );
197
- array_init (v );
196
+ array_init (param [ 0 ] );
198
197
199
198
while (* argv ) {
200
- add_next_index_string (v , * argv , 1 );
199
+ add_next_index_string (param [ 0 ] , * argv , 1 );
201
200
argv ++ ;
202
201
}
203
202
204
- params [0 ] = v ;
205
-
206
- call_user_function (CG (function_table ), NULL , function_name , retval , 1 , params TSRMLS_CC );
203
+ call_user_function (CG (function_table ), NULL , function_name , retval , 1 , param TSRMLS_CC );
207
204
208
205
if (Z_TYPE_P (retval ) == IS_LONG ) {
209
206
return Z_LONG_P (retval );
@@ -215,25 +212,22 @@ static sfsistat mlfi_envrcpt(SMFICTX *ctx, char **argv)
215
212
/* header filter */
216
213
static sfsistat mlfi_header (SMFICTX * ctx , char * headerf , char * headerv )
217
214
{
218
- zval * function_name , * retval , * f , * v , * * params [2 ];
215
+ zval * function_name , * retval , * param [2 ];
219
216
TSRMLS_FETCH ();
220
217
221
218
/* set the milter context for possible use in API functions */
222
219
MG (ctx ) = ctx ;
223
220
224
221
/* call userland */
225
222
ZVAL_INIT (function_name );
226
- ZVAL_INIT (f );
227
- ZVAL_INIT (v );
223
+ ZVAL_INIT (param [ 0 ] );
224
+ ZVAL_INIT (param [ 1 ] );
228
225
229
226
ZVAL_STRING (function_name , "milter_header" , 1 );
230
- ZVAL_STRING (f , headerf , 1 );
231
- ZVAL_STRING (v , headerv , 1 );
227
+ ZVAL_STRING (param [ 0 ] , headerf , 1 );
228
+ ZVAL_STRING (param [ 1 ] , headerv , 1 );
232
229
233
- params [0 ] = f ;
234
- params [1 ] = v ;
235
-
236
- call_user_function (CG (function_table ), NULL , function_name , retval , 2 , params TSRMLS_CC );
230
+ call_user_function (CG (function_table ), NULL , function_name , retval , 2 , param TSRMLS_CC );
237
231
238
232
if (Z_TYPE_P (retval ) == IS_LONG ) {
239
233
return Z_LONG_P (retval );
@@ -266,22 +260,20 @@ static sfsistat mlfi_eoh(SMFICTX *ctx)
266
260
/* body block */
267
261
static sfsistat mlfi_body (SMFICTX * ctx , u_char * bodyp , size_t len )
268
262
{
269
- zval * function_name , * retval , * p , * * params [1 ];;
263
+ zval * function_name , * retval , * param [1 ];;
270
264
TSRMLS_FETCH ();
271
265
272
266
/* set the milter context for possible use in API functions */
273
267
MG (ctx ) = ctx ;
274
268
275
269
/* call userland */
276
270
ZVAL_INIT (function_name );
277
- ZVAL_INIT (p );
271
+ ZVAL_INIT (param [ 0 ] );
278
272
279
273
ZVAL_STRING (function_name , "milter_body" , 1 );
280
- ZVAL_STRINGL (p , bodyp , len , 1 );
274
+ ZVAL_STRINGL (param [ 0 ] , bodyp , len , 1 );
281
275
282
- params [0 ] = p ;
283
-
284
- call_user_function (CG (function_table ), NULL , function_name , retval , 0 , NULL TSRMLS_CC );
276
+ call_user_function (CG (function_table ), NULL , function_name , retval , 1 , param TSRMLS_CC );
285
277
286
278
if (Z_TYPE_P (retval ) == IS_LONG ) {
287
279
return Z_LONG_P (retval );
@@ -384,7 +376,7 @@ PHP_FUNCTION(smfi_getsymval)
384
376
385
377
if (zend_parse_parameters (1 TSRMLS_CC , "s" , & symname , & len ) == SUCCESS ) {
386
378
if ((ret = smfi_getsymval (MG (ctx ), symname )) != NULL ) {
387
- RETVAL_STRING (ret );
379
+ RETVAL_STRING (ret , 1 );
388
380
}
389
381
}
390
382
@@ -398,11 +390,11 @@ PHP_FUNCTION(smfi_setreply)
398
390
399
391
if (zend_parse_parameters (3 TSRMLS_CC , "sss" , & rcode , & len , & xcode , & len , & message , & len ) == SUCCESS ) {
400
392
if (smfi_setreply (MG (ctx ), rcode , xcode , message ) == MI_SUCCESS ) {
401
- RETVAL_TRUE () ;
393
+ RETVAL_TRUE ;
402
394
}
403
395
}
404
396
405
- RETVAL_FALSE () ;
397
+ RETVAL_FALSE ;
406
398
}
407
399
408
400
PHP_FUNCTION (smfi_addheader )
@@ -412,11 +404,11 @@ PHP_FUNCTION(smfi_addheader)
412
404
413
405
if (zend_parse_parameters (2 TSRMLS_CC , "ss" , & f , & len , & v , & len ) == SUCCESS ) {
414
406
if (smfi_addheader (MG (ctx ), f , v ) == MI_SUCCESS ) {
415
- RETVAL_TRUE () ;
407
+ RETVAL_TRUE ;
416
408
}
417
409
}
418
410
419
- RETVAL_FALSE () ;
411
+ RETVAL_FALSE ;
420
412
}
421
413
422
414
PHP_FUNCTION (smfi_chgheader )
@@ -427,11 +419,11 @@ PHP_FUNCTION(smfi_chgheader)
427
419
428
420
if (zend_parse_parameters (3 TSRMLS_CC , "sls" , & f , & len , & idx , & v , & len ) == SUCCESS ) {
429
421
if (smfi_chgheader (MG (ctx ), f , idx , v ) == MI_SUCCESS ) {
430
- RETVAL_TRUE () ;
422
+ RETVAL_TRUE ;
431
423
}
432
424
}
433
425
434
- RETVAL_FALSE () ;
426
+ RETVAL_FALSE ;
435
427
}
436
428
437
429
PHP_FUNCTION (smfi_addrcpt )
@@ -441,11 +433,11 @@ PHP_FUNCTION(smfi_addrcpt)
441
433
442
434
if (zend_parse_parameters (1 TSRMLS_CC , "s" , & rcpt , & len ) == SUCCESS ) {
443
435
if (smfi_addrcpt (MG (ctx ), rcpt ) == MI_SUCCESS ) {
444
- RETVAL_TRUE () ;
436
+ RETVAL_TRUE ;
445
437
}
446
438
}
447
439
448
- RETVAL_FALSE () ;
440
+ RETVAL_FALSE ;
449
441
}
450
442
451
443
PHP_FUNCTION (smfi_delrcpt )
@@ -455,25 +447,25 @@ PHP_FUNCTION(smfi_delrcpt)
455
447
456
448
if (zend_parse_parameters (1 TSRMLS_CC , "s" , & rcpt , & len ) == SUCCESS ) {
457
449
if (smfi_delrcpt (MG (ctx ), rcpt ) == MI_SUCCESS ) {
458
- RETVAL_TRUE () ;
450
+ RETVAL_TRUE ;
459
451
}
460
452
}
461
453
462
- RETVAL_FALSE () ;
454
+ RETVAL_FALSE ;
463
455
}
464
456
465
457
PHP_FUNCTION (smfi_replacebody )
466
458
{
467
459
char * body ;
468
460
int len ;
469
461
470
- if (zend_parse_parameters (1 TSRMLS_CC , "s" , & rcpt , & len ) == SUCCESS ) {
462
+ if (zend_parse_parameters (1 TSRMLS_CC , "s" , & body , & len ) == SUCCESS ) {
471
463
if (smfi_replacebody (MG (ctx ), body , len ) == MI_SUCCESS ) {
472
- RETVAL_TRUE () ;
464
+ RETVAL_TRUE ;
473
465
}
474
466
}
475
467
476
- RETVAL_FALSE () ;
468
+ RETVAL_FALSE ;
477
469
}
478
470
479
471
PHP_MINIT_FUNCTION (milter )
@@ -483,11 +475,17 @@ PHP_MINIT_FUNCTION(milter)
483
475
REGISTER_LONG_CONSTANT ("SMFIS_DISCARD" , SMFIS_DISCARD , CONST_CS | CONST_PERSISTENT );
484
476
REGISTER_LONG_CONSTANT ("SMFIS_ACCEPT" , SMFIS_ACCEPT , CONST_CS | CONST_PERSISTENT );
485
477
REGISTER_LONG_CONSTANT ("SMFIS_TEMPFAIL" , SMFIS_TEMPFAIL , CONST_CS | CONST_PERSISTENT );
478
+
479
+ ZEND_INIT_MODULE_GLOBALS (milter , NULL , NULL );
486
480
}
487
481
488
482
PHP_MINFO_FUNCTION (milter )
489
483
{
490
- DISPLAY_INI_ENTRIES ();
484
+ php_info_print_table_start ();
485
+ php_info_print_table_header (2 , "Milter support" , "enabled" );
486
+ php_info_print_table_end ();
487
+
488
+ // DISPLAY_INI_ENTRIES();
491
489
}
492
490
493
491
@@ -673,7 +671,7 @@ int main(int argc, char *argv[])
673
671
char * param_error = NULL ;
674
672
/* end of temporary locals */
675
673
676
- void * * * tsrm_ls ;
674
+ TSRMLS_FETCH () ;
677
675
678
676
679
677
#ifdef HAVE_SIGNAL_H
@@ -708,8 +706,6 @@ int main(int argc, char *argv[])
708
706
709
707
sapi_module .startup (& milter_sapi_module );
710
708
711
- tsrm_ls = ts_resource (0 );
712
-
713
709
zend_first_try {
714
710
while ((c = ap_php_getopt (argc , argv , OPTSTRING ))!= -1 ) {
715
711
switch (c ) {
@@ -865,9 +861,6 @@ int main(int argc, char *argv[])
865
861
argv [ap_php_optind - 1 ] = file_handle .filename ;
866
862
SG (request_info ).argv = argv + ap_php_optind - 1 ;
867
863
868
- /* TSRM is used to allocate a per-thread structure */
869
- ts_allocate_id (& milter_globals_id , sizeof (milter_globals ), NULL , NULL );
870
-
871
864
if (dofork ) {
872
865
switch (fork ()) {
873
866
case -1 : /* Uh-oh, we have a problem forking. */
0 commit comments