summaryrefslogtreecommitdiffstats
path: root/nss_expr_eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'nss_expr_eval.c')
-rw-r--r--nss_expr_eval.c142
1 files changed, 65 insertions, 77 deletions
diff --git a/nss_expr_eval.c b/nss_expr_eval.c
index c3aa316..ff0545c 100644
--- a/nss_expr_eval.c
+++ b/nss_expr_eval.c
@@ -13,18 +13,6 @@
* limitations under the License.
*/
-/* _ _
- * _ __ ___ ___ __| | ___ ___| | mod_ssl
- * | '_ ` _ \ / _ \ / _` | / __/ __| | Apache Interface to OpenSSL
- * | | | | | | (_) | (_| | \__ \__ \ |
- * |_| |_| |_|\___/ \__,_|___|___/___/_|
- * |_____|
- * ssl_expr_eval.c
- * Expression Evaluation
- */
- /* ``Make love,
- not software!''
- -- Unknown */
#include "mod_nss.h"
/* _________________________________________________________________
@@ -33,12 +21,12 @@
** _________________________________________________________________
*/
-static BOOL ssl_expr_eval_comp(request_rec *, ssl_expr *);
-static char *ssl_expr_eval_word(request_rec *, ssl_expr *);
-static char *ssl_expr_eval_func_file(request_rec *, char *);
-static int ssl_expr_eval_strcmplex(char *, char *);
+static BOOL nss_expr_eval_comp(request_rec *, nss_expr *);
+static char *nss_expr_eval_word(request_rec *, nss_expr *);
+static char *nss_expr_eval_func_file(request_rec *, char *);
+static int nss_expr_eval_strcmplex(char *, char *);
-BOOL ssl_expr_eval(request_rec *r, ssl_expr *node)
+BOOL nss_expr_eval(request_rec *r, nss_expr *node)
{
switch (node->node_op) {
case op_True: {
@@ -48,73 +36,73 @@ BOOL ssl_expr_eval(request_rec *r, ssl_expr *node)
return FALSE;
}
case op_Not: {
- ssl_expr *e = (ssl_expr *)node->node_arg1;
- return (!ssl_expr_eval(r, e));
+ nss_expr *e = (nss_expr *)node->node_arg1;
+ return (!nss_expr_eval(r, e));
}
case op_Or: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- return (ssl_expr_eval(r, e1) || ssl_expr_eval(r, e2));
+ nss_expr *e1 = (nss_expr *)node->node_arg1;
+ nss_expr *e2 = (nss_expr *)node->node_arg2;
+ return (nss_expr_eval(r, e1) || nss_expr_eval(r, e2));
}
case op_And: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- return (ssl_expr_eval(r, e1) && ssl_expr_eval(r, e2));
+ nss_expr *e1 = (nss_expr *)node->node_arg1;
+ nss_expr *e2 = (nss_expr *)node->node_arg2;
+ return (nss_expr_eval(r, e1) && nss_expr_eval(r, e2));
}
case op_Comp: {
- ssl_expr *e = (ssl_expr *)node->node_arg1;
- return ssl_expr_eval_comp(r, e);
+ nss_expr *e = (nss_expr *)node->node_arg1;
+ return nss_expr_eval_comp(r, e);
}
default: {
- ssl_expr_error = "Internal evaluation error: Unknown expression node";
+ nss_expr_error = "Internal evaluation error: Unknown expression node";
return FALSE;
}
}
}
-static BOOL ssl_expr_eval_comp(request_rec *r, ssl_expr *node)
+static BOOL nss_expr_eval_comp(request_rec *r, nss_expr *node)
{
switch (node->node_op) {
case op_EQ: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- return (strcmp(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) == 0);
+ nss_expr *e1 = (nss_expr *)node->node_arg1;
+ nss_expr *e2 = (nss_expr *)node->node_arg2;
+ return (strcmp(nss_expr_eval_word(r, e1), nss_expr_eval_word(r, e2)) == 0);
}
case op_NE: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- return (strcmp(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) != 0);
+ nss_expr *e1 = (nss_expr *)node->node_arg1;
+ nss_expr *e2 = (nss_expr *)node->node_arg2;
+ return (strcmp(nss_expr_eval_word(r, e1), nss_expr_eval_word(r, e2)) != 0);
}
case op_LT: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- return (ssl_expr_eval_strcmplex(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) < 0);
+ nss_expr *e1 = (nss_expr *)node->node_arg1;
+ nss_expr *e2 = (nss_expr *)node->node_arg2;
+ return (nss_expr_eval_strcmplex(nss_expr_eval_word(r, e1), nss_expr_eval_word(r, e2)) < 0);
}
case op_LE: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- return (ssl_expr_eval_strcmplex(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) <= 0);
+ nss_expr *e1 = (nss_expr *)node->node_arg1;
+ nss_expr *e2 = (nss_expr *)node->node_arg2;
+ return (nss_expr_eval_strcmplex(nss_expr_eval_word(r, e1), nss_expr_eval_word(r, e2)) <= 0);
}
case op_GT: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- return (ssl_expr_eval_strcmplex(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) > 0);
+ nss_expr *e1 = (nss_expr *)node->node_arg1;
+ nss_expr *e2 = (nss_expr *)node->node_arg2;
+ return (nss_expr_eval_strcmplex(nss_expr_eval_word(r, e1), nss_expr_eval_word(r, e2)) > 0);
}
case op_GE: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- return (ssl_expr_eval_strcmplex(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) >= 0);
+ nss_expr *e1 = (nss_expr *)node->node_arg1;
+ nss_expr *e2 = (nss_expr *)node->node_arg2;
+ return (nss_expr_eval_strcmplex(nss_expr_eval_word(r, e1), nss_expr_eval_word(r, e2)) >= 0);
}
case op_IN: {
- ssl_expr *e1 = (ssl_expr *)node->node_arg1;
- ssl_expr *e2 = (ssl_expr *)node->node_arg2;
- ssl_expr *e3;
- char *w1 = ssl_expr_eval_word(r, e1);
+ nss_expr *e1 = (nss_expr *)node->node_arg1;
+ nss_expr *e2 = (nss_expr *)node->node_arg2;
+ nss_expr *e3;
+ char *w1 = nss_expr_eval_word(r, e1);
BOOL found = FALSE;
do {
- e3 = (ssl_expr *)e2->node_arg1;
- e2 = (ssl_expr *)e2->node_arg2;
- if (strcmp(w1, ssl_expr_eval_word(r, e3)) == 0) {
+ e3 = (nss_expr *)e2->node_arg1;
+ e2 = (nss_expr *)e2->node_arg2;
+ if (strcmp(w1, nss_expr_eval_word(r, e3)) == 0) {
found = TRUE;
break;
}
@@ -122,37 +110,37 @@ static BOOL ssl_expr_eval_comp(request_rec *r, ssl_expr *node)
return found;
}
case op_REG: {
- ssl_expr *e1;
- ssl_expr *e2;
+ nss_expr *e1;
+ nss_expr *e2;
char *word;
regex_t *regex;
- e1 = (ssl_expr *)node->node_arg1;
- e2 = (ssl_expr *)node->node_arg2;
- word = ssl_expr_eval_word(r, e1);
+ e1 = (nss_expr *)node->node_arg1;
+ e2 = (nss_expr *)node->node_arg2;
+ word = nss_expr_eval_word(r, e1);
regex = (regex_t *)(e2->node_arg1);
return (ap_regexec(regex, word, 0, NULL, 0) == 0);
}
case op_NRE: {
- ssl_expr *e1;
- ssl_expr *e2;
+ nss_expr *e1;
+ nss_expr *e2;
char *word;
regex_t *regex;
- e1 = (ssl_expr *)node->node_arg1;
- e2 = (ssl_expr *)node->node_arg2;
- word = ssl_expr_eval_word(r, e1);
+ e1 = (nss_expr *)node->node_arg1;
+ e2 = (nss_expr *)node->node_arg2;
+ word = nss_expr_eval_word(r, e1);
regex = (regex_t *)(e2->node_arg1);
return !(ap_regexec(regex, word, 0, NULL, 0) == 0);
}
default: {
- ssl_expr_error = "Internal evaluation error: Unknown expression node";
+ nss_expr_error = "Internal evaluation error: Unknown expression node";
return FALSE;
}
}
}
-static char *ssl_expr_eval_word(request_rec *r, ssl_expr *node)
+static char *nss_expr_eval_word(request_rec *r, nss_expr *node)
{
switch (node->node_op) {
case op_Digit: {
@@ -165,27 +153,27 @@ static char *ssl_expr_eval_word(request_rec *r, ssl_expr *node)
}
case op_Var: {
char *var = (char *)node->node_arg1;
- char *val = ssl_var_lookup(r->pool, r->server, r->connection, r, var);
+ char *val = nss_var_lookup(r->pool, r->server, r->connection, r, var);
return (val == NULL ? "" : val);
}
case op_Func: {
char *name = (char *)node->node_arg1;
- ssl_expr *args = (ssl_expr *)node->node_arg2;
+ nss_expr *args = (nss_expr *)node->node_arg2;
if (strEQ(name, "file"))
- return ssl_expr_eval_func_file(r, (char *)(args->node_arg1));
+ return nss_expr_eval_func_file(r, (char *)(args->node_arg1));
else {
- ssl_expr_error = "Internal evaluation error: Unknown function name";
+ nss_expr_error = "Internal evaluation error: Unknown function name";
return "";
}
}
default: {
- ssl_expr_error = "Internal evaluation error: Unknown expression node";
+ nss_expr_error = "Internal evaluation error: Unknown expression node";
return FALSE;
}
}
}
-static char *ssl_expr_eval_func_file(request_rec *r, char *filename)
+static char *nss_expr_eval_func_file(request_rec *r, char *filename)
{
apr_file_t *fp;
char *buf;
@@ -195,12 +183,12 @@ static char *ssl_expr_eval_func_file(request_rec *r, char *filename)
if (apr_file_open(&fp, filename, APR_READ|APR_BUFFERED,
APR_OS_DEFAULT, r->pool) != APR_SUCCESS) {
- ssl_expr_error = "Cannot open file";
+ nss_expr_error = "Cannot open file";
return "";
}
apr_file_info_get(&finfo, APR_FINFO_SIZE, fp);
if ((finfo.size + 1) != ((apr_size_t)finfo.size + 1)) {
- ssl_expr_error = "Huge file cannot be read";
+ nss_expr_error = "Huge file cannot be read";
apr_file_close(fp);
return "";
}
@@ -211,14 +199,14 @@ static char *ssl_expr_eval_func_file(request_rec *r, char *filename)
}
else {
if ((buf = (char *)apr_palloc(r->pool, sizeof(char)*(len+1))) == NULL) {
- ssl_expr_error = "Cannot allocate memory";
+ nss_expr_error = "Cannot allocate memory";
apr_file_close(fp);
return "";
}
offset = 0;
apr_file_seek(fp, APR_SET, &offset);
if (apr_file_read(fp, buf, &len) != APR_SUCCESS) {
- ssl_expr_error = "Cannot read from file";
+ nss_expr_error = "Cannot read from file";
apr_file_close(fp);
return "";
}
@@ -229,7 +217,7 @@ static char *ssl_expr_eval_func_file(request_rec *r, char *filename)
}
/* a variant of strcmp(3) which works correctly also for number strings */
-static int ssl_expr_eval_strcmplex(char *cpNum1, char *cpNum2)
+static int nss_expr_eval_strcmplex(char *cpNum1, char *cpNum2)
{
int i, n1, n2;