@ -1853,6 +1853,9 @@ void HTPFreeConfig(void)
{
SCEnter ( ) ;
if ( ! AppLayerProtoDetectionEnabled ( " http " ) | | ! AppLayerParserEnabled ( " http " ) )
SCReturn ;
HTPCfgRec * nextrec = cfglist . next ;
SCRadixReleaseRadixTree ( cfgtree ) ;
cfgtree = NULL ;
@ -2284,15 +2287,24 @@ void HTPConfigure(void)
}
SCLogDebug ( " LIBHTP default config: %p " , cfglist . cfg ) ;
HTPConfigSetDefaultsPhase1 ( & cfglist ) ;
HTPConfigParseParameters ( & cfglist , ConfGetNode ( " libhtp.default-config " ) ,
cfgtree ) ;
if ( ConfGetNode ( " app-layer.protocols.http.libhtp " ) = = NULL ) {
HTPConfigParseParameters ( & cfglist , ConfGetNode ( " libhtp.default-config " ) ,
cfgtree ) ;
} else {
HTPConfigParseParameters ( & cfglist , ConfGetNode ( " app-layer.protocols.http.libhtp.default-config " ) , cfgtree ) ;
}
HTPConfigSetDefaultsPhase2 ( & cfglist ) ;
/* Read server config and create a parser for each IP in radix tree */
ConfNode * server_config = ConfGetNode ( " libhtp.server-config " ) ;
ConfNode * server_config = ConfGetNode ( " app-layer.protocols.http.libhtp.server-config " ) ;
if ( server_config = = NULL ) {
server_config = ConfGetNode ( " libhtp.server-config " ) ;
if ( server_config = = NULL ) {
SCLogDebug ( " LIBHTP Configuring %p " , server_config ) ;
SCReturn ;
}
}
SCLogDebug ( " LIBHTP Configuring %p " , server_config ) ;
if ( server_config = = NULL )
SCReturn ;
ConfNode * si ;
/* Server Nodes */
@ -2393,44 +2405,55 @@ void RegisterHTPParsers(void)
char * proto_name = " http " ;
/** HTTP */
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " GET|20| " , 4 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " GET|09| " , 4 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " PUT|20| " , 4 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " PUT|09| " , 4 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " POST|20| " , 5 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " POST|09| " , 5 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " HEAD|20| " , 5 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " HEAD|09| " , 5 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " TRACE|20| " , 6 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " TRACE|09| " , 6 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " OPTIONS|20| " , 8 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " OPTIONS|09| " , 8 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " CONNECT|20| " , 8 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " CONNECT|09| " , 8 , 0 , STREAM_TOSERVER ) ;
AppLayerRegisterStateFuncs ( ALPROTO_HTTP , HTPStateAlloc , HTPStateFree ) ;
AppLayerRegisterTxFreeFunc ( ALPROTO_HTTP , HTPStateTransactionFree ) ;
AppLayerRegisterGetFilesFunc ( ALPROTO_HTTP , HTPStateGetFiles ) ;
AppLayerRegisterGetAlstateProgressFunc ( ALPROTO_HTTP , HTPStateGetAlstateProgress ) ;
AppLayerRegisterGetTxCnt ( ALPROTO_HTTP , HTPStateGetTxCnt ) ;
AppLayerRegisterGetTx ( ALPROTO_HTTP , HTPStateGetTx ) ;
AppLayerRegisterGetAlstateProgressCompletionStatus ( ALPROTO_HTTP ,
HTPStateGetAlstateProgressCompletionStatus ) ;
AppLayerDecoderEventsModuleRegister ( ALPROTO_HTTP , http_decoder_event_table ) ;
AppLayerRegisterTruncateFunc ( ALPROTO_HTTP , HTPStateTruncate ) ;
AppLayerRegisterProto ( proto_name , ALPROTO_HTTP , STREAM_TOSERVER ,
HTPHandleRequestData ) ;
AppLayerRegisterProto ( proto_name , ALPROTO_HTTP , STREAM_TOCLIENT ,
HTPHandleResponseData ) ;
if ( AppLayerProtoDetectionEnabled ( proto_name ) ) {
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " GET|20| " , 4 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " GET|09| " , 4 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " PUT|20| " , 4 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " PUT|09| " , 4 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " POST|20| " , 5 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " POST|09| " , 5 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " HEAD|20| " , 5 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " HEAD|09| " , 5 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " TRACE|20| " , 6 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " TRACE|09| " , 6 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " OPTIONS|20| " , 8 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " OPTIONS|09| " , 8 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " CONNECT|20| " , 8 , 0 , STREAM_TOSERVER ) ;
AlpProtoAdd ( & alp_proto_ctx , proto_name , IPPROTO_TCP , ALPROTO_HTTP , " CONNECT|09| " , 8 , 0 , STREAM_TOSERVER ) ;
} else {
SCLogInfo ( " Protocol detection and parser disabled for %s protocol " ,
proto_name ) ;
return ;
}
if ( AppLayerParserEnabled ( proto_name ) ) {
AppLayerRegisterStateFuncs ( ALPROTO_HTTP , HTPStateAlloc , HTPStateFree ) ;
AppLayerRegisterTxFreeFunc ( ALPROTO_HTTP , HTPStateTransactionFree ) ;
AppLayerRegisterGetFilesFunc ( ALPROTO_HTTP , HTPStateGetFiles ) ;
AppLayerRegisterGetAlstateProgressFunc ( ALPROTO_HTTP , HTPStateGetAlstateProgress ) ;
AppLayerRegisterGetTxCnt ( ALPROTO_HTTP , HTPStateGetTxCnt ) ;
AppLayerRegisterGetTx ( ALPROTO_HTTP , HTPStateGetTx ) ;
AppLayerRegisterGetAlstateProgressCompletionStatus ( ALPROTO_HTTP ,
HTPStateGetAlstateProgressCompletionStatus ) ;
AppLayerDecoderEventsModuleRegister ( ALPROTO_HTTP , http_decoder_event_table ) ;
AppLayerRegisterTruncateFunc ( ALPROTO_HTTP , HTPStateTruncate ) ;
AppLayerRegisterProto ( proto_name , ALPROTO_HTTP , STREAM_TOSERVER ,
HTPHandleRequestData ) ;
AppLayerRegisterProto ( proto_name , ALPROTO_HTTP , STREAM_TOCLIENT ,
HTPHandleResponseData ) ;
SC_ATOMIC_INIT ( htp_config_flags ) ;
HTPConfigure ( ) ;
} else {
SCLogInfo ( " Parsed disabled for %s protocol. Protocol detection "
" still on. " , proto_name ) ;
}
# ifdef UNITTESTS
AppLayerRegisterUnittests ( ALPROTO_HTTP , HTPParserRegisterTests ) ;
# endif
SC_ATOMIC_INIT ( htp_config_flags ) ;
HTPConfigure ( ) ;
SCReturn ;
}