diff options
Diffstat (limited to 'src/server/net/sslserver.cpp')
-rw-r--r-- | src/server/net/sslserver.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/server/net/sslserver.cpp b/src/server/net/sslserver.cpp index 966ec5d..6aefae9 100644 --- a/src/server/net/sslserver.cpp +++ b/src/server/net/sslserver.cpp @@ -18,6 +18,7 @@ #include <QtNetwork/QSslCipher> #include <QtNetwork/QSslSocket> #include "certmanager.h" +#include <unistd.h> SslServer::SslServer() { @@ -36,11 +37,18 @@ SslServer::~SslServer() */ void SslServer::incomingConnection(int socketDescriptor) { - QSslSocket *serverSocket = new QSslSocket(NULL); - connect(serverSocket, SIGNAL(sslErrors(const QList<QSslError> &)), this, SLOT(sslErrors(const QList<QSslError> &))); + static int certFails = 0; QSslKey key; QSslCertificate cert; - CertManager::getPrivateKeyAndCert("manager", key, cert); + if (!CertManager::getPrivateKeyAndCert("manager", key, cert)) { + if (++certFails > 5) { + CertManager::fatal(); + } + ::close(socketDescriptor); + return; + } + QSslSocket *serverSocket = new QSslSocket(NULL); + connect(serverSocket, SIGNAL(sslErrors(const QList<QSslError> &)), this, SLOT(sslErrors(const QList<QSslError> &))); serverSocket->setPrivateKey(key); serverSocket->setLocalCertificate(cert); serverSocket->setPeerVerifyMode(QSslSocket::VerifyNone); |