summaryrefslogtreecommitdiffstats
path: root/src/server/net/sslserver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/net/sslserver.cpp')
-rw-r--r--src/server/net/sslserver.cpp14
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);