Get rid of AppLayerHtpRegisterExtraCallbacks

This patch add a early exit condition to the body handling callback.
This permits to avoid to avoid a complex system to handle htp
object change.
pull/39/head
Eric Leblond 13 years ago
parent 7e09cdc265
commit 66a083dafa

@ -1779,6 +1779,9 @@ int HTPCallbackRequestBodyData(htp_tx_data_t *d)
{
SCEnter();
if (need_htp_request_body == 0)
SCReturnInt(HOOK_OK);
#ifdef PRINT
printf("HTPBODY START: \n");
PrintRawDataFp(stdout, (uint8_t *)d->data, d->len);
@ -1899,6 +1902,9 @@ int HTPCallbackResponseBodyData(htp_tx_data_t *d)
{
SCEnter();
if (need_htp_response_body == 0)
SCReturnInt(HOOK_OK);
HtpState *hstate = (HtpState *)d->tx->connp->user_data;
if (hstate == NULL) {
SCReturnInt(HOOK_ERROR);
@ -2135,6 +2141,10 @@ static void HTPConfigure(void)
HTPCallbackRequestUriNormalizeQuery);
#endif
htp_config_set_generate_request_uri_normalized(cfglist.cfg, 1);
htp_config_register_request_body_data(cfglist.cfg,
HTPCallbackRequestBodyData);
htp_config_register_response_body_data(cfglist.cfg,
HTPCallbackResponseBodyData);
default_config = ConfGetNode("libhtp.default-config");
if (NULL != default_config) {
@ -2275,6 +2285,10 @@ static void HTPConfigure(void)
htprec->response_body_limit = HTP_CONFIG_DEFAULT_REQUEST_BODY_LIMIT;
htp_config_register_request(htp, HTPCallbackRequest);
htp_config_register_response(htp, HTPCallbackResponse);
htp_config_register_request_body_data(htp,
HTPCallbackRequestBodyData);
htp_config_register_response_body_data(htp,
HTPCallbackResponseBodyData);
#ifdef HAVE_HTP_URI_NORMALIZE_HOOK
htp_config_register_request_uri_normalize(htp,
HTPCallbackRequestUriNormalizeQuery);
@ -2475,34 +2489,6 @@ void RegisterHTPParsers(void)
SCReturn;
}
/**
* \brief This function is called at the end of SigLoadSignatures. This function
* enables the htp layer to register a callback for the http request body.
* need_htp_request_body is a flag that informs the htp app layer that
* a module in the engine needs the http request body.
*/
void AppLayerHtpRegisterExtraCallbacks(void) {
SCEnter();
SCLogDebug("Registering extra htp callbacks");
HTPCfgRec *p_cfglist = &cfglist;
while (p_cfglist != NULL) {
if (need_htp_request_body == 1) {
SCLogDebug("Registering callback htp_config_register_request_body_data on htp");
htp_config_register_request_body_data(p_cfglist->cfg,
HTPCallbackRequestBodyData);
}
if (need_htp_response_body == 1) {
SCLogDebug("Registering callback htp_config_register_response_body_data on htp");
htp_config_register_response_body_data(p_cfglist->cfg,
HTPCallbackResponseBodyData);
}
p_cfglist = p_cfglist->next;
}
SCReturn;
}
#ifdef UNITTESTS
static HTPCfgRec cfglist_backup;

@ -224,7 +224,6 @@ int HTPCallbackRequestBodyData(htp_tx_data_t *);
int HtpTransactionGetLoggableId(Flow *);
void HtpBodyPrint(HtpBody *);
void HtpBodyFree(HtpBody *);
void AppLayerHtpRegisterExtraCallbacks(void);
/* To free the state from unittests using app-layer-htp */
void HTPStateFree(void *);
void AppLayerHtpEnableRequestBodyCallback(void);

@ -1542,7 +1542,6 @@ int main(int argc, char **argv)
AppLayerHtpEnableRequestBodyCallback();
AppLayerHtpNeedFileInspection();
AppLayerHtpRegisterExtraCallbacks();
UtInitialize();
UTHRegisterTests();
@ -1786,7 +1785,6 @@ int main(int argc, char **argv)
SCCudaPBSetUpQueuesAndBuffers();
#endif /* __SC_CUDA_SUPPORT__ */
AppLayerHtpRegisterExtraCallbacks();
SCThresholdConfInitContext(de_ctx,NULL);
SCAsn1LoadConfig();

Loading…
Cancel
Save