summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarald Radi <phanto@php.net>2002-12-01 16:37:59 +0000
committerHarald Radi <phanto@php.net>2002-12-01 16:37:59 +0000
commit8c19b754f9ff8b87a69c6536083ebed3ec81e311 (patch)
tree8c46288e80f2ef7ce2dd5f25a82ff1afdb76e904
parentdb93856c0790238603e65dc7eeac25f0bb25dd64 (diff)
downloadphp-git-8c19b754f9ff8b87a69c6536083ebed3ec81e311.tar.gz
first working version
-rw-r--r--sapi/milter/php_milter.c213
1 files changed, 106 insertions, 107 deletions
diff --git a/sapi/milter/php_milter.c b/sapi/milter/php_milter.c
index 12d6b7c52f..df207b5d7a 100644
--- a/sapi/milter/php_milter.c
+++ b/sapi/milter/php_milter.c
@@ -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. */