[direct-certificate-discovery-tool] 7 new revisions pushed by Elizabet...@esacinc.com on 2014-10-22 14:57 GMT

0 views
Skip to first unread message

direct-certifica...@googlecode.com

unread,
Oct 22, 2014, 10:59:10 AM10/22/14
to dcdt...@googlegroups.com
7 new revisions:

Revision: 672c15128772
Branch: default
Author: Michal Kotelba <michal....@esacinc.com>
Date: Thu Oct 2 12:23:45 2014 UTC
Log: - Supports DCDT-261....
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=672c15128772

Revision: 99b23741c658
Branch: default
Author: Michal Kotelba <michal....@esacinc.com>
Date: Thu Oct 2 16:33:36 2014 UTC
Log: - Further supports DCDT-261....
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=99b23741c658

Revision: c62cee1c7997
Branch: default
Author: Michal Kotelba <michal....@esacinc.com>
Date: Fri Oct 3 01:10:43 2014 UTC
Log: - Further supports DCDT-261....
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=c62cee1c7997

Revision: f4e893210ace
Branch: default
Author: Michal Kotelba <michal....@esacinc.com>
Date: Wed Oct 8 00:15:49 2014 UTC
Log: - Further supports DCDT-261....
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=f4e893210ace

Revision: b59c793abbc5
Branch: default
Author: Michal Kotelba <michal....@esacinc.com>
Date: Thu Oct 9 08:50:08 2014 UTC
Log: - Further supports DCDT-261....
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=b59c793abbc5

Revision: 718974f64359
Branch: default
Author: Michal Kotelba <michal....@esacinc.com>
Date: Thu Oct 9 11:11:26 2014 UTC
Log: - Further supports DCDT-261....
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=718974f64359

Revision: a14c568b6445
Branch: default
Author: Elizab...@esacinc.com
Date: Wed Oct 22 14:12:48 2014 UTC
Log: - Supports DCDT-285 (Refactor DNS and LDAP functional tests to
utilize...
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=a14c568b6445

==============================================================================
Revision: 672c15128772
Branch: default
Author: Michal Kotelba <michal....@esacinc.com>
Date: Thu Oct 2 12:23:45 2014 UTC
Log: - Supports DCDT-261.
- Implemented functionality + configuration for DNS TXT (SPF) + PTR records
(for DNS lookups + DNS service hosting).
- Upgraded Selenium dependencies (for web integration testing) to latest
release versions (was incompatible with latest Firefox build[s]).
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=672c15128772

Added:
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/beans/ToolDomainAddressBean.java

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/beans/impl/AbstractToolDomainAddressBean.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsSpfStrings.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/PtrRecordConfig.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/TxtRecordConfig.java

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/impl/PtrRecordConfigImpl.java

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/impl/TxtRecordConfigImpl.java

/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/impl/AdminControllerIntegrationTests.java

/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/impl/DiscoveryControllerIntegrationTests.java

/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/impl/DiscoveryMailMappingIntegrationTests.java

/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/impl/HomeControllerIntegrationTests.java

/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/impl/HostingControllerIntegrationTests.java

/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/impl/VersionControllerIntegrationTests.java
Deleted:

/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/AdminControllerIntegrationTests.java

/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/DiscoveryControllerIntegrationTests.java

/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/DiscoveryMailMappingIntegrationTests.java

/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/HomeControllerIntegrationTests.java

/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/HostingControllerIntegrationTests.java

/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/VersionControllerIntegrationTests.java
Modified:

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/InstanceConfig.java

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/InstanceDnsConfig.java

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceConfigImpl.java

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsRecordType.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/DnsLookupService.java

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/impl/DnsLookupServiceImpl.java

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsMessageUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsRecordUtils.java
/dcdt-core/src/main/resources/META-INF/spring/spring-core-dns.xml
/dcdt-core/src/main/resources/META-INF/spring/spring-core-instance-dns.xml
/dcdt-core/src/main/scripts/ant-clover.xml
/dcdt-core/src/main/scripts/antlib-clover.xml
/dcdt-core/src/main/scripts/antlib-core.xml
/dcdt-core/src/test/resources/META-INF/core/core-test.properties
/dcdt-parent/pom.xml

/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/impl/ToolDnsServiceImpl.java
/dcdt-web/pom.xml

/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/test/impl/AbstractToolSeleniumIntegrationTests.java
/dcdt-web/src/test/resources/META-INF/spring/spring-web-test.xml

=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/beans/ToolDomainAddressBean.java
Thu Oct 2 12:23:45 2014 UTC
@@ -0,0 +1,13 @@
+package gov.hhs.onc.dcdt.beans;
+
+import java.net.InetAddress;
+import javax.annotation.Nullable;
+
+public interface ToolDomainAddressBean extends ToolDomainBean {
+ public boolean hasIpAddress();
+
+ @Nullable
+ public InetAddress getIpAddress();
+
+ public void setIpAddress(@Nullable InetAddress ipAddr);
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/beans/impl/AbstractToolDomainAddressBean.java
Thu Oct 2 12:23:45 2014 UTC
@@ -0,0 +1,29 @@
+package gov.hhs.onc.dcdt.beans.impl;
+
+import gov.hhs.onc.dcdt.beans.ToolDomainAddressBean;
+import java.net.InetAddress;
+import javax.annotation.Nullable;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Transient;
+
+@MappedSuperclass
+public abstract class AbstractToolDomainAddressBean extends
AbstractToolDomainBean implements ToolDomainAddressBean {
+ protected InetAddress ipAddr;
+
+ @Override
+ public boolean hasIpAddress() {
+ return this.ipAddr != null;
+ }
+
+ @Nullable
+ @Override
+ @Transient
+ public InetAddress getIpAddress() {
+ return this.ipAddr;
+ }
+
+ @Override
+ public void setIpAddress(@Nullable InetAddress ipAddr) {
+ this.ipAddr = ipAddr;
+ }
+}
=======================================
--- /dev/null
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsSpfStrings.java Thu
Oct 2 12:23:45 2014 UTC
@@ -0,0 +1,28 @@
+package gov.hhs.onc.dcdt.dns;
+
+import org.apache.commons.lang3.StringUtils;
+
+public final class DnsSpfStrings {
+ public final static String DELIM = StringUtils.SPACE;
+ public final static String DELIM_MOD = "=";
+ public final static String DELIM_MECH = ":";
+
+ public final static String QUAL_PASS = "+";
+ public final static String QUAL_FAIL = "-";
+ public final static String QUAL_FAIL_SOFT = "~";
+ public final static String QUAL_NEUTRAL = "?";
+
+ public final static String MOD_VERSION_NAME = "v";
+ public final static String MOD_VERSION_VALUE_1 = "spf1";
+ public final static String MOD_VERSION_1 = (MOD_VERSION_NAME +
DELIM_MOD + MOD_VERSION_VALUE_1);
+
+ public final static String MECH_ALL = "all";
+ public final static String MECH_ALL_FAIL = (QUAL_FAIL + MECH_ALL);
+
+ public final static String MECH_A = "a";
+
+ public final static String MECH_MX = "mx";
+
+ private DnsSpfStrings() {
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/PtrRecordConfig.java
Thu Oct 2 12:23:45 2014 UTC
@@ -0,0 +1,6 @@
+package gov.hhs.onc.dcdt.dns.config;
+
+import org.xbill.DNS.PTRRecord;
+
+public interface PtrRecordConfig extends
TargetedDnsRecordConfig<PTRRecord> {
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/TxtRecordConfig.java
Thu Oct 2 12:23:45 2014 UTC
@@ -0,0 +1,10 @@
+package gov.hhs.onc.dcdt.dns.config;
+
+import java.util.List;
+import org.xbill.DNS.TXTRecord;
+
+public interface TxtRecordConfig extends DnsRecordConfig<TXTRecord> {
+ public List<String> getStrings();
+
+ public void setStrings(List<String> strs);
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/impl/PtrRecordConfigImpl.java
Thu Oct 2 12:23:45 2014 UTC
@@ -0,0 +1,17 @@
+package gov.hhs.onc.dcdt.dns.config.impl;
+
+import gov.hhs.onc.dcdt.dns.DnsException;
+import gov.hhs.onc.dcdt.dns.DnsRecordType;
+import gov.hhs.onc.dcdt.dns.config.PtrRecordConfig;
+import org.xbill.DNS.PTRRecord;
+
+public class PtrRecordConfigImpl extends
AbstractTargetedDnsRecordConfig<PTRRecord> implements PtrRecordConfig {
+ public PtrRecordConfigImpl() {
+ super(DnsRecordType.PTR, PTRRecord.class);
+ }
+
+ @Override
+ public PTRRecord toRecord() throws DnsException {
+ return new PTRRecord(this.name,
this.recordType.getDclassType().getCode(), this.ttl, this.target);
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/config/impl/TxtRecordConfigImpl.java
Thu Oct 2 12:23:45 2014 UTC
@@ -0,0 +1,30 @@
+package gov.hhs.onc.dcdt.dns.config.impl;
+
+import gov.hhs.onc.dcdt.dns.DnsException;
+import gov.hhs.onc.dcdt.dns.DnsRecordType;
+import gov.hhs.onc.dcdt.dns.config.TxtRecordConfig;
+import java.util.List;
+import org.xbill.DNS.TXTRecord;
+
+public class TxtRecordConfigImpl extends
AbstractDnsRecordConfig<TXTRecord> implements TxtRecordConfig {
+ private List<String> strs;
+
+ public TxtRecordConfigImpl() {
+ super(DnsRecordType.TXT, TXTRecord.class);
+ }
+
+ @Override
+ public TXTRecord toRecord() throws DnsException {
+ return new TXTRecord(this.name,
this.recordType.getDclassType().getCode(), this.ttl, this.strs);
+ }
+
+ @Override
+ public List<String> getStrings() {
+ return this.strs;
+ }
+
+ @Override
+ public void setStrings(List<String> strs) {
+ this.strs = strs;
+ }
+}
=======================================
--- /dev/null
+++
/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/impl/AdminControllerIntegrationTests.java
Thu Oct 2 12:23:45 2014 UTC
@@ -0,0 +1,10 @@
+package gov.hhs.onc.dcdt.web.controller.impl;
+
+import gov.hhs.onc.dcdt.web.test.ControllerTests;
+import
gov.hhs.onc.dcdt.web.test.impl.AbstractToolControllerIntegrationTests;
+import org.testng.annotations.Test;
+
+@ControllerTests(titleMessageCode = ControllerTests.MSG_CODE_TITLE_PREFIX
+ "admin.login", url = "/admin")
+@Test(dependsOnGroups = { "dcdt.test.it.web.controller.home" }, groups =
{ "dcdt.test.it.web.controller.admin" })
+public class AdminControllerIntegrationTests extends
AbstractToolControllerIntegrationTests {
+}
=======================================
--- /dev/null
+++
/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/impl/DiscoveryControllerIntegrationTests.java
Thu Oct 2 12:23:45 2014 UTC
@@ -0,0 +1,10 @@
+package gov.hhs.onc.dcdt.web.controller.impl;
+
+import gov.hhs.onc.dcdt.web.test.ControllerTests;
+import
gov.hhs.onc.dcdt.web.test.impl.AbstractToolControllerIntegrationTests;
+import org.testng.annotations.Test;
+
+@ControllerTests(titleMessageCode = ControllerTests.MSG_CODE_TITLE_PREFIX
+ "discovery", url = "/discovery")
+@Test(dependsOnGroups = { "dcdt.test.it.web.controller.home" }, groups =
{ "dcdt.test.it.web.controller.discovery" })
+public class DiscoveryControllerIntegrationTests extends
AbstractToolControllerIntegrationTests {
+}
=======================================
--- /dev/null
+++
/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/impl/DiscoveryMailMappingIntegrationTests.java
Thu Oct 2 12:23:45 2014 UTC
@@ -0,0 +1,10 @@
+package gov.hhs.onc.dcdt.web.controller.impl;
+
+import gov.hhs.onc.dcdt.web.test.ControllerTests;
+import
gov.hhs.onc.dcdt.web.test.impl.AbstractToolControllerIntegrationTests;
+import org.testng.annotations.Test;
+
+@ControllerTests(titleMessageCode = ControllerTests.MSG_CODE_TITLE_PREFIX
+ "discovery.mail.mapping", url = "/discovery/mail/mapping")
+@Test(dependsOnGroups = { "dcdt.test.it.web.controller.discovery" },
groups = { "dcdt.test.it.web.controller.discovery.mail.mapping" })
+public class DiscoveryMailMappingIntegrationTests extends
AbstractToolControllerIntegrationTests {
+}
=======================================
--- /dev/null
+++
/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/impl/HomeControllerIntegrationTests.java
Thu Oct 2 12:23:45 2014 UTC
@@ -0,0 +1,10 @@
+package gov.hhs.onc.dcdt.web.controller.impl;
+
+import gov.hhs.onc.dcdt.web.test.ControllerTests;
+import
gov.hhs.onc.dcdt.web.test.impl.AbstractToolControllerIntegrationTests;
+import org.testng.annotations.Test;
+
+@ControllerTests(titleMessageCode = ControllerTests.MSG_CODE_TITLE_PREFIX
+ "home", url = "/")
+@Test(groups = { "dcdt.test.it.web.controller.home" })
+public class HomeControllerIntegrationTests extends
AbstractToolControllerIntegrationTests {
+}
=======================================
--- /dev/null
+++
/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/impl/HostingControllerIntegrationTests.java
Thu Oct 2 12:23:45 2014 UTC
@@ -0,0 +1,10 @@
+package gov.hhs.onc.dcdt.web.controller.impl;
+
+import gov.hhs.onc.dcdt.web.test.ControllerTests;
+import
gov.hhs.onc.dcdt.web.test.impl.AbstractToolControllerIntegrationTests;
+import org.testng.annotations.Test;
+
+@ControllerTests(titleMessageCode = ControllerTests.MSG_CODE_TITLE_PREFIX
+ "hosting", url = "/hosting")
+@Test(dependsOnGroups = { "dcdt.test.it.web.controller.home" }, groups =
{ "dcdt.test.it.web.controller.hosting" })
+public class HostingControllerIntegrationTests extends
AbstractToolControllerIntegrationTests {
+}
=======================================
--- /dev/null
+++
/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/impl/VersionControllerIntegrationTests.java
Thu Oct 2 12:23:45 2014 UTC
@@ -0,0 +1,10 @@
+package gov.hhs.onc.dcdt.web.controller.impl;
+
+import gov.hhs.onc.dcdt.web.test.ControllerTests;
+import
gov.hhs.onc.dcdt.web.test.impl.AbstractToolControllerIntegrationTests;
+import org.testng.annotations.Test;
+
+@ControllerTests(titleMessageCode = ControllerTests.MSG_CODE_TITLE_PREFIX
+ "version", url = "/version")
+@Test(dependsOnGroups = { "dcdt.test.it.web.controller.home" }, groups =
{ "dcdt.test.it.web.controller.version" })
+public class VersionControllerIntegrationTests extends
AbstractToolControllerIntegrationTests {
+}
=======================================
---
/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/AdminControllerIntegrationTests.java
Wed Jan 29 04:36:23 2014 UTC
+++ /dev/null
@@ -1,10 +0,0 @@
-package gov.hhs.onc.dcdt.web.controller;
-
-import gov.hhs.onc.dcdt.web.test.ControllerTests;
-import
gov.hhs.onc.dcdt.web.test.impl.AbstractToolControllerIntegrationTests;
-import org.testng.annotations.Test;
-
-@ControllerTests(titleMessageCode = ControllerTests.MSG_CODE_TITLE_PREFIX
+ "admin.login", url = "/admin")
-@Test(dependsOnGroups = { "dcdt.test.it.web.controller.home" }, groups =
{ "dcdt.test.it.web.controller.admin" })
-public class AdminControllerIntegrationTests extends
AbstractToolControllerIntegrationTests {
-}
=======================================
---
/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/DiscoveryControllerIntegrationTests.java
Wed Jan 29 04:36:23 2014 UTC
+++ /dev/null
@@ -1,10 +0,0 @@
-package gov.hhs.onc.dcdt.web.controller;
-
-import gov.hhs.onc.dcdt.web.test.ControllerTests;
-import
gov.hhs.onc.dcdt.web.test.impl.AbstractToolControllerIntegrationTests;
-import org.testng.annotations.Test;
-
-@ControllerTests(titleMessageCode = ControllerTests.MSG_CODE_TITLE_PREFIX
+ "discovery", url = "/discovery")
-@Test(dependsOnGroups = { "dcdt.test.it.web.controller.home" }, groups =
{ "dcdt.test.it.web.controller.discovery" })
-public class DiscoveryControllerIntegrationTests extends
AbstractToolControllerIntegrationTests {
-}
=======================================
---
/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/DiscoveryMailMappingIntegrationTests.java
Mon Mar 24 00:21:31 2014 UTC
+++ /dev/null
@@ -1,10 +0,0 @@
-package gov.hhs.onc.dcdt.web.controller;
-
-import gov.hhs.onc.dcdt.web.test.ControllerTests;
-import
gov.hhs.onc.dcdt.web.test.impl.AbstractToolControllerIntegrationTests;
-import org.testng.annotations.Test;
-
-@ControllerTests(titleMessageCode = ControllerTests.MSG_CODE_TITLE_PREFIX
+ "discovery.mail.mapping", url = "/discovery/mail/mapping")
-@Test(dependsOnGroups = { "dcdt.test.it.web.controller.discovery" },
groups = { "dcdt.test.it.web.controller.discovery.mail.mapping" })
-public class DiscoveryMailMappingIntegrationTests extends
AbstractToolControllerIntegrationTests {
-}
=======================================
---
/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/HomeControllerIntegrationTests.java
Wed Jan 29 04:36:23 2014 UTC
+++ /dev/null
@@ -1,10 +0,0 @@
-package gov.hhs.onc.dcdt.web.controller;
-
-import gov.hhs.onc.dcdt.web.test.ControllerTests;
-import
gov.hhs.onc.dcdt.web.test.impl.AbstractToolControllerIntegrationTests;
-import org.testng.annotations.Test;
-
-@ControllerTests(titleMessageCode = ControllerTests.MSG_CODE_TITLE_PREFIX
+ "home", url = "/")
-@Test(groups = { "dcdt.test.it.web.controller.home" })
-public class HomeControllerIntegrationTests extends
AbstractToolControllerIntegrationTests {
-}
=======================================
---
/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/HostingControllerIntegrationTests.java
Wed Jan 29 04:36:23 2014 UTC
+++ /dev/null
@@ -1,10 +0,0 @@
-package gov.hhs.onc.dcdt.web.controller;
-
-import gov.hhs.onc.dcdt.web.test.ControllerTests;
-import
gov.hhs.onc.dcdt.web.test.impl.AbstractToolControllerIntegrationTests;
-import org.testng.annotations.Test;
-
-@ControllerTests(titleMessageCode = ControllerTests.MSG_CODE_TITLE_PREFIX
+ "hosting", url = "/hosting")
-@Test(dependsOnGroups = { "dcdt.test.it.web.controller.home" }, groups =
{ "dcdt.test.it.web.controller.hosting" })
-public class HostingControllerIntegrationTests extends
AbstractToolControllerIntegrationTests {
-}
=======================================
---
/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/controller/VersionControllerIntegrationTests.java
Wed Jan 29 04:36:23 2014 UTC
+++ /dev/null
@@ -1,10 +0,0 @@
-package gov.hhs.onc.dcdt.web.controller;
-
-import gov.hhs.onc.dcdt.web.test.ControllerTests;
-import
gov.hhs.onc.dcdt.web.test.impl.AbstractToolControllerIntegrationTests;
-import org.testng.annotations.Test;
-
-@ControllerTests(titleMessageCode = ControllerTests.MSG_CODE_TITLE_PREFIX
+ "version", url = "/version")
-@Test(dependsOnGroups = { "dcdt.test.it.web.controller.home" }, groups =
{ "dcdt.test.it.web.controller.version" })
-public class VersionControllerIntegrationTests extends
AbstractToolControllerIntegrationTests {
-}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/InstanceConfig.java
Tue Apr 29 00:09:36 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/InstanceConfig.java
Thu Oct 2 12:23:45 2014 UTC
@@ -1,16 +1,7 @@
package gov.hhs.onc.dcdt.config.instance;

-import gov.hhs.onc.dcdt.beans.ToolDomainBean;
-import java.net.InetAddress;
-import javax.annotation.Nullable;
+import gov.hhs.onc.dcdt.beans.ToolDomainAddressBean;

-public interface InstanceConfig extends ToolDomainBean {
+public interface InstanceConfig extends ToolDomainAddressBean {
public boolean isConfigured();
-
- public boolean hasIpAddress();
-
- @Nullable
- public InetAddress getIpAddress();
-
- public void setIpAddress(@Nullable InetAddress ipAddr);
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/InstanceDnsConfig.java
Thu Mar 20 10:07:30 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/InstanceDnsConfig.java
Thu Oct 2 12:23:45 2014 UTC
@@ -2,7 +2,7 @@

import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
-import gov.hhs.onc.dcdt.beans.ToolDomainBean;
+import gov.hhs.onc.dcdt.beans.ToolDomainAddressBean;
import gov.hhs.onc.dcdt.config.instance.impl.InstanceDnsConfigImpl;
import gov.hhs.onc.dcdt.dns.DnsRecordType;
import gov.hhs.onc.dcdt.dns.config.ARecordConfig;
@@ -11,8 +11,10 @@
import gov.hhs.onc.dcdt.dns.config.DnsRecordConfig;
import gov.hhs.onc.dcdt.dns.config.MxRecordConfig;
import gov.hhs.onc.dcdt.dns.config.NsRecordConfig;
+import gov.hhs.onc.dcdt.dns.config.PtrRecordConfig;
import gov.hhs.onc.dcdt.dns.config.SoaRecordConfig;
import gov.hhs.onc.dcdt.dns.config.SrvRecordConfig;
+import gov.hhs.onc.dcdt.dns.config.TxtRecordConfig;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -21,7 +23,7 @@
import org.xbill.DNS.Record;

@JsonSubTypes({ @Type(InstanceDnsConfigImpl.class) })
-public interface InstanceDnsConfig extends ApplicationContextAware,
ToolDomainBean {
+public interface InstanceDnsConfig extends ApplicationContextAware,
ToolDomainAddressBean {
public <T extends Record> Collection<T> findAnswers(T questionRecord);

public Map<DnsRecordType, List<? extends DnsRecordConfig<? extends
Record>>> mapRecordConfigs();
@@ -48,7 +50,7 @@
public List<CnameRecordConfig> getCnameRecordConfigs();

public void setCnameRecordConfigs(@Nullable List<CnameRecordConfig>
cnameRecordConfigs);
-
+
public boolean hasMxRecordConfigs();

@Nullable
@@ -63,6 +65,11 @@

public void setNsRecordConfigs(@Nullable List<NsRecordConfig>
nsRecordConfigs);

+ public boolean hasPtrRecordConfigs();
+
+ @Nullable
+ public List<PtrRecordConfig> getPtrRecordConfigs();
+
public boolean hasSoaRecordConfig();

@Nullable
@@ -76,4 +83,11 @@
public List<SrvRecordConfig> getSrvRecordConfigs();

public void setSrvRecordConfigs(@Nullable List<SrvRecordConfig>
srvRecordConfigs);
+
+ public boolean hasTxtRecordConfigs();
+
+ @Nullable
+ public List<TxtRecordConfig> getTxtRecordConfigs();
+
+ public void setTxtRecordConfigs(@Nullable List<TxtRecordConfig>
txtRecordConfigs);
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceConfigImpl.java
Tue Apr 29 00:09:36 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceConfigImpl.java
Thu Oct 2 12:23:45 2014 UTC
@@ -1,6 +1,6 @@
package gov.hhs.onc.dcdt.config.instance.impl;

-import gov.hhs.onc.dcdt.beans.impl.AbstractToolDomainBean;
+import gov.hhs.onc.dcdt.beans.impl.AbstractToolDomainAddressBean;
import gov.hhs.onc.dcdt.config.instance.InstanceConfig;
import java.net.InetAddress;
import javax.annotation.Nullable;
@@ -13,9 +13,7 @@

@Entity(name = "instance_config")
@Table(name = "instance_configs")
-public class InstanceConfigImpl extends AbstractToolDomainBean implements
InstanceConfig {
- private InetAddress ipAddr;
-
+public class InstanceConfigImpl extends AbstractToolDomainAddressBean
implements InstanceConfig {
@Override
@Transient
public boolean isConfigured() {
@@ -29,21 +27,11 @@
public Name getDomainName() {
return super.getDomainName();
}
-
- @Override
- public boolean hasIpAddress() {
- return this.ipAddr != null;
- }

@Column(name = "ip_address", nullable = false)
@Nullable
@Override
public InetAddress getIpAddress() {
- return this.ipAddr;
- }
-
- @Override
- public void setIpAddress(@Nullable InetAddress ipAddr) {
- this.ipAddr = ipAddr;
+ return super.getIpAddress();
}
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java
Mon Jun 23 06:12:33 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java
Thu Oct 2 12:23:45 2014 UTC
@@ -1,7 +1,7 @@
package gov.hhs.onc.dcdt.config.instance.impl;

import com.fasterxml.jackson.annotation.JsonTypeName;
-import gov.hhs.onc.dcdt.beans.impl.AbstractToolDomainBean;
+import gov.hhs.onc.dcdt.beans.impl.AbstractToolDomainAddressBean;
import gov.hhs.onc.dcdt.beans.utils.ToolBeanFactoryUtils;
import gov.hhs.onc.dcdt.collections.impl.AbstractToolPredicate;
import gov.hhs.onc.dcdt.collections.impl.AbstractToolTransformer;
@@ -18,9 +18,11 @@
import gov.hhs.onc.dcdt.dns.config.DnsRecordConfig;
import gov.hhs.onc.dcdt.dns.config.MxRecordConfig;
import gov.hhs.onc.dcdt.dns.config.NsRecordConfig;
+import gov.hhs.onc.dcdt.dns.config.PtrRecordConfig;
import gov.hhs.onc.dcdt.dns.config.SoaRecordConfig;
import gov.hhs.onc.dcdt.dns.config.SrvRecordConfig;
import gov.hhs.onc.dcdt.dns.config.TargetedDnsRecordConfig;
+import gov.hhs.onc.dcdt.dns.config.TxtRecordConfig;
import gov.hhs.onc.dcdt.dns.utils.ToolDnsNameUtils;
import gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils;
import gov.hhs.onc.dcdt.dns.utils.ToolDnsUtils;
@@ -47,9 +49,22 @@
import org.springframework.context.support.AbstractApplicationContext;
import org.xbill.DNS.Name;
import org.xbill.DNS.Record;
+import org.xbill.DNS.ReverseMap;

@JsonTypeName("instanceDnsConfig")
-public class InstanceDnsConfigImpl extends AbstractToolDomainBean
implements InstanceDnsConfig {
+public class InstanceDnsConfigImpl extends AbstractToolDomainAddressBean
implements InstanceDnsConfig {
+ private class ReverseMapPtrRecordConfigTransformer extends
AbstractToolTransformer<ARecordConfig, PtrRecordConfig> {
+ @Override
+ protected PtrRecordConfig transformInternal(ARecordConfig
aRecordConfig) throws Exception {
+ PtrRecordConfig ptrRecordConfig =
ToolBeanFactoryUtils.createBeanOfType(InstanceDnsConfigImpl.this.appContext,
PtrRecordConfig.class);
+ // noinspection ConstantConditions
+
ptrRecordConfig.setName(ReverseMap.fromAddress(aRecordConfig.getAddress()));
+ ptrRecordConfig.setTarget(aRecordConfig.getName());
+
+ return ptrRecordConfig;
+ }
+ }
+
private class DiscoveryTestcaseCredentialCertRecordConfigTransformer
extends AbstractToolTransformer<DiscoveryTestcaseCredential,
CertRecordConfig> {
@Override
protected CertRecordConfig
transformInternal(DiscoveryTestcaseCredential discoveryTestcaseCred) throws
Exception {
@@ -99,8 +114,10 @@
private List<CnameRecordConfig> cnameRecordConfigs;
private List<MxRecordConfig> mxRecordConfigs;
private List<NsRecordConfig> nsRecordConfigs;
+ private List<PtrRecordConfig> ptrRecordConfigs;
private SoaRecordConfig soaRecordConfig;
private List<SrvRecordConfig> srvRecordConfigs;
+ private List<TxtRecordConfig> txtRecordConfigs;

@Override
public <T extends Record> Collection<T> findAnswers(T questionRecord) {
@@ -113,23 +130,25 @@
return ToolMapUtils.putAll(new LinkedHashMap<DnsRecordType, List<?
extends DnsRecordConfig<? extends Record>>>(DnsRecordType.values().length),
new MutablePair<>(DnsRecordType.A, this.aRecordsConfigs), new
MutablePair<>(DnsRecordType.CERT, this.certRecordConfigs), new
MutablePair<>(
DnsRecordType.CNAME, this.cnameRecordConfigs), new
MutablePair<>(DnsRecordType.MX, this.mxRecordConfigs), new
MutablePair<>(DnsRecordType.NS,
- this.nsRecordConfigs), new
MutablePair<>(DnsRecordType.SOA,
ToolArrayUtils.asList(this.soaRecordConfig)), new
MutablePair<>(DnsRecordType.SRV,
- this.srvRecordConfigs));
+ this.nsRecordConfigs), new
MutablePair<>(DnsRecordType.PTR, this.ptrRecordConfigs),
+ new MutablePair<>(DnsRecordType.SOA,
ToolArrayUtils.asList(this.soaRecordConfig)), new
MutablePair<>(DnsRecordType.SRV, this.srvRecordConfigs),
+ new MutablePair<>(DnsRecordType.TXT, this.txtRecordConfigs));
}

@Override
public boolean isAuthoritative(Record questionRecord) {
- return this.isAuthoritative() &&
questionRecord.getName().subdomain(this.domainName);
+ return (this.isAuthoritative() &&
questionRecord.getName().subdomain(
+ ((questionRecord.getType() != DnsRecordType.PTR.getCode()) ?
this.domainName : ReverseMap.fromAddress(this.ipAddr))));
}

@Override
public boolean isAuthoritative() {
- return this.hasDomainName() && this.hasSoaRecordConfig();
+ return (this.hasDomainName() && this.hasIpAddress() &&
this.hasSoaRecordConfig());
}

@Override
public void afterPropertiesSet() throws Exception {
- if (this.hasDomainName()) {
+ if (this.hasDomainName() && this.hasIpAddress()) {
this.domainName = ToolDnsNameUtils.toAbsolute(this.domainName);

this.certRecordConfigs =
@@ -142,6 +161,7 @@
Map<DnsRecordType, List<? extends DnsRecordConfig<? extends
Record>>> recordConfigsMap = this.mapRecordConfigs();
List<? extends DnsRecordConfig<? extends Record>>
recordConfigs;
Name recordName;
+ ARecordConfig aRecordConfig;
TargetedDnsRecordConfig<? extends Record> targetedRecordConfig;
SoaRecordConfig soaRecordConfig;

@@ -151,11 +171,13 @@
}

for (DnsRecordConfig<? extends Record> recordConfig :
recordConfigs) {
- if (((recordName = recordConfig.getName()) == null) |
| !recordName.isAbsolute()) {
-
recordConfig.setName(ToolDnsNameUtils.toAbsolute(ToolDnsNameUtils.fromLabels(recordName,
this.domainName)));
- }
+ switch (recordType) {
+ case A:
+ if ((aRecordConfig = ((ARecordConfig)
recordConfig)).getAddress() == null) {
+ aRecordConfig.setAddress(this.ipAddr);
+ }
+ break;

- switch (recordType) {
case CNAME:
case MX:
case NS:
@@ -172,8 +194,20 @@

soaRecordConfig.setHost(ToolDnsNameUtils.toAbsolute(soaRecordConfig.getHost()));
break;
}
+
+ if (((recordName = recordConfig.getName()) == null) |
| !recordName.isAbsolute()) {
+
recordConfig.setName(ToolDnsNameUtils.toAbsolute(ToolDnsNameUtils.fromLabels(recordName,
this.domainName)));
+ }
}
}
+
+ // @formatter:off
+ /*
+ this.ptrRecordConfigs =
+
ToolCollectionUtils.nullIfEmpty(CollectionUtils.collect(this.aRecordsConfigs,
new ReverseMapPtrRecordConfigTransformer(),
+ new ArrayList<PtrRecordConfig>()));
+ */
+ // @formatter:on
}
}

@@ -256,6 +290,17 @@
public void setNsRecordConfigs(@Nullable List<NsRecordConfig>
nsRecordConfigs) {
this.nsRecordConfigs = nsRecordConfigs;
}
+
+ @Override
+ public boolean hasPtrRecordConfigs() {
+ return !CollectionUtils.isEmpty(this.ptrRecordConfigs);
+ }
+
+ @Nullable
+ @Override
+ public List<PtrRecordConfig> getPtrRecordConfigs() {
+ return this.ptrRecordConfigs;
+ }

@Override
public boolean hasSoaRecordConfig() {
@@ -288,4 +333,20 @@
public void setSrvRecordConfigs(@Nullable List<SrvRecordConfig>
srvRecordConfigs) {
this.srvRecordConfigs = srvRecordConfigs;
}
+
+ @Override
+ public boolean hasTxtRecordConfigs() {
+ return !CollectionUtils.isEmpty(this.txtRecordConfigs);
+ }
+
+ @Nullable
+ @Override
+ public List<TxtRecordConfig> getTxtRecordConfigs() {
+ return this.txtRecordConfigs;
+ }
+
+ @Override
+ public void setTxtRecordConfigs(@Nullable List<TxtRecordConfig>
txtRecordConfigs) {
+ this.txtRecordConfigs = txtRecordConfigs;
+ }
}
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsRecordType.java Mon
Jun 23 13:21:03 2014 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsRecordType.java Thu
Oct 2 12:23:45 2014 UTC
@@ -60,18 +60,18 @@
public enum DnsRecordType implements DnsMnemonicIdentifier {
A(Type.A, ARecord.class, true), NS(Type.NS, NSRecord.class, true),
MD(Type.MD, MDRecord.class), MF(Type.MF, MFRecord.class), CNAME(Type.CNAME,
CNAMERecord.class, true), SOA(Type.SOA, SOARecord.class, true),
MB(Type.MB, MBRecord.class), MG(Type.MG, MGRecord.class), MR(Type.MR,
MRRecord.class),
- NULL(Type.NULL, NULLRecord.class), WKS(Type.WKS, WKSRecord.class),
PTR(Type.PTR, PTRRecord.class), HINFO(Type.HINFO, HINFORecord.class),
MINFO(Type.MINFO,
- MINFORecord.class), MX(Type.MX, MXRecord.class, true),
TXT(Type.TXT, TXTRecord.class), RP(Type.RP, RPRecord.class),
- AFSDB(Type.AFSDB, AFSDBRecord.class), X25(Type.X25, X25Record.class),
ISDN(Type.ISDN, ISDNRecord.class), RT(Type.RT, RTRecord.class),
NSAP(Type.NSAP,
- NSAPRecord.class), NSAP_PTR(Type.NSAP_PTR, NSAP_PTRRecord.class),
SIG(Type.SIG, SIGRecord.class), KEY(Type.KEY, KEYRecord.class), PX(Type.PX,
- PXRecord.class), GPOS(Type.GPOS, GPOSRecord.class),
AAAA(Type.AAAA, AAAARecord.class), LOC(Type.LOC, LOCRecord.class),
NXT(Type.NXT, NXTRecord.class),
- EID(Type.EID), NIMLOC(Type.NIMLOC), SRV(Type.SRV, SRVRecord.class,
true), ATMA(Type.ATMA), NAPTR(Type.NAPTR, NAPTRRecord.class),
- KX(Type.KX, KXRecord.class), CERT(Type.CERT, CERTRecord.class, true),
A6(Type.A6, A6Record.class), DNAME(Type.DNAME, DNAMERecord.class),
OPT(Type.OPT,
- OPTRecord.class), APL(Type.APL, APLRecord.class), DS(Type.DS,
DSRecord.class), SSHFP(Type.SSHFP, SSHFPRecord.class),
IPSECKEY(Type.IPSECKEY,
- IPSECKEYRecord.class), RRSIG(Type.RRSIG, RRSIGRecord.class),
NSEC(Type.NSEC, NSECRecord.class), DNSKEY(Type.DNSKEY, DNSKEYRecord.class),
DHCID(
- Type.DHCID, DHCIDRecord.class), NSEC3(Type.NSEC3,
NSEC3Record.class), NSEC3PARAM(Type.NSEC3PARAM, NSEC3PARAMRecord.class),
TLSA(Type.TLSA,
- TLSARecord.class), SPF(Type.SPF, SPFRecord.class), TKEY(Type.TKEY,
TKEYRecord.class), TSIG(Type.TSIG, TSIGRecord.class), IXFR(Type.IXFR), AXFR(
- Type.AXFR), MAILB(Type.MAILB), MAILA(Type.MAILA), ANY(Type.ANY),
DLV(Type.DLV, DLVRecord.class);
+ NULL(Type.NULL, NULLRecord.class), WKS(Type.WKS, WKSRecord.class),
PTR(Type.PTR, PTRRecord.class, true), HINFO(Type.HINFO, HINFORecord.class),
MINFO(
+ Type.MINFO, MINFORecord.class), MX(Type.MX, MXRecord.class, true),
TXT(Type.TXT, TXTRecord.class, true), RP(Type.RP, RPRecord.class),
AFSDB(Type.AFSDB,
+ AFSDBRecord.class), X25(Type.X25, X25Record.class),
ISDN(Type.ISDN, ISDNRecord.class), RT(Type.RT, RTRecord.class),
NSAP(Type.NSAP, NSAPRecord.class),
+ NSAP_PTR(Type.NSAP_PTR, NSAP_PTRRecord.class), SIG(Type.SIG,
SIGRecord.class), KEY(Type.KEY, KEYRecord.class), PX(Type.PX,
PXRecord.class), GPOS(Type.GPOS,
+ GPOSRecord.class), AAAA(Type.AAAA, AAAARecord.class),
LOC(Type.LOC, LOCRecord.class), NXT(Type.NXT, NXTRecord.class),
EID(Type.EID),
+ NIMLOC(Type.NIMLOC), SRV(Type.SRV, SRVRecord.class, true),
ATMA(Type.ATMA), NAPTR(Type.NAPTR, NAPTRRecord.class), KX(Type.KX,
KXRecord.class), CERT(
+ Type.CERT, CERTRecord.class, true), A6(Type.A6, A6Record.class),
DNAME(Type.DNAME, DNAMERecord.class), OPT(Type.OPT, OPTRecord.class),
APL(Type.APL,
+ APLRecord.class), DS(Type.DS, DSRecord.class), SSHFP(Type.SSHFP,
SSHFPRecord.class), IPSECKEY(Type.IPSECKEY, IPSECKEYRecord.class),
RRSIG(Type.RRSIG,
+ RRSIGRecord.class), NSEC(Type.NSEC, NSECRecord.class),
DNSKEY(Type.DNSKEY, DNSKEYRecord.class), DHCID(Type.DHCID,
DHCIDRecord.class), NSEC3(Type.NSEC3,
+ NSEC3Record.class), NSEC3PARAM(Type.NSEC3PARAM,
NSEC3PARAMRecord.class), TLSA(Type.TLSA, TLSARecord.class), SPF(Type.SPF,
SPFRecord.class), TKEY(
+ Type.TKEY, TKEYRecord.class), TSIG(Type.TSIG, TSIGRecord.class),
IXFR(Type.IXFR), AXFR(Type.AXFR), MAILB(Type.MAILB), MAILA(Type.MAILA),
ANY(Type.ANY),
+ DLV(Type.DLV, DLVRecord.class);

private final int code;
private final Class<? extends Record> recordClass;
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/DnsLookupService.java
Mon Jun 23 13:21:03 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/DnsLookupService.java
Thu Oct 2 12:23:45 2014 UTC
@@ -17,10 +17,12 @@
import org.xbill.DNS.MXRecord;
import org.xbill.DNS.NSRecord;
import org.xbill.DNS.Name;
+import org.xbill.DNS.PTRRecord;
import org.xbill.DNS.Record;
import org.xbill.DNS.Resolver;
import org.xbill.DNS.SOARecord;
import org.xbill.DNS.SRVRecord;
+import org.xbill.DNS.TXTRecord;

public interface DnsLookupService extends ToolBean {
public DnsLookupResult<ARecord> lookupARecords(Name name) throws
DnsException;
@@ -36,10 +38,14 @@

public DnsLookupResult<NSRecord> lookupNsRecords(Name name) throws
DnsException;

+ public DnsLookupResult<PTRRecord> lookupPtrRecords(Name name) throws
DnsException;
+
public DnsLookupResult<SOARecord> lookupSoaRecords(Name name) throws
DnsException;

public DnsLookupResult<SRVRecord> lookupSrvRecords(DnsServiceType
serviceType, DnsServiceProtocol serviceProtocol, Name name) throws
DnsException;

+ public DnsLookupResult<TXTRecord> lookupTxtRecords(Name name) throws
DnsException;
+
public <T extends Record> DnsLookupResult<T>
lookupRecords(DnsRecordType recordType, Class<T> recordClass, Name name)
throws DnsException;

public <T extends Record> DnsLookupResult<T>
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/impl/DnsLookupServiceImpl.java
Mon Jun 23 13:21:03 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/lookup/impl/DnsLookupServiceImpl.java
Thu Oct 2 12:23:45 2014 UTC
@@ -24,10 +24,12 @@
import org.xbill.DNS.MXRecord;
import org.xbill.DNS.NSRecord;
import org.xbill.DNS.Name;
+import org.xbill.DNS.PTRRecord;
import org.xbill.DNS.Record;
import org.xbill.DNS.Resolver;
import org.xbill.DNS.SOARecord;
import org.xbill.DNS.SRVRecord;
+import org.xbill.DNS.TXTRecord;

public class DnsLookupServiceImpl extends AbstractToolBean implements
DnsLookupService {
private Cache cache;
@@ -64,6 +66,11 @@
public DnsLookupResult<NSRecord> lookupNsRecords(Name name) throws
DnsException {
return this.lookupRecords(DnsRecordType.NS, NSRecord.class, name);
}
+
+ @Override
+ public DnsLookupResult<PTRRecord> lookupPtrRecords(Name name) throws
DnsException {
+ return this.lookupRecords(DnsRecordType.PTR, PTRRecord.class,
name);
+ }

@Override
public DnsLookupResult<SOARecord> lookupSoaRecords(Name name) throws
DnsException {
@@ -75,6 +82,11 @@
return this.lookupRecords(DnsRecordType.SRV, SRVRecord.class,
ToolDnsNameUtils.fromLabels(serviceType.getNameLabel(),
serviceProtocol.getNameLabel(), name));
}
+
+ @Override
+ public DnsLookupResult<TXTRecord> lookupTxtRecords(Name name) throws
DnsException {
+ return this.lookupRecords(DnsRecordType.TXT, TXTRecord.class,
name);
+ }

@Override
public <T extends Record> DnsLookupResult<T>
lookupRecords(DnsRecordType recordType, Class<T> recordClass, Name name)
throws DnsException {
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsMessageUtils.java
Mon Jun 23 13:21:03 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsMessageUtils.java
Thu Oct 2 12:23:45 2014 UTC
@@ -64,12 +64,8 @@
if (authorityRecords != null) {
addRecords(msg, DnsMessageSection.AUTHORITY, authorityRecords);

- if (hasRecords(msg, DnsMessageSection.AUTHORITY)) {
- setFlags(msg, DnsMessageFlag.RA);
-
- if (authoritative) {
- setFlags(msg, DnsMessageFlag.AA, DnsMessageFlag.AD);
- }
+ if (authoritative && hasRecords(msg,
DnsMessageSection.AUTHORITY)) {
+ setFlags(msg, DnsMessageFlag.AA);
}
}

=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsRecordUtils.java
Mon Jun 23 13:21:03 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsRecordUtils.java
Thu Oct 2 12:23:45 2014 UTC
@@ -7,15 +7,19 @@
import gov.hhs.onc.dcdt.dns.DnsException;
import gov.hhs.onc.dcdt.dns.DnsKeyAlgorithmType;
import gov.hhs.onc.dcdt.dns.DnsRecordType;
+import gov.hhs.onc.dcdt.dns.DnsSpfStrings;
import gov.hhs.onc.dcdt.dns.config.DnsRecordConfig;
import gov.hhs.onc.dcdt.utils.ToolArrayUtils;
import gov.hhs.onc.dcdt.utils.ToolClassUtils;
import gov.hhs.onc.dcdt.utils.ToolIteratorUtils;
+import gov.hhs.onc.dcdt.utils.ToolListUtils;
+import gov.hhs.onc.dcdt.utils.ToolStringUtils;
import java.security.PublicKey;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
+import java.util.List;
import java.util.Objects;
import java.util.Set;
import javax.annotation.Nonnegative;
@@ -89,9 +93,34 @@
.getCertType() == this.certType.getCode())));
}
}
+
+ public static class DnsRecordDataStringTransformer extends
AbstractToolTransformer<Record, String> {
+ public final static DnsRecordDataStringTransformer INSTANCE = new
DnsRecordDataStringTransformer();
+
+ @Override
+ protected String transformInternal(Record record) throws Exception
{
+ return record.rdataToString();
+ }
+ }

public final static DateFormat DATE_FORMAT_SERIAL = new
SimpleDateFormat("yyyyMMdd");

+ public static String buildSpf(String ... spfStrs) {
+ return buildSpf(ToolArrayUtils.asList(spfStrs));
+ }
+
+ public static String buildSpf(List<String> spfStrs) {
+ if (!Objects.equals(ToolListUtils.getFirst(spfStrs),
DnsSpfStrings.MOD_VERSION_1)) {
+ ToolListUtils.addFirst(spfStrs, DnsSpfStrings.MOD_VERSION_1);
+ }
+
+ if (!Objects.equals(ToolListUtils.getLast(spfStrs),
DnsSpfStrings.MECH_ALL_FAIL)) {
+ spfStrs.add(DnsSpfStrings.MECH_ALL_FAIL);
+ }
+
+ return ToolStringUtils.joinDelimit(spfStrs, DnsSpfStrings.DELIM);
+ }
+
@Nonnegative
public static int generateSerial() {
return generateSerial(0);
=======================================
--- /dcdt-core/src/main/resources/META-INF/spring/spring-core-dns.xml Mon
Jun 23 06:12:33 2014 UTC
+++ /dcdt-core/src/main/resources/META-INF/spring/spring-core-dns.xml Thu
Oct 2 12:23:45 2014 UTC
@@ -118,6 +118,18 @@
<beans:bean id="dnsLookupServiceExternal"
parent="dnsLookupServiceImpl" autowire-candidate="false"
p:resolver-ref="dnsResolverExtExternal"/>

+
<!--====================================================================================================
+ = DNS SENDER POLICY FRAMEWORK VALUES
+
=====================================================================================================-->
+ <beans:bean id="dnsSpf"
class="gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils"
factory-method="buildSpf"
+ c:spfStrs="#{
T(org.apache.commons.lang3.ArrayUtils).EMPTY_STRING_ARRAY }"/>
+
+ <beans:bean id="dnsSpfA"
class="gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils"
factory-method="buildSpf"
+ c:spfStrs="#{ T(gov.hhs.onc.dcdt.dns.DnsSpfStrings).MECH_A }"/>
+
+ <beans:bean id="dnsSpfMx"
class="gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils"
factory-method="buildSpf"
+ c:spfStrs="#{ T(gov.hhs.onc.dcdt.dns.DnsSpfStrings).MECH_MX }"/>
+

<!--====================================================================================================
= DNS RECORD CONFIG

=====================================================================================================-->
@@ -154,6 +166,12 @@
<beans:bean id="nsRecordConfig"
class="gov.hhs.onc.dcdt.dns.config.NsRecordConfig" parent="dnsRecordConfig"
abstract="true"/>
<beans:bean id="nsRecordConfigImpl"
class="gov.hhs.onc.dcdt.dns.config.impl.NsRecordConfigImpl"
parent="nsRecordConfig" abstract="true"/>

+
<!--====================================================================================================
+ = DNS PTR RECORD CONFIG
+
=====================================================================================================-->
+ <beans:bean id="ptrRecordConfig"
class="gov.hhs.onc.dcdt.dns.config.PtrRecordConfig"
parent="dnsRecordConfig" abstract="true"/>
+ <beans:bean id="ptrRecordConfigImpl"
class="gov.hhs.onc.dcdt.dns.config.impl.PtrRecordConfigImpl"
parent="ptrRecordConfig" abstract="true"/>
+

<!--====================================================================================================
= DNS SOA RECORD CONFIG

=====================================================================================================-->
@@ -172,4 +190,10 @@
<beans:bean id="srvRecordConfigLdap" parent="srvRecordConfigImpl"
abstract="true"
p:serviceProtocol="TCP"
p:serviceType="LDAP"/>
+
+
<!--====================================================================================================
+ = DNS TXT RECORD CONFIG
+
=====================================================================================================-->
+ <beans:bean id="txtRecordConfig"
class="gov.hhs.onc.dcdt.dns.config.TxtRecordConfig"
parent="dnsRecordConfig" abstract="true"/>
+ <beans:bean id="txtRecordConfigImpl"
class="gov.hhs.onc.dcdt.dns.config.impl.TxtRecordConfigImpl"
parent="txtRecordConfig" abstract="true"/>
</beans:beans>
=======================================
---
/dcdt-core/src/main/resources/META-INF/spring/spring-core-instance-dns.xml
Thu Mar 20 10:07:30 2014 UTC
+++
/dcdt-core/src/main/resources/META-INF/spring/spring-core-instance-dns.xml
Thu Oct 2 12:23:45 2014 UTC
@@ -20,8 +20,7 @@

<!--====================================================================================================
= INSTANCE DNS A RECORD CONFIG

=====================================================================================================-->
- <beans:bean id="instanceDnsARecordConfig" parent="aRecordConfigImpl"
abstract="true"
- p:address="#{ instanceConfig.ipAddress }"/>
+ <beans:bean id="instanceDnsARecordConfig" parent="aRecordConfigImpl"
abstract="true"/>


<!--====================================================================================================
= INSTANCE DNS CERT RECORD CONFIG
@@ -47,12 +46,19 @@

<!--====================================================================================================
= INSTANCE DNS NS RECORD CONFIG

=====================================================================================================-->
- <beans:bean id="instanceDnsNsRecordConfig1"
parent="nsRecordConfigImpl" abstract="true"
+ <beans:bean id="instanceDnsNsRecordConfig" parent="nsRecordConfigImpl"
abstract="true"/>
+
+ <beans:bean id="instanceDnsNsRecordConfig1"
parent="instanceDnsNsRecordConfig" abstract="true"
p:target="ns1.#{ instanceConfig.domainName }"/>

- <beans:bean id="instanceDnsNsRecordConfig2"
parent="nsRecordConfigImpl" abstract="true"
+ <beans:bean id="instanceDnsNsRecordConfig2"
parent="instanceDnsNsRecordConfig" abstract="true"
p:target="ns2.#{ instanceConfig.domainName }"/>

+
<!--====================================================================================================
+ = INSTANCE DNS PTR RECORD CONFIG
+
=====================================================================================================-->
+ <beans:bean id="instanceDnsPtrRecordConfig"
parent="ptrRecordConfigImpl" lazy-init="true" scope="prototype"/>
+

<!--====================================================================================================
= INSTANCE DNS SOA RECORD CONFIG

=====================================================================================================-->
@@ -80,11 +86,42 @@
<beans:bean id="instanceDnsSrvRecordConfigLdapUnavailable"
parent="instanceDnsSrvRecordConfigLdap1" abstract="true"
p:target="ldap-unavailable.#{ instanceConfig.domainName }"/>

+
<!--====================================================================================================
+ = INSTANCE DNS PTR RECORD CONFIG
+
=====================================================================================================-->
+ <beans:bean id="instanceDnsTxtRecordConfig"
parent="txtRecordConfigImpl" abstract="true"/>
+
+ <beans:bean id="instanceDnsTxtRecordConfigSpf"
parent="instanceDnsTxtRecordConfig" abstract="true">
+ <beans:property name="strings">
+ <util:list>
+ <beans:ref bean="dnsSpf"/>
+ </util:list>
+ </beans:property>
+ </beans:bean>
+
+ <beans:bean id="instanceDnsTxtRecordConfigSpfA"
parent="instanceDnsTxtRecordConfig" abstract="true">
+ <beans:property name="strings">
+ <util:list>
+ <beans:ref bean="dnsSpfA"/>
+ </util:list>
+ </beans:property>
+ </beans:bean>
+
+ <beans:bean id="instanceDnsTxtRecordConfigSpfMx"
parent="instanceDnsTxtRecordConfig" abstract="true">
+ <beans:property name="strings">
+ <util:list>
+ <beans:ref bean="dnsSpfMx"/>
+ </util:list>
+ </beans:property>
+ </beans:bean>
+

<!--====================================================================================================
= INSTANCE DNS CONFIG

=====================================================================================================-->
<beans:bean id="instanceDnsConfig"
class="gov.hhs.onc.dcdt.config.instance.InstanceDnsConfig" abstract="true"/>
- <beans:bean id="instanceDnsConfigImpl"
class="gov.hhs.onc.dcdt.config.instance.impl.InstanceDnsConfigImpl"
parent="instanceDnsConfig" abstract="true"/>
+
+ <beans:bean id="instanceDnsConfigImpl"
class="gov.hhs.onc.dcdt.config.instance.impl.InstanceDnsConfigImpl"
parent="instanceDnsConfig" abstract="true"
+ p:ipAddress="#{ instanceConfig.ipAddress }"/>

<beans:bean id="instanceDnsConfigBase" parent="instanceDnsConfigImpl"
p:domainName="#{ instanceDomainConfigBase.domainName }"
@@ -117,6 +154,11 @@
</beans:property>
<beans:property name="soaRecordConfig">
<beans:bean parent="instanceDnsSoaRecordConfig"/>
+ </beans:property>
+ <beans:property name="txtRecordConfigs">
+ <util:list>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpfA"/>
+ </util:list>
</beans:property>
</beans:bean>

@@ -137,6 +179,11 @@
</beans:property>
<beans:property name="soaRecordConfig">
<beans:bean parent="instanceDnsSoaRecordConfig"/>
+ </beans:property>
+ <beans:property name="txtRecordConfigs">
+ <util:list>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpf"/>
+ </util:list>
</beans:property>
</beans:bean>

@@ -167,6 +214,11 @@
<util:list>
<beans:bean parent="instanceDnsSrvRecordConfigLdap1"/>
</util:list>
+ </beans:property>
+ <beans:property name="txtRecordConfigs">
+ <util:list>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
+ </util:list>
</beans:property>
</beans:bean>

@@ -198,6 +250,11 @@
<beans:bean parent="instanceDnsSrvRecordConfigLdap1"/>
<beans:bean parent="instanceDnsSrvRecordConfigLdap2"/>
</util:list>
+ </beans:property>
+ <beans:property name="txtRecordConfigs">
+ <util:list>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
+ </util:list>
</beans:property>
</beans:bean>

@@ -229,6 +286,11 @@
<beans:bean
parent="instanceDnsSrvRecordConfigLdapUnavailable"/>
<beans:bean parent="instanceDnsSrvRecordConfigLdap2"/>
</util:list>
+ </beans:property>
+ <beans:property name="txtRecordConfigs">
+ <util:list>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
+ </util:list>
</beans:property>
</beans:bean>

@@ -259,6 +321,11 @@
<util:list>
<beans:bean parent="instanceDnsSrvRecordConfigLdap1"/>
</util:list>
+ </beans:property>
+ <beans:property name="txtRecordConfigs">
+ <util:list>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
+ </util:list>
</beans:property>
</beans:bean>

@@ -290,6 +357,11 @@
<beans:bean parent="instanceDnsSrvRecordConfigLdap1"/>
<beans:bean parent="instanceDnsSrvRecordConfigLdap3"/>
</util:list>
+ </beans:property>
+ <beans:property name="txtRecordConfigs">
+ <util:list>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
+ </util:list>
</beans:property>
</beans:bean>

@@ -315,6 +387,11 @@
</beans:property>
<beans:property name="soaRecordConfig">
<beans:bean parent="instanceDnsSoaRecordConfig"/>
+ </beans:property>
+ <beans:property name="txtRecordConfigs">
+ <util:list>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
+ </util:list>
</beans:property>
</beans:bean>

@@ -345,6 +422,11 @@
<util:list>
<beans:bean
parent="instanceDnsSrvRecordConfigLdapUnavailable"/>
</util:list>
+ </beans:property>
+ <beans:property name="txtRecordConfigs">
+ <util:list>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
+ </util:list>
</beans:property>
</beans:bean>

@@ -375,6 +457,11 @@
<util:list>
<beans:bean parent="instanceDnsSrvRecordConfigLdap1"/>
</util:list>
+ </beans:property>
+ <beans:property name="txtRecordConfigs">
+ <util:list>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
+ </util:list>
</beans:property>
</beans:bean>
</beans:beans>
=======================================
--- /dcdt-core/src/main/scripts/ant-clover.xml Sun Dec 8 19:47:58 2013 UTC
+++ /dcdt-core/src/main/scripts/ant-clover.xml Thu Oct 2 12:23:45 2014 UTC
@@ -17,8 +17,8 @@
<not><ispropertytrue
property="${maven.clover.skipProperty}"/></not>
<then>
<dcdt:info>Compiling Clover instrumented test source
files: ${project.build.cloverTestSourceDirectory} =>
${project.build.cloverTestOutputDirectory}</dcdt:info>
- <dcdt:compile
srcDir="${project.build.cloverTestSourceDirectory}"
outDir="${project.build.cloverTestOutputDirectory}" source="${java.version}"
- target="${java.version}">
+ <dcdt:compile
srcDir="${project.build.cloverTestSourceDirectory}"
outDir="${project.build.cloverTestOutputDirectory}"
+ compiler="javac${java.version}"
source="${java.version}" target="${java.version}">
<classpath>
<path refid="maven.test.classpath"/>
<path refid="maven.plugin.classpath"/>
@@ -49,8 +49,8 @@
<not><ispropertytrue
property="${maven.clover.skipProperty}"/></not>
<then>
<dcdt:info>Compiling Clover instrumented source files:
${project.build.cloverSourceDirectory} =>
${project.build.cloverOutputDirectory}</dcdt:info>
- <dcdt:compile
srcDir="${project.build.cloverSourceDirectory}"
outDir="${project.build.cloverOutputDirectory}" source="${java.version}"
- target="${java.version}">
+ <dcdt:compile
srcDir="${project.build.cloverSourceDirectory}"
outDir="${project.build.cloverOutputDirectory}"
compiler="javac${java.version}"
+ source="${java.version}" target="${java.version}">
<classpath>
<path refid="maven.compile.classpath"/>
<path refid="maven.plugin.classpath"/>
@@ -90,7 +90,7 @@
</else>
</if>
<dcdt:info>Generating Clover instrumented source files:
${project.build.cloverSourceDirectory},
${project.build.cloverTestSourceDirectory}</dcdt:info>
- <dcdt-clover:instrument
dbFile="${project.build.cloverDbFile}"
srcDir="${project.build.sourceDirectory}"
+ <dcdt-clover:instrument
dbFile="${project.build.cloverDbFile}" source="${java.version}"
srcDir="${project.build.sourceDirectory}"
testSrcDir="${project.build.testSourceDirectory}"
instrumentedSrcDir="${project.build.cloverSourceDirectory}"

testInstrumentedSrcDir="${project.build.cloverTestSourceDirectory}"/>
</then>
=======================================
--- /dcdt-core/src/main/scripts/antlib-clover.xml Sun Dec 8 19:47:58 2013
UTC
+++ /dcdt-core/src/main/scripts/antlib-clover.xml Thu Oct 2 12:23:45 2014
UTC
@@ -6,17 +6,18 @@

<macrodef name="instrument" description="Generates Clover instrumented
source files.">
<attribute name="dbFile"/>
+ <attribute name="source"/>
<attribute name="srcDir"/>
<attribute name="testSrcDir"/>
<attribute name="instrumentedSrcDir"/>
<attribute name="testInstrumentedSrcDir"/>
<sequential>
- <clover:instr initstring="@{dbFile}"
destdir="@{instrumentedSrcDir}" taskname="clover-instrument">
+ <clover:instr initstring="@{dbFile}" source="@{source}"
destdir="@{instrumentedSrcDir}" taskname="clover-instrument">
<fileset dir="@{srcDir}" erroronmissingdir="false">
<patternset refid="patternset.java.files"/>
</fileset>
</clover:instr>
- <clover:instr initstring="@{dbFile}"
destdir="@{testInstrumentedSrcDir}" taskname="clover-instrument">
+ <clover:instr initstring="@{dbFile}" source="@{source}"
destdir="@{testInstrumentedSrcDir}" taskname="clover-instrument">
<testsources dir="@{testSrcDir}" erroronmissingdir="false">
<patternset refid="patternset.java.files"/>
</testsources>
=======================================
--- /dcdt-core/src/main/scripts/antlib-core.xml Wed Jan 8 00:50:28 2014 UTC
+++ /dcdt-core/src/main/scripts/antlib-core.xml Thu Oct 2 12:23:45 2014 UTC
@@ -7,6 +7,7 @@
</presetdef>

<macrodef name="compile" description="Invokes the Java compiler.">
+ <attribute name="compiler"/>
<attribute name="srcDir"/>
<attribute name="outDir"/>
<attribute name="source"/>
@@ -19,8 +20,8 @@
<available file="@{srcDir}" type="dir"/>
<then>
<mkdir dir="@{outDir}"/>
- <javac destdir="@{outDir}" source="@{source}"
target="@{target}" memoryInitialSize="@{memInitial}"
memoryMaximumSize="@{memMax}"
- debug="true" deprecation="true"
includeAntRuntime="false" fork="true">
+ <javac compiler="@{compiler}" destdir="@{outDir}"
source="@{source}" target="@{target}" memoryInitialSize="@{memInitial}"
+ memoryMaximumSize="@{memMax}" debug="true"
deprecation="true" includeAntRuntime="false" fork="true">
<compilerarg value="-proc:none"/>
<compilerarg value="-Werror"/>
<compilerarg value="-Xlint"/>
=======================================
--- /dcdt-core/src/test/resources/META-INF/core/core-test.properties Wed
May 7 21:01:36 2014 UTC
+++ /dcdt-core/src/test/resources/META-INF/core/core-test.properties Thu
Oct 2 12:23:45 2014 UTC
@@ -24,7 +24,7 @@

#====================================================================================================
# INSTANCE DNS

#====================================================================================================
-dcdt.instance.dns.server.1.port=1053
+dcdt.instance.dns.server.1.port=10053


#====================================================================================================
# INSTANCE LDAP
=======================================
--- /dcdt-parent/pom.xml Thu Jun 19 03:01:11 2014 UTC
+++ /dcdt-parent/pom.xml Thu Oct 2 12:23:45 2014 UTC
@@ -607,6 +607,8 @@
</extension>
</extensions>

+ <defaultGoal>clean install</defaultGoal>
+
<pluginManagement>
<plugins>
<plugin>
@@ -701,6 +703,7 @@
-->
<arg>-Xlint:-try</arg>
</compilerArgs>
+ <compilerVersion>${java.version}</compilerVersion>
<fork>true</fork>
<maxmem>256m</maxmem>
<meminitial>128m</meminitial>
@@ -1296,12 +1299,12 @@
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
- <version>2.41.0</version>
+ <version>2.43.1</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
- <version>2.41.0</version>
+ <version>2.43.1</version>
<exclusions>
<exclusion>
<groupId>xerces</groupId>
@@ -1312,12 +1315,12 @@
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
- <version>2.41.0</version>
+ <version>2.43.1</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
- <version>2.41.0</version>
+ <version>2.43.1</version>
</dependency>
</dependencies>
</plugin>
@@ -2003,7 +2006,7 @@
</property>
</activation>
<properties>
- <tomcat.manager.password />
+ <tomcat.manager.password/>
</properties>
</profile>
</profiles>
=======================================
---
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/impl/ToolDnsServiceImpl.java
Mon Jun 23 06:12:33 2014 UTC
+++
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/impl/ToolDnsServiceImpl.java
Thu Oct 2 12:23:45 2014 UTC
@@ -3,21 +3,25 @@
import gov.hhs.onc.dcdt.dns.DnsException;
import gov.hhs.onc.dcdt.dns.DnsRecordType;
import gov.hhs.onc.dcdt.dns.lookup.DnsLookupResult;
+import
gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils.DnsRecordDataStringTransformer;
import gov.hhs.onc.dcdt.dns.utils.ToolDnsUtils;
import gov.hhs.onc.dcdt.net.utils.ToolInetAddressUtils;
import gov.hhs.onc.dcdt.service.mail.james.ToolDnsService;
import gov.hhs.onc.dcdt.service.mail.james.config.DnsServiceConfigBean;
import gov.hhs.onc.dcdt.utils.ToolArrayUtils;
import gov.hhs.onc.dcdt.utils.ToolCollectionUtils;
+import gov.hhs.onc.dcdt.utils.ToolListUtils;
import gov.hhs.onc.dcdt.utils.ToolNumberUtils;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import javax.annotation.Nullable;
import javax.annotation.Resource;
+import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.lang3.ArrayUtils;
@@ -28,7 +32,9 @@
import org.xbill.DNS.ARecord;
import org.xbill.DNS.Address;
import org.xbill.DNS.Name;
+import org.xbill.DNS.PTRRecord;
import org.xbill.DNS.Record;
+import org.xbill.DNS.ReverseMap;
import org.xbill.DNS.TextParseException;

public class ToolDnsServiceImpl extends DNSJavaService implements
ToolDnsService {
@@ -55,12 +61,15 @@
@Nullable
@Override
public String getHostName(InetAddress addr) {
- return addr.getHostAddress();
+ PTRRecord ptrRecord = ((PTRRecord)
ToolListUtils.getFirst(this.lookupNoExceptionInternal(ReverseMap.fromAddress(addr).toString(),
DnsRecordType.PTR)));
+
+ return ((ptrRecord != null) ? ptrRecord.getTarget().toString() :
addr.getHostAddress());
}

@Override
public Collection<String> findTXTRecords(String hostName) {
- return new ArrayList<>(0);
+ return
CollectionUtils.collect(this.lookupNoExceptionInternal(hostName,
DnsRecordType.TXT), DnsRecordDataStringTransformer.INSTANCE,
+ new ArrayList<String>());
}

@Override
@@ -81,39 +90,49 @@
@Nullable
@Override
protected Record[] lookup(String nameStr, int recordTypeId, String
recordTypeDesc) throws TemporaryResolutionException {
- DnsRecordType recordType =
ToolDnsUtils.findByCode(DnsRecordType.class, recordTypeId);
+ // noinspection ConstantConditions
+ return ToolCollectionUtils.toArray(this.lookupInternal(nameStr,
ToolDnsUtils.findByCode(DnsRecordType.class, recordTypeId)), Record.class);
+ }

- if (recordType == null) {
- LOGGER.error(String.format("Unable to perform DNS lookup
(name=%s) for unknown record type (desc=%s): %d", nameStr, recordTypeDesc,
recordTypeId));
-
+ @Nullable
+ private List<? extends Record> lookupNoExceptionInternal(String
nameStr, DnsRecordType recordType) {
+ try {
+ return this.lookupInternal(nameStr, recordType);
+ } catch (TemporaryResolutionException e) {
return null;
}
-
- Name name;
+ }

+ @Nullable
+ private List<? extends Record> lookupInternal(String nameStr,
DnsRecordType recordType) throws TemporaryResolutionException {
try {
- name = Name.fromString(nameStr);
+ return this.lookupInternal(Name.fromString(nameStr),
recordType);
} catch (TextParseException e) {
LOGGER.error(String.format("Unable to parse DNS lookup
(recordType=%s) name: %s", recordType.getId(), nameStr), e);

return null;
}
+ }

+ @Nullable
+ private List<? extends Record> lookupInternal(Name name, DnsRecordType
recordType) throws TemporaryResolutionException {
DnsLookupResult<? extends Record> lookupResult;

try {
+ // noinspection ConstantConditions
lookupResult =
this.configBean.getLocalLookupService().lookupRecords(recordType,
recordType.getRecordClass(), name);

if (!lookupResult.isSuccess()) {
+ // noinspection ConstantConditions
lookupResult =
this.configBean.getExternalLookupService().lookupRecords(recordType,
recordType.getRecordClass(), name);
}
} catch (DnsException e) {
- LOGGER.error(String.format("Unable to perform DNS lookup
(recordType=%s, name=%s) name.", recordType.getId(), nameStr), e);
+ LOGGER.error(String.format("Unable to perform DNS lookup
(recordType=%s, name=%s) name.", recordType.getId(), name), e);

return null;
}

- return ToolCollectionUtils.toArray(lookupResult.getAnswers(),
Record.class);
+ return lookupResult.getAnswers();
}

@Nullable
=======================================
--- /dcdt-web/pom.xml Mon Jun 23 06:12:33 2014 UTC
+++ /dcdt-web/pom.xml Thu Oct 2 12:23:45 2014 UTC
@@ -559,6 +559,7 @@

<additionalClasspathElement>${project.build.testResourcesDirectory}</additionalClasspathElement>

<additionalClasspathElement>${project.build.resourcesDirectory}</additionalClasspathElement>
</additionalClasspathElements>
+ <threadCount>1</threadCount>

<workingDirectory>${project.build.testWebappDirectory}</workingDirectory>
</configuration>
<executions>
@@ -710,6 +711,7 @@

<logFile>${project.build.directory}/surefire-logs/selenium-xvfb.log</logFile>
<reuse>true</reuse>
<skip>${os.family.isNotUnix}</skip>
+ <xauthEnabled>false</xauthEnabled>
</configuration>
</execution>
<execution>
=======================================
---
/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/test/impl/AbstractToolSeleniumIntegrationTests.java
Tue Feb 25 21:16:43 2014 UTC
+++
/dcdt-web/src/test/java/gov/hhs/onc/dcdt/web/test/impl/AbstractToolSeleniumIntegrationTests.java
Thu Oct 2 12:23:45 2014 UTC
@@ -24,14 +24,14 @@

@Autowired
@SuppressWarnings({ "SpringJavaAutowiringInspection" })
- protected DesiredCapabilities seleniumWebDriverDesiredCapabilities;
+ protected DesiredCapabilities seleniumDesiredCapabilities;

private final static Logger LOGGER =
LoggerFactory.getLogger(AbstractToolSeleniumIntegrationTests.class);

@BeforeClass(groups = { "dcdt.test.it.web.all" }, timeOut =
ToolDateUtils.MS_IN_SEC * 30)
public void buildSeleniumWebDriver() throws Exception {
if (seleniumWebDriver == null) {
- seleniumWebDriver = new
RemoteWebDriver(this.seleniumWebDriverUrlHub,
this.seleniumWebDriverDesiredCapabilities);
+ seleniumWebDriver = new
RemoteWebDriver(this.seleniumWebDriverUrlHub,
this.seleniumDesiredCapabilities);

LOGGER.info(String.format("Selenium web driver (class=%s)
created.", ToolClassUtils.getName(seleniumWebDriver)));
}
=======================================
--- /dcdt-web/src/test/resources/META-INF/spring/spring-web-test.xml Wed
Jan 29 04:36:23 2014 UTC
+++ /dcdt-web/src/test/resources/META-INF/spring/spring-web-test.xml Thu
Oct 2 12:23:45 2014 UTC
@@ -14,14 +14,9 @@
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">


<!--====================================================================================================
- = SELENIUM
+ = SELENIUM DESIRED CAPABILITIES

=====================================================================================================-->
- <beans:bean id="seleniumWebDriverDesiredCapabilities"
class="org.openqa.selenium.remote.DesiredCapabilities">
- <beans:constructor-arg name="rawMap">
- <util:map>
- <beans:entry key="#{
T(org.openqa.selenium.remote.CapabilityType).BROWSER_NAME }"
- value="#{
T(org.openqa.selenium.remote.BrowserType).FIREFOX }"/>
- </util:map>
- </beans:constructor-arg>
- </beans:bean>
+ <beans:bean id="seleniumDesiredCapabilities"
class="org.openqa.selenium.remote.DesiredCapabilities" abstract="true"/>
+
+ <beans:bean id="seleniumDesiredCapabilitiesFirefox"
parent="seleniumDesiredCapabilities" factory-method="firefox"/>
</beans:beans>

==============================================================================
Revision: 99b23741c658
Branch: default
Author: Michal Kotelba <michal....@esacinc.com>
Date: Thu Oct 2 16:33:36 2014 UTC
Log: - Further supports DCDT-261.
- Refactored DNS service responses to allow for multiple authoritative
configuration objects (as will be the case for DNS PTR records).
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=99b23741c658

Modified:

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/InstanceDnsConfig.java

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsRecordUtils.java

/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/config/DnsServerConfig.java

/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/config/impl/DnsServerConfigImpl.java

/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerRequestProcessorImpl.java

/dcdt-service-dns/src/test/java/gov/hhs/onc/dcdt/service/dns/DnsServiceFunctionalTests.java

=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/InstanceDnsConfig.java
Thu Oct 2 12:23:45 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/InstanceDnsConfig.java
Thu Oct 2 16:33:36 2014 UTC
@@ -50,7 +50,7 @@
public List<CnameRecordConfig> getCnameRecordConfigs();

public void setCnameRecordConfigs(@Nullable List<CnameRecordConfig>
cnameRecordConfigs);
-
+
public boolean hasMxRecordConfigs();

@Nullable
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java
Thu Oct 2 12:23:45 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java
Thu Oct 2 16:33:36 2014 UTC
@@ -127,6 +127,7 @@

@Override
public Map<DnsRecordType, List<? extends DnsRecordConfig<? extends
Record>>> mapRecordConfigs() {
+ // noinspection ConstantConditions
return ToolMapUtils.putAll(new LinkedHashMap<DnsRecordType, List<?
extends DnsRecordConfig<? extends Record>>>(DnsRecordType.values().length),
new MutablePair<>(DnsRecordType.A, this.aRecordsConfigs), new
MutablePair<>(DnsRecordType.CERT, this.certRecordConfigs), new
MutablePair<>(
DnsRecordType.CNAME, this.cnameRecordConfigs), new
MutablePair<>(DnsRecordType.MX, this.mxRecordConfigs), new
MutablePair<>(DnsRecordType.NS,
@@ -201,13 +202,9 @@
}
}

- // @formatter:off
- /*
this.ptrRecordConfigs =

ToolCollectionUtils.nullIfEmpty(CollectionUtils.collect(this.aRecordsConfigs,
new ReverseMapPtrRecordConfigTransformer(),
new ArrayList<PtrRecordConfig>()));
- */
- // @formatter:on
}
}

=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsRecordUtils.java
Thu Oct 2 12:23:45 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsRecordUtils.java
Thu Oct 2 16:33:36 2014 UTC
@@ -2,6 +2,7 @@

import gov.hhs.onc.dcdt.collections.impl.AbstractToolPredicate;
import gov.hhs.onc.dcdt.collections.impl.AbstractToolTransformer;
+import gov.hhs.onc.dcdt.config.instance.InstanceDnsConfig;
import gov.hhs.onc.dcdt.dns.DnsCertificateType;
import gov.hhs.onc.dcdt.dns.DnsDclassType;
import gov.hhs.onc.dcdt.dns.DnsException;
@@ -102,6 +103,19 @@
return record.rdataToString();
}
}
+
+ public static class AuthoritativeDnsConfigPredicate extends
AbstractToolPredicate<InstanceDnsConfig> {
+ private Record questionRecord;
+
+ public AuthoritativeDnsConfigPredicate(Record questionRecord) {
+ this.questionRecord = questionRecord;
+ }
+
+ @Override
+ protected boolean evaluateInternal(InstanceDnsConfig dnsConfig)
throws Exception {
+ return dnsConfig.isAuthoritative(this.questionRecord);
+ }
+ }

public final static DateFormat DATE_FORMAT_SERIAL = new
SimpleDateFormat("yyyyMMdd");

@@ -118,6 +132,7 @@
spfStrs.add(DnsSpfStrings.MECH_ALL_FAIL);
}

+ // noinspection ConstantConditions
return ToolStringUtils.joinDelimit(spfStrs, DnsSpfStrings.DELIM);
}

@@ -153,6 +168,7 @@
@Nullable Iterable<? extends Iterable<? extends DnsRecordConfig<?
extends Record>>> recordConfigs) {
DnsRecordType questionRecordType =
ToolDnsUtils.findByCode(DnsRecordType.class, questionRecord.getType());

+ // noinspection ConstantConditions
return CollectionUtils.emptyIfNull(((questionRecordType != null) ?
CollectionUtils.select(CollectionUtils.collect(
ToolIteratorUtils.chainedIterator(recordConfigs),
new DnsRecordConfigAnswerTransformer<>(questionRecordType,
((Class<T>) questionRecordType.getRecordClass()), questionRecord)),
PredicateUtils
=======================================
---
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/config/DnsServerConfig.java
Thu Mar 20 10:07:30 2014 UTC
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/config/DnsServerConfig.java
Thu Oct 2 16:33:36 2014 UTC
@@ -7,8 +7,7 @@
import org.xbill.DNS.Record;

public interface DnsServerConfig extends ToolConnectionBean {
- @Nullable
- public InstanceDnsConfig findAuthoritativeDnsConfig(Record
questionRecord);
+ public List<InstanceDnsConfig> findAuthoritativeDnsConfigs(Record
questionRecord);

public boolean hasDnsConfigs();

=======================================
---
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/config/impl/DnsServerConfigImpl.java
Thu Mar 20 10:07:30 2014 UTC
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/config/impl/DnsServerConfigImpl.java
Thu Oct 2 16:33:36 2014 UTC
@@ -2,7 +2,9 @@

import gov.hhs.onc.dcdt.beans.impl.AbstractToolConnectionBean;
import gov.hhs.onc.dcdt.config.instance.InstanceDnsConfig;
+import
gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils.AuthoritativeDnsConfigPredicate;
import gov.hhs.onc.dcdt.service.dns.config.DnsServerConfig;
+import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nullable;
import org.apache.commons.collections4.CollectionUtils;
@@ -13,22 +15,10 @@
@Autowired(required = false)
private List<InstanceDnsConfig> dnsConfigs;

- @Nullable
@Override
- public InstanceDnsConfig findAuthoritativeDnsConfig(Record
questionRecord) {
- InstanceDnsConfig dnsConfigAuthoritative = null;
-
- if (this.hasDnsConfigs()) {
- for (InstanceDnsConfig dnsConfig : this.dnsConfigs) {
- // noinspection ConstantConditions
- if (dnsConfig.isAuthoritative(questionRecord)
- && ((dnsConfigAuthoritative == null) ||
dnsConfig.getDomainName().subdomain(dnsConfigAuthoritative.getDomainName())))
{
- dnsConfigAuthoritative = dnsConfig;
- }
- }
- }
-
- return dnsConfigAuthoritative;
+ public List<InstanceDnsConfig> findAuthoritativeDnsConfigs(Record
questionRecord) {
+ return CollectionUtils.select(this.dnsConfigs, new
AuthoritativeDnsConfigPredicate(questionRecord),
+ new
ArrayList<InstanceDnsConfig>(CollectionUtils.size(this.dnsConfigs)));
}

@Override
=======================================
---
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerRequestProcessorImpl.java
Mon Jun 23 13:21:03 2014 UTC
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerRequestProcessorImpl.java
Thu Oct 2 16:33:36 2014 UTC
@@ -14,6 +14,9 @@
import
gov.hhs.onc.dcdt.service.dns.server.DnsServerRequestProcessingException;
import gov.hhs.onc.dcdt.service.dns.server.DnsServerRequestProcessor;
import gov.hhs.onc.dcdt.utils.ToolClassUtils;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -24,6 +27,7 @@
import org.xbill.DNS.Message;
import org.xbill.DNS.Name;
import org.xbill.DNS.Record;
+import org.xbill.DNS.SOARecord;

@Component("dnsServerReqProcImpl")
@Lazy
@@ -32,6 +36,7 @@
private final static Logger LOGGER =
LoggerFactory.getLogger(DnsServerRequestProcessorImpl.class);

@Autowired
+ @SuppressWarnings({ "SpringJavaAutowiringInspection" })
private ConversionService convService;

private DnsServerConfig serverConfig;
@@ -97,15 +102,28 @@
return respMsg;
}

- InstanceDnsConfig authoritativeDnsConfig =
this.serverConfig.findAuthoritativeDnsConfig(questionRecord);
+ List<InstanceDnsConfig> authoritativeDnsConfigs =
this.serverConfig.findAuthoritativeDnsConfigs(questionRecord);
+ int numAuthoritativeDnsConfigs = authoritativeDnsConfigs.size();

- if (authoritativeDnsConfig != null) {
- ToolDnsMessageUtils.setAnswers(respMsg,
authoritativeDnsConfig.findAnswers(questionRecord));
- // noinspection ConstantConditions
- ToolDnsMessageUtils.setAuthorities(respMsg, true,
authoritativeDnsConfig.getSoaRecordConfig().toRecord());
- } else {
+ if (numAuthoritativeDnsConfigs == 0) {
ToolDnsMessageUtils.setRcode(respMsg, DnsMessageRcode.REFUSED);
+
+ return respMsg;
+ }
+
+ Collection<Record> answerRecords = new
ArrayList<>(numAuthoritativeDnsConfigs), configAnswerRecords;
+ List<SOARecord> authorityRecords = new
ArrayList<>(numAuthoritativeDnsConfigs);
+
+ for (InstanceDnsConfig authoritativeDnsConfig :
authoritativeDnsConfigs) {
+ if (!(configAnswerRecords =
authoritativeDnsConfig.findAnswers(questionRecord)).isEmpty()) {
+ answerRecords.addAll(configAnswerRecords);
+ // noinspection ConstantConditions
+
authorityRecords.add(authoritativeDnsConfig.getSoaRecordConfig().toRecord());
+ }
}
+
+ ToolDnsMessageUtils.setAnswers(respMsg, answerRecords);
+ ToolDnsMessageUtils.setAuthorities(respMsg, true,
authorityRecords);

return respMsg;
}
=======================================
---
/dcdt-service-dns/src/test/java/gov/hhs/onc/dcdt/service/dns/DnsServiceFunctionalTests.java
Thu May 22 06:39:17 2014 UTC
+++
/dcdt-service-dns/src/test/java/gov/hhs/onc/dcdt/service/dns/DnsServiceFunctionalTests.java
Thu Oct 2 16:33:36 2014 UTC
@@ -14,6 +14,7 @@
import gov.hhs.onc.dcdt.utils.ToolCollectionUtils;
import gov.hhs.onc.dcdt.utils.ToolIteratorUtils;
import gov.hhs.onc.dcdt.utils.ToolStringUtils;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
@@ -135,14 +136,20 @@
super.startService();
}

+ @SuppressWarnings({ "unchecked" })
private void assertLookupAnswerRecordsMatch(DnsServerConfig
serverConfig, DnsRecordConfig<? extends Record> recordConfig) throws
Exception {
DnsRecordType recordType = recordConfig.getRecordType();
Record record = recordConfig.toRecord();
+ // noinspection ConstantConditions
DnsLookupResult<? extends Record> lookupResult =

this.serverLookupServiceMap.get(serverConfig).lookupRecords(recordType,
recordType.getRecordClass(), record.getName());
+ List<InstanceDnsConfig> authoritativeConfigs =
serverConfig.findAuthoritativeDnsConfigs(record);
// noinspection ConstantConditions
- Collection<? extends Record> configAnswerRecords =
serverConfig.findAuthoritativeDnsConfig(record).findAnswers(record),
answerRecords =
- lookupResult.getAnswers();
+ Collection<Record> configAnswerRecords = new
ArrayList<>(authoritativeConfigs.size()), answerRecords =
((Collection<Record>) lookupResult.getAnswers());
+
+ for (InstanceDnsConfig authoritativeConfig : authoritativeConfigs)
{
+
configAnswerRecords.addAll(authoritativeConfig.findAnswers(record));
+ }


Assert.assertEqualsNoOrder(ToolCollectionUtils.toArray(answerRecords,
Record.class), ToolCollectionUtils.toArray(configAnswerRecords,
Record.class),
String.format("DNS lookup result (type=%s) answer record(s) do
not match: expected=[%s], actual=[%s]", lookupResult.getType().name(),

==============================================================================
Revision: c62cee1c7997
Branch: default
Author: Michal Kotelba <michal....@esacinc.com>
Date: Fri Oct 3 01:10:43 2014 UTC
Log: - Further supports DCDT-261.
- Fixed enumeration item filtering via property values.
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=c62cee1c7997

Modified:

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/beans/utils/ToolBeanPropertyUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/beans/utils/ToolBeanUtils.java

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/CryptographyUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/utils/ToolClassUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/utils/ToolEnumUtils.java
/dcdt-core/src/main/resources/META-INF/spring/spring-core-instance-dns.xml

=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/beans/utils/ToolBeanPropertyUtils.java
Sun Mar 23 04:21:50 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/beans/utils/ToolBeanPropertyUtils.java
Fri Oct 3 01:10:43 2014 UTC
@@ -1,12 +1,12 @@
package gov.hhs.onc.dcdt.beans.utils;

import gov.hhs.onc.dcdt.collections.impl.AbstractToolPredicate;
+import gov.hhs.onc.dcdt.collections.impl.AbstractToolTransformer;
import gov.hhs.onc.dcdt.utils.ToolArrayUtils;
import gov.hhs.onc.dcdt.utils.ToolClassUtils;
import java.beans.PropertyDescriptor;
import java.util.Collection;
import java.util.List;
-import java.util.Objects;
import javax.annotation.Nullable;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
@@ -15,19 +15,19 @@
import org.springframework.beans.BeanWrapper;

public abstract class ToolBeanPropertyUtils {
- public static class BeanPropertyValuePredicate<T> extends
BeanPropertyReadablePredicate {
- private T beanPropValue;
+ public static class BeanPropertyValueTransformer<T> extends
AbstractToolTransformer<Object, T> {
+ private String beanPropName;
+ private Class<T> beanPropValueClass;

- public BeanPropertyValuePredicate(String beanPropName, @Nullable T
beanPropValue) {
- super(beanPropName, ToolClassUtils.getClass(beanPropValue,
Object.class));
-
- this.beanPropValue = beanPropValue;
+ public BeanPropertyValueTransformer(String beanPropName, Class<T>
beanPropValueClass) {
+ this.beanPropName = beanPropName;
+ this.beanPropValueClass = beanPropValueClass;
}

+ @Nullable
@Override
- protected boolean evaluateInternal(@Nullable Object bean) throws
Exception {
- return super.evaluateInternal(bean)
- && Objects.equals(getValue(ToolBeanUtils.wrap(bean),
this.beanPropName, this.beanPropValueClass), this.beanPropValue);
+ protected T transformInternal(@Nullable Object bean) throws
Exception {
+ return getValue(ToolBeanUtils.wrap(bean), this.beanPropName,
this.beanPropValueClass);
}
}

=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/beans/utils/ToolBeanUtils.java
Sat Feb 8 02:16:05 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/beans/utils/ToolBeanUtils.java
Fri Oct 3 01:10:43 2014 UTC
@@ -1,24 +1,21 @@
package gov.hhs.onc.dcdt.beans.utils;

import gov.hhs.onc.dcdt.beans.ToolNamedBean;
-import
gov.hhs.onc.dcdt.beans.utils.ToolBeanPropertyUtils.BeanPropertyValuePredicate;
+import
gov.hhs.onc.dcdt.beans.utils.ToolBeanPropertyUtils.BeanPropertyValueTransformer;
import gov.hhs.onc.dcdt.utils.ToolAnnotationUtils;
import java.beans.PropertyDescriptor;
import java.io.Serializable;
import javax.annotation.Nullable;
import javax.persistence.Id;
import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.PredicateUtils;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.core.convert.ConversionService;

public abstract class ToolBeanUtils {
- public static class NamedBeanNamePredicate extends
BeanPropertyValuePredicate<String> {
- public NamedBeanNamePredicate(String namedBeanName) {
- super("name", namedBeanName);
- }
- }
+ public final static String PROP_NAME_NAME = "name";

@Nullable
public static Serializable getId(BeanWrapper beanWrapper) {
@@ -38,7 +35,10 @@

@Nullable
public static <T extends ToolNamedBean> T
findNamed(ListableBeanFactory beanFactory, String namedBeanName, Class<T>
namedBeanClass) {
- return
CollectionUtils.find(ToolBeanFactoryUtils.getBeansOfType(beanFactory,
namedBeanClass), new NamedBeanNamePredicate(namedBeanName));
+ return CollectionUtils.find(
+ ToolBeanFactoryUtils.getBeansOfType(beanFactory,
namedBeanClass),
+ PredicateUtils.transformedPredicate(new
BeanPropertyValueTransformer<>(PROP_NAME_NAME, Object.class),
+ PredicateUtils.equalPredicate(((Object) namedBeanName))));
}

@Nullable
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/CryptographyUtils.java
Mon Jun 23 06:12:33 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/CryptographyUtils.java
Fri Oct 3 01:10:43 2014 UTC
@@ -5,6 +5,7 @@
import gov.hhs.onc.dcdt.crypto.CryptographyObjectIdentifier;
import gov.hhs.onc.dcdt.crypto.CryptographyTaggedIdentifier;
import gov.hhs.onc.dcdt.crypto.CryptographyTypeIdentifier;
+import gov.hhs.onc.dcdt.utils.ToolClassUtils.IsAssignablePredicate;
import gov.hhs.onc.dcdt.utils.ToolEnumUtils;
import java.security.Provider;
import java.security.Security;
@@ -37,6 +38,7 @@
initializeProvider();
}

+ @Nullable
public static <T extends Enum<T> & CryptographyAlgorithmIdentifier> T
findByAlgorithmId(Class<T> enumClass, AlgorithmIdentifier algId) {
return ToolEnumUtils.findByPropertyValue(enumClass,
CryptographyAlgorithmIdentifier.PROP_NAME_ALG_ID, algId);
}
@@ -53,7 +55,7 @@

@Nullable
public static <T extends Enum<T> & CryptographyTypeIdentifier> T
findByType(Class<T> enumClass, Class<?> type) {
- return ToolEnumUtils.findByPropertyValue(enumClass,
CryptographyTypeIdentifier.PROP_NAME_TYPE, type);
+ return ToolEnumUtils.findByPropertyValue(enumClass,
CryptographyTypeIdentifier.PROP_NAME_TYPE, new
IsAssignablePredicate<>(type, true, true));
}

@Nullable
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/utils/ToolClassUtils.java Tue
Mar 25 18:00:58 2014 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/utils/ToolClassUtils.java Fri
Oct 3 01:10:43 2014 UTC
@@ -14,14 +14,32 @@
public abstract class ToolClassUtils {
public static class IsAssignablePredicate<T> extends
AbstractToolPredicate<Object> {
private Class<T> clazz;
+ private boolean from;
+ private boolean castClass;

public IsAssignablePredicate(Class<T> clazz) {
+ this(clazz, false);
+ }
+
+ public IsAssignablePredicate(Class<T> clazz, boolean from) {
+ this(clazz, from, false);
+ }
+
+ public IsAssignablePredicate(Class<T> clazz, boolean from, boolean
castClass) {
this.clazz = clazz;
+ this.from = from;
+ this.castClass = castClass;
}

@Override
protected boolean evaluateInternal(@Nullable Object obj) throws
Exception {
- return isAssignable(ToolClassUtils.getClass(obj), this.clazz);
+ Class<?> objClass = ToolClassUtils.getClass(obj);
+
+ if (this.castClass && isAssignable(objClass, Class.class)) {
+ objClass = ((Class<?>) obj);
+ }
+
+ return isAssignable((from ? this.clazz : objClass), (from ?
objClass : this.clazz));
}
}

=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/utils/ToolEnumUtils.java Mon
Jun 23 06:12:33 2014 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/utils/ToolEnumUtils.java Fri
Oct 3 01:10:43 2014 UTC
@@ -1,9 +1,11 @@
package gov.hhs.onc.dcdt.utils;

-import
gov.hhs.onc.dcdt.beans.utils.ToolBeanPropertyUtils.BeanPropertyValuePredicate;
+import
gov.hhs.onc.dcdt.beans.utils.ToolBeanPropertyUtils.BeanPropertyValueTransformer;
import java.util.EnumSet;
import javax.annotation.Nullable;
import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Predicate;
+import org.apache.commons.collections4.PredicateUtils;

public abstract class ToolEnumUtils {
@Nullable
@@ -13,6 +15,18 @@

@Nullable
public static <T extends Enum<T>> T findByPropertyValue(Iterable<T>
enumItems, String propName, @Nullable Object propValue) {
- return CollectionUtils.find(enumItems, new
BeanPropertyValuePredicate<>(propName, propValue));
+ return findByPropertyValue(enumItems, propName,
PredicateUtils.equalPredicate(propValue));
+ }
+
+ @Nullable
+ public static <T extends Enum<T>> T findByPropertyValue(Class<T>
enumClass, String propName, Predicate<?> propValuePredicate) {
+ return findByPropertyValue(EnumSet.allOf(enumClass), propName,
propValuePredicate);
+ }
+
+ @Nullable
+ @SuppressWarnings({ "unchecked" })
+ public static <T extends Enum<T>> T findByPropertyValue(Iterable<T>
enumItems, String propName, Predicate<?> propValuePredicate) {
+ return CollectionUtils.find(enumItems,
+ PredicateUtils.transformedPredicate(new
BeanPropertyValueTransformer<>(propName, Object.class),
((Predicate<Object>) propValuePredicate)));
}
}
=======================================
---
/dcdt-core/src/main/resources/META-INF/spring/spring-core-instance-dns.xml
Thu Oct 2 12:23:45 2014 UTC
+++
/dcdt-core/src/main/resources/META-INF/spring/spring-core-instance-dns.xml
Fri Oct 3 01:10:43 2014 UTC
@@ -87,7 +87,7 @@
p:target="ldap-unavailable.#{ instanceConfig.domainName }"/>


<!--====================================================================================================
- = INSTANCE DNS PTR RECORD CONFIG
+ = INSTANCE DNS TXT RECORD CONFIG

=====================================================================================================-->
<beans:bean id="instanceDnsTxtRecordConfig"
parent="txtRecordConfigImpl" abstract="true"/>


==============================================================================
Revision: f4e893210ace
Branch: default
Author: Michal Kotelba <michal....@esacinc.com>
Date: Wed Oct 8 00:15:49 2014 UTC
Log: - Further supports DCDT-261.
- Refactored DNS configuration to use cached DNS record map.
- Modified DNS service request processing to use more appropriate DNS
rcode(s) (i.e. NOTIMPL instead of REFUSED).
- Modified mail service SMTP server to use mail service default domain as
HELO name.
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=f4e893210ace

Modified:

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/InstanceDnsConfig.java

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsMessageUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsRecordUtils.java
/dcdt-core/src/main/resources/META-INF/spring/spring-core-dns.xml
/dcdt-core/src/main/resources/META-INF/spring/spring-core-instance-dns.xml

/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/config/DnsServerConfig.java

/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/config/impl/DnsServerConfigImpl.java

/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerRequestProcessorImpl.java

/dcdt-service-dns/src/test/java/gov/hhs/onc/dcdt/service/dns/DnsServiceFunctionalTests.java

/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/impl/ToolSmtpServer.java

/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/impl/ToolSmtpServerFactory.java

=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/InstanceDnsConfig.java
Thu Oct 2 16:33:36 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/InstanceDnsConfig.java
Wed Oct 8 00:15:49 2014 UTC
@@ -8,28 +8,31 @@
import gov.hhs.onc.dcdt.dns.config.ARecordConfig;
import gov.hhs.onc.dcdt.dns.config.CertRecordConfig;
import gov.hhs.onc.dcdt.dns.config.CnameRecordConfig;
-import gov.hhs.onc.dcdt.dns.config.DnsRecordConfig;
import gov.hhs.onc.dcdt.dns.config.MxRecordConfig;
import gov.hhs.onc.dcdt.dns.config.NsRecordConfig;
import gov.hhs.onc.dcdt.dns.config.PtrRecordConfig;
import gov.hhs.onc.dcdt.dns.config.SoaRecordConfig;
import gov.hhs.onc.dcdt.dns.config.SrvRecordConfig;
import gov.hhs.onc.dcdt.dns.config.TxtRecordConfig;
-import java.util.Collection;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
import org.springframework.context.ApplicationContextAware;
+import org.xbill.DNS.Name;
import org.xbill.DNS.Record;

@JsonSubTypes({ @Type(InstanceDnsConfigImpl.class) })
public interface InstanceDnsConfig extends ApplicationContextAware,
ToolDomainAddressBean {
- public <T extends Record> Collection<T> findAnswers(T questionRecord);
+ @Nullable
+ public List<Record> findAnswers(Record questionRecord);

- public Map<DnsRecordType, List<? extends DnsRecordConfig<? extends
Record>>> mapRecordConfigs();
+ @Nullable
+ public List<Record> findAnswers(DnsRecordType questionRecordType, Name
questionName);

public boolean isAuthoritative(Record questionRecord);

+ public boolean isAuthoritative(DnsRecordType questionRecordType, Name
questionName);
+
public boolean isAuthoritative();

public boolean hasARecordConfigs();
@@ -58,6 +61,8 @@

public void setMxRecordConfigs(@Nullable List<MxRecordConfig>
mxRecordConfigs);

+ public Map<Name, Map<DnsRecordType, List<Record>>> getNameRecordsMap();
+
public boolean hasNsRecordConfigs();

@Nullable
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java
Thu Oct 2 16:33:36 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java
Wed Oct 8 00:15:49 2014 UTC
@@ -34,16 +34,15 @@
import gov.hhs.onc.dcdt.utils.ToolArrayUtils;
import gov.hhs.onc.dcdt.utils.ToolCollectionUtils;
import gov.hhs.onc.dcdt.utils.ToolIteratorUtils;
-import gov.hhs.onc.dcdt.utils.ToolMapUtils;
import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedHashMap;
+import java.util.EnumMap;
+import java.util.EnumSet;
import java.util.List;
import java.util.Map;
+import java.util.TreeMap;
import javax.annotation.Nullable;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.IteratorUtils;
-import org.apache.commons.lang3.tuple.MutablePair;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
@@ -53,6 +52,21 @@

@JsonTypeName("instanceDnsConfig")
public class InstanceDnsConfigImpl extends AbstractToolDomainAddressBean
implements InstanceDnsConfig {
+ public static class AuthoritativeDnsConfigPredicate extends
AbstractToolPredicate<InstanceDnsConfig> {
+ private DnsRecordType questionRecordType;
+ private Name questionName;
+
+ public AuthoritativeDnsConfigPredicate(DnsRecordType
questionRecordType, Name questionName) {
+ this.questionRecordType = questionRecordType;
+ this.questionName = questionName;
+ }
+
+ @Override
+ protected boolean evaluateInternal(InstanceDnsConfig dnsConfig)
throws Exception {
+ return dnsConfig.isAuthoritative(this.questionRecordType,
this.questionName);
+ }
+ }
+
private class ReverseMapPtrRecordConfigTransformer extends
AbstractToolTransformer<ARecordConfig, PtrRecordConfig> {
@Override
protected PtrRecordConfig transformInternal(ARecordConfig
aRecordConfig) throws Exception {
@@ -118,28 +132,33 @@
private SoaRecordConfig soaRecordConfig;
private List<SrvRecordConfig> srvRecordConfigs;
private List<TxtRecordConfig> txtRecordConfigs;
+ private Map<Name, Map<DnsRecordType, List<Record>>> nameRecordsMap =
new TreeMap<>();

+ @Nullable
@Override
- public <T extends Record> Collection<T> findAnswers(T questionRecord) {
- return ToolDnsRecordUtils.findAnswers(questionRecord,
-
this.mapRecordConfigs().get(ToolDnsUtils.findByCode(DnsRecordType.class,
questionRecord.getType())));
+ public List<Record> findAnswers(Record questionRecord) {
+ // noinspection ConstantConditions
+ return
this.findAnswers(ToolDnsUtils.findByCode(DnsRecordType.class,
questionRecord.getType()), questionRecord.getName());
}

+ @Nullable
@Override
- public Map<DnsRecordType, List<? extends DnsRecordConfig<? extends
Record>>> mapRecordConfigs() {
- // noinspection ConstantConditions
- return ToolMapUtils.putAll(new LinkedHashMap<DnsRecordType, List<?
extends DnsRecordConfig<? extends Record>>>(DnsRecordType.values().length),
- new MutablePair<>(DnsRecordType.A, this.aRecordsConfigs), new
MutablePair<>(DnsRecordType.CERT, this.certRecordConfigs), new
MutablePair<>(
- DnsRecordType.CNAME, this.cnameRecordConfigs), new
MutablePair<>(DnsRecordType.MX, this.mxRecordConfigs), new
MutablePair<>(DnsRecordType.NS,
- this.nsRecordConfigs), new
MutablePair<>(DnsRecordType.PTR, this.ptrRecordConfigs),
- new MutablePair<>(DnsRecordType.SOA,
ToolArrayUtils.asList(this.soaRecordConfig)), new
MutablePair<>(DnsRecordType.SRV, this.srvRecordConfigs),
- new MutablePair<>(DnsRecordType.TXT, this.txtRecordConfigs));
+ public List<Record> findAnswers(DnsRecordType questionRecordType, Name
questionName) {
+ Map<DnsRecordType, List<Record>> recordsMap =
this.nameRecordsMap.get(questionName);
+
+ return ((recordsMap != null) ?
recordsMap.get(questionRecordType) : null);
}

@Override
public boolean isAuthoritative(Record questionRecord) {
- return (this.isAuthoritative() &&
questionRecord.getName().subdomain(
- ((questionRecord.getType() != DnsRecordType.PTR.getCode()) ?
this.domainName : ReverseMap.fromAddress(this.ipAddr))));
+ // noinspection ConstantConditions
+ return
this.isAuthoritative(ToolDnsUtils.findByCode(DnsRecordType.class,
questionRecord.getType()), questionRecord.getName());
+ }
+
+ @Override
+ public boolean isAuthoritative(DnsRecordType questionRecordType, Name
questionName) {
+ return (this.isAuthoritative() && ((questionRecordType !=
DnsRecordType.PTR) ? questionName.subdomain(this.domainName) :
questionName.equals(ReverseMap
+ .fromAddress(this.ipAddr))));
}

@Override
@@ -149,62 +168,115 @@

@Override
public void afterPropertiesSet() throws Exception {
- if (this.hasDomainName() && this.hasIpAddress()) {
- this.domainName = ToolDnsNameUtils.toAbsolute(this.domainName);
+ if (!this.hasDomainName() || !this.hasIpAddress()) {
+ return;
+ }
+
+ this.domainName = ToolDnsNameUtils.toAbsolute(this.domainName);
+
+ List<? extends DnsRecordConfig<? extends Record>> recordConfigs =
null;
+ ARecordConfig aRecordConfig;
+ TargetedDnsRecordConfig<? extends Record> targetedRecordConfig;
+ SoaRecordConfig soaRecordConfig;
+ Name recordName;
+ Record record;
+ Map<DnsRecordType, List<Record>> recordsMap;
+
+ for (DnsRecordType recordType :
EnumSet.allOf(DnsRecordType.class)) {
+ if (!recordType.isProcessed()) {
+ continue;
+ }
+
+ switch (recordType) {
+ case A:
+ recordConfigs = this.aRecordsConfigs;
+ break;
+
+ case CERT:
+ recordConfigs =
+ (this.certRecordConfigs =
+
ToolCollectionUtils.nullIfEmpty(CollectionUtils.collect(CollectionUtils.select(IteratorUtils.asIterable(ToolIteratorUtils
+ .chainedIterator(CollectionUtils.collect(ToolBeanFactoryUtils.getBeansOfType(this.appContext,
DiscoveryTestcase.class),
+
DiscoveryTestcaseCredentialsExtractor.INSTANCE))), new
DiscoveryTestcaseCredentialCertRecordPredicate()),
+ new
DiscoveryTestcaseCredentialCertRecordConfigTransformer(), new
ArrayList<CertRecordConfig>())));
+ break;
+
+ case CNAME:
+ recordConfigs = this.cnameRecordConfigs;
+ break;
+
+ case MX:
+ recordConfigs = this.mxRecordConfigs;
+ break;
+
+ case NS:
+ recordConfigs = this.nsRecordConfigs;
+ break;
+
+ case PTR:
+ recordConfigs =
+ (this.ptrRecordConfigs =
+
ToolCollectionUtils.nullIfEmpty(CollectionUtils.collect(this.aRecordsConfigs,
new ReverseMapPtrRecordConfigTransformer(),
+ new ArrayList<PtrRecordConfig>())));
+ break;
+
+ case SOA:
+ recordConfigs =
ToolArrayUtils.asList(this.soaRecordConfig);
+ break;
+
+ case SRV:
+ recordConfigs = this.srvRecordConfigs;
+ break;
+
+ case TXT:
+ recordConfigs = this.txtRecordConfigs;
+ break;
+ }

- this.certRecordConfigs =
-
ToolCollectionUtils.nullIfEmpty(CollectionUtils.collect(CollectionUtils.select(
-
IteratorUtils.asIterable(ToolIteratorUtils.chainedIterator(CollectionUtils.collect(
-
ToolBeanFactoryUtils.getBeansOfType(this.appContext,
DiscoveryTestcase.class), DiscoveryTestcaseCredentialsExtractor.INSTANCE))),
- new DiscoveryTestcaseCredentialCertRecordPredicate()),
new DiscoveryTestcaseCredentialCertRecordConfigTransformer(),
- new ArrayList<CertRecordConfig>()));
+ if (CollectionUtils.isEmpty(recordConfigs)) {
+ continue;
+ }

- Map<DnsRecordType, List<? extends DnsRecordConfig<? extends
Record>>> recordConfigsMap = this.mapRecordConfigs();
- List<? extends DnsRecordConfig<? extends Record>>
recordConfigs;
- Name recordName;
- ARecordConfig aRecordConfig;
- TargetedDnsRecordConfig<? extends Record> targetedRecordConfig;
- SoaRecordConfig soaRecordConfig;
+ // noinspection ConstantConditions
+ for (DnsRecordConfig<? extends Record> recordConfig :
recordConfigs) {
+ switch (recordType) {
+ case A:
+ if ((aRecordConfig = ((ARecordConfig)
recordConfig)).getAddress() == null) {
+ aRecordConfig.setAddress(this.ipAddr);
+ }
+ break;

- for (DnsRecordType recordType : recordConfigsMap.keySet()) {
- if (CollectionUtils.isEmpty((recordConfigs =
recordConfigsMap.get(recordType)))) {
- continue;
- }
+ case CNAME:
+ case MX:
+ case NS:
+ case SRV:
+ if ((targetedRecordConfig =
(TargetedDnsRecordConfig<? extends Record>) recordConfig).getTarget() ==
null) {
+
targetedRecordConfig.setTarget(this.domainName);
+ }

- for (DnsRecordConfig<? extends Record> recordConfig :
recordConfigs) {
- switch (recordType) {
- case A:
- if ((aRecordConfig = ((ARecordConfig)
recordConfig)).getAddress() == null) {
- aRecordConfig.setAddress(this.ipAddr);
- }
- break;
+
targetedRecordConfig.setTarget(ToolDnsNameUtils.toAbsolute(targetedRecordConfig.getTarget()));
+ break;

- case CNAME:
- case MX:
- case NS:
- case SRV:
- if ((targetedRecordConfig =
(TargetedDnsRecordConfig<? extends Record>) recordConfig).getTarget() ==
null) {
-
targetedRecordConfig.setTarget(this.domainName);
- }
+ case SOA:
+ (soaRecordConfig = ((SoaRecordConfig)
recordConfig)).setAdmin(ToolDnsNameUtils.toAbsolute(soaRecordConfig.getAdmin()));
+
soaRecordConfig.setHost(ToolDnsNameUtils.toAbsolute(soaRecordConfig.getHost()));
+ break;
+ }

-
targetedRecordConfig.setTarget(ToolDnsNameUtils.toAbsolute(targetedRecordConfig.getTarget()));
- break;
+ if (((recordName = recordConfig.getName()) == null) |
| !recordName.isAbsolute()) {
+
recordConfig.setName(ToolDnsNameUtils.toAbsolute(ToolDnsNameUtils.fromLabels(recordName,
this.domainName)));
+ }

- case SOA:
- (soaRecordConfig = ((SoaRecordConfig)
recordConfig)).setAdmin(ToolDnsNameUtils.toAbsolute(soaRecordConfig.getAdmin()));
-
soaRecordConfig.setHost(ToolDnsNameUtils.toAbsolute(soaRecordConfig.getHost()));
- break;
- }
+ if (!this.nameRecordsMap.containsKey((recordName = (record
= recordConfig.toRecord()).getName()))) {
+ this.nameRecordsMap.put(recordName, new
EnumMap<DnsRecordType, List<Record>>(DnsRecordType.class));
+ }

- if (((recordName = recordConfig.getName()) == null) |
| !recordName.isAbsolute()) {
-
recordConfig.setName(ToolDnsNameUtils.toAbsolute(ToolDnsNameUtils.fromLabels(recordName,
this.domainName)));
- }
+ if (!(recordsMap =
this.nameRecordsMap.get(recordName)).containsKey(recordType)) {
+ recordsMap.put(recordType, new ArrayList<Record>());
}
+
+ recordsMap.get(recordType).add(record);
}
-
- this.ptrRecordConfigs =
-
ToolCollectionUtils.nullIfEmpty(CollectionUtils.collect(this.aRecordsConfigs,
new ReverseMapPtrRecordConfigTransformer(),
- new ArrayList<PtrRecordConfig>()));
}
}

@@ -271,6 +343,11 @@
public void setMxRecordConfigs(@Nullable List<MxRecordConfig>
mxRecordConfigs) {
this.mxRecordConfigs = mxRecordConfigs;
}
+
+ @Override
+ public Map<Name, Map<DnsRecordType, List<Record>>> getNameRecordsMap()
{
+ return this.nameRecordsMap;
+ }

@Override
public boolean hasNsRecordConfigs() {
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsMessageUtils.java
Thu Oct 2 12:23:45 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsMessageUtils.java
Wed Oct 8 00:15:49 2014 UTC
@@ -20,7 +20,6 @@
import org.xbill.DNS.Message;
import org.xbill.DNS.OPTRecord;
import org.xbill.DNS.Record;
-import org.xbill.DNS.SOARecord;

public abstract class ToolDnsMessageUtils {
public final static int DATA_SIZE_DNS_MSG_QUERY_SIZE_PREFIX = 2;
@@ -54,22 +53,21 @@
return (((querySizePrefixData[0] & 0xFF) << 8) +
(querySizePrefixData[1] & 0xFF));
}

- public static Message setAuthorities(Message msg, boolean
authoritative, @Nullable SOARecord ... authorityRecords) {
- return setAuthorities(msg, authoritative,
ToolArrayUtils.asList(authorityRecords));
+ public static Message setAdditional(Message msg, @Nullable Record ...
additionalRecords) {
+ return setAdditional(msg,
ToolArrayUtils.asList(additionalRecords));
}

- public static Message setAuthorities(Message msg, boolean
authoritative, @Nullable Iterable<SOARecord> authorityRecords) {
- msg.removeAllRecords(DnsMessageSection.AUTHORITY.getCode());
+ public static Message setAdditional(Message msg, @Nullable Iterable<?
extends Record> additionalRecords) {
+ return setRecords(msg, DnsMessageSection.ADDITIONAL,
additionalRecords);
+ }

- if (authorityRecords != null) {
- addRecords(msg, DnsMessageSection.AUTHORITY, authorityRecords);
+ public static Message setAuthorities(Message msg, boolean
authoritative, @Nullable Record ... authorityRecords) {
+ return setAuthorities(msg, authoritative,
ToolArrayUtils.asList(authorityRecords));
+ }

- if (authoritative && hasRecords(msg,
DnsMessageSection.AUTHORITY)) {
- setFlags(msg, DnsMessageFlag.AA);
- }
- }
-
- return msg;
+ public static Message setAuthorities(Message msg, boolean
authoritative, @Nullable Iterable<? extends Record> authorityRecords) {
+ return ((hasRecords(setRecords(msg, DnsMessageSection.AUTHORITY,
authorityRecords), DnsMessageSection.AUTHORITY) && authoritative) ?
setFlags(msg,
+ DnsMessageFlag.AA) : msg);
}

public static Message setAnswers(Message msg, @Nullable Record ...
answerRecords) {
@@ -77,17 +75,7 @@
}

public static Message setAnswers(Message msg, @Nullable Iterable<?
extends Record> answerRecords) {
- msg.removeAllRecords(DnsMessageSection.ANSWER.getCode());
-
- if (answerRecords != null) {
- addRecords(msg, DnsMessageSection.ANSWER, answerRecords);
- }
-
- if (!hasRecords(msg, DnsMessageSection.ANSWER)) {
- setRcode(msg, DnsMessageRcode.NXDOMAIN);
- }
-
- return msg;
+ return (!hasRecords(setRecords(msg, DnsMessageSection.ANSWER,
answerRecords), DnsMessageSection.ANSWER) ? setRcode(msg,
DnsMessageRcode.NXDOMAIN) : msg);
}

@Nullable
@@ -119,6 +107,16 @@
public static Message copyRecords(Message msg1, Message msg2,
DnsMessageSection section) {
return addRecords(msg2, section,
msg1.getSectionArray(section.getCode()));
}
+
+ public static Message setRecords(Message msg, DnsMessageSection
section, @Nullable Record ... records) {
+ return setRecords(msg, section, ToolArrayUtils.asList(records));
+ }
+
+ public static Message setRecords(Message msg, DnsMessageSection
section, @Nullable Iterable<? extends Record> records) {
+ msg.removeAllRecords(section.getCode());
+
+ return addRecords(msg, section, records);
+ }

public static Message addRecords(Message msg, DnsMessageSection
section, @Nullable Record ... records) {
return addRecords(msg, section, ToolArrayUtils.asList(records));
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsRecordUtils.java
Thu Oct 2 16:33:36 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsRecordUtils.java
Wed Oct 8 00:15:49 2014 UTC
@@ -2,7 +2,6 @@

import gov.hhs.onc.dcdt.collections.impl.AbstractToolPredicate;
import gov.hhs.onc.dcdt.collections.impl.AbstractToolTransformer;
-import gov.hhs.onc.dcdt.config.instance.InstanceDnsConfig;
import gov.hhs.onc.dcdt.dns.DnsCertificateType;
import gov.hhs.onc.dcdt.dns.DnsDclassType;
import gov.hhs.onc.dcdt.dns.DnsException;
@@ -12,67 +11,29 @@
import gov.hhs.onc.dcdt.dns.config.DnsRecordConfig;
import gov.hhs.onc.dcdt.utils.ToolArrayUtils;
import gov.hhs.onc.dcdt.utils.ToolClassUtils;
-import gov.hhs.onc.dcdt.utils.ToolIteratorUtils;
import gov.hhs.onc.dcdt.utils.ToolListUtils;
import gov.hhs.onc.dcdt.utils.ToolStringUtils;
import java.security.PublicKey;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
-import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import javax.annotation.Nonnegative;
import javax.annotation.Nullable;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.PredicateUtils;
import org.apache.commons.lang3.StringUtils;
import org.xbill.DNS.CERTRecord;
import org.xbill.DNS.DNSKEYRecord;
import org.xbill.DNS.DNSKEYRecord.Protocol;
import org.xbill.DNS.DNSSEC.DNSSECException;
+import org.xbill.DNS.MXRecord;
+import org.xbill.DNS.NSRecord;
import org.xbill.DNS.Name;
import org.xbill.DNS.Record;
+import org.xbill.DNS.SRVRecord;

public abstract class ToolDnsRecordUtils {
- public static class DnsRecordConfigAnswerTransformer<T extends Record>
extends DnsRecordConfigTransformer<T> {
- private T record;
-
- @SuppressWarnings({ "unchecked" })
- public DnsRecordConfigAnswerTransformer(DnsRecordType recordType,
Class<T> recordClass, T record) {
- super(recordType, recordClass);
-
- this.record = record;
- }
-
- @Nullable
- @Override
- @SuppressWarnings({ "unchecked" })
- protected T transformInternal(DnsRecordConfig<? extends Record>
recordConfig) throws Exception {
- T recordTransformed = super.transformInternal(recordConfig);
-
- return (((recordTransformed != null) &&
Objects.equals(recordTransformed.getName(), this.record.getName())) ?
recordTransformed : null);
- }
- }
-
- public static class DnsRecordConfigTransformer<T extends Record>
extends AbstractToolTransformer<DnsRecordConfig<? extends Record>, T> {
- protected DnsRecordType recordType;
- protected Class<T> recordClass;
-
- public DnsRecordConfigTransformer(DnsRecordType recordType,
Class<T> recordClass) {
- this.recordType = recordType;
- this.recordClass = recordClass;
- }
-
- @Nullable
- @Override
- @SuppressWarnings({ "unchecked" })
- protected T transformInternal(DnsRecordConfig<? extends Record>
recordConfig) throws Exception {
- return (recordConfig.getRecordType() == this.recordType) ?
this.recordClass.cast(recordConfig.toRecord()) : null;
- }
- }
-
public static class CertRecordParameterPredicate extends
AbstractToolPredicate<CERTRecord> {
public final static CertRecordParameterPredicate INSTANCE_PKIX =
new CertRecordParameterPredicate(DnsCertificateType.PKIX);

@@ -104,16 +65,35 @@
}
}

- public static class AuthoritativeDnsConfigPredicate extends
AbstractToolPredicate<InstanceDnsConfig> {
- private Record questionRecord;
+ public static class DnsRecordTargetTransformer extends
AbstractToolTransformer<Record, Name> {
+ public final static DnsRecordTargetTransformer INSTANCE = new
DnsRecordTargetTransformer();
+
+ @Nullable
+ @Override
+ protected Name transformInternal(Record record) throws Exception {
+ // noinspection ConstantConditions
+ switch (ToolDnsUtils.findByCode(DnsRecordType.class,
record.getType())) {
+ case MX:
+ return ((MXRecord) record).getTarget();
+
+ case NS:
+ return ((NSRecord) record).getTarget();
+
+ case SRV:
+ return ((SRVRecord) record).getTarget();

- public AuthoritativeDnsConfigPredicate(Record questionRecord) {
- this.questionRecord = questionRecord;
+ default:
+ return null;
+ }
}
+ }
+
+ public static class DnsRecordConfigTransformer extends
AbstractToolTransformer<DnsRecordConfig<? extends Record>, Record> {
+ public final static DnsRecordConfigTransformer INSTANCE = new
DnsRecordConfigTransformer();

@Override
- protected boolean evaluateInternal(InstanceDnsConfig dnsConfig)
throws Exception {
- return dnsConfig.isAuthoritative(this.questionRecord);
+ protected Record transformInternal(DnsRecordConfig<? extends
Record> recordConfig) throws Exception {
+ return recordConfig.toRecord();
}
}

@@ -155,23 +135,4 @@
keyAlgType.name()), e);
}
}
-
- @SafeVarargs
- @SuppressWarnings({ "varargs" })
- public static <T extends Record> Collection<T> findAnswers(T
questionRecord,
- @Nullable Iterable<? extends DnsRecordConfig<? extends
Record>> ... recordConfigs) {
- return findAnswers(questionRecord,
ToolArrayUtils.asList(recordConfigs));
- }
-
- @SuppressWarnings({ "unchecked" })
- public static <T extends Record> Collection<T> findAnswers(T
questionRecord,
- @Nullable Iterable<? extends Iterable<? extends DnsRecordConfig<?
extends Record>>> recordConfigs) {
- DnsRecordType questionRecordType =
ToolDnsUtils.findByCode(DnsRecordType.class, questionRecord.getType());
-
- // noinspection ConstantConditions
- return CollectionUtils.emptyIfNull(((questionRecordType != null) ?
CollectionUtils.select(CollectionUtils.collect(
- ToolIteratorUtils.chainedIterator(recordConfigs),
- new DnsRecordConfigAnswerTransformer<>(questionRecordType,
((Class<T>) questionRecordType.getRecordClass()), questionRecord)),
PredicateUtils
- .notNullPredicate()) : null));
- }
}
=======================================
--- /dcdt-core/src/main/resources/META-INF/spring/spring-core-dns.xml Thu
Oct 2 12:23:45 2014 UTC
+++ /dcdt-core/src/main/resources/META-INF/spring/spring-core-dns.xml Wed
Oct 8 00:15:49 2014 UTC
@@ -124,9 +124,6 @@
<beans:bean id="dnsSpf"
class="gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils"
factory-method="buildSpf"
c:spfStrs="#{
T(org.apache.commons.lang3.ArrayUtils).EMPTY_STRING_ARRAY }"/>

- <beans:bean id="dnsSpfA"
class="gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils"
factory-method="buildSpf"
- c:spfStrs="#{ T(gov.hhs.onc.dcdt.dns.DnsSpfStrings).MECH_A }"/>
-
<beans:bean id="dnsSpfMx"
class="gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils"
factory-method="buildSpf"
c:spfStrs="#{ T(gov.hhs.onc.dcdt.dns.DnsSpfStrings).MECH_MX }"/>

@@ -178,7 +175,9 @@
<beans:bean id="soaRecordConfig"
class="gov.hhs.onc.dcdt.dns.config.SoaRecordConfig"
parent="dnsRecordConfig" abstract="true"/>
<beans:bean id="soaRecordConfigImpl"
class="gov.hhs.onc.dcdt.dns.config.impl.SoaRecordConfigImpl"
parent="soaRecordConfig" abstract="true"
p:expire="#{ T(gov.hhs.onc.dcdt.utils.ToolDateUtils).SEC_IN_MIN *
5 }"
+ p:minimum="#{ T(gov.hhs.onc.dcdt.utils.ToolDateUtils).SEC_IN_MIN *
5 }"
p:refresh="#{ T(gov.hhs.onc.dcdt.utils.ToolDateUtils).SEC_IN_MIN *
5 }"
+ p:retry="#{ T(gov.hhs.onc.dcdt.utils.ToolDateUtils).SEC_IN_MIN * 5
}"
p:serial="#{
T(gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils).generateSerial() }"/>


<!--====================================================================================================
=======================================
---
/dcdt-core/src/main/resources/META-INF/spring/spring-core-instance-dns.xml
Fri Oct 3 01:10:43 2014 UTC
+++
/dcdt-core/src/main/resources/META-INF/spring/spring-core-instance-dns.xml
Wed Oct 8 00:15:49 2014 UTC
@@ -99,14 +99,6 @@
</beans:property>
</beans:bean>

- <beans:bean id="instanceDnsTxtRecordConfigSpfA"
parent="instanceDnsTxtRecordConfig" abstract="true">
- <beans:property name="strings">
- <util:list>
- <beans:ref bean="dnsSpfA"/>
- </util:list>
- </beans:property>
- </beans:bean>
-
<beans:bean id="instanceDnsTxtRecordConfigSpfMx"
parent="instanceDnsTxtRecordConfig" abstract="true">
<beans:property name="strings">
<util:list>
@@ -157,7 +149,7 @@
</beans:property>
<beans:property name="txtRecordConfigs">
<util:list>
- <beans:bean parent="instanceDnsTxtRecordConfigSpfA"/>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
</util:list>
</beans:property>
</beans:bean>
@@ -217,7 +209,7 @@
</beans:property>
<beans:property name="txtRecordConfigs">
<util:list>
- <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpf"/>
</util:list>
</beans:property>
</beans:bean>
@@ -253,7 +245,7 @@
</beans:property>
<beans:property name="txtRecordConfigs">
<util:list>
- <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpf"/>
</util:list>
</beans:property>
</beans:bean>
@@ -289,7 +281,7 @@
</beans:property>
<beans:property name="txtRecordConfigs">
<util:list>
- <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpf"/>
</util:list>
</beans:property>
</beans:bean>
@@ -324,7 +316,7 @@
</beans:property>
<beans:property name="txtRecordConfigs">
<util:list>
- <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpf"/>
</util:list>
</beans:property>
</beans:bean>
@@ -360,7 +352,7 @@
</beans:property>
<beans:property name="txtRecordConfigs">
<util:list>
- <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpf"/>
</util:list>
</beans:property>
</beans:bean>
@@ -390,7 +382,7 @@
</beans:property>
<beans:property name="txtRecordConfigs">
<util:list>
- <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpf"/>
</util:list>
</beans:property>
</beans:bean>
@@ -425,7 +417,7 @@
</beans:property>
<beans:property name="txtRecordConfigs">
<util:list>
- <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpf"/>
</util:list>
</beans:property>
</beans:bean>
@@ -460,7 +452,7 @@
</beans:property>
<beans:property name="txtRecordConfigs">
<util:list>
- <beans:bean parent="instanceDnsTxtRecordConfigSpfMx"/>
+ <beans:bean parent="instanceDnsTxtRecordConfigSpf"/>
</util:list>
</beans:property>
</beans:bean>
=======================================
---
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/config/DnsServerConfig.java
Thu Oct 2 16:33:36 2014 UTC
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/config/DnsServerConfig.java
Wed Oct 8 00:15:49 2014 UTC
@@ -2,15 +2,19 @@

import gov.hhs.onc.dcdt.beans.ToolConnectionBean;
import gov.hhs.onc.dcdt.config.instance.InstanceDnsConfig;
+import gov.hhs.onc.dcdt.dns.DnsRecordType;
import java.util.List;
import javax.annotation.Nullable;
+import org.xbill.DNS.Name;
import org.xbill.DNS.Record;

public interface DnsServerConfig extends ToolConnectionBean {
- public List<InstanceDnsConfig> findAuthoritativeDnsConfigs(Record
questionRecord);
+ public List<InstanceDnsConfig> findAuthoritativeConfigs(Record
questionRecord);

- public boolean hasDnsConfigs();
+ public List<InstanceDnsConfig> findAuthoritativeConfigs(DnsRecordType
questionRecordType, Name questionName);
+
+ public boolean hasConfigs();

@Nullable
- public List<InstanceDnsConfig> getDnsConfigs();
+ public List<InstanceDnsConfig> getConfigs();
}
=======================================
---
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/config/impl/DnsServerConfigImpl.java
Thu Oct 2 16:33:36 2014 UTC
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/config/impl/DnsServerConfigImpl.java
Wed Oct 8 00:15:49 2014 UTC
@@ -2,33 +2,42 @@

import gov.hhs.onc.dcdt.beans.impl.AbstractToolConnectionBean;
import gov.hhs.onc.dcdt.config.instance.InstanceDnsConfig;
-import
gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils.AuthoritativeDnsConfigPredicate;
+import
gov.hhs.onc.dcdt.config.instance.impl.InstanceDnsConfigImpl.AuthoritativeDnsConfigPredicate;
+import gov.hhs.onc.dcdt.dns.DnsRecordType;
+import gov.hhs.onc.dcdt.dns.utils.ToolDnsUtils;
import gov.hhs.onc.dcdt.service.dns.config.DnsServerConfig;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nullable;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.xbill.DNS.Name;
import org.xbill.DNS.Record;

public class DnsServerConfigImpl extends AbstractToolConnectionBean
implements DnsServerConfig {
@Autowired(required = false)
- private List<InstanceDnsConfig> dnsConfigs;
+ private List<InstanceDnsConfig> configs;

@Override
- public List<InstanceDnsConfig> findAuthoritativeDnsConfigs(Record
questionRecord) {
- return CollectionUtils.select(this.dnsConfigs, new
AuthoritativeDnsConfigPredicate(questionRecord),
- new
ArrayList<InstanceDnsConfig>(CollectionUtils.size(this.dnsConfigs)));
+ public List<InstanceDnsConfig> findAuthoritativeConfigs(Record
questionRecord) {
+ // noinspection ConstantConditions
+ return
this.findAuthoritativeConfigs(ToolDnsUtils.findByCode(DnsRecordType.class,
questionRecord.getType()), questionRecord.getName());
+ }
+
+ @Override
+ public List<InstanceDnsConfig> findAuthoritativeConfigs(DnsRecordType
questionRecordType, Name questionName) {
+ return CollectionUtils.select(this.configs, new
AuthoritativeDnsConfigPredicate(questionRecordType, questionName), new
ArrayList<InstanceDnsConfig>(
+ CollectionUtils.size(this.configs)));
}

@Override
- public boolean hasDnsConfigs() {
- return !CollectionUtils.isEmpty(this.dnsConfigs);
+ public boolean hasConfigs() {
+ return !CollectionUtils.isEmpty(this.configs);
}

@Nullable
@Override
- public List<InstanceDnsConfig> getDnsConfigs() {
- return this.dnsConfigs;
+ public List<InstanceDnsConfig> getConfigs() {
+ return this.configs;
}
}
=======================================
---
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerRequestProcessorImpl.java
Thu Oct 2 16:33:36 2014 UTC
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerRequestProcessorImpl.java
Wed Oct 8 00:15:49 2014 UTC
@@ -6,6 +6,8 @@
import gov.hhs.onc.dcdt.dns.DnsMessageRcode;
import gov.hhs.onc.dcdt.dns.DnsRecordType;
import gov.hhs.onc.dcdt.dns.utils.ToolDnsMessageUtils;
+import
gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils.DnsRecordConfigTransformer;
+import
gov.hhs.onc.dcdt.dns.utils.ToolDnsRecordUtils.DnsRecordTargetTransformer;
import gov.hhs.onc.dcdt.dns.utils.ToolDnsUtils;
import gov.hhs.onc.dcdt.net.InetProtocol;
import gov.hhs.onc.dcdt.net.sockets.impl.AbstractSocketRequestProcessor;
@@ -14,9 +16,14 @@
import
gov.hhs.onc.dcdt.service.dns.server.DnsServerRequestProcessingException;
import gov.hhs.onc.dcdt.service.dns.server.DnsServerRequestProcessor;
import gov.hhs.onc.dcdt.utils.ToolClassUtils;
+import gov.hhs.onc.dcdt.utils.ToolCollectionUtils;
import java.util.ArrayList;
-import java.util.Collection;
+import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Set;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.IteratorUtils;
+import org.apache.commons.collections4.PredicateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,7 +34,6 @@
import org.xbill.DNS.Message;
import org.xbill.DNS.Name;
import org.xbill.DNS.Record;
-import org.xbill.DNS.SOARecord;

@Component("dnsServerReqProcImpl")
@Lazy
@@ -80,7 +86,7 @@
Record questionRecord = reqMsg.getQuestion();

if (ToolDnsMessageUtils.getOpcode(reqMsg) !=
DnsMessageOpcode.QUERY) {
- ToolDnsMessageUtils.setRcode(respMsg, DnsMessageRcode.REFUSED);
+ ToolDnsMessageUtils.setRcode(respMsg, DnsMessageRcode.NOTIMP);

return respMsg;
} else if (questionRecord == null) {
@@ -92,38 +98,53 @@
DnsRecordType questionRecordType =
ToolDnsUtils.findByCode(DnsRecordType.class, questionRecord.getType());
Name questionName;

- if ((questionRecordType == null) |
| !questionRecordType.isProcessed()) {
- ToolDnsMessageUtils.setRcode(respMsg, DnsMessageRcode.NXRRSET);
+ if ((questionRecordType == null) || (questionRecord.getDClass() !=
questionRecordType.getDclassType().getCode()) |
| !questionRecordType.isProcessed()
+ || !(questionName = questionRecord.getName()).isAbsolute() ||
questionName.isWild()) {
+ ToolDnsMessageUtils.setRcode(respMsg, DnsMessageRcode.NOTIMP);

return respMsg;
- } else if (!(questionName = questionRecord.getName()).isAbsolute()
|| questionName.isWild()) {
- ToolDnsMessageUtils.setRcode(respMsg, DnsMessageRcode.REFUSED);
+ }
+
+ List<InstanceDnsConfig> authoritativeConfigs =
this.serverConfig.findAuthoritativeConfigs(questionRecord);
+ int numAuthoritativeConfigs = authoritativeConfigs.size();
+
+ if (numAuthoritativeConfigs == 0) {
+ ToolDnsMessageUtils.setRcode(respMsg,
DnsMessageRcode.NXDOMAIN);

return respMsg;
}

- List<InstanceDnsConfig> authoritativeDnsConfigs =
this.serverConfig.findAuthoritativeDnsConfigs(questionRecord);
- int numAuthoritativeDnsConfigs = authoritativeDnsConfigs.size();
+ List<Record> answerRecords = new
ArrayList<>(numAuthoritativeConfigs), configAnswerRecords;
+ Set<Record> authorityRecords = new LinkedHashSet<>(2);

- if (numAuthoritativeDnsConfigs == 0) {
- ToolDnsMessageUtils.setRcode(respMsg, DnsMessageRcode.REFUSED);
+ for (InstanceDnsConfig authoritativeConfig : authoritativeConfigs)
{
+ if (!CollectionUtils.isEmpty((configAnswerRecords =
authoritativeConfig.findAnswers(questionRecordType, questionName)))) {
+ // noinspection ConstantConditions
+ answerRecords.addAll(configAnswerRecords);

- return respMsg;
+ if (questionRecordType == DnsRecordType.SOA) {
+ ToolCollectionUtils.addAll(authorityRecords,
+
CollectionUtils.collect(authoritativeConfig.getNsRecordConfigs(),
DnsRecordConfigTransformer.INSTANCE));
+ }
+ }
}

- Collection<Record> answerRecords = new
ArrayList<>(numAuthoritativeDnsConfigs), configAnswerRecords;
- List<SOARecord> authorityRecords = new
ArrayList<>(numAuthoritativeDnsConfigs);
+ Set<Name> additionalNames =
+ CollectionUtils.select(CollectionUtils.collect(
+
IteratorUtils.asIterable(IteratorUtils.chainedIterator(answerRecords.iterator(),
authorityRecords.iterator())),
+ DnsRecordTargetTransformer.INSTANCE),
PredicateUtils.notNullPredicate(),
+ new LinkedHashSet<Name>((answerRecords.size() +
authorityRecords.size())));
+ Set<Record> additionalRecords = new
LinkedHashSet<>(additionalNames.size());

- for (InstanceDnsConfig authoritativeDnsConfig :
authoritativeDnsConfigs) {
- if (!(configAnswerRecords =
authoritativeDnsConfig.findAnswers(questionRecord)).isEmpty()) {
- answerRecords.addAll(configAnswerRecords);
- // noinspection ConstantConditions
-
authorityRecords.add(authoritativeDnsConfig.getSoaRecordConfig().toRecord());
+ for (Name additionalName : additionalNames) {
+ for (InstanceDnsConfig additionalAuthoritativeConfig :
this.serverConfig.findAuthoritativeConfigs(DnsRecordType.A,
additionalName)) {
+ ToolCollectionUtils.addAll(additionalRecords,
additionalAuthoritativeConfig.findAnswers(DnsRecordType.A, additionalName));
}
}

ToolDnsMessageUtils.setAnswers(respMsg, answerRecords);
ToolDnsMessageUtils.setAuthorities(respMsg, true,
authorityRecords);
+ ToolDnsMessageUtils.setAdditional(respMsg, additionalRecords);

return respMsg;
}
=======================================
---
/dcdt-service-dns/src/test/java/gov/hhs/onc/dcdt/service/dns/DnsServiceFunctionalTests.java
Thu Oct 2 16:33:36 2014 UTC
+++
/dcdt-service-dns/src/test/java/gov/hhs/onc/dcdt/service/dns/DnsServiceFunctionalTests.java
Wed Oct 8 00:15:49 2014 UTC
@@ -11,6 +11,7 @@
import gov.hhs.onc.dcdt.service.dns.config.DnsServerConfig;
import gov.hhs.onc.dcdt.service.dns.server.DnsServer;
import
gov.hhs.onc.dcdt.service.test.impl.AbstractToolServiceFunctionalTests;
+import gov.hhs.onc.dcdt.utils.ToolArrayUtils;
import gov.hhs.onc.dcdt.utils.ToolCollectionUtils;
import gov.hhs.onc.dcdt.utils.ToolIteratorUtils;
import gov.hhs.onc.dcdt.utils.ToolStringUtils;
@@ -56,7 +57,7 @@

final DnsServerConfig serverConfig =
this.serverLookupServiceMap.keySet().iterator().next();
// noinspection ConstantConditions
- final DnsRecordConfig<? extends Record> recordConfig =
serverConfig.getDnsConfigs().get(0).mapRecordConfigs().values().iterator().next().get(0);
+ final DnsRecordConfig<? extends Record> recordConfig =
serverConfig.getConfigs().get(0).getARecordConfigs().get(0);
final CountDownLatch startLatch = new CountDownLatch(1);
final CyclicBarrier stopBarrier = new
CyclicBarrier((this.lookupConcurrentNumThreads + 1));

@@ -94,14 +95,16 @@
@Test
public void testLookupDnsRecords() throws Exception {
for (DnsServerConfig serverConfig :
this.serverLookupServiceMap.keySet()) {
- if (!serverConfig.hasDnsConfigs()) {
+ if (!serverConfig.hasConfigs()) {
continue;
}

// noinspection ConstantConditions
- for (InstanceDnsConfig config : serverConfig.getDnsConfigs()) {
- for (DnsRecordConfig<? extends Record> recordConfig :
IteratorUtils.asIterable(ToolIteratorUtils.chainedIterator(config.mapRecordConfigs()
- .values()))) {
+ for (InstanceDnsConfig config : serverConfig.getConfigs()) {
+ for (DnsRecordConfig<? extends Record> recordConfig :
IteratorUtils.asIterable(ToolIteratorUtils.chainedIterator(ToolArrayUtils.asList(
+ config.getARecordConfigs(),
config.getCertRecordConfigs(), config.getCnameRecordConfigs(),
config.getMxRecordConfigs(),
+ config.getNsRecordConfigs(),
config.getPtrRecordConfigs(),
ToolArrayUtils.asList(config.getSoaRecordConfig()),
+ config.getSrvRecordConfigs(),
config.getTxtRecordConfigs())))) {
this.assertLookupAnswerRecordsMatch(serverConfig,
recordConfig);
}
}
@@ -143,12 +146,13 @@
// noinspection ConstantConditions
DnsLookupResult<? extends Record> lookupResult =

this.serverLookupServiceMap.get(serverConfig).lookupRecords(recordType,
recordType.getRecordClass(), record.getName());
- List<InstanceDnsConfig> authoritativeConfigs =
serverConfig.findAuthoritativeDnsConfigs(record);
+ List<InstanceDnsConfig> authoritativeConfigs =
serverConfig.findAuthoritativeConfigs(record);
// noinspection ConstantConditions
Collection<Record> configAnswerRecords = new
ArrayList<>(authoritativeConfigs.size()), answerRecords =
((Collection<Record>) lookupResult.getAnswers());

for (InstanceDnsConfig authoritativeConfig : authoritativeConfigs)
{
-
configAnswerRecords.addAll(authoritativeConfig.findAnswers(record));
+ // noinspection ConstantConditions
+ ToolCollectionUtils.addAll(configAnswerRecords,
authoritativeConfig.findAnswers(record));
}


Assert.assertEqualsNoOrder(ToolCollectionUtils.toArray(answerRecords,
Record.class), ToolCollectionUtils.toArray(configAnswerRecords,
Record.class),
=======================================
---
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/impl/ToolSmtpServer.java
Tue Apr 22 01:53:59 2014 UTC
+++
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/impl/ToolSmtpServer.java
Wed Oct 8 00:15:49 2014 UTC
@@ -1,5 +1,11 @@
package gov.hhs.onc.dcdt.service.mail.james.impl;

+import gov.hhs.onc.dcdt.service.mail.james.ToolDomainList;
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.configuration.HierarchicalConfiguration.Node;
+import org.apache.james.domainlist.api.DomainListException;
import org.apache.james.protocols.lib.handler.HandlersPackage;
import org.apache.james.smtpserver.jmx.JMXHandlersLoader;
import org.apache.james.smtpserver.netty.SMTPServer;
@@ -12,6 +18,28 @@
this.getHandlers().clear();
}
}
+
+ private final static String HELLO_NAME_AUTODETECT_CONFIG_ATTR_NAME
= "autodetect";
+
+ private ToolDomainList domainList;
+
+ public ToolSmtpServer(ToolDomainList domainList) {
+ this.domainList = domainList;
+ }
+
+ @Override
+ protected void configureHelloName(Configuration handlerConfig) throws
ConfigurationException {
+ try {
+ Node helloNameConfigNode = new Node(HELLO_NAME,
this.domainList.getDefaultDomain());
+ helloNameConfigNode.addAttribute(new
Node(HELLO_NAME_AUTODETECT_CONFIG_ATTR_NAME, false));
+
+ ((HierarchicalConfiguration)
handlerConfig).getRootNode().addChild(helloNameConfigNode);
+ } catch (DomainListException e) {
+ throw new ConfigurationException("Unable to configure SMTP
server hello name.", e);
+ }
+
+ super.configureHelloName(handlerConfig);
+ }

@Override
protected Class<? extends HandlersPackage> getJMXHandlersPackage() {
=======================================
---
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/impl/ToolSmtpServerFactory.java
Tue Apr 22 01:53:59 2014 UTC
+++
/dcdt-service-mail/src/main/java/gov/hhs/onc/dcdt/service/mail/james/impl/ToolSmtpServerFactory.java
Wed Oct 8 00:15:49 2014 UTC
@@ -1,9 +1,11 @@
package gov.hhs.onc.dcdt.service.mail.james.impl;

import gov.hhs.onc.dcdt.ToolRuntimeException;
+import gov.hhs.onc.dcdt.service.mail.james.ToolDomainList;
import gov.hhs.onc.dcdt.service.mail.james.config.BeanConfigurable;
import gov.hhs.onc.dcdt.service.mail.james.config.SmtpServersConfigBean;
import gov.hhs.onc.dcdt.utils.ToolClassUtils;
+import javax.annotation.Resource;
import javax.management.InstanceAlreadyExistsException;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.james.smtpserver.netty.SMTPServer;
@@ -14,6 +16,9 @@
public class ToolSmtpServerFactory extends SMTPServerFactory implements
BeanConfigurable<SmtpServersConfigBean> {
private final static Logger LOGGER =
LoggerFactory.getLogger(ToolSmtpServerFactory.class);

+ @Resource(name = "domainlist")
+ private ToolDomainList domainList;
+
private SmtpServersConfigBean configBean;

@Override
@@ -42,6 +47,6 @@

@Override
protected SMTPServer createServer() {
- return new ToolSmtpServer();
+ return new ToolSmtpServer(this.domainList);
}
}

==============================================================================
Revision: b59c793abbc5
Branch: default
Author: Michal Kotelba <michal....@esacinc.com>
Date: Thu Oct 9 08:50:08 2014 UTC
Log: - Further supports DCDT-261.
- Supports DCDT-278.
- Implemented dynamic (i.e. no longer hardcoded) DNS CERT record key
algorithm type parameter determination based upon the signature algorithm
of the associated certificate.
- Refactored DNS service request processing to follow ~best practices
(mostly mimicking Google's implementation/configuration) for
authority/additional sections.
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=b59c793abbc5

Modified:

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/certs/SignatureAlgorithm.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/keys/KeyAlgorithm.java

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/CryptographyUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsKeyAlgorithmType.java

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsMessageUtils.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsRecordUtils.java

/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerRequestProcessorImpl.java

=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java
Wed Oct 8 00:15:49 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java
Thu Oct 9 08:50:08 2014 UTC
@@ -7,6 +7,7 @@
import gov.hhs.onc.dcdt.collections.impl.AbstractToolTransformer;
import gov.hhs.onc.dcdt.config.instance.InstanceDnsConfig;
import gov.hhs.onc.dcdt.crypto.DataEncoding;
+import gov.hhs.onc.dcdt.crypto.certs.CertificateInfo;
import gov.hhs.onc.dcdt.crypto.credentials.CredentialInfo;
import gov.hhs.onc.dcdt.crypto.keys.KeyInfo;
import gov.hhs.onc.dcdt.crypto.utils.CertificateUtils;
@@ -33,6 +34,7 @@
import
gov.hhs.onc.dcdt.testcases.discovery.credentials.DiscoveryTestcaseCredentialLocation;
import gov.hhs.onc.dcdt.utils.ToolArrayUtils;
import gov.hhs.onc.dcdt.utils.ToolCollectionUtils;
+import gov.hhs.onc.dcdt.utils.ToolEnumUtils;
import gov.hhs.onc.dcdt.utils.ToolIteratorUtils;
import java.util.ArrayList;
import java.util.EnumMap;
@@ -88,15 +90,19 @@

// noinspection ConstantConditions
KeyInfo discoveryTestcaseCredKeyInfo =
discoveryTestcaseCred.getCredentialInfo().getKeyDescriptor();
+ CertificateInfo discoveryTestcaseCredCertInfo =
discoveryTestcaseCred.getCredentialInfo().getCertificateDescriptor();
+
// noinspection ConstantConditions
- DnsKeyAlgorithmType discoveryTestcaseCredKeyAlgType =
discoveryTestcaseCredKeyInfo.getKeyAlgorithm().getDnsAlgorithmType();
+ DnsKeyAlgorithmType discoveryTestcaseCredKeyAlgType =
+
ToolEnumUtils.findByPropertyValue(DnsKeyAlgorithmType.class,
DnsKeyAlgorithmType.PROP_NAME_SIG_ALG,
+ discoveryTestcaseCredCertInfo.getSignatureAlgorithm());
+ // noinspection ConstantConditions

certRecordConfig.setKeyAlgorithmType(discoveryTestcaseCredKeyAlgType);
// noinspection ConstantConditions

certRecordConfig.setKeyTag(ToolDnsRecordUtils.getKeyTag(discoveryTestcaseCredKeyAlgType,
discoveryTestcaseCredKeyInfo.getPublicKey()));

// noinspection ConstantConditions
-
certRecordConfig.setCertificateData(CertificateUtils.writeCertificate(discoveryTestcaseCred.getCredentialInfo().getCertificateDescriptor()
- .getCertificate(), DataEncoding.DER));
+
certRecordConfig.setCertificateData(CertificateUtils.writeCertificate(discoveryTestcaseCredCertInfo.getCertificate(),
DataEncoding.DER));

return certRecordConfig;
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/certs/SignatureAlgorithm.java
Tue Apr 1 23:03:09 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/certs/SignatureAlgorithm.java
Thu Oct 9 08:50:08 2014 UTC
@@ -1,11 +1,10 @@
package gov.hhs.onc.dcdt.crypto.certs;

import gov.hhs.onc.dcdt.crypto.CryptographyAlgorithmIdentifier;
+import gov.hhs.onc.dcdt.crypto.utils.CryptographyUtils;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
-import org.bouncycastle.operator.DefaultDigestAlgorithmIdentifierFinder;
-import org.bouncycastle.operator.DefaultSignatureAlgorithmIdentifierFinder;

public enum SignatureAlgorithm implements CryptographyAlgorithmIdentifier {
SHA1_WITH_RSA_ENCRYPTION("sha1WithRSAEncryption",
PKCSObjectIdentifiers.sha1WithRSAEncryption),
SHA256_WITH_RSA_ENCRYPTION("sha256WithRSAEncryption",
@@ -20,8 +19,8 @@
private SignatureAlgorithm(String id, ASN1ObjectIdentifier oid) {
this.id = id;
this.oid = oid;
- this.algId = new
DefaultSignatureAlgorithmIdentifierFinder().find(this.id);
- this.digestAlgId = new
DefaultDigestAlgorithmIdentifierFinder().find(this.algId);
+ this.algId = CryptographyUtils.SIG_ALG_ID_FINDER.find(this.id);
+ this.digestAlgId =
CryptographyUtils.DIGEST_ALG_ID_FINDER.find(this.algId);
}

@Override
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/keys/KeyAlgorithm.java
Sun May 4 20:51:50 2014 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/keys/KeyAlgorithm.java
Thu Oct 9 08:50:08 2014 UTC
@@ -1,7 +1,6 @@
package gov.hhs.onc.dcdt.crypto.keys;

import gov.hhs.onc.dcdt.crypto.CryptographyAlgorithmIdentifier;
-import gov.hhs.onc.dcdt.dns.DnsKeyAlgorithmType;
import gov.hhs.onc.dcdt.net.mime.CoreContentTypes;
import java.security.spec.EncodedKeySpec;
import java.security.spec.PKCS8EncodedKeySpec;
@@ -13,7 +12,7 @@

public enum KeyAlgorithm implements CryptographyAlgorithmIdentifier {
RSA("RSA", PKCSObjectIdentifiers.rsaEncryption, "X.509",
X509EncodedKeySpec.class, "PKCS#8", PKCS8EncodedKeySpec.class, 512, new
MimeType(
- CoreContentTypes.APP_TYPE, "pkcs8"), DnsKeyAlgorithmType.RSASHA1);
+ CoreContentTypes.APP_TYPE, "pkcs8"));

private final String id;
private final ASN1ObjectIdentifier oid;
@@ -24,10 +23,9 @@
private final Class<? extends EncodedKeySpec> privateKeySpecClass;
private final int keySizeMin;
private final MimeType contentType;
- private final DnsKeyAlgorithmType dnsAlgType;

private KeyAlgorithm(String id, ASN1ObjectIdentifier oid, String
publicFormat, Class<? extends EncodedKeySpec> publicKeySpecClass, String
privateFormat,
- Class<? extends EncodedKeySpec> privateKeySpecClass, int
keySizeMin, MimeType contentType, DnsKeyAlgorithmType dnsAlgType) {
+ Class<? extends EncodedKeySpec> privateKeySpecClass, int
keySizeMin, MimeType contentType) {
this.id = id;
this.oid = oid;
this.algId = new AlgorithmIdentifier(this.oid);
@@ -37,7 +35,6 @@
this.privateKeySpecClass = privateKeySpecClass;
this.keySizeMin = keySizeMin;
this.contentType = contentType;
- this.dnsAlgType = dnsAlgType;
}

@Override
@@ -48,10 +45,6 @@
public MimeType getContentType() {
return this.contentType;
}
-
- public DnsKeyAlgorithmType getDnsAlgorithmType() {
- return this.dnsAlgType;
- }

public String getFormat(KeyType keyType) {
return (keyType == KeyType.PUBLIC) ? this.getPublicFormat() :
this.getPrivateFormat();
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/CryptographyUtils.java
Fri Oct 3 01:10:43 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/crypto/utils/CryptographyUtils.java
Thu Oct 9 08:50:08 2014 UTC
@@ -14,6 +14,10 @@
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.jcajce.ProviderJcaJceHelper;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.operator.DefaultDigestAlgorithmIdentifierFinder;
+import org.bouncycastle.operator.DefaultSignatureAlgorithmIdentifierFinder;
+import org.bouncycastle.operator.DigestAlgorithmIdentifierFinder;
+import org.bouncycastle.operator.SignatureAlgorithmIdentifierFinder;

public abstract class CryptographyUtils {
public static class ToolProviderJcaJceHelper extends
ProviderJcaJceHelper {
@@ -34,6 +38,9 @@
public final static String JCE_PROVIDER_NAME = JCE_PROVIDER.getName();
public final static ToolProviderJcaJceHelper JCE_PROVIDER_HELPER = new
ToolProviderJcaJceHelper(JCE_PROVIDER);

+ public final static DigestAlgorithmIdentifierFinder
DIGEST_ALG_ID_FINDER = new DefaultDigestAlgorithmIdentifierFinder();
+ public final static SignatureAlgorithmIdentifierFinder
SIG_ALG_ID_FINDER = new DefaultSignatureAlgorithmIdentifierFinder();
+
static {
initializeProvider();
}
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsKeyAlgorithmType.java
Mon Jun 23 13:21:03 2014 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsKeyAlgorithmType.java
Thu Oct 9 08:50:08 2014 UTC
@@ -1,7 +1,12 @@
package gov.hhs.onc.dcdt.dns;

+import gov.hhs.onc.dcdt.crypto.certs.SignatureAlgorithm;
+import gov.hhs.onc.dcdt.crypto.utils.CryptographyUtils;
import javax.annotation.Nonnegative;
+import javax.annotation.Nullable;
+import org.xbill.DNS.DNSSEC;
import org.xbill.DNS.DNSSEC.Algorithm;
+import org.xbill.DNS.DNSSEC.UnsupportedAlgorithmException;

/**
* @see org.xbill.DNS.DNSSEC.Algorithm
@@ -11,12 +16,21 @@
Algorithm.RSA_NSEC3_SHA1), RSASHA256(Algorithm.RSASHA256),
RSASHA512(Algorithm.RSASHA512), ECDSAP256SHA256(Algorithm.ECDSAP256SHA256),
ECDSAP384SHA384(
Algorithm.ECDSAP384SHA384), INDIRECT(Algorithm.INDIRECT),
PRIVATEDNS(Algorithm.PRIVATEDNS), PRIVATEOID(Algorithm.PRIVATEOID);

+ public final static String PROP_NAME_SIG_ALG = "signatureAlgorithm";
+
private final int code;
private final String id;
+ private SignatureAlgorithm sigAlg;

private DnsKeyAlgorithmType(@Nonnegative int code) {
this.code = code;
this.id = Algorithm.string(this.code);
+
+ try {
+ this.sigAlg =
+ CryptographyUtils.findByOid(SignatureAlgorithm.class,
CryptographyUtils.SIG_ALG_ID_FINDER.find(DNSSEC.algString(this.code)).getAlgorithm());
+ } catch (IllegalArgumentException | UnsupportedAlgorithmException
ignored) {
+ }
}

@Override
@@ -28,4 +42,13 @@
public String getId() {
return this.id;
}
+
+ public boolean hasSignatureAlgorithm() {
+ return (this.sigAlg != null);
+ }
+
+ @Nullable
+ public SignatureAlgorithm getSignatureAlgorithm() {
+ return this.sigAlg;
+ }
}
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsMessageUtils.java
Wed Oct 8 00:15:49 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsMessageUtils.java
Thu Oct 9 08:50:08 2014 UTC
@@ -66,8 +66,7 @@
}

public static Message setAuthorities(Message msg, boolean
authoritative, @Nullable Iterable<? extends Record> authorityRecords) {
- return ((hasRecords(setRecords(msg, DnsMessageSection.AUTHORITY,
authorityRecords), DnsMessageSection.AUTHORITY) && authoritative) ?
setFlags(msg,
- DnsMessageFlag.AA) : msg);
+ return setRecords((authoritative ? setFlags(msg,
DnsMessageFlag.AA) : msg), DnsMessageSection.AUTHORITY, authorityRecords);
}

public static Message setAnswers(Message msg, @Nullable Record ...
answerRecords) {
=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsRecordUtils.java
Wed Oct 8 00:15:49 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/utils/ToolDnsRecordUtils.java
Thu Oct 9 08:50:08 2014 UTC
@@ -24,6 +24,7 @@
import javax.annotation.Nullable;
import org.apache.commons.lang3.StringUtils;
import org.xbill.DNS.CERTRecord;
+import org.xbill.DNS.CNAMERecord;
import org.xbill.DNS.DNSKEYRecord;
import org.xbill.DNS.DNSKEYRecord.Protocol;
import org.xbill.DNS.DNSSEC.DNSSECException;
@@ -73,6 +74,9 @@
protected Name transformInternal(Record record) throws Exception {
// noinspection ConstantConditions
switch (ToolDnsUtils.findByCode(DnsRecordType.class,
record.getType())) {
+ case CNAME:
+ return ((CNAMERecord) record).getTarget();
+
case MX:
return ((MXRecord) record).getTarget();

=======================================
---
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerRequestProcessorImpl.java
Wed Oct 8 00:15:49 2014 UTC
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerRequestProcessorImpl.java
Thu Oct 9 08:50:08 2014 UTC
@@ -34,6 +34,7 @@
import org.xbill.DNS.Message;
import org.xbill.DNS.Name;
import org.xbill.DNS.Record;
+import org.xbill.DNS.SOARecord;

@Component("dnsServerReqProcImpl")
@Lazy
@@ -85,11 +86,14 @@
Message respMsg = ToolDnsMessageUtils.createResponse(reqMsg);
Record questionRecord = reqMsg.getQuestion();

+ // DNS query operations are permitted / "implemented".
if (ToolDnsMessageUtils.getOpcode(reqMsg) !=
DnsMessageOpcode.QUERY) {
ToolDnsMessageUtils.setRcode(respMsg, DnsMessageRcode.NOTIMP);

return respMsg;
- } else if (questionRecord == null) {
+ } else
+ // A DNS query without a question record does not make sense.
+ if (questionRecord == null) {
ToolDnsMessageUtils.setRcode(respMsg, DnsMessageRcode.FORMERR);

return respMsg;
@@ -98,6 +102,16 @@
DnsRecordType questionRecordType =
ToolDnsUtils.findByCode(DnsRecordType.class, questionRecord.getType());
Name questionName;

+ // @formatter:off
+ /*
+ Rejecting DNS question record (as "not implemented"):
+ - Unknown type.
+ - Mismatched class.
+ - Not "processed" (i.e. not one of the types that can/will be
served).
+ - Name is not absolute.
+ - Name is a wildcard.
+ */
+ // @formatter:on
if ((questionRecordType == null) || (questionRecord.getDClass() !=
questionRecordType.getDclassType().getCode()) |
| !questionRecordType.isProcessed()
|| !(questionName = questionRecord.getName()).isAbsolute() ||
questionName.isWild()) {
ToolDnsMessageUtils.setRcode(respMsg, DnsMessageRcode.NOTIMP);
@@ -108,24 +122,41 @@
List<InstanceDnsConfig> authoritativeConfigs =
this.serverConfig.findAuthoritativeConfigs(questionRecord);
int numAuthoritativeConfigs = authoritativeConfigs.size();

+ // Refusing to resolve vs. external domain(s).
if (numAuthoritativeConfigs == 0) {
- ToolDnsMessageUtils.setRcode(respMsg,
DnsMessageRcode.NXDOMAIN);
+ ToolDnsMessageUtils.setRcode(respMsg, DnsMessageRcode.REFUSED);

return respMsg;
}

List<Record> answerRecords = new
ArrayList<>(numAuthoritativeConfigs), configAnswerRecords;
Set<Record> authorityRecords = new LinkedHashSet<>(2);
+ SOARecord negAuthorityRecord = null, configNegAuthorityRecord =
null;
+ Name negAuthorityName = null, configNegAuthorityName = null;

for (InstanceDnsConfig authoritativeConfig : authoritativeConfigs)
{
+ // noinspection ConstantConditions
if (!CollectionUtils.isEmpty((configAnswerRecords =
authoritativeConfig.findAnswers(questionRecordType, questionName)))) {
// noinspection ConstantConditions
answerRecords.addAll(configAnswerRecords);

+ // If DNS SOA record answer resolved, add associated DNS
NS record(s) as authorities.
if (questionRecordType == DnsRecordType.SOA) {
ToolCollectionUtils.addAll(authorityRecords,

CollectionUtils.collect(authoritativeConfig.getNsRecordConfigs(),
DnsRecordConfigTransformer.INSTANCE));
+
+ break;
}
+ } else
+ // Determining "most authoritative" available DNS SOA record
for use as an authority if no answer(s) are resolved.
+ // noinspection ConstantConditions
+ if ((questionRecordType != DnsRecordType.PTR) &&
answerRecords.isEmpty()
+ && ((configNegAuthorityName = (configNegAuthorityRecord =
authoritativeConfig.getSoaRecordConfig().toRecord()).getName()) != null)
+ && (((negAuthorityRecord == null) && (negAuthorityName ==
null)) || configNegAuthorityName.subdomain(negAuthorityName))) {
+ // noinspection ConstantConditions
+ negAuthorityRecord = configNegAuthorityRecord;
+ // noinspection ConstantConditions
+ negAuthorityName = configNegAuthorityName;
}
}

@@ -136,11 +167,17 @@
new LinkedHashSet<Name>((answerRecords.size() +
authorityRecords.size())));
Set<Record> additionalRecords = new
LinkedHashSet<>(additionalNames.size());

+ // Resolving IPv4 addresses (via DNS A record[s]) for all answer +
authority DNS record(s) where a follow-up resolution can be avoided.
for (Name additionalName : additionalNames) {
for (InstanceDnsConfig additionalAuthoritativeConfig :
this.serverConfig.findAuthoritativeConfigs(DnsRecordType.A,
additionalName)) {
ToolCollectionUtils.addAll(additionalRecords,
additionalAuthoritativeConfig.findAnswers(DnsRecordType.A, additionalName));
}
}
+
+ if ((questionRecordType != DnsRecordType.PTR) &&
answerRecords.isEmpty() && (negAuthorityRecord != null)) {
+ // noinspection ConstantConditions
+ authorityRecords.add(negAuthorityRecord);
+ }

ToolDnsMessageUtils.setAnswers(respMsg, answerRecords);
ToolDnsMessageUtils.setAuthorities(respMsg, true,
authorityRecords);

==============================================================================
Revision: 718974f64359
Branch: default
Author: Michal Kotelba <michal....@esacinc.com>
Date: Thu Oct 9 11:11:26 2014 UTC
Log: - Further supports DCDT-261.
- Implemented DNS IPv6 (AAAA record) query processing (DNS service responds
with proper NODATA pseudo-rcode instead of NXDOMAIN, which was subject to
erroneous negative caching).
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=718974f64359

Modified:

/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsRecordType.java

/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerRequestProcessorImpl.java

=======================================
---
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java
Thu Oct 9 08:50:08 2014 UTC
+++
/dcdt-core/src/main/java/gov/hhs/onc/dcdt/config/instance/impl/InstanceDnsConfigImpl.java
Thu Oct 9 11:11:26 2014 UTC
@@ -152,7 +152,7 @@
public List<Record> findAnswers(DnsRecordType questionRecordType, Name
questionName) {
Map<DnsRecordType, List<Record>> recordsMap =
this.nameRecordsMap.get(questionName);

- return ((recordsMap != null) ?
recordsMap.get(questionRecordType) : null);
+ return ((recordsMap != null) ?
recordsMap.get(((questionRecordType != DnsRecordType.AAAA) ?
questionRecordType : DnsRecordType.A)) : null);
}

@Override
=======================================
--- /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsRecordType.java Thu
Oct 2 12:23:45 2014 UTC
+++ /dcdt-core/src/main/java/gov/hhs/onc/dcdt/dns/DnsRecordType.java Thu
Oct 9 11:11:26 2014 UTC
@@ -64,7 +64,7 @@
Type.MINFO, MINFORecord.class), MX(Type.MX, MXRecord.class, true),
TXT(Type.TXT, TXTRecord.class, true), RP(Type.RP, RPRecord.class),
AFSDB(Type.AFSDB,
AFSDBRecord.class), X25(Type.X25, X25Record.class),
ISDN(Type.ISDN, ISDNRecord.class), RT(Type.RT, RTRecord.class),
NSAP(Type.NSAP, NSAPRecord.class),
NSAP_PTR(Type.NSAP_PTR, NSAP_PTRRecord.class), SIG(Type.SIG,
SIGRecord.class), KEY(Type.KEY, KEYRecord.class), PX(Type.PX,
PXRecord.class), GPOS(Type.GPOS,
- GPOSRecord.class), AAAA(Type.AAAA, AAAARecord.class),
LOC(Type.LOC, LOCRecord.class), NXT(Type.NXT, NXTRecord.class),
EID(Type.EID),
+ GPOSRecord.class), AAAA(Type.AAAA, AAAARecord.class, true),
LOC(Type.LOC, LOCRecord.class), NXT(Type.NXT, NXTRecord.class),
EID(Type.EID),
NIMLOC(Type.NIMLOC), SRV(Type.SRV, SRVRecord.class, true),
ATMA(Type.ATMA), NAPTR(Type.NAPTR, NAPTRRecord.class), KX(Type.KX,
KXRecord.class), CERT(
Type.CERT, CERTRecord.class, true), A6(Type.A6, A6Record.class),
DNAME(Type.DNAME, DNAMERecord.class), OPT(Type.OPT, OPTRecord.class),
APL(Type.APL,
APLRecord.class), DS(Type.DS, DSRecord.class), SSHFP(Type.SSHFP,
SSHFPRecord.class), IPSECKEY(Type.IPSECKEY, IPSECKEYRecord.class),
RRSIG(Type.RRSIG,
=======================================
---
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerRequestProcessorImpl.java
Thu Oct 9 08:50:08 2014 UTC
+++
/dcdt-service-dns/src/main/java/gov/hhs/onc/dcdt/service/dns/server/impl/DnsServerRequestProcessorImpl.java
Thu Oct 9 11:11:26 2014 UTC
@@ -131,8 +131,8 @@

List<Record> answerRecords = new
ArrayList<>(numAuthoritativeConfigs), configAnswerRecords;
Set<Record> authorityRecords = new LinkedHashSet<>(2);
- SOARecord negAuthorityRecord = null, configNegAuthorityRecord =
null;
- Name negAuthorityName = null, configNegAuthorityName = null;
+ SOARecord negAuthorityRecord = null, configNegAuthorityRecord;
+ Name negAuthorityName = null, configNegAuthorityName;

for (InstanceDnsConfig authoritativeConfig : authoritativeConfigs)
{
// noinspection ConstantConditions
@@ -147,10 +147,11 @@

break;
}
- } else
- // Determining "most authoritative" available DNS SOA record
for use as an authority if no answer(s) are resolved.
+ }
+
+ // Determining "most authoritative" available DNS SOA record
for use as an authority if no answer(s) are resolvable.
// noinspection ConstantConditions
- if ((questionRecordType != DnsRecordType.PTR) &&
answerRecords.isEmpty()
+ if ((questionRecordType != DnsRecordType.PTR)
&& ((configNegAuthorityName = (configNegAuthorityRecord =
authoritativeConfig.getSoaRecordConfig().toRecord()).getName()) != null)
&& (((negAuthorityRecord == null) && (negAuthorityName ==
null)) || configNegAuthorityName.subdomain(negAuthorityName))) {
// noinspection ConstantConditions
@@ -159,6 +160,27 @@
negAuthorityName = configNegAuthorityName;
}
}
+
+ // @formatter:off
+ /*
+ Handling IPv6 questions by responding with "NODATA" pseudo-rcode
as per:
+ - RFC 2308 - Negative Caching of DNS Queries (DNS NCACHE), Section
2 (http://tools.ietf.org/html/rfc2308#section-2)
+ - RFC 4074 - Common Misbehavior Against DNS Queries for IPv6
Addresses, Section 3 (http://tools.ietf.org/html/rfc4074#section-3)
+ */
+ // @formatter:on
+ if (questionRecordType == DnsRecordType.AAAA) {
+ if (negAuthorityRecord != null) {
+ authorityRecords.add(negAuthorityRecord);
+ }
+
+ boolean respNoData = !answerRecords.isEmpty();
+
+ if (!respNoData) {
+ ToolDnsMessageUtils.setRcode(respMsg,
DnsMessageRcode.NXDOMAIN);
+ }
+
+ return
ToolDnsMessageUtils.setAuthorities(respMsg, !respNoData, authorityRecords);
+ }

Set<Name> additionalNames =
CollectionUtils.select(CollectionUtils.collect(
@@ -175,7 +197,6 @@
}

if ((questionRecordType != DnsRecordType.PTR) &&
answerRecords.isEmpty() && (negAuthorityRecord != null)) {
- // noinspection ConstantConditions
authorityRecords.add(negAuthorityRecord);
}


==============================================================================
Revision: a14c568b6445
Branch: default
Author: Elizab...@esacinc.com
Date: Wed Oct 22 14:12:48 2014 UTC
Log: - Supports DCDT-285 (Refactor DNS and LDAP functional tests to
utilize stable infrastructure)
https://code.google.com/p/direct-certificate-discovery-tool/source/detail?r=a14c568b6445

Modified:

/dcdt-core/src/test/java/gov/hhs/onc/dcdt/dns/lookup/DnsLookupServiceUnitTests.java

/dcdt-core/src/test/java/gov/hhs/onc/dcdt/mail/crypto/utils/ToolSmimeUtilsFunctionalTests.java

/dcdt-core/src/test/java/gov/hhs/onc/dcdt/testcases/hosting/HostingTestcaseProcessorFunctionalTests.java
/dcdt-core/src/test/resources/META-INF/core/core-test.properties

=======================================
---
/dcdt-core/src/test/java/gov/hhs/onc/dcdt/dns/lookup/DnsLookupServiceUnitTests.java
Wed Jun 11 18:16:57 2014 UTC
+++
/dcdt-core/src/test/java/gov/hhs/onc/dcdt/dns/lookup/DnsLookupServiceUnitTests.java
Wed Oct 22 14:12:48 2014 UTC
@@ -62,7 +62,7 @@

@Test
public void testLookupCertRecords() throws DnsException {
- DnsLookupResult<CERTRecord> result =
assertResultValid(this.dnsLookupService.lookupCertRecords(this.testDnsLookupDomain1Name),
1);
+ DnsLookupResult<CERTRecord> result =
assertResultValid(this.dnsLookupService.lookupCertRecords(this.testDnsLookupDomain1Name),
2);
// noinspection ConstantConditions
Assert.assertEquals(result.getAnswers().get(0).getCertType(),
CertificateType.PKIX);
}
=======================================
---
/dcdt-core/src/test/java/gov/hhs/onc/dcdt/mail/crypto/utils/ToolSmimeUtilsFunctionalTests.java
Sun May 4 20:51:50 2014 UTC
+++
/dcdt-core/src/test/java/gov/hhs/onc/dcdt/mail/crypto/utils/ToolSmimeUtilsFunctionalTests.java
Wed Oct 22 14:12:48 2014 UTC
@@ -80,13 +80,13 @@
@Value("${dcdt.test.instance.ip.addr}")
private InetAddress testInstanceConfigIpAddr;

- @Value("${dcdt.test.crypto.key.public.dts500}")
+ @Value("${dcdt.test.crypto.key.public.d1}")
private String testPublicKeyStr;

- @Value("${dcdt.test.crypto.key.private.dts500}")
+ @Value("${dcdt.test.crypto.key.private.d1}")
private String testPrivateKeyStr;

- @Value("${dcdt.test.crypto.cert.dts500}")
+ @Value("${dcdt.test.crypto.cert.d1}")
private String testCertStr;

@Value("${dcdt.test.discovery.mail.mapping.results.addr}")
=======================================
---
/dcdt-core/src/test/java/gov/hhs/onc/dcdt/testcases/hosting/HostingTestcaseProcessorFunctionalTests.java
Wed May 7 21:01:36 2014 UTC
+++
/dcdt-core/src/test/java/gov/hhs/onc/dcdt/testcases/hosting/HostingTestcaseProcessorFunctionalTests.java
Wed Oct 22 14:12:48 2014 UTC
@@ -41,7 +41,7 @@
@Value("${dcdt.test.instance.ip.addr}")
private InetAddress testInstanceConfigIpAddr;

- @Value("${dcdt.test.lookup.domain.name.3}")
+ @Value("${dcdt.test.lookup.domain.name}")
private Name testLookupDomainName;

@Autowired
=======================================
--- /dcdt-core/src/test/resources/META-INF/core/core-test.properties Thu
Oct 2 12:23:45 2014 UTC
+++ /dcdt-core/src/test/resources/META-INF/core/core-test.properties Wed
Oct 22 14:12:48 2014 UTC
@@ -74,44 +74,42 @@
gBRShx8dBD8XxOviAI02tAjBN84R0QIhAJoaXaAEQTd2e5vSlQl0Ta0Gr1z6D9tG\
fhvVpWGHodMq

-dcdt.test.crypto.cert.dts500=\
- MIICxDCCAi2gAwIBAgIINZbtFRnaj80wDQYJKoZIhvcNAQEFBQAwSjEjMCEGA1UE\
- AwwaZGVtbzIxMi5kaXJlY3QtdGVzdC5jb21fY2ExIzAhBgNVBAoMGmRlbW8yMTIu\
- ZGlyZWN0LXRlc3QuY29tX2NhMB4XDTE0MDUwNTE5MTUxMloXDTE1MDUwNTE5MTUx\
- MlowfDE1MDMGCSqGSIb3DQEJARYmZHRzNTAwQGRpcmVjdDEuZGVtbzIxMi5kaXJl\
- Y3QtdGVzdC5jb20xITAfBgNVBAMMGGR0czUwMF92YWxpZF9jZXJ0X3JlY29yZDEg\
- MB4GA1UECgwXZGVtbzIxMi5kaXJlY3QtdGVzdC5jb20wgZ8wDQYJKoZIhvcNAQEB\
- BQADgY0AMIGJAoGBANLAy1KxY4m1n5nd22/714NijEgLM/k8v1sL9DJgnava5bwC\
- 0aWKnaQxEyxww5ehPFCVGoL35vnGM12ZW7rCCutQ185OQ4azsiZuGoVm+FPP7Dij\
- 8yjIZwIwCrU96YtpW1cwPBJ2wWqq4LvBJakwEWdNp/+iDfngQtIJ2QjKIgXlAgMB\
- AAGjgYAwfjAJBgNVHRMEAjAAMB8GA1UdIwQYMBaAFNN1+KrrssYw7uhhT/V5ezic\
- HDgOMB0GA1UdDgQWBBQGKq7mJEBRY0/GNUBnMuZipSuAZTAxBgNVHREEKjAogSZk\
- dHM1MDBAZGlyZWN0MS5kZW1vMjEyLmRpcmVjdC10ZXN0LmNvbTANBgkqhkiG9w0B\
- AQUFAAOBgQCbsHBNYpPP+ipQ9WFrNIpxQnpUQ3B+QaiVSN5w1gYdlGT0PODV7VP6\
- uGjAVaeIQs3UYqOp3iDWbf55ZW5ST6olg0PbjlM9d0vuej2KhToroDguGJmUHmjc\
- PbHOxjRD/kJ67VXn92z4LNkNrt55o1iqVHDns4M80XYa5Fm5mLf22Q==
+dcdt.test.crypto.cert.d1=\
+ MIICXDCCAcWgAwIBAgIIQwu1//beq90wDQYJKoZIhvcNAQEFBQAwIjEgMB4GA1UE\
+ AwwXZGVtby5kaXJlY3QtdGVzdC5jb21fY2EwIBcNMTQwNTA1MTYzMzA3WhgPMjEx\
+ NDA1MDUxNjMzMDdaMEIxLjAsBgkqhkiG9w0BCQEWH2QxQGRvbWFpbjEuZGVtby5k\
+ aXJlY3QtdGVzdC5jb20xEDAOBgNVBAMMB0QxX3ZhbEEwgZ8wDQYJKoZIhvcNAQEB\
+ BQADgY0AMIGJAoGBAKgatygkjppAHkC+NkSjKd6azF5wcfZLwLwfm50zIFaPzjQC\
+ l99piqnH7CwD0H2l/YJ8FSs5gKNSOb56iQUAENQoq1SPtbH8l2uqufSTHVsMfkvZ\
+ a4IfRLhrUs14EhDJhgdTSwRIh4NGYkTzVdp2ME898jmCyqA6PhC/HJsnXfK9AgMB\
+ AAGjeTB3MAkGA1UdEwQCMAAwHwYDVR0jBBgwFoAUPBJMDhQLtMT3ynj3ClPrzugb\
+ RocwHQYDVR0OBBYEFJWxin78KsMwdMjYhuW/9TybUwNcMCoGA1UdEQQjMCGBH2Qx\
+ QGRvbWFpbjEuZGVtby5kaXJlY3QtdGVzdC5jb20wDQYJKoZIhvcNAQEFBQADgYEA\
+ HFJHbcRJhU4w7FeoNM7Wknx9JRej5RF0p579DaS5dR5HyTGw6kKqmYF019veciEM\
+ rAZhqVbqZzYY1CaZu60E64zKjwhSfiLgRPaYOkdNUcvxMzdJjWPb8/R2OtbB/028\
+ EWIbPKqYiRkJfDHtkKW/bGhEqJdFkpzIi5zWBpKzoQo=

-dcdt.test.crypto.key.public.dts500=\
- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSwMtSsWOJtZ+Z3dtv+9eDYoxI\
- CzP5PL9bC/QyYJ2r2uW8AtGlip2kMRMscMOXoTxQlRqC9+b5xjNdmVu6wgrrUNfO\
- TkOGs7ImbhqFZvhTz+w4o/MoyGcCMAq1PemLaVtXMDwSdsFqquC7wSWpMBFnTaf/\
- og354ELSCdkIyiIF5QIDAQAB
+dcdt.test.crypto.key.public.d1=\
+ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCoGrcoJI6aQB5AvjZEoynemsxe\
+ cHH2S8C8H5udMyBWj840ApffaYqpx+wsA9B9pf2CfBUrOYCjUjm+eokFABDUKKtU\
+ j7Wx/Jdrqrn0kx1bDH5L2WuCH0S4a1LNeBIQyYYHU0sESIeDRmJE81XadjBPPfI5\
+ gsqgOj4QvxybJ13yvQIDAQAB

-dcdt.test.crypto.key.private.dts500=\
- MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANLAy1KxY4m1n5nd\
- 22/714NijEgLM/k8v1sL9DJgnava5bwC0aWKnaQxEyxww5ehPFCVGoL35vnGM12Z\
- W7rCCutQ185OQ4azsiZuGoVm+FPP7Dij8yjIZwIwCrU96YtpW1cwPBJ2wWqq4LvB\
- JakwEWdNp/+iDfngQtIJ2QjKIgXlAgMBAAECgYAQ4gTnsPIqW/RXHSCxDdmr2r8m\
- Hk+hja4+muyLBJZc6AIzV3535mzOdGf2zWm9wdrVEby39Sf5plkDDH/+rAC3x9dV\
- og6LS1DfZYSPeBrC6raLqy8kxQjlfy5FA8yoGGOtndYHYASktxOGRLdAsmlDDmab\
- g2VjFqCz+98ZELG9gQJBAPMNNzwSiws+YxhxbqqnoiNUd/Z6ZBcMvwR6/+vuGjm2\
- rtcS9Gk9YgtVNCsc73DeKTZyUmGFsYHB9Yi3peHNxrUCQQDd+xXIv01K0jqWUiWf\
- 07dbL8YN+w/484s8irmboPH2zECCVTyTUUkZohbvMbbWaa/R4vsTbrU0exPes1V1\
- mhBxAkAhjUZ9tXWaVL9rRWVoi4GXbPaugNDGWc0Yuj4P/KuEIhLav9Qbnwyk0dtE\
- xFbNdu2rhXaX3dPWPMc/W1K77CMtAkEAiPwYjmCXlxOy+e7Jrx7c6NXLd/c1/SB2\
- DS9iqQqiJvYW3RcyoYqo/LuNQaDBPwHLcU+MN4q7Ih7NvUGX/FHN0QJBAJQ3gH6Z\
- WDaMx8KWVBJWpIgXgA7/mDebihBBiBeGa9C2zVTDXIRaiRDYgT5oH/Rb4fselHnk\
- DbHV9hV1XgIgPXQ=
+dcdt.test.crypto.key.private.d1=\
+ MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKgatygkjppAHkC+\
+ NkSjKd6azF5wcfZLwLwfm50zIFaPzjQCl99piqnH7CwD0H2l/YJ8FSs5gKNSOb56\
+ iQUAENQoq1SPtbH8l2uqufSTHVsMfkvZa4IfRLhrUs14EhDJhgdTSwRIh4NGYkTz\
+ Vdp2ME898jmCyqA6PhC/HJsnXfK9AgMBAAECgYAh+KQi3KBk06hJdScKX97KOYYr\
+ X5XoLA7a9ZhBAF/8njsRj6SZZX68KMa1bl/nxG+iuuicP5abarZ4o9KkzAqaP7uR\
+ 2qTxgLZn+kn7CtS5VBJTtN7I/X2ZWUysQdpQ0o7Roz0Y8yHmFKeX0mFPiERhMmGw\
+ stirz43f3iEKETvuAQJBAP4F47XaStFRd51sIUy6UZkgQxnAoZI1zp3d+MfGlDlz\
+ Xvy+UdPfOCI2BpcPuLoXE0y6ie0a5P5qJ6KfSuZbLeECQQCpaaSwSH7zc47AfUXY\
+ NpNyrZlFiL5yzCIIuGBuSviQY5sTsabGts5M9uKLua9tn1pGXb5/KRG/i41Vr/P4\
+ N0hdAkAQfhNluDGJW4+3kdCrqaEonvacUmxrEMFEcKf5WIRBIqN1J2oqpmB/oCBX\
+ aHbm5h6jqazQzyE0/3FpVoxHXn4hAkEAjNFGVk18UMpuDyxSAR2kRD9uVrEKdQuf\
+ ApaXeTYSFJrmzWDumuBa7PiOaMwouLsrY7AKZ1Jw8UGDcoU2Cs2Q9QJAO8rSHEbC\
+ ZrZSsq6zV/xdckPCY2enwfkyzj4ny7Esm3Zeywa5kqQjLwcLZJzLpvbmpINzxByS\
+ pMKpSE0dfgJq0A==


#====================================================================================================
# CRYPTOGRAPHY X500 NAMES
@@ -137,17 +135,16 @@

#====================================================================================================
# LOOKUP

#====================================================================================================
-dcdt.test.lookup.domain.name=demo212.direct-test.com
+dcdt.test.lookup.domain.name=demo.direct-test.com
dcdt.test.lookup.domain.name.2=direct-test.com
-dcdt.test.lookup.domain.name.3=demo.direct-test.com
dcdt.test.lookup.domain.ldap.name=ldap.${dcdt.test.lookup.domain.name}
-dcdt.test.lookup.domain.1.name=direct1.${dcdt.test.lookup.domain.name}
-dcdt.test.lookup.domain.2.name=direct2.${dcdt.test.lookup.domain.name}
-dcdt.test.lookup.domain.3.name=direct3.${dcdt.test.lookup.domain.name}
-dcdt.test.lookup.domain.4.name=direct4.${dcdt.test.lookup.domain.name}
-dcdt.test.lookup.domain.5.name=direct5.${dcdt.test.lookup.domain.name}
-dcdt.test.lookup.domain.6.name=direct6.${dcdt.test.lookup.domain.name}
-dcdt.test.lookup.domain.1.mail.addr.1=dts500@${dcdt.test.lookup.domain.1.name}
+dcdt.test.lookup.domain.1.name=domain1.${dcdt.test.lookup.domain.name}
+dcdt.test.lookup.domain.2.name=domain2.${dcdt.test.lookup.domain.name}
+dcdt.test.lookup.domain.3.name=domain3.${dcdt.test.lookup.domain.name}
+dcdt.test.lookup.domain.4.name=domain4.${dcdt.test.lookup.domain.name}
+dcdt.test.lookup.domain.5.name=domain5.${dcdt.test.lookup.domain.name}
+dcdt.test.lookup.domain.6.name=domain6.${dcdt.test.lookup.domain.name}
+dcdt.test.lookup.domain.1.mail.addr.1=d1@${dcdt.test.lookup.domain.1.name}


#====================================================================================================
# DNS LOOKUP
Reply all
Reply to author
Forward
0 new messages