Improves SecRemoteRules messages on IIS

IIS was not displaying correctly the error messages and the amount of
loaded rules while the operator SecRemoteRules was used.
This commit is contained in:
Felipe Zimmerle 2015-02-12 05:29:45 -08:00
parent f7c7a30db9
commit b304ab1aa2
5 changed files with 46 additions and 13 deletions

View File

@ -752,7 +752,7 @@ static int hook_post_config(apr_pool_t *mp, apr_pool_t *mp_log, apr_pool_t *mp_t
real_server_signature); real_server_signature);
} }
#ifndef WIN32 #ifndef VERSION_IIS
if (status_engine_state != STATUS_ENGINE_DISABLED) { if (status_engine_state != STATUS_ENGINE_DISABLED) {
msc_status_engine_call(); msc_status_engine_call();
} }
@ -767,18 +767,12 @@ static int hook_post_config(apr_pool_t *mp, apr_pool_t *mp_log, apr_pool_t *mp_t
/** /**
* Checking if it is not the first time that we are in this very function. * Checking if it is not the first time that we are in this very function.
* We want to show the messages below during the start and the reload. * We want to show the messages below during the start and the reload.
*
* Turns out that IIS version does not hit it twice, thus, we have to show
* the message in the first (and unique) opportunity.
*/ */
#ifdef VERSION_IIS #ifndef VERSION_IIS
if (first_time == 1)
{
#else
if (first_time != 1) if (first_time != 1)
{ {
#endif
#ifdef WITH_REMOTE_RULES #ifdef WITH_REMOTE_RULES
if (remote_rules_server != NULL) if (remote_rules_server != NULL)
{ {
if (remote_rules_server->amount_of_rules == 1) if (remote_rules_server->amount_of_rules == 1)
@ -804,6 +798,7 @@ static int hook_post_config(apr_pool_t *mp, apr_pool_t *mp_log, apr_pool_t *mp_t
remote_rules_fail_message); remote_rules_fail_message);
} }
} }
#endif
srand((unsigned int)(time(NULL) * getpid())); srand((unsigned int)(time(NULL) * getpid()));

View File

@ -797,8 +797,12 @@ CMyHttpModule::OnBeginRequest(
goto Finished; goto Finished;
} }
modsecStatusEngineCall(); modsecReportRemoteLoadedRules();
if (this->status_call_already_sent == false)
{
this->status_call_already_sent = true;
modsecStatusEngineCall();
}
} }
delete apppath; delete apppath;
} }
@ -1254,6 +1258,8 @@ CMyHttpModule::CMyHttpModule()
GetSystemInfo(&sysInfo); GetSystemInfo(&sysInfo);
m_dwPageSize = sysInfo.dwPageSize; m_dwPageSize = sysInfo.dwPageSize;
this->status_call_already_sent = false;
InitializeCriticalSection(&m_csLock); InitializeCriticalSection(&m_csLock);
modsecSetLogHook(this, Log); modsecSetLogHook(this, Log);

View File

@ -52,6 +52,7 @@ public:
void Dispose(); void Dispose();
BOOL WriteEventViewerLog(LPCSTR szNotification, WORD category = EVENTLOG_INFORMATION_TYPE); BOOL WriteEventViewerLog(LPCSTR szNotification, WORD category = EVENTLOG_INFORMATION_TYPE);
BOOL status_call_already_sent;
}; };
#endif #endif

View File

@ -705,7 +705,7 @@ const char *modsecIsServerSignatureAvailale(void) {
return new_server_signature; return new_server_signature;
} }
#ifdef WIN32 #ifdef VERSION_IIS
void modsecStatusEngineCall() void modsecStatusEngineCall()
{ {
if (status_engine_state != STATUS_ENGINE_DISABLED) { if (status_engine_state != STATUS_ENGINE_DISABLED) {
@ -717,4 +717,34 @@ void modsecStatusEngineCall()
"SecStatusEngine to On.\n"); "SecStatusEngine to On.\n");
} }
} }
void modsecReportRemoteLoadedRules()
{
#ifdef WITH_REMOTE_RULES
if (remote_rules_server != NULL)
{
if (remote_rules_server->amount_of_rules == 1)
{
ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, NULL,
"ModSecurity: Loaded %d rule from: '%s'.",
remote_rules_server->amount_of_rules,
remote_rules_server->uri);
}
else
{
ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, NULL,
"ModSecurity: Loaded %d rules from: '%s'.",
remote_rules_server->amount_of_rules,
remote_rules_server->uri);
}
}
#endif
if (remote_rules_fail_message != NULL)
{
ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, NULL, "ModSecurity: " \
"Problems loading external resources: %s",
remote_rules_fail_message);
}
}
#endif #endif

View File

@ -119,8 +119,9 @@ void modsecSetConfigForIISRequestBody(request_rec *r);
const char *modsecIsServerSignatureAvailale(void); const char *modsecIsServerSignatureAvailale(void);
#ifdef WIN32 #ifdef VERSION_IIS
void modsecStatusEngineCall(void); void modsecStatusEngineCall(void);
void modsecReportRemoteLoadedRules(void);
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus