Make test_event.cc more resilient
- Work on both Debian and RedHat systems. - Ignore test if authentication log cannot be found or cannot be read.
This commit is contained in:
parent
4d7121593e
commit
b5fdcf66ab
@ -462,8 +462,35 @@ int test_events()
|
|||||||
return errors;
|
return errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string get_auth_log()
|
||||||
|
{
|
||||||
|
string name;
|
||||||
|
|
||||||
|
const char DEBIAN_AUTH_LOG[] = "/var/log/auth.log";
|
||||||
|
const char REDHAT_AUTH_LOG[] = "/var/log/secure";
|
||||||
|
|
||||||
|
if (access(DEBIAN_AUTH_LOG, F_OK) == 0)
|
||||||
|
{
|
||||||
|
cout << "notice: " << DEBIAN_AUTH_LOG << " exists, assuming a Debian system." << endl;
|
||||||
|
name = DEBIAN_AUTH_LOG;
|
||||||
|
}
|
||||||
|
else if (access(REDHAT_AUTH_LOG, F_OK) == 0)
|
||||||
|
{
|
||||||
|
cout << "notice: " << REDHAT_AUTH_LOG << " exists, assuming a RedHat system." << endl;
|
||||||
|
name = REDHAT_AUTH_LOG;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cout << "warning: Neither " << DEBIAN_AUTH_LOG << ", nor " << REDHAT_AUTH_LOG << " exists." << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
int test_logging()
|
int test_logging()
|
||||||
{
|
{
|
||||||
|
int errors = 0;
|
||||||
|
|
||||||
event::set_log_facility(event::AUTHENTICATION_FAILURE, LOG_AUTH);
|
event::set_log_facility(event::AUTHENTICATION_FAILURE, LOG_AUTH);
|
||||||
event::set_log_level(event::AUTHENTICATION_FAILURE, LOG_ERR);
|
event::set_log_level(event::AUTHENTICATION_FAILURE, LOG_ERR);
|
||||||
|
|
||||||
@ -481,43 +508,62 @@ int test_logging()
|
|||||||
|
|
||||||
MXS_LOG_EVENT(event::AUTHENTICATION_FAILURE, "%s", id.c_str());
|
MXS_LOG_EVENT(event::AUTHENTICATION_FAILURE, "%s", id.c_str());
|
||||||
|
|
||||||
// We have no control over how quickly syslog messages are flushed
|
string name = get_auth_log();
|
||||||
// to the file. So, we try a few times before giving up.
|
|
||||||
|
|
||||||
bool found = false;
|
if (name.empty())
|
||||||
int attempts = 0;
|
|
||||||
const int MAX_ATTEMPTS = 10;
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
{
|
||||||
++attempts;
|
cout << "warning: Don't know where to look for authentication errors. Ignoring test." << endl;
|
||||||
|
}
|
||||||
sleep(1);
|
else
|
||||||
|
{
|
||||||
const char* zName = "/var/log/auth.log";
|
if (access(name.c_str(), R_OK) != 0)
|
||||||
ifstream in(zName);
|
|
||||||
|
|
||||||
if (in)
|
|
||||||
{
|
{
|
||||||
string line;
|
cout << "warning: Cannot read " << name << ", ignoring test." << endl;
|
||||||
while (std::getline(in, line))
|
name.clear();
|
||||||
{
|
|
||||||
if (line.find(id) != string::npos)
|
|
||||||
{
|
|
||||||
found = true;
|
|
||||||
cout << "notice: Found '" << id << "' in line '" << line << "'." << endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cerr << "error: Could not open '" << zName << "'." << endl;
|
|
||||||
attempts = MAX_ATTEMPTS;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (!found && (attempts < MAX_ATTEMPTS));
|
|
||||||
|
|
||||||
return found ? 0 : 1;
|
if (!name.empty())
|
||||||
|
{
|
||||||
|
// We have no control over how quickly syslog messages are flushed
|
||||||
|
// to the file. So, we try a few times before giving up.
|
||||||
|
|
||||||
|
bool found = false;
|
||||||
|
int attempts = 0;
|
||||||
|
const int MAX_ATTEMPTS = 10;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
++attempts;
|
||||||
|
|
||||||
|
sleep(1);
|
||||||
|
|
||||||
|
ifstream in(name);
|
||||||
|
|
||||||
|
if (in)
|
||||||
|
{
|
||||||
|
string line;
|
||||||
|
while (std::getline(in, line))
|
||||||
|
{
|
||||||
|
if (line.find(id) != string::npos)
|
||||||
|
{
|
||||||
|
found = true;
|
||||||
|
cout << "notice: Found '" << id << "' in line '" << line << "'." << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cerr << "error: Could not open '" << name << "'." << endl;
|
||||||
|
attempts = MAX_ATTEMPTS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (!found && (attempts < MAX_ATTEMPTS));
|
||||||
|
|
||||||
|
errors = found ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user