multiline rule support.

remotes/origin/master-1.0.x
Jason Ish 15 years ago committed by Victor Julien
parent 23aa6cf642
commit ce20c33634

@ -226,13 +226,30 @@ int DetectLoadSigFile(DetectEngineCtx *de_ctx, char *sig_file) {
return -1;
}
char line[8192] = "";
while(fgets(line, (int)sizeof(line), fp) != NULL) {
/** \todo multi line support */
int offset = 0;
while(fgets(line + offset, (int)sizeof(line) - offset, fp) != NULL) {
int len = strlen(line);
/* ignore comments and empty lines */
if (line[0] == '\n' || line[0] == ' ' || line[0] == '#' || line[0] == '\t')
continue;
/* Check for multiline rules. */
while (isspace(line[--len]));
if (line[len] == '\\') {
offset = len;
if (offset < sizeof(line) - 1) {
/* We have room for more. */
continue;
}
/* No more room in line buffer, continue, rule will fail
* to parse. */
}
/* Reset offset. */
offset = 0;
sig = DetectEngineAppendSig(de_ctx, line);
if (sig != NULL) {
SCLogDebug("signature %"PRIu32" loaded", sig->id);

Loading…
Cancel
Save