On Wed, Nov 17, 1999, Stefan H. Holek wrote:
> > I want to force only https to certain directories,
> > so following the example in Chapter 5 [last example],
> > <Directory /usr/local/apache/htdocs/secure>
> > RewriteEngine on
> > RewriteCond %{HTTPS} !=on
> > RewriteRule .* - [forbidden]
> > </Directory>
> >
> > still allows both http and https.
>
> I am experiencing a (somehow, possibly) related
> problem. I cannot make the following work
>
> <Directory /blah1>
> SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
> </Directory>
>
> However, this *does* work:
>
> <Directory /blah2>
> SSLRequire %{SSL_CIPHER} !~ m/^(EXP|NULL)-/
> </Directory>
>
> Using some CGIs at the proper locations I was
> able to verify the environment.
> SSL_CIPHER_USEKEYSIZE *is* 40 when I am using an
> export browser! Still, not "forbidden".
>
> Setup:
> Apache-1.3.9 + mod_ssl-2.4.8-1.3.9/OpenSSL-0.9.4 + php-3.0.12
>
> Ideas?
Yes, my fault. I assumed strcmp(3) works correctly also for number
strings. But that's not the case. Even it does a lexicographical
compare, it doesn't work for numbers (at least not for numbers of
different length!). I've now comitted the following patch for mod_ssl
2.4.9 which should fix the problem the same way a similar function
solved the problem in mod_rewrite.
Ralf S. Engelschall
[EMAIL PROTECTED]
www.engelschall.com
Index: ssl_expr_eval.c
===================================================================
RCS file: /e/modssl/cvs/mod_ssl/pkg.apache/src/modules/ssl/ssl_expr_eval.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ssl_expr_eval.c 1999/05/01 10:06:08 1.9
+++ ssl_expr_eval.c 1999/11/24 15:33:08 1.10
@@ -70,9 +70,10 @@
** _________________________________________________________________
*/
-static BOOL ssl_expr_eval_comp(request_rec *r, ssl_expr *node);
-static char *ssl_expr_eval_word(request_rec *r, ssl_expr *node);
-static char *ssl_expr_eval_func_file(request_rec *r, char *filename);
+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 *);
BOOL ssl_expr_eval(request_rec *r, ssl_expr *node)
{
@@ -124,22 +125,22 @@
case op_LT: {
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);
+ return (ssl_expr_eval_strcmplex(ssl_expr_eval_word(r, e1),
+ssl_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 (strcmp(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) <=
0);
+ return (ssl_expr_eval_strcmplex(ssl_expr_eval_word(r, e1),
+ssl_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 (strcmp(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) >
0);
+ return (ssl_expr_eval_strcmplex(ssl_expr_eval_word(r, e1),
+ssl_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 (strcmp(ssl_expr_eval_word(r, e1), ssl_expr_eval_word(r, e2)) >=
0);
+ return (ssl_expr_eval_strcmplex(ssl_expr_eval_word(r, e1),
+ssl_expr_eval_word(r, e2)) >= 0);
}
case op_IN: {
ssl_expr *e1 = (ssl_expr *)node->node_arg1;
@@ -253,5 +254,29 @@
}
ap_pfclose(r->pool, fp);
return buf;
+}
+
+/* a variant of strcmp(3) which works correctly also for number strings */
+static int ssl_expr_eval_strcmplex(char *cpNum1, char *cpNum2)
+{
+ int i, n1, n2;
+
+ if (cpNum1 == NULL)
+ return -1;
+ if (cpNum2 == NULL)
+ return +1;
+ n1 = strlen(cpNum1);
+ n2 = strlen(cpNum2);
+ if (n1 > n2)
+ return 1;
+ if (n1 < n2)
+ return -1;
+ for (i = 0; i < n1; i++) {
+ if (cpNum1[i] > cpNum2[i])
+ return 1;
+ if (cpNum1[i] < cpNum2[i])
+ return -1;
+ }
+ return 0;
}
______________________________________________________________________
Apache Interface to OpenSSL (mod_ssl) www.modssl.org
User Support Mailing List [EMAIL PROTECTED]
Automated List Manager [EMAIL PROTECTED]