1
0
mirror of https://github.com/apache/httpd.git synced 2025-08-08 15:02:10 +03:00
Files
apache/modules/ssl/ssl_expr.c
Stefan Fritsch f9ba292bfa Make the ssl expression parser thread-safe. It now requires bison instead of
yacc.

Also change the make file magic so that the real source file name is
embedded in the debug info.

The generated files have been created with flex 2.5.35/bison 2.4.1. The two
'no previous prototype' warnings are supposed to be fixed with the next flex
version.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1002824 13f79535-47bb-0310-9956-ffa450edef68
2010-09-29 19:42:03 +00:00

86 lines
2.6 KiB
C

/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* _ _
* _ __ ___ ___ __| | ___ ___| | mod_ssl
* | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
* | | | | | | (_) | (_| | \__ \__ \ |
* |_| |_| |_|\___/ \__,_|___|___/___/_|
* |_____|
* ssl_expr.c
* Expression Handling
*/
/* ``It is hard to fly with
the eagles when you work
with the turkeys.''
-- Unknown */
#include "ssl_private.h"
/* _________________________________________________________________
**
** Expression Handling
** _________________________________________________________________
*/
ssl_expr *ssl_expr_comp(apr_pool_t *p, char *expr, const char **err)
{
ssl_expr_info_type context;
int rc;
context.pool = p;
context.inputbuf = expr;
context.inputlen = strlen(expr);
context.inputptr = context.inputbuf;
context.expr = FALSE;
context.error = NULL;
ssl_expr_yylex_init(&context.scanner);
ssl_expr_yyset_extra(&context, context.scanner);
rc = ssl_expr_yyparse(&context);
ssl_expr_yylex_destroy(context.scanner);
*err = context.error;
if (rc)
return NULL;
return context.expr;
}
ssl_expr *ssl_expr_make(ssl_expr_node_op op, void *a1, void *a2,
ssl_expr_info_type *context)
{
ssl_expr *node;
node = (ssl_expr *)apr_palloc(context->pool, sizeof(ssl_expr));
node->node_op = op;
node->node_arg1 = (char *)a1;
node->node_arg2 = (char *)a2;
return node;
}
int ssl_expr_exec(request_rec *r, ssl_expr *expr, const char **err)
{
BOOL rc;
*err = NULL;
rc = ssl_expr_eval(r, expr, err);
if (*err != NULL)
return (-1);
else
return (rc ? 1 : 0);
}