]> granicus.if.org Git - icinga2/commitdiff
Don't require tickets for clients which already have a trusted certificate
authorGunnar Beutner <gunnar@beutner.name>
Wed, 11 Feb 2015 08:56:22 +0000 (09:56 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Wed, 18 Feb 2015 07:13:44 +0000 (08:13 +0100)
fixes #8465

lib/remote/apiclient.cpp

index dd0a4dfe8adedf0954297184fc7787bb1a3b76b2..2304df3fba66c94b2646577eb15221ceba80f716 100644 (file)
@@ -220,22 +220,24 @@ Value RequestCertificateHandler(const MessageOrigin& origin, const Dictionary::P
        if (!params)
                return Empty;
 
-       ApiListener::Ptr listener = ApiListener::GetInstance();
-       String salt = listener->GetTicketSalt();
-
        Dictionary::Ptr result = new Dictionary();
 
-       if (salt.IsEmpty()) {
-               result->Set("error", "Ticket salt is not configured.");
-               return result;
-       }
+       if (!origin.FromClient->IsAuthenticated()) {
+               ApiListener::Ptr listener = ApiListener::GetInstance();
+               String salt = listener->GetTicketSalt();
+
+               if (salt.IsEmpty()) {
+                       result->Set("error", "Ticket salt is not configured.");
+                       return result;
+               }
 
-       String ticket = params->Get("ticket");
-       String realTicket = PBKDF2_SHA1(origin.FromClient->GetIdentity(), salt, 50000);
+               String ticket = params->Get("ticket");
+               String realTicket = PBKDF2_SHA1(origin.FromClient->GetIdentity(), salt, 50000);
 
-       if (ticket != realTicket) {
-               result->Set("error", "Invalid ticket.");
-               return result;
+               if (ticket != realTicket) {
+                       result->Set("error", "Invalid ticket.");
+                       return result;
+               }
        }
 
        boost::shared_ptr<X509> cert = origin.FromClient->GetStream()->GetPeerCertificate();