]> granicus.if.org Git - php/commitdiff
first working version
authorHarald Radi <phanto@php.net>
Sun, 1 Dec 2002 16:37:59 +0000 (16:37 +0000)
committerHarald Radi <phanto@php.net>
Sun, 1 Dec 2002 16:37:59 +0000 (16:37 +0000)
sapi/milter/php_milter.c

index 12d6b7c52f590e0b44ea33616cff484af8d34efb..df207b5d7a935ef2470c1754ba358fce0595785b 100644 (file)
@@ -73,7 +73,7 @@ extern int ap_php_optind;
  * globals
  */
 static int flag_debug=0;
-static zend_file_handle file_handle;
+static char *filename;
 
 /* per thread */
 ZEND_BEGIN_MODULE_GLOBALS(milter)
@@ -89,7 +89,8 @@ ZEND_DECLARE_MODULE_GLOBALS(milter)
 /* connection info filter */
 static sfsistat        mlfi_connect(SMFICTX *ctx, char *hostname, _SOCK_ADDR *hostaddr)
 {
-       zval *function_name, *retval, *param[1];
+       zend_file_handle file_handle;
+       zval function_name, retval, *param[1];
        TSRMLS_FETCH();
 
        /* set the milter context for possible use in API functions */
@@ -106,19 +107,26 @@ static sfsistat   mlfi_connect(SMFICTX *ctx, char *hostname, _SOCK_ADDR *hostaddr)
        SG(headers_sent) = 1;
        SG(request_info).no_headers = 1;
                
-       php_execute_script(&file_handle TSRMLS_CC);
+       file_handle.type = ZEND_HANDLE_FILENAME;
+       file_handle.filename = filename;
+       file_handle.free_filename = 0;
+       file_handle.opened_path = NULL;
 
+       php_execute_script(&file_handle TSRMLS_CC);
+       
        /* call userland */
-       INIT_PZVAL(function_name);
+       INIT_ZVAL(function_name);
+
+       ALLOC_ZVAL(param[0]);
        INIT_PZVAL(param[0]);
 
-       ZVAL_STRING(function_name, "milter_connect", 1);
+       ZVAL_STRING(&function_name, "milter_connect", 0);
        ZVAL_STRING(param[0], hostname, 1);
 
-       call_user_function(CG(function_table), NULL, function_name, retval, 1, param TSRMLS_CC);
+       call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC);
 
-       if (Z_TYPE_P(retval) == IS_LONG) {
-               return Z_LVAL_P(retval);
+       if (Z_TYPE(retval) == IS_LONG) {
+               return Z_LVAL(retval);
        } else {
                return SMFIS_CONTINUE;
        }
@@ -127,23 +135,27 @@ static sfsistat   mlfi_connect(SMFICTX *ctx, char *hostname, _SOCK_ADDR *hostaddr)
 /* SMTP HELO command filter */
 static sfsistat mlfi_helo(SMFICTX *ctx, char *helohost)
 {
-       zval *function_name, *retval, *param[1];
+       zval function_name, retval, *param[1];
        TSRMLS_FETCH();
 
        /* set the milter context for possible use in API functions */
        MG(ctx) = ctx;
        
        /* call userland */
-       INIT_PZVAL(function_name);
+       INIT_ZVAL(function_name);
+       
+       ALLOC_ZVAL(param[0]);
        INIT_PZVAL(param[0]);
 
-       ZVAL_STRING(function_name, "milter_helo", 1);
+       ZVAL_STRING(&function_name, "milter_helo", 0);
        ZVAL_STRING(param[0], helohost, 1);
 
-       call_user_function(CG(function_table), NULL, function_name, retval, 1, param TSRMLS_CC);
+       call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC);
+
+       FREE_ZVAL(param[0]);
 
-       if (Z_TYPE_P(retval) == IS_LONG) {
-               return Z_LVAL_P(retval);
+       if (Z_TYPE(retval) == IS_LONG) {
+               return Z_LVAL(retval);
        } else {
                return SMFIS_CONTINUE;
        }
@@ -152,17 +164,19 @@ static sfsistat mlfi_helo(SMFICTX *ctx, char *helohost)
 /* envelope sender filter */
 static sfsistat mlfi_envfrom(SMFICTX *ctx, char **argv)
 {
-       zval *function_name, *retval, *param[1];
+       zval function_name, retval, *param[1];
        TSRMLS_FETCH();
 
        /* set the milter context for possible use in API functions */
        MG(ctx) = ctx;
        
        /* call userland */
-       INIT_PZVAL(function_name);
+       INIT_ZVAL(function_name);
+       
+       ALLOC_ZVAL(param[0]);
        INIT_PZVAL(param[0]);
 
-       ZVAL_STRING(function_name, "milter_envelope_from", 1);
+       ZVAL_STRING(&function_name, "milter_envelope_from", 0);
        array_init(param[0]);
 
        while (*argv) {
@@ -170,10 +184,12 @@ static sfsistat mlfi_envfrom(SMFICTX *ctx, char **argv)
                argv++;
        }
 
-       call_user_function(CG(function_table), NULL, function_name, retval, 1, param TSRMLS_CC);
+       call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC);
 
-       if (Z_TYPE_P(retval) == IS_LONG) {
-               return Z_LVAL_P(retval);
+       FREE_ZVAL(param[0]);
+       
+       if (Z_TYPE(retval) == IS_LONG) {
+               return Z_LVAL(retval);
        } else {
                return SMFIS_CONTINUE;
        }
@@ -182,17 +198,19 @@ static sfsistat mlfi_envfrom(SMFICTX *ctx, char **argv)
 /* envelope recipient filter */
 static sfsistat mlfi_envrcpt(SMFICTX *ctx, char **argv)
 {
-       zval *function_name, *retval, *param[1];
+       zval function_name, retval, *param[1];
        TSRMLS_FETCH();
 
        /* set the milter context for possible use in API functions */
        MG(ctx) = ctx;
        
        /* call userland */
-       INIT_PZVAL(function_name);
+       INIT_ZVAL(function_name);
+       
+       ALLOC_ZVAL(param[0]);
        INIT_PZVAL(param[0]);
 
-       ZVAL_STRING(function_name, "milter_envelope_recipient", 1);
+       ZVAL_STRING(&function_name, "milter_envelope_recipient", 0);
        array_init(param[0]);
 
        while (*argv) {
@@ -200,10 +218,12 @@ static sfsistat mlfi_envrcpt(SMFICTX *ctx, char **argv)
                argv++;
        }
 
-       call_user_function(CG(function_table), NULL, function_name, retval, 1, param TSRMLS_CC);
+       call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC);
 
-       if (Z_TYPE_P(retval) == IS_LONG) {
-               return Z_LVAL_P(retval);
+       FREE_ZVAL(param[0]);
+       
+       if (Z_TYPE(retval) == IS_LONG) {
+               return Z_LVAL(retval);
        } else {
                return SMFIS_CONTINUE;
        }
@@ -212,25 +232,31 @@ static sfsistat mlfi_envrcpt(SMFICTX *ctx, char **argv)
 /* header filter */
 static sfsistat mlfi_header(SMFICTX *ctx, char *headerf, char *headerv)
 {
-       zval *function_name, *retval, *param[2];
+       zval function_name, retval, *param[2];
        TSRMLS_FETCH();
 
        /* set the milter context for possible use in API functions */
        MG(ctx) = ctx;
        
        /* call userland */
-       INIT_PZVAL(function_name);
+       INIT_ZVAL(function_name);
+       
+       ALLOC_ZVAL(param[0]);
+       ALLOC_ZVAL(param[1]);
        INIT_PZVAL(param[0]);
        INIT_PZVAL(param[1]);
        
-       ZVAL_STRING(function_name, "milter_header", 1);
+       ZVAL_STRING(&function_name, "milter_header", 0);
        ZVAL_STRING(param[0], headerf, 1);
        ZVAL_STRING(param[1], headerv, 1);
 
-       call_user_function(CG(function_table), NULL, function_name, retval, 2, param TSRMLS_CC);
+       call_user_function(CG(function_table), NULL, &function_name, &retval, 2, param TSRMLS_CC);
 
-       if (Z_TYPE_P(retval) == IS_LONG) {
-               return Z_LVAL_P(retval);
+       FREE_ZVAL(param[0]);
+       FREE_ZVAL(param[1]);
+       
+       if (Z_TYPE(retval) == IS_LONG) {
+               return Z_LVAL(retval);
        } else {
                return SMFIS_CONTINUE;
        }
@@ -239,19 +265,20 @@ static sfsistat mlfi_header(SMFICTX *ctx, char *headerf, char *headerv)
 /* end of header */
 static sfsistat mlfi_eoh(SMFICTX *ctx)
 {
-       zval *function_name, *retval;
+       zval function_name, retval;
        TSRMLS_FETCH();
 
        /* set the milter context for possible use in API functions */
        MG(ctx) = ctx;
        
        /* call userland */
-       INIT_PZVAL(function_name);
-       ZVAL_STRING(function_name, "milter_eoh", 1);
-       call_user_function(CG(function_table), NULL, function_name, retval, 0, NULL TSRMLS_CC);
+       INIT_ZVAL(function_name);
+       ZVAL_STRING(&function_name, "milter_eoh", 0);
 
-       if (Z_TYPE_P(retval) == IS_LONG) {
-               return Z_LVAL_P(retval);
+       call_user_function(CG(function_table), NULL, &function_name, &retval, 0, NULL TSRMLS_CC);
+
+       if (Z_TYPE(retval) == IS_LONG) {
+               return Z_LVAL(retval);
        } else {
                return SMFIS_CONTINUE;
        }
@@ -260,23 +287,27 @@ static sfsistat mlfi_eoh(SMFICTX *ctx)
 /* body block */
 static sfsistat mlfi_body(SMFICTX *ctx, u_char *bodyp, size_t len)
 {
-       zval *function_name, *retval, *param[1];;
+       zval function_name, retval, *param[1];
        TSRMLS_FETCH();
 
        /* set the milter context for possible use in API functions */
        MG(ctx) = ctx;
        
        /* call userland */
-       INIT_PZVAL(function_name);
+       INIT_ZVAL(function_name);
+       
+       ALLOC_ZVAL(param[0]);
        INIT_PZVAL(param[0]);
 
-       ZVAL_STRING(function_name, "milter_body", 1);
+       ZVAL_STRING(&function_name, "milter_body", 0);
        ZVAL_STRINGL(param[0], bodyp, len, 1);
        
-       call_user_function(CG(function_table), NULL, function_name, retval, 1, param TSRMLS_CC);
+       call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC);
 
-       if (Z_TYPE_P(retval) == IS_LONG) {
-               return Z_LVAL_P(retval);
+       FREE_ZVAL(param[0]);
+
+       if (Z_TYPE(retval) == IS_LONG) {
+               return Z_LVAL(retval);
        } else {
                return SMFIS_CONTINUE;
        }
@@ -285,19 +316,19 @@ static sfsistat mlfi_body(SMFICTX *ctx, u_char *bodyp, size_t len)
 /* end of message */
 static sfsistat mlfi_eom(SMFICTX *ctx)
 {
-       zval *function_name, *retval;
+       zval function_name, retval;
        TSRMLS_FETCH();
 
        /* set the milter context for possible use in API functions */
        MG(ctx) = ctx;
-       
+
        /* call userland */
-       INIT_PZVAL(function_name);
-       ZVAL_STRING(function_name, "milter_eom", 1);
-       call_user_function(CG(function_table), NULL, function_name, retval, 0, NULL TSRMLS_CC);
+       INIT_ZVAL(function_name);
+       ZVAL_STRING(&function_name, "milter_eom", 0);
+       call_user_function(CG(function_table), NULL, &function_name, &retval, 0, NULL TSRMLS_CC);
 
-       if (Z_TYPE_P(retval) == IS_LONG) {
-               return Z_LVAL_P(retval);
+       if (Z_TYPE(retval) == IS_LONG) {
+               return Z_LVAL(retval);
        } else {
                return SMFIS_CONTINUE;
        }
@@ -306,19 +337,20 @@ static sfsistat mlfi_eom(SMFICTX *ctx)
 /* message aborted */
 static sfsistat mlfi_abort(SMFICTX *ctx)
 {
-       zval *function_name, *retval;
+       zval function_name, retval;
        TSRMLS_FETCH();
 
        /* set the milter context for possible use in API functions */
        MG(ctx) = ctx;
        
        /* call userland */
-       INIT_PZVAL(function_name);
-       ZVAL_STRING(function_name, "milter_abort", 1);
-       call_user_function(CG(function_table), NULL, function_name, retval, 0, NULL TSRMLS_CC);
+       INIT_ZVAL(function_name);
+       ZVAL_STRING(&function_name, "milter_abort", 0);
+       
+       call_user_function(CG(function_table), NULL, &function_name, &retval, 0, NULL TSRMLS_CC);
 
-       if (Z_TYPE_P(retval) == IS_LONG) {
-               return Z_LVAL_P(retval);
+       if (Z_TYPE(retval) == IS_LONG) {
+               return Z_LVAL(retval);
        } else {
                return SMFIS_CONTINUE;
        }
@@ -328,22 +360,24 @@ static sfsistat mlfi_abort(SMFICTX *ctx)
 static sfsistat mlfi_close(SMFICTX *ctx)
 {
        int ret = SMFIS_CONTINUE;
-       zval *function_name, *retval;
+       zval function_name, retval;
        TSRMLS_FETCH();
 
        /* set the milter context for possible use in API functions */
        MG(ctx) = ctx;
        
        /* call userland */
-       INIT_PZVAL(function_name);
-       ZVAL_STRING(function_name, "milter_close", 1);
-       call_user_function(CG(function_table), NULL, function_name, retval, 0, NULL TSRMLS_CC);
+       INIT_ZVAL(function_name);
+       ZVAL_STRING(&function_name, "milter_close", 0);
+       
+       call_user_function(CG(function_table), NULL, &function_name, &retval, 0, NULL TSRMLS_CC);
 
-       if (Z_TYPE_P(retval) == IS_LONG) {
-               ret = Z_LVAL_P(retval);
+       if (Z_TYPE(retval) == IS_LONG) {
+               ret = Z_LVAL(retval);
        }
        
        php_request_shutdown((void *) 0);
+
        return ret;
 }
 
@@ -603,6 +637,10 @@ static sapi_module_struct milter_sapi_module = {
 };
 /* }}} */
 
+/****
+* ripped from cli, has to be cleaned up !
+*/
+
 /* {{{ php_milter_usage
  */
 static void php_milter_usage(char *argv0)
@@ -665,7 +703,6 @@ int main(int argc, char *argv[])
        int orig_optind=ap_php_optind;
        char *orig_optarg=ap_php_optarg;
        char *arg_free=NULL, **arg_excp=&arg_free;
-       char *script_file=NULL;
        int interactive=0;
        char *exec_direct=NULL;
        char *param_error=NULL;
@@ -761,7 +798,7 @@ int main(int argc, char *argv[])
                                break;
 
                        case 'f': /* parse file */
-                               script_file = ap_php_optarg;
+                               filename = ap_php_optarg;
                                break;
 
                        case 'h': /* help & quit */
@@ -817,51 +854,13 @@ int main(int argc, char *argv[])
                CG(interactive) = interactive;
 
                /* only set script_file if not set already and not in direct mode and not at end of parameter list */
-               if (argc > ap_php_optind && !script_file && strcmp(argv[ap_php_optind-1],"--")) {
-                       script_file=argv[ap_php_optind];
+               if (argc > ap_php_optind && !filename) {
+                       filename=argv[ap_php_optind];
                        ap_php_optind++;
                }
-               if (script_file) {
-                       if (!(file_handle.handle.fp = VCWD_FOPEN(script_file, "rb"))) {
-                               SG(headers_sent) = 1;
-                               SG(request_info).no_headers = 1;
-                               php_printf("Could not open input file: %s.\n", script_file);
-                               
-                               zend_ini_deactivate(TSRMLS_C);
-                               php_module_shutdown(TSRMLS_C);
-                               sapi_shutdown();
-                               tsrm_shutdown();
-
-                               exit(1);
-                       }
-                       file_handle.filename = script_file;
-                       /* #!php support */
-                       c = fgetc(file_handle.handle.fp);
-                       if (c == '#') {
-                               while (c != 10 && c != 13) {
-                                       c = fgetc(file_handle.handle.fp);       /* skip to end of line */
-                               }
-                               CG(zend_lineno) = -2;
-                       } else {
-                               rewind(file_handle.handle.fp);
-                       }
-               } else {
-                       file_handle.filename = "-";
-                       file_handle.handle.fp = stdin;
-               }
-               file_handle.type = ZEND_HANDLE_FP;
-               file_handle.opened_path = NULL;
-               file_handle.free_filename = 0;
-
-               /* before registering argv to modulule exchange the *new* argv[0] */
-               /* we can achieve this without allocating more memory */
-               SG(request_info).argc=argc-ap_php_optind+1;
-               arg_excp = argv+ap_php_optind-1;
-               arg_free = argv[ap_php_optind-1];
-               SG(request_info).path_translated = file_handle.filename;
-               argv[ap_php_optind-1] = file_handle.filename;
-               SG(request_info).argv=argv+ap_php_optind-1;
 
+               // check if file exists, exit else
+               
                if (dofork) {
                        switch(fork()) {
                                case -1: /* Uh-oh, we have a problem forking. */