]> WPIA git - gigi.git/commitdiff
fix: stop checking CAA on public suffix (and report error better)
authorFelix Dörre <felix@dogcraft.de>
Fri, 26 Aug 2016 15:18:05 +0000 (17:18 +0200)
committerFelix Dörre <felix@dogcraft.de>
Sat, 27 Aug 2016 10:16:41 +0000 (12:16 +0200)
Change-Id: Ifb7000db540e6e89c5b8e7c2bdccb6656c5ebe50

src/org/cacert/gigi/pages/account/certs/CertificateRequest.java
src/org/cacert/gigi/util/CAA.java
tests/org/cacert/gigi/util/TestCAAValidation.java

index 43e4fbd8205591ef31639689995cc7786f67a8e3..e1bf47cc9bde9de5d1b56252f07bbca96f6b675f 100644 (file)
@@ -336,18 +336,19 @@ public class CertificateRequest {
                     try {
                         DomainAssessment.checkCertifiableDomain(san.getName(), user.isInGroup(Group.CODESIGNING), false);
                         valid = true;
+                        if ( !valid || !CAA.verifyDomainAccess(owner, p, san.getName()) || (pDNS != null && !domainTemp.isMultiple())) {
+                            // remove
+                        } else {
+                            if (pDNS == null) {
+                                pDNS = san.getName();
+                            }
+                            filteredSANs.add(san);
+                            continue;
+                        }
                     } catch (GigiApiException e) {
+                        error.mergeInto(e);
                         valid = false;
                     }
-                    if ( !valid || !CAA.verifyDomainAccess(owner, p, san.getName()) || (pDNS != null && !domainTemp.isMultiple())) {
-                        // remove
-                    } else {
-                        if (pDNS == null) {
-                            pDNS = san.getName();
-                        }
-                        filteredSANs.add(san);
-                        continue;
-                    }
                 }
             } else if (san.getType() == SANType.EMAIL) {
                 if (emailTemp != null && owner.isValidEmail(san.getName())) {
index a95977e77c65b62a520b2617f75ac8732c08c595..33e78e89627f74df25da8b9ac0cb80a8c9d7900c 100644 (file)
@@ -2,8 +2,10 @@ package org.cacert.gigi.util;
 
 import javax.naming.NamingException;
 
+import org.cacert.gigi.GigiApiException;
 import org.cacert.gigi.dbObjects.CertificateOwner;
 import org.cacert.gigi.dbObjects.CertificateProfile;
+import org.cacert.gigi.output.template.SprintfCommand;
 
 public class CAA {
 
@@ -44,14 +46,14 @@ public class CAA {
         }
     }
 
-    public static boolean verifyDomainAccess(CertificateOwner owner, CertificateProfile p, String name) {
+    public static boolean verifyDomainAccess(CertificateOwner owner, CertificateProfile p, String name) throws GigiApiException {
         try {
             if (name.startsWith("*.")) {
                 return verifyDomainAccess(owner, p, name.substring(2), true);
             }
             return verifyDomainAccess(owner, p, name, false);
         } catch (NamingException e) {
-            return false;
+            throw new GigiApiException(SprintfCommand.createSimple("Internal Name Server/Resolution Error: {0}", e.getMessage()));
         }
     }
 
@@ -84,10 +86,14 @@ public class CAA {
 
     private static CAARecord[] getEffectiveCAARecords(String name) throws NamingException {
         CAARecord[] caa = DNSUtil.getCAAEntries(name);
+        String publicSuffix = PublicSuffixes.getInstance().getRegistrablePart(name);
         // TODO missing alias processing
         while (caa.length == 0 && name.contains(".")) {
             name = name.split("\\.", 2)[1];
             caa = DNSUtil.getCAAEntries(name);
+            if (name.equals(publicSuffix)) {
+                return caa;
+            }
         }
         return caa;
     }
index 1b4c3953dc46ea74f34ba71a517521bee7c9e2ed..b483a68f66ea4a583afd51ddf67777372bd7bfa2 100644 (file)
@@ -53,7 +53,7 @@ public class TestCAAValidation extends ClientTest {
     public Boolean success;
 
     @Test
-    public void testCAA() {
+    public void testCAA() throws GigiApiException {
         assertEquals(success, CAA.verifyDomainAccess(u, CertificateProfile.getByName("server"), domain));
     }