qtcginagiosicinga

QNetworkAccesssManager icinga / nagios acknowledge


I have a function who sending ack into the icinga / nagios server.

Function - sendAcknowledge

void MNetworkConnector::sendAcknowledge(QString service, QString host)
{

    QNetworkAccessManager *ackmanager;
    ackmanager = new QNetworkAccessManager();

    QString ackcommand = "http://nagioscore.demos.nagios.com/nagios/cgi-bin/cmd.cgi?cmd_typ=34&cmd_mod=2&host=#host#&service=#service#&com_author=nagiosadmin&com_data=Sent:+mMonitor&btnSubmit=Commit";
    service = service.replace(" ", "+");
    ackcommand = ackcommand.replace("#host#", host).replace("#service#", service);
    connect(ackmanager, SIGNAL(finished(QNetworkReply*)),this, SLOT(replyFinished2(QNetworkReply*)));

    QNetworkRequest myReq;
    QUrl myUrl(ackcommand);
    myUrl.setUserName("nagiosadmin");
    myUrl.setPassword("nagiosadmin");
    myReq.setUrl(myUrl);
    myReq.setRawHeader("Referer", "http://nagioscore.demos.nagios.com/nagios/cgi-bin/cmd.cgi");
    ackmanager->get(myReq);
}

Function - replyFinished2

void MNetworkConnector::replyFinished2(QNetworkReply *r)
{
    qDebug() << "reply output:" << r->readAll();
}

System returned several errors. If I test this source on my corporate icinga server, I have error: Not all commands could be send off successfully - Not Authorized

If I test it manualy on my corporate icinga server, I have error: Error: This appears to be a CSRF attack! The command wasn't issued via Classic-UI itself!

If I test it manualy on nagios test site, I have no error. Set service ack is Ok.

If I test this source I have error:Sorry, but you are not authorized to commit the specified command.

What's wrong? Thank you for all your ideas. At first I need solved problem in Icinga, the nagios test page I used only as alternative tests.


Solution

  • The problem was sensitive to uppercase and lowercase letters in the HOST.