[prelude-cvslog] r10632 - libprelude/trunk/src

noreply at prelude-ids.org noreply at prelude-ids.org
Mon Jul 7 18:38:04 CEST 2008


Author: yoann
Date: 2008-07-07 18:38:04 +0200 (Mon, 07 Jul 2008)
New Revision: 10632

Modified:
   libprelude/trunk/src/idmef-criteria-string.lex.l
   libprelude/trunk/src/idmef-criteria-string.yac.y
Log:
Allow IDMEF criteria with multiples values for a single path,
as can be seen in the following example:

 alert.classification.text = (A || B || C || D)

This will be internally translated to the original criteria language:
alert.classification.text = A || alert.classification.text = B || alert.classification.text = C || alert.classification.text = D


Modified: libprelude/trunk/src/idmef-criteria-string.lex.l
===================================================================
--- libprelude/trunk/src/idmef-criteria-string.lex.l	2008-07-03 12:02:49 UTC (rev 10631)
+++ libprelude/trunk/src/idmef-criteria-string.lex.l	2008-07-07 16:38:04 UTC (rev 10632)
@@ -51,7 +51,11 @@
 int yylex_destroy(void);
 
 
+static prelude_bool_t in_parenthesis = FALSE;
 
+static void do_push(void);
+static void do_pop(void);
+
 static char *escape_str(char *str)
 {
         size_t w = 0, i = 0;
@@ -72,7 +76,6 @@
         return str;
 }
 
-
 %}
 
 IDMEF_PATH      ([a-zA-Z0-9_\-]+(\(\-?[0-9\*]+\))?\.?)+
@@ -83,42 +86,16 @@
 %option noyywrap
 %option stack
 
-%x IDMEF_VALUE
+%x HAS_PATH
 
 %%
 
-substr                  { yy_push_state(IDMEF_VALUE); return TOK_RELATION_SUBSTRING; }
-\!substr                { yy_push_state(IDMEF_VALUE); return TOK_RELATION_NOT_SUBSTRING; }
-substr\*                { yy_push_state(IDMEF_VALUE); return TOK_RELATION_SUBSTRING_NOCASE; }
-\!substr\*              { yy_push_state(IDMEF_VALUE); return TOK_RELATION_NOT_SUBSTRING_NOCASE; }
-
 {IDMEF_PATH}            {
                                 yylval.str = strdup(yytext);
+                                yy_push_state(HAS_PATH);
                                 return TOK_IDMEF_PATH;
                         }
 
-\<\>                    { yy_push_state(IDMEF_VALUE); return TOK_RELATION_SUBSTRING; }
-\<\>\*                  { yy_push_state(IDMEF_VALUE); return TOK_RELATION_SUBSTRING_NOCASE; }
-\!\<\>                  { yy_push_state(IDMEF_VALUE); return TOK_RELATION_NOT_SUBSTRING; }
-\!\<\>\*                { yy_push_state(IDMEF_VALUE); return TOK_RELATION_NOT_SUBSTRING_NOCASE; }
-
-\>                      { yy_push_state(IDMEF_VALUE); return TOK_RELATION_GREATER; }
-\>\=                    { yy_push_state(IDMEF_VALUE); return TOK_RELATION_GREATER_OR_EQUAL; }
-\<                      { yy_push_state(IDMEF_VALUE); return TOK_RELATION_LESS; }
-\<\=                    { yy_push_state(IDMEF_VALUE); return TOK_RELATION_LESS_OR_EQUAL; }
-
-\~                      { yy_push_state(IDMEF_VALUE); return TOK_RELATION_REGEXP; }
-\~\*                    { yy_push_state(IDMEF_VALUE); return TOK_RELATION_REGEXP_NOCASE; }
-\!\~                    { yy_push_state(IDMEF_VALUE); return TOK_RELATION_NOT_REGEXP; }
-\!\~\*                  { yy_push_state(IDMEF_VALUE); return TOK_RELATION_NOT_REGEXP_NOCASE; }
-
-\=\=                    { yy_push_state(IDMEF_VALUE); return TOK_RELATION_EQUAL; }
-\=                      { yy_push_state(IDMEF_VALUE); return TOK_RELATION_EQUAL; }
-\=\*                    { yy_push_state(IDMEF_VALUE); return TOK_RELATION_EQUAL_NOCASE; }
-\!\=                    { yy_push_state(IDMEF_VALUE); return TOK_RELATION_NOT_EQUAL; }
-\!\=\*                  { yy_push_state(IDMEF_VALUE); return TOK_RELATION_NOT_EQUAL_NOCASE; }
-\!                      { return TOK_RELATION_IS_NULL; }
-
 \&\&                    { return TOK_OPERATOR_AND; }
 \&                      { return TOK_OPERATOR_AND; }
 \|\|                    { return TOK_OPERATOR_OR; }
@@ -127,50 +104,103 @@
 \(                      { return '('; }
 \)                      { return ')'; }
 
-<IDMEF_VALUE>{SQSTRING} {
+{BLANK}                 {
+                                /* nop */;
+                        }
+
+.                       {
+                                /* invalid token */
+                                yylval.str = strdup(yytext);
+                                return TOK_ERROR;
+                        }
+
+
+<HAS_PATH>\<\>                    { do_push(); return TOK_RELATION_SUBSTRING; }
+<HAS_PATH>\<\>\*                  { do_push(); return TOK_RELATION_SUBSTRING_NOCASE; }
+<HAS_PATH>\!\<\>                  { do_push(); return TOK_RELATION_NOT_SUBSTRING; }
+<HAS_PATH>\!\<\>\*                { do_push(); return TOK_RELATION_NOT_SUBSTRING_NOCASE; }
+
+<HAS_PATH>\>                      { do_push(); return TOK_RELATION_GREATER; }
+<HAS_PATH>\>\=                    { do_push(); return TOK_RELATION_GREATER_OR_EQUAL; }
+<HAS_PATH>\<                      { do_push(); return TOK_RELATION_LESS; }
+<HAS_PATH>\<\=                    { do_push(); return TOK_RELATION_LESS_OR_EQUAL; }
+
+<HAS_PATH>\~                      { do_push(); return TOK_RELATION_REGEXP; }
+<HAS_PATH>\~\*                    { do_push(); return TOK_RELATION_REGEXP_NOCASE; }
+<HAS_PATH>\!\~                    { do_push(); return TOK_RELATION_NOT_REGEXP; }
+<HAS_PATH>\!\~\*                  { do_push(); return TOK_RELATION_NOT_REGEXP_NOCASE; }
+
+<HAS_PATH>\=\=                    { do_push(); return TOK_RELATION_EQUAL; }
+<HAS_PATH>\=                      { do_push(); return TOK_RELATION_EQUAL; }
+<HAS_PATH>\=\*                    { do_push(); return TOK_RELATION_EQUAL_NOCASE; }
+<HAS_PATH>\!\=                    { do_push(); return TOK_RELATION_NOT_EQUAL; }
+<HAS_PATH>\!\=\*                  { do_push(); return TOK_RELATION_NOT_EQUAL_NOCASE; }
+<HAS_PATH>\!                      { return TOK_RELATION_IS_NULL; }
+
+<HAS_PATH>\&\&                    { return TOK_OPERATOR_AND; }
+<HAS_PATH>\&                      { return TOK_OPERATOR_AND; }
+<HAS_PATH>\|\|                    { return TOK_OPERATOR_OR; }
+<HAS_PATH>\|                      { return TOK_OPERATOR_OR; }
+
+
+<HAS_PATH>\(            {
+                                in_parenthesis = TRUE;
+                                return '(';
+                        }
+
+<HAS_PATH>\)            {
+                                in_parenthesis = FALSE;
+                                do_pop();
+                                return ')';
+                        }
+
+<HAS_PATH>{SQSTRING}    {
                                 yylval.str = escape_str(strndup(yytext + 1, yyleng - 2));
-                                yy_pop_state();
+
+                                if ( ! in_parenthesis )
+                                        yy_pop_state();
+
                                 return TOK_IDMEF_VALUE;
                         }
 
-<IDMEF_VALUE>{DQSTRING} {
+<HAS_PATH>{DQSTRING}    {
                                 yylval.str = escape_str(strndup(yytext + 1, yyleng - 2));
-                                yy_pop_state();
+                                do_pop();
                                 return TOK_IDMEF_VALUE;
                         }
 
-<IDMEF_VALUE>[^ \t\(\)\&\|]+ {
+
+<HAS_PATH>[^\&\|\(\) ]+ {
                                 yylval.str = escape_str(strdup(yytext));
-                                yy_pop_state();
+                                do_pop();
                                 return TOK_IDMEF_VALUE;
                         }
 
-<IDMEF_VALUE>{BLANK}    {
+<HAS_PATH>{BLANK}       {
                                 /* nop */;
                         }
 
-<IDMEF_VALUE>.          {
-                                /* invalid token */
-                                return TOK_ERROR;
-                        }
+%%
 
-{BLANK}                 {
-                                /* nop */;
-                        }
+void _idmef_criteria_string_init_lexer(void);
 
-.                       {
-                                /* invalid token */
-                                yylval.str = strdup(yytext);
-                                return TOK_ERROR;
-                        }
+void _idmef_criteria_string_init_lexer(void)
+{
+        BEGIN INITIAL;
+}
 
 
 
-%%
 
-void _idmef_criteria_string_init_lexer(void);
+static void do_push(void)
+{
+}
 
-void _idmef_criteria_string_init_lexer(void)
+
+static void do_pop(void)
 {
-        BEGIN INITIAL;
+        if ( ! in_parenthesis ) {
+                yy_pop_state();
+        }
 }
+

Modified: libprelude/trunk/src/idmef-criteria-string.yac.y
===================================================================
--- libprelude/trunk/src/idmef-criteria-string.yac.y	2008-07-03 12:02:49 UTC (rev 10631)
+++ libprelude/trunk/src/idmef-criteria-string.yac.y	2008-07-07 16:38:04 UTC (rev 10632)
@@ -41,9 +41,12 @@
 #include "idmef-criteria.h"
 #include "common.h"
 
-
+static int path_count = 0;
 static int real_ret = 0;
+static idmef_path_t *cur_path;
 static idmef_criteria_t *processed_criteria;
+static idmef_criterion_operator_t cur_operator;
+
 pthread_mutex_t _criteria_parse_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 
@@ -60,12 +63,42 @@
 
 #define YYERROR_VERBOSE
 
+
+static int create_criteria(idmef_criteria_t **criteria, idmef_path_t *path,
+                           idmef_criterion_value_t *value, idmef_criterion_operator_t operator)
+{
+        idmef_criterion_t *criterion;
+
+        real_ret = idmef_criteria_new(criteria);
+        if ( real_ret < 0 )
+                goto err;
+
+        if ( path_count++ > 0 )
+                idmef_path_ref(path);
+
+        real_ret = idmef_criterion_new(&criterion, path, value, operator);
+        if ( real_ret < 0 ) {
+                idmef_criteria_destroy(*criteria);
+                goto err;
+        }
+
+        idmef_criteria_set_criterion(*criteria, criterion);
+        return 0;
+
+err:
+        idmef_path_destroy(path);
+        cur_path = NULL;
+
+        return real_ret;
+}
+
+
 %}
 
 %union {
         char *str;
         int operator;
-        idmef_criterion_t *criterion;
+        idmef_path_t *path;
         idmef_criteria_t *criteria;
         idmef_criterion_operator_t relation;
 }
@@ -106,7 +139,10 @@
 
 %type <criteria> criteria
 %type <criteria> criteria_base
-%type <criterion> criterion
+%type <criteria> value
+%type <criteria> multiple_value
+%type <criteria> criterion
+%type <path> path
 %type <relation> relation
 %type <operator> operator
 
@@ -114,152 +150,149 @@
 /* Grammar follows */
 %%
 
-input: criteria                                        {
-                                                        processed_criteria = $1;
-                                                }
+input:
+        criteria {
+                processed_criteria = $1;
+        }
 ;
 
-criteria:        criteria_base                        {
-                                                        $$ = $1;
-                                                }
-        | criteria operator criteria_base        {
-                                                        if ( $2 == operator_or ) {
-                                                                idmef_criteria_or_criteria($1, $3);
-                                                        } else {
-                                                                idmef_criteria_and_criteria($1, $3);
-                                                        }
 
-                                                        $$ = $1;
-                                                }
+criteria:
+        criteria_base {
+                $$ = $1;
+        }
+
+        | criteria operator criteria_base {
+                if ( $2 == operator_or )
+                        idmef_criteria_or_criteria($1, $3);
+                else
+                        idmef_criteria_and_criteria($1, $3);
+
+                $$ = $1;
+        }
 ;
 
-criteria_base:        criterion                        {
-                                                        idmef_criteria_t *criteria;
+criteria_base:
+        criterion {
+                $$ = $1;
+        }
 
-                                                        real_ret = idmef_criteria_new(&criteria);
-                                                        if ( real_ret < 0 )
-                                                                YYABORT;
+        | '(' criteria ')' {
+                $$ = $2;
+        }
+;
 
-                                                        idmef_criteria_set_criterion(criteria, $1);
-                                                        $$ = criteria;
 
-                                                }
-        | '(' criteria ')'                        {
-                                                        $$ = $2;
-                                                }
+criterion:
+        path relation '(' multiple_value ')' {
+                $$ = $4;
+        }
+
+        | path relation value {
+                $$ = $3;
+        }
+
+        | path {
+                idmef_criteria_t *criteria;
+
+                real_ret = create_criteria(&criteria, $1, NULL, IDMEF_CRITERION_OPERATOR_NOT|IDMEF_CRITERION_OPERATOR_NULL);
+                if ( real_ret < 0 )
+                        YYABORT;
+
+                $$ = criteria;
+        }
+
+        | TOK_RELATION_IS_NULL path {
+                idmef_criteria_t *criteria;
+
+                real_ret = create_criteria(&criteria, $2, NULL, IDMEF_CRITERION_OPERATOR_NULL);
+                if ( real_ret < 0 )
+                        YYABORT;
+
+                $$ = criteria;
+        }
 ;
 
-criterion: TOK_IDMEF_PATH relation TOK_IDMEF_VALUE {
-                                                        idmef_path_t *path = NULL;
-                                                        idmef_criterion_value_t *value = NULL;
-                                                        idmef_criterion_operator_t operator = $2;
-                                                        idmef_criterion_t *criterion;
 
-                                                        real_ret = idmef_path_new_fast(&path, $1);
-                                                        if ( real_ret < 0 ) {
-                                                                free($1);
-                                                                free($3);
-                                                                YYABORT;
-                                                        }
+path:
+        TOK_IDMEF_PATH {
+                real_ret = idmef_path_new_fast(&cur_path, $1);
+                free($1);
 
-                                                        real_ret = idmef_criterion_value_new_from_string(&value, path, $3, operator);
-                                                        if ( real_ret < 0 ) {
-                                                                free($1);
-                                                                free($3);
-                                                                idmef_path_destroy(path);
-                                                                YYABORT;
-                                                        }
+                if ( real_ret < 0 )
+                        YYABORT;
 
-                                                        real_ret = idmef_criterion_new(&criterion, path, value, operator);
-                                                        if ( real_ret < 0 ) {
-                                                                free($1);
-                                                                free($3);
-                                                                idmef_path_destroy(path);
-                                                                idmef_criterion_value_destroy(value);
-                                                                YYABORT;
-                                                        }
+                path_count = 0;
+                $$ = cur_path;
+        }
+;
 
-                                                        free($1);
-                                                        free($3);
 
-                                                        $$ = criterion;
-                                                }
-        | TOK_IDMEF_PATH                                {
-                                                        idmef_path_t *path;
-                                                        idmef_criterion_t *criterion;
+value:
+        TOK_IDMEF_VALUE {
+                idmef_criteria_t *criteria;
+                idmef_criterion_value_t *value = NULL;
 
-                                                        real_ret = idmef_path_new_fast(&path, $1);
-                                                        if ( real_ret < 0 ) {
-                                                                free($1);
-                                                                YYABORT;
-                                                        }
+                real_ret = idmef_criterion_value_new_from_string(&value, cur_path, $1, cur_operator);
+                free($1);
 
-                                                        real_ret = idmef_criterion_new(&criterion, path, NULL,
-                                                                                       IDMEF_CRITERION_OPERATOR_NOT|
-                                                                                       IDMEF_CRITERION_OPERATOR_NULL);
-                                                        if ( real_ret < 0 ) {
-                                                                free($1);
-                                                                idmef_path_destroy(path);
-                                                                YYABORT;
-                                                        }
+                if ( real_ret < 0 )
+                        YYABORT;
 
-                                                        free($1);
+                real_ret = create_criteria(&criteria, cur_path, value, cur_operator);
+                if ( real_ret < 0 )
+                        YYABORT;
 
-                                                        $$ = criterion;
-                                                }
-        | TOK_RELATION_IS_NULL TOK_IDMEF_PATH        {
-                                                        idmef_path_t *path;
-                                                        idmef_criterion_t *criterion;
+                $$ = criteria;
+        }
+;
 
-                                                        real_ret = idmef_path_new_fast(&path, $2);
-                                                        if ( real_ret < 0) {
-                                                                free($2);
-                                                                YYABORT;
-                                                        }
 
-                                                        real_ret = idmef_criterion_new(&criterion, path, NULL,
-                                                                                       IDMEF_CRITERION_OPERATOR_NULL);
-                                                        if ( real_ret < 0 ) {
-                                                                free($2);
-                                                                idmef_path_destroy(path);
-                                                                YYABORT;
-                                                        }
 
-                                                        free($2);
+multiple_value:
+        value operator multiple_value {
+                if ( $2 == operator_or )
+                        idmef_criteria_or_criteria($1, $3);
+                else
+                        idmef_criteria_and_criteria($1, $3);
 
-                                                        $$ = criterion;
-                                                }
+                $$ = $1;
+        }
+
+        | value {
+                $$ = $1;
+        }
 ;
 
+
 relation:
-  TOK_RELATION_SUBSTRING            { $$ = IDMEF_CRITERION_OPERATOR_SUBSTR; }
-| TOK_RELATION_SUBSTRING_NOCASE     { $$ = IDMEF_CRITERION_OPERATOR_SUBSTR|IDMEF_CRITERION_OPERATOR_NOCASE; }
-| TOK_RELATION_NOT_SUBSTRING        { $$ = IDMEF_CRITERION_OPERATOR_SUBSTR|IDMEF_CRITERION_OPERATOR_NOT; }
-| TOK_RELATION_NOT_SUBSTRING_NOCASE { $$ = IDMEF_CRITERION_OPERATOR_SUBSTR|IDMEF_CRITERION_OPERATOR_NOT|IDMEF_CRITERION_OPERATOR_NOCASE; }
-| TOK_RELATION_REGEXP               { $$ = IDMEF_CRITERION_OPERATOR_REGEX; }
-| TOK_RELATION_REGEXP_NOCASE        { $$ = IDMEF_CRITERION_OPERATOR_REGEX|IDMEF_CRITERION_OPERATOR_NOCASE; }
-| TOK_RELATION_NOT_REGEXP           { $$ = IDMEF_CRITERION_OPERATOR_REGEX|IDMEF_CRITERION_OPERATOR_NOT; }
-| TOK_RELATION_NOT_REGEXP_NOCASE    { $$ = IDMEF_CRITERION_OPERATOR_REGEX|IDMEF_CRITERION_OPERATOR_NOT|IDMEF_CRITERION_OPERATOR_NOCASE; }
-| TOK_RELATION_GREATER              { $$ = IDMEF_CRITERION_OPERATOR_GREATER; }
-| TOK_RELATION_GREATER_OR_EQUAL     { $$ = IDMEF_CRITERION_OPERATOR_GREATER|IDMEF_CRITERION_OPERATOR_EQUAL; }
-| TOK_RELATION_LESS                 { $$ = IDMEF_CRITERION_OPERATOR_LESSER; }
-| TOK_RELATION_LESS_OR_EQUAL        { $$ = IDMEF_CRITERION_OPERATOR_LESSER|IDMEF_CRITERION_OPERATOR_EQUAL; }
-| TOK_RELATION_EQUAL                { $$ = IDMEF_CRITERION_OPERATOR_EQUAL; }
-| TOK_RELATION_EQUAL_NOCASE         { $$ = IDMEF_CRITERION_OPERATOR_EQUAL|IDMEF_CRITERION_OPERATOR_NOCASE; }
-| TOK_RELATION_NOT_EQUAL            { $$ = IDMEF_CRITERION_OPERATOR_EQUAL|IDMEF_CRITERION_OPERATOR_NOT; }
-| TOK_RELATION_NOT_EQUAL_NOCASE     { $$ = IDMEF_CRITERION_OPERATOR_EQUAL|IDMEF_CRITERION_OPERATOR_NOCASE|IDMEF_CRITERION_OPERATOR_NOT; }
-| TOK_RELATION_IS_NULL              { $$ = IDMEF_CRITERION_OPERATOR_NULL; }
+  TOK_RELATION_SUBSTRING            { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_SUBSTR; }
+| TOK_RELATION_SUBSTRING_NOCASE     { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_SUBSTR|IDMEF_CRITERION_OPERATOR_NOCASE; }
+| TOK_RELATION_NOT_SUBSTRING        { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_SUBSTR|IDMEF_CRITERION_OPERATOR_NOT; }
+| TOK_RELATION_NOT_SUBSTRING_NOCASE { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_SUBSTR|IDMEF_CRITERION_OPERATOR_NOT|IDMEF_CRITERION_OPERATOR_NOCASE; }
+| TOK_RELATION_REGEXP               { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_REGEX; }
+| TOK_RELATION_REGEXP_NOCASE        { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_REGEX|IDMEF_CRITERION_OPERATOR_NOCASE; }
+| TOK_RELATION_NOT_REGEXP           { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_REGEX|IDMEF_CRITERION_OPERATOR_NOT; }
+| TOK_RELATION_NOT_REGEXP_NOCASE    { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_REGEX|IDMEF_CRITERION_OPERATOR_NOT|IDMEF_CRITERION_OPERATOR_NOCASE; }
+| TOK_RELATION_GREATER              { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_GREATER; }
+| TOK_RELATION_GREATER_OR_EQUAL     { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_GREATER|IDMEF_CRITERION_OPERATOR_EQUAL; }
+| TOK_RELATION_LESS                 { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_LESSER; }
+| TOK_RELATION_LESS_OR_EQUAL        { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_LESSER|IDMEF_CRITERION_OPERATOR_EQUAL; }
+| TOK_RELATION_EQUAL                { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_EQUAL; }
+| TOK_RELATION_EQUAL_NOCASE         { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_EQUAL|IDMEF_CRITERION_OPERATOR_NOCASE; }
+| TOK_RELATION_NOT_EQUAL            { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_EQUAL|IDMEF_CRITERION_OPERATOR_NOT; }
+| TOK_RELATION_NOT_EQUAL_NOCASE     { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_EQUAL|IDMEF_CRITERION_OPERATOR_NOCASE|IDMEF_CRITERION_OPERATOR_NOT; }
+| TOK_RELATION_IS_NULL              { cur_operator = $$ = IDMEF_CRITERION_OPERATOR_NULL; }
 | TOK_ERROR                         { real_ret = prelude_error_verbose(PRELUDE_ERROR_IDMEF_CRITERIA_PARSE,
                                                                        "Criteria parser reported: Invalid operator found"); YYERROR; }
 ;
 
-operator:       TOK_OPERATOR_AND                { $$ = operator_and; }
-       |        TOK_OPERATOR_OR                        { $$ = operator_or; }
+operator:       TOK_OPERATOR_AND        { $$ = operator_and; }
+                | TOK_OPERATOR_OR       { $$ = operator_or; }
 ;
 
 %%
 
-
 static void yyerror(char *s)  /* Called by yyparse on error */
 {
         real_ret = prelude_error_verbose_make(PRELUDE_ERROR_SOURCE_IDMEF_CRITERIA,




More information about the Prelude-cvslog mailing list