ssh: fix test

pull/2673/head
Victor Julien 9 years ago
parent a744d00f45
commit 1c46af477e

@ -103,6 +103,8 @@ static int DetectSshVersionMatch (ThreadVars *t, DetectEngineThreadCtx *det_ctx,
{ {
SCEnter(); SCEnter();
SCLogDebug("lets see");
DetectSshVersionData *ssh = (DetectSshVersionData *)m; DetectSshVersionData *ssh = (DetectSshVersionData *)m;
SshState *ssh_state = (SshState *)state; SshState *ssh_state = (SshState *)state;
if (ssh_state == NULL) { if (ssh_state == NULL) {
@ -327,7 +329,6 @@ int DetectSshVersionTestParse03 (void)
/** \test Send a get request in three chunks + more data. */ /** \test Send a get request in three chunks + more data. */
static int DetectSshVersionTestDetect01(void) static int DetectSshVersionTestDetect01(void)
{ {
int result = 0;
Flow f; Flow f;
uint8_t sshbuf1[] = "SSH-1."; uint8_t sshbuf1[] = "SSH-1.";
uint32_t sshlen1 = sizeof(sshbuf1) - 1; uint32_t sshlen1 = sizeof(sshbuf1) - 1;
@ -349,6 +350,7 @@ static int DetectSshVersionTestDetect01(void)
memset(&ssn, 0, sizeof(ssn)); memset(&ssn, 0, sizeof(ssn));
p = UTHBuildPacket(NULL, 0, IPPROTO_TCP); p = UTHBuildPacket(NULL, 0, IPPROTO_TCP);
FAIL_IF_NULL(p);
FLOW_INITIALIZE(&f); FLOW_INITIALIZE(&f);
f.protoctx = (void *)&ssn; f.protoctx = (void *)&ssn;
@ -362,84 +364,52 @@ static int DetectSshVersionTestDetect01(void)
StreamTcpInitConfig(TRUE); StreamTcpInitConfig(TRUE);
DetectEngineCtx *de_ctx = DetectEngineCtxInit(); DetectEngineCtx *de_ctx = DetectEngineCtxInit();
if (de_ctx == NULL) { FAIL_IF_NULL (de_ctx);
goto end;
}
de_ctx->flags |= DE_QUIET; de_ctx->flags |= DE_QUIET;
s = de_ctx->sig_list = SigInit(de_ctx,"alert ssh any any -> any any (msg:\"SSH\"; ssh.protoversion:1.10; sid:1;)"); s = de_ctx->sig_list = SigInit(de_ctx,"alert ssh any any -> any any (msg:\"SSH\"; ssh.protoversion:1.10; sid:1;)");
if (s == NULL) { FAIL_IF_NULL(s);
goto end;
}
SigGroupBuild(de_ctx); SigGroupBuild(de_ctx);
DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx); DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);
FLOWLOCK_WRLOCK(&f); SCLogDebug("==> 1");
int r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SSH, int r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SSH,
STREAM_TOSERVER, sshbuf1, sshlen1); STREAM_TOSERVER, sshbuf1, sshlen1);
if (r != 0) { FAIL_IF(r != 0);
printf("toserver chunk 1 returned %" PRId32 ", expected 0: ", r);
FLOWLOCK_UNLOCK(&f);
goto end;
}
SCLogDebug("==> 2");
r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SSH, STREAM_TOSERVER, r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SSH, STREAM_TOSERVER,
sshbuf2, sshlen2); sshbuf2, sshlen2);
if (r != 0) { FAIL_IF(r != 0);
printf("toserver chunk 2 returned %" PRId32 ", expected 0: ", r);
FLOWLOCK_UNLOCK(&f);
goto end;
}
SCLogDebug("==> 3");
r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SSH, STREAM_TOSERVER, r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SSH, STREAM_TOSERVER,
sshbuf3, sshlen3); sshbuf3, sshlen3);
if (r != 0) { FAIL_IF(r != 0);
printf("toserver chunk 3 returned %" PRId32 ", expected 0: ", r);
FLOWLOCK_UNLOCK(&f);
goto end;
}
SCLogDebug("==> 4");
r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SSH, STREAM_TOSERVER, r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SSH, STREAM_TOSERVER,
sshbuf4, sshlen4); sshbuf4, sshlen4);
if (r != 0) { FAIL_IF(r != 0);
printf("toserver chunk 4 returned %" PRId32 ", expected 0: ", r);
FLOWLOCK_UNLOCK(&f);
goto end;
}
FLOWLOCK_UNLOCK(&f);
SshState *ssh_state = f.alstate; SshState *ssh_state = f.alstate;
if (ssh_state == NULL) { FAIL_IF_NULL(ssh_state);
printf("no ssh state: ");
goto end;
}
/* do detect */ /* do detect */
SigMatchSignatures(&th_v, de_ctx, det_ctx, p); SigMatchSignatures(&th_v, de_ctx, det_ctx, p);
if ( !(PacketAlertCheck(p, 1))) { FAIL_IF(!(PacketAlertCheck(p, 1)));
printf("Error, the sig should match: ");
goto end;
}
result = 1;
end:
SigGroupCleanup(de_ctx);
SigCleanSignatures(de_ctx);
DetectEngineThreadCtxDeinit(&th_v, (void *)det_ctx); DetectEngineThreadCtxDeinit(&th_v, (void *)det_ctx);
DetectEngineCtxFree(de_ctx); DetectEngineCtxFree(de_ctx);
StreamTcpFreeConfig(TRUE); StreamTcpFreeConfig(TRUE);
FLOW_DESTROY(&f); FLOW_DESTROY(&f);
UTHFreePackets(&p, 1); UTHFreePackets(&p, 1);
AppLayerParserThreadCtxFree(alp_tctx);
if (alp_tctx != NULL) PASS;
AppLayerParserThreadCtxFree(alp_tctx);
return result;
} }
/** \test Send a get request in three chunks + more data. */ /** \test Send a get request in three chunks + more data. */

Loading…
Cancel
Save