@@ -139,7 +139,7 @@ static sfsistat mlfi_helo(SMFICTX *ctx, char *helohost)
139
139
140
140
params [0 ] = & host ;
141
141
142
- call_user_function (CG (function_table ), NULL , function_name , retval , 1 , param TSRMLS_CC );
142
+ call_user_function (CG (function_table ), NULL , function_name , retval , 1 , params TSRMLS_CC );
143
143
144
144
if (Z_TYPE_P (retval ) == IS_LONG ) {
145
145
return Z_LONG_P (retval );
@@ -151,16 +151,27 @@ static sfsistat mlfi_helo(SMFICTX *ctx, char *helohost)
151
151
/* envelope sender filter */
152
152
static sfsistat mlfi_envfrom (SMFICTX * ctx , char * * argv )
153
153
{
154
- zval * function_name , * retval ;
154
+ zval * function_name , * retval , * v , * * params [ 1 ] ;
155
155
TSRMLS_FETCH ();
156
156
157
157
/* set the milter context for possible use in API functions */
158
158
MG (ctx ) = ctx ;
159
159
160
160
/* call userland */
161
161
ZVAL_INIT (function_name );
162
+ ZVAL_INIT (v );
163
+
162
164
ZVAL_STRING (function_name , "milter_envelope_from" , 1 );
163
- call_user_function (CG (function_table ), NULL , function_name , retval , 0 , NULL TSRMLS_CC );
165
+ array_init (v );
166
+
167
+ while (* argv ) {
168
+ add_next_index_string (v , * argv , 1 );
169
+ argv ++ ;
170
+ }
171
+
172
+ params [0 ] = v ;
173
+
174
+ call_user_function (CG (function_table ), NULL , function_name , retval , 1 , params TSRMLS_CC );
164
175
165
176
if (Z_TYPE_P (retval ) == IS_LONG ) {
166
177
return Z_LONG_P (retval );
@@ -172,16 +183,27 @@ static sfsistat mlfi_envfrom(SMFICTX *ctx, char **argv)
172
183
/* envelope recipient filter */
173
184
static sfsistat mlfi_envrcpt (SMFICTX * ctx , char * * argv )
174
185
{
175
- zval * function_name , * retval ;
186
+ zval * function_name , * retval , * v , * * params [ 1 ] ;
176
187
TSRMLS_FETCH ();
177
188
178
189
/* set the milter context for possible use in API functions */
179
190
MG (ctx ) = ctx ;
180
191
181
192
/* call userland */
182
193
ZVAL_INIT (function_name );
194
+ ZVAL_INIT (v );
195
+
183
196
ZVAL_STRING (function_name , "milter_envelope_recipient" , 1 );
184
- call_user_function (CG (function_table ), NULL , function_name , retval , 0 , NULL TSRMLS_CC );
197
+ array_init (v );
198
+
199
+ while (* argv ) {
200
+ add_next_index_string (v , * argv , 1 );
201
+ argv ++ ;
202
+ }
203
+
204
+ params [0 ] = v ;
205
+
206
+ call_user_function (CG (function_table ), NULL , function_name , retval , 1 , params TSRMLS_CC );
185
207
186
208
if (Z_TYPE_P (retval ) == IS_LONG ) {
187
209
return Z_LONG_P (retval );
@@ -193,16 +215,25 @@ static sfsistat mlfi_envrcpt(SMFICTX *ctx, char **argv)
193
215
/* header filter */
194
216
static sfsistat mlfi_header (SMFICTX * ctx , char * headerf , char * headerv )
195
217
{
196
- zval * function_name , * retval ;
218
+ zval * function_name , * retval , * f , * v , * * params [ 2 ] ;
197
219
TSRMLS_FETCH ();
198
220
199
221
/* set the milter context for possible use in API functions */
200
222
MG (ctx ) = ctx ;
201
223
202
224
/* call userland */
203
225
ZVAL_INIT (function_name );
226
+ ZVAL_INIT (f );
227
+ ZVAL_INIT (v );
228
+
204
229
ZVAL_STRING (function_name , "milter_header" , 1 );
205
- call_user_function (CG (function_table ), NULL , function_name , retval , 0 , NULL TSRMLS_CC );
230
+ ZVAL_STRING (f , headerf , 1 );
231
+ ZVAL_STRING (v , headerv , 1 );
232
+
233
+ params [0 ] = f ;
234
+ params [1 ] = v ;
235
+
236
+ call_user_function (CG (function_table ), NULL , function_name , retval , 2 , params TSRMLS_CC );
206
237
207
238
if (Z_TYPE_P (retval ) == IS_LONG ) {
208
239
return Z_LONG_P (retval );
@@ -235,15 +266,21 @@ static sfsistat mlfi_eoh(SMFICTX *ctx)
235
266
/* body block */
236
267
static sfsistat mlfi_body (SMFICTX * ctx , u_char * bodyp , size_t len )
237
268
{
238
- zval * function_name , * retval ;
269
+ zval * function_name , * retval , * p , * * params [ 1 ]; ;
239
270
TSRMLS_FETCH ();
240
271
241
272
/* set the milter context for possible use in API functions */
242
273
MG (ctx ) = ctx ;
243
274
244
275
/* call userland */
245
276
ZVAL_INIT (function_name );
277
+ ZVAL_INIT (p );
278
+
246
279
ZVAL_STRING (function_name , "milter_body" , 1 );
280
+ ZVAL_STRINGL (p , bodyp , len , 1 );
281
+
282
+ params [0 ] = p ;
283
+
247
284
call_user_function (CG (function_table ), NULL , function_name , retval , 0 , NULL TSRMLS_CC );
248
285
249
286
if (Z_TYPE_P (retval ) == IS_LONG ) {
@@ -342,37 +379,101 @@ struct smfiDesc smfilter = {
342
379
*/
343
380
PHP_FUNCTION (smfi_getsymval )
344
381
{
345
- // smfi_getsymval();
382
+ char * symname , * ret ;
383
+ int len ;
384
+
385
+ if (zend_parse_parameters (1 TSRMLS_CC , "s" , & symname , & len ) == SUCCESS ) {
386
+ if ((ret = smfi_getsymval (MG (ctx ), symname )) != NULL ) {
387
+ RETVAL_STRING (ret );
388
+ }
389
+ }
390
+
391
+ RETVAL_NULL ();
346
392
}
347
393
348
394
PHP_FUNCTION (smfi_setreply )
349
395
{
350
- // smfi_setreply();
396
+ char * rcode , * xcode , * message ;
397
+ int len ;
398
+
399
+ if (zend_parse_parameters (3 TSRMLS_CC , "sss" , & rcode , & len , & xcode , & len , & message , & len ) == SUCCESS ) {
400
+ if (smfi_setreply (MG (ctx ), rcode , xcode , message ) == MI_SUCCESS ) {
401
+ RETVAL_TRUE ();
402
+ }
403
+ }
404
+
405
+ RETVAL_FALSE ();
351
406
}
352
407
353
408
PHP_FUNCTION (smfi_addheader )
354
409
{
355
- // smfi_addheader();
410
+ char * f , * v ;
411
+ int len ;
412
+
413
+ if (zend_parse_parameters (2 TSRMLS_CC , "ss" , & f , & len , & v , & len ) == SUCCESS ) {
414
+ if (smfi_addheader (MG (ctx ), f , v ) == MI_SUCCESS ) {
415
+ RETVAL_TRUE ();
416
+ }
417
+ }
418
+
419
+ RETVAL_FALSE ();
356
420
}
357
421
358
422
PHP_FUNCTION (smfi_chgheader )
359
423
{
360
- // smfi_chgheader();
424
+ char * f , * v ;
425
+ long idx ;
426
+ int len ;
427
+
428
+ if (zend_parse_parameters (3 TSRMLS_CC , "sls" , & f , & len , & idx , & v , & len ) == SUCCESS ) {
429
+ if (smfi_chgheader (MG (ctx ), f , idx , v ) == MI_SUCCESS ) {
430
+ RETVAL_TRUE ();
431
+ }
432
+ }
433
+
434
+ RETVAL_FALSE ();
361
435
}
362
436
363
437
PHP_FUNCTION (smfi_addrcpt )
364
438
{
365
- // smfi_addrcpt();
439
+ char * rcpt ;
440
+ int len ;
441
+
442
+ if (zend_parse_parameters (1 TSRMLS_CC , "s" , & rcpt , & len ) == SUCCESS ) {
443
+ if (smfi_addrcpt (MG (ctx ), rcpt ) == MI_SUCCESS ) {
444
+ RETVAL_TRUE ();
445
+ }
446
+ }
447
+
448
+ RETVAL_FALSE ();
366
449
}
367
450
368
451
PHP_FUNCTION (smfi_delrcpt )
369
452
{
370
- // smfi_delrcpt();
453
+ char * rcpt ;
454
+ int len ;
455
+
456
+ if (zend_parse_parameters (1 TSRMLS_CC , "s" , & rcpt , & len ) == SUCCESS ) {
457
+ if (smfi_delrcpt (MG (ctx ), rcpt ) == MI_SUCCESS ) {
458
+ RETVAL_TRUE ();
459
+ }
460
+ }
461
+
462
+ RETVAL_FALSE ();
371
463
}
372
464
373
465
PHP_FUNCTION (smfi_replacebody )
374
466
{
375
- // smfi_replacebody();
467
+ char * body ;
468
+ int len ;
469
+
470
+ if (zend_parse_parameters (1 TSRMLS_CC , "s" , & rcpt , & len ) == SUCCESS ) {
471
+ if (smfi_replacebody (MG (ctx ), body , len ) == MI_SUCCESS ) {
472
+ RETVAL_TRUE ();
473
+ }
474
+ }
475
+
476
+ RETVAL_FALSE ();
376
477
}
377
478
378
479
PHP_MINIT_FUNCTION (milter )
0 commit comments