implemented the -i option to make regex case insensitive
authorChristian Thaeter <ct@pipapo.org>
Wed, 31 Oct 2007 06:23:54 +0000 (07:23 +0100)
committerChristian Thaeter <ct@pipapo.org>
Wed, 31 Oct 2007 06:23:54 +0000 (07:23 +0100)
src/main.c
src/rxpd.h
src/rxpd_connection_cmd.c
src/rxpd_file.c
src/rxpd_rule.c
tests/10basics.tests
tests/40regexchecking.tests

index 012ccfa..bffd501 100644 (file)
@@ -57,7 +57,7 @@ usage (void)
     " -t port     listen on tcp port\n"
     //" -u name     unix\n"
     " -p policy   define a list for access policies\n"
-    //" -i          case insensitive\n"
+    " -i          case insensitive regex\n"
     //" -4          ipv4\n"
     //" -6          ipv6\n"
     //" -r          resolve names\n"
index 9fa53c6..e749674 100644 (file)
@@ -143,11 +143,12 @@ struct rxpd_rule
   llist node;
   char* string;
   time_t atime;
+  struct rxpd_base* base;
   regex_t rx;
 };
 
 struct rxpd_rule*
-rxpd_rule_new (const char* buf);
+rxpd_rule_new (const char* buf, struct rxpd_base* base);
 
 struct rxpd_rule*
 rxpd_rule_copy (const struct rxpd_rule* src);
index f2dc078..e8ec57d 100644 (file)
@@ -120,7 +120,8 @@ rxpd_connection_APPEND_PREPEND_helper (struct rxpd_connection* self)
       if (*line && !RXPD_PREFIXCMP (line, "#EXIT:"))
         {
           struct rxpd_rule* rule;
-          rule = rxpd_rule_new (line);
+
+          rule = rxpd_rule_new (line, self->socket->base);
           llist_insert_tail (&self->tmp_list, &rule->node);
         }
       else
@@ -237,7 +238,7 @@ rxpd_connection_cmd_REPLACE (struct rxpd_connection* self)
           if (self->tmp_str)
             {
               struct rxpd_rule* rule;
-              rule = rxpd_rule_new (line);
+              rule = rxpd_rule_new (line, self->socket->base);
               if (rule)
                 llist_insert_tail (&self->tmp_list, &rule->node);
               else
@@ -362,7 +363,7 @@ rxpd_connection_cmd_FETCH (struct rxpd_connection* self)
           if (*line && !RXPD_PREFIXCMP (line, "#EXIT:"))
             {
               struct rxpd_rule* rule;
-              rule = rxpd_rule_new (line);
+              rule = rxpd_rule_new (line, base);
               if (!rule)
                 rxpd_die ("rule creation failed on '%s'\n", line);
 
index 3610730..4d6c278 100644 (file)
@@ -108,7 +108,7 @@ rxpd_file_load (struct rxpd_file* self)
             buf[last-1] = '\0';
 
           struct rxpd_rule* rule;
-          rule = rxpd_rule_new (buf);
+          rule = rxpd_rule_new (buf, self->base);
           rxpd_log (self->base, LOG_DEBUG, "new rule '%s'\n", rule->string);
 
           llist_insert_tail (&self->rules, &rule->node);
index 4dedc59..0bc90d3 100644 (file)
 #include "rxpd.h"
 
 struct rxpd_rule*
-rxpd_rule_new (const char* buf)
+rxpd_rule_new (const char* buf, struct rxpd_base* base)
 {
   struct rxpd_rule* self = rxpd_malloc (sizeof (struct rxpd_rule));
 
   llist_init (&self->node);
   self->atime = (time_t)-1;
+  self->base = base;
 
   if (*buf != '#')
     {
@@ -48,8 +49,7 @@ rxpd_rule_new (const char* buf)
                 self->atime = time (NULL)-1;
             }
 
-          // TODO regflags from base
-          err = regcomp (&self->rx, rxstart+1, REG_EXTENDED|REG_ICASE|REG_NOSUB);
+          err = regcomp (&self->rx, rxstart+1, base->regflags|REG_EXTENDED|REG_NOSUB);
 
           if (!err)
             self->string = rxpd_strdup (namestart+1);
@@ -86,8 +86,7 @@ rxpd_rule_copy (const struct rxpd_rule* src)
       int err;
       char* rxstart = strchr (self->string, ':');
 
-      // TODO regflags from base
-      err = regcomp (&self->rx, rxstart+1, REG_EXTENDED|REG_ICASE|REG_NOSUB);
+      err = regcomp (&self->rx, rxstart+1, src->base->regflags|REG_EXTENDED|REG_NOSUB);
       if (err)
         rxpd_die ("unexpected regcomp error\n");
     }
@@ -111,8 +110,7 @@ rxpd_rule_activate (struct rxpd_rule* self)
               if (!rxstart)
                 return NULL;
 
-              // TODO regflags from base
-              if (regcomp (&self->rx, rxstart+1, REG_EXTENDED|REG_ICASE|REG_NOSUB))
+              if (regcomp (&self->rx, rxstart+1, self->base->regflags|REG_EXTENDED|REG_NOSUB))
                 return NULL;
 
               free (self->string);
index 79de3e7..af9325d 100644 (file)
@@ -25,6 +25,7 @@ out:  -b dir      basedir for rules
 out:  -q          be quiet
 out:  -t port     listen on tcp port
 out:  -p policy   define a list for access policies
+out:  -i          case insensitive regex
 out:  -L locale   set locale, must be a utf-8 locale, only LC_CTYPE is used
 out:  -U user     if started as root, run as user [default: nobody]
 out:  -h          this usage information
index 736538e..476fb23 100644 (file)
@@ -4,7 +4,7 @@
 cp -rf $srcdir/files ./
 chmod -R +w files
 port=$((RANDOM+1500))
-./rxpd -L $LC_CTYPE -Dvvv -b files -p policy -t $port example &>,${TESTS##*/}.log &
+./rxpd -i -L $LC_CTYPE -Dvvv -b files -p policy -t $port example &>,${TESTS##*/}.log &
 
 sleep 1
 
@@ -24,7 +24,7 @@ END
 
 TEST "matched 1" <<END
 in: CHECK:example
-in: GNU
+in: gnu
 out: accept:GNU|Linux
 END