From dc7c71fc365232c95e3644e0876b8d7a5de47514 Mon Sep 17 00:00:00 2001 From: Michael Hierweck Date: Tue, 17 Jul 2012 13:20:00 +0000 Subject: [PATCH] Alte DNS-Utils entfern. Fixed #104. --- .../src/de/hsadmin/core/util/DNSCheck.java | 50 --- .../de/hsadmin/core/util/dns/DNSQuery.java | 395 ------------------ .../core/util/dns/DNSResourceRecord.java | 190 --------- .../de/hsadmin/core/util/dns/DNSService.java | 80 ---- .../de/hsadmin/mods/dom/DomainModuleImpl.java | 7 - 5 files changed, 722 deletions(-) delete mode 100644 hsarback/src/de/hsadmin/core/util/DNSCheck.java delete mode 100644 hsarback/src/de/hsadmin/core/util/dns/DNSQuery.java delete mode 100644 hsarback/src/de/hsadmin/core/util/dns/DNSResourceRecord.java delete mode 100644 hsarback/src/de/hsadmin/core/util/dns/DNSService.java diff --git a/hsarback/src/de/hsadmin/core/util/DNSCheck.java b/hsarback/src/de/hsadmin/core/util/DNSCheck.java deleted file mode 100644 index 23061ea..0000000 --- a/hsarback/src/de/hsadmin/core/util/DNSCheck.java +++ /dev/null @@ -1,50 +0,0 @@ -package de.hsadmin.core.util; - -import java.net.InetAddress; -import java.net.UnknownHostException; - -import de.hsadmin.core.model.HSAdminException; -import de.hsadmin.core.util.dns.DNSQuery; -import de.hsadmin.core.util.dns.DNSService; - - -public class DNSCheck { - - private String dnsServer; - - public DNSCheck(String dnsServer) throws HSAdminException { - this.dnsServer = dnsServer; - InetAddress dnsInetAddress; - try { - dnsInetAddress = InetAddress.getByName(dnsServer); - DNSService.SetDNSAddress(dnsInetAddress); - } catch (UnknownHostException e) { - throw new HSAdminException(e); - } - } - - public boolean checkDomain(String domain) throws HSAdminException { - boolean hasNSRecord = false; - boolean hasARecord = false; - DNSQuery dnsQuery = new DNSQuery(); - dnsQuery.SetQuery(DNSQuery.TYPE_NS, DNSQuery.CLASS_INTERNET, domain); - if (DNSService.PerformDNSQuery(dnsQuery)) { - hasNSRecord = dnsQuery.getDNSAuthorityRecords() != null && dnsQuery.getDNSAuthorityRecords().length > 0; - if (dnsQuery.getDNSAuthorityRecords() != null) { - System.out.println("NS:" + dnsQuery.getDNSAuthorityRecords().length); - } - } else { - throw new HSAdminException("domain " + domain + " is not delegated to " + dnsServer); - } - dnsQuery.SetQuery(DNSQuery.TYPE_A, DNSQuery.CLASS_INTERNET, domain); - if (DNSService.PerformDNSQuery(dnsQuery)) { - hasARecord = dnsQuery.getDNSAnswerRecords() != null && dnsQuery.getDNSAnswerRecords().length > 0; - if (dnsQuery.getDNSAnswerRecords() != null) { - System.out.println("A: " + dnsQuery.getDNSAnswerRecords().length); - } - } else { - throw new HSAdminException("domain " + domain + " is not delegated to " + dnsServer); - } - return hasNSRecord & !hasARecord; - } -} diff --git a/hsarback/src/de/hsadmin/core/util/dns/DNSQuery.java b/hsarback/src/de/hsadmin/core/util/dns/DNSQuery.java deleted file mode 100644 index 814fa73..0000000 --- a/hsarback/src/de/hsadmin/core/util/dns/DNSQuery.java +++ /dev/null @@ -1,395 +0,0 @@ -package de.hsadmin.core.util.dns; - -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.OutputStream; - -public class DNSQuery { - - // DNS constants - private final static int MAX_LABEL = 128; - - // DNS flag values - private final static int QR_MASK = 0x8000; - private final static int QR_SHIFT = 0; - - private final static int OPCODE_MASK = 0x7800; - - private final static int AA_MASK = 0x0400; - private final static int TC_MASK = 0x0200; - private final static int RD_MASK = 0x0100; - private final static int RA_MASK = 0x0080; - private final static int ZERO_MASK = 0x0070; - private final static int RCODE_MASK = 0x000f; - - // DNS query/type constants - public final static int TYPE_A = 1; - public final static int TYPE_NS = 2; - public final static int TYPE_MD = 3; - public final static int TYPE_MF = 4; - public final static int TYPE_CNAME = 5; - public final static int TYPE_SOA = 6; - public final static int TYPE_MB = 7; - public final static int TYPE_MG = 8; - public final static int TYPE_MR = 9; - public final static int TYPE_NULL = 10; - public final static int TYPE_WKS = 11; - public final static int TYPE_PTR = 12; - public final static int TYPE_HINFO = 13; - public final static int TYPE_MINFO = 14; - public final static int TYPE_MX = 15; - public final static int TYPE_AXFR = 252; - public final static int TYPE_ANY = 255; - - // DNS query classes - public final static byte CLASS_INTERNET = 1; - - // query data members - public int m_idQuery = 0x0101; - - // opcodes - public final static int OP_NORM_QRY = 0x0000; - public final static int OP_INVERSE_QRY = 0x0800; - public final static int OP_SERVER_STAT = 0x1000; - public int m_iOpCode = OP_NORM_QRY; - - // flags - public boolean m_fQueryResult = false; - public boolean m_fAuthAns = false; - public boolean m_fTruncated = false; - public boolean m_fRecurse = true; - public boolean m_fRecursionAvail = false; - - private int m_iQryType = TYPE_A; - private int m_iQryClass = CLASS_INTERNET; - private String m_strQryName = null; - - // return codes - public int m_iRCode = 0; - public final static int RCODE_SUCCESS = 0; - public final static int RCODE_NAME_ERROR = 0x0003; - - public int m_cQuestions = 1; - public int m_cAnswerRRs = 0; - public int m_cAuthRRs = 0; - public int m_cInfoRRs = 0; - - DNSResourceRecord [] m_arrAns; - DNSResourceRecord [] m_arrAuth; - DNSResourceRecord [] m_arrInfo; - - public static String GetTypeDesc(int iType) { - String str = null; - - switch (iType) { - case TYPE_A: { str = new String("TYPE_A"); } break; - case TYPE_NS: { str = new String("TYPE_NS"); } break; - case TYPE_CNAME: { str = new String("TYPE_CNAME"); } break; - case TYPE_SOA: { str = new String("TYPE_SOA"); } break; - case TYPE_PTR: { str = new String("TYPE_PTR"); } break; - case TYPE_HINFO: { str = new String("TYPE_HINFO"); } break; - case TYPE_MX: { str = new String("TYPE_MX"); } break; - case TYPE_AXFR: { str = new String("TYPE_AXFR"); } break; - case TYPE_ANY: { str = new String("TYPE_ANY"); } break; - default: { str = new String(Integer.toString(iType)); }; - } - - return str; - } - - public DNSResourceRecord[] getDNSAnswerRecords() { - return m_arrAns; - } - - public DNSResourceRecord[] getDNSAuthorityRecords() { - return m_arrAuth; - } - - public static String GetClassDesc(int iClass) { - String str = null; - - switch (iClass) { - case CLASS_INTERNET: { str = new String("CLASS_INTERNET"); } break; - default: { str = new String(); }; - } - - return str; - } - - private int BuildFlags() { - int iFlags = 0; - - iFlags |= m_iOpCode; - - if (m_fRecurse) { - iFlags |= RD_MASK; - } - - return iFlags; - } - - private boolean SetFlags(int iFlags) { - m_fQueryResult = (iFlags & QR_MASK) == QR_MASK; - m_fAuthAns = (iFlags & AA_MASK) == AA_MASK; - m_fTruncated = (iFlags & TC_MASK) == TC_MASK; - m_fRecurse = (iFlags & RD_MASK) == RD_MASK; - m_fRecursionAvail = (iFlags & RA_MASK) == RA_MASK; - m_iRCode = iFlags & RCODE_MASK; - - return m_iRCode == RCODE_SUCCESS; - } - - public boolean SetQuery(int iType, int iClass, String strName) { - m_iQryType = iType; - m_iQryClass = iClass; - m_cQuestions = 1; - m_strQryName = new String(strName); - - return true; - } - - private boolean WriteFQDN(DataOutputStream dos, String strName) { - try { - int iPos = 0; - int iSep = 0; - - while ((iSep = strName.indexOf('.', iPos)) >= 0) { - dos.writeByte((byte)(iSep - iPos)); - dos.writeBytes(strName.substring(iPos, iSep)); - iPos = iSep + 1; - } - - if (iPos < strName.length()) { - dos.writeByte((byte)(strName.length() - iPos)); - dos.writeBytes(strName.substring(iPos)); - } - - // terminator - dos.writeByte(0); - - return true; - } catch (IOException ioe) { - return false; - } - } - - public static String ReadLabelList(DataInputStream dis, byte [] abData) { - int cb; - byte [] ab = new byte[MAX_LABEL]; - String str = new String(); - String strNext = new String(); - - try { - while ((cb = dis.readUnsignedByte()) > 0) { - if ((cb & 0xc0) == 0xc0) { - int iReadOff = (int)(cb & ~0xc0) << 8; - - cb = dis.readUnsignedByte(); - iReadOff += (int)cb; - - while (iReadOff < abData.length && ((cb = abData[iReadOff++]) > 0)) { - if ((cb & 0xc0) == 0xc0) { - return str; - } - - strNext = new String(abData, 0, iReadOff, cb); - - if (str.length() > 0) { - str += "." + strNext; - } else { - str = strNext; - } - - iReadOff += cb; - } - - return str; - } else { - byte [] abNext = new byte[cb]; - - if (dis.read(abNext) < cb) { - return new String(); - } - - strNext = new String(abNext, 0, 0, cb); - } - - if (str.length() > 0) { - str += "." + strNext; - } else { - str = strNext; - } - } - } catch (IOException ioe) { - System.err.println("exception: " + ioe.getMessage()); - } - - return str; - } - - public boolean WriteQuery(OutputStream os) { - try { - if (m_strQryName == null) { - return false; - } - - DataOutputStream dos = new DataOutputStream(os); - - // query sequence ID - dos.writeShort(m_idQuery); - - // query flags - dos.writeShort(BuildFlags()); - - // question count - dos.writeShort(1); - - // answer count - dos.writeShort(0); - - // authority count - dos.writeShort(0); - - // additional info count - dos.writeShort(0); - - // write query name - WriteFQDN(dos, m_strQryName); - - // query type - dos.writeShort(m_iQryType); - - // query class - dos.writeShort(m_iQryClass); - - return true; - } catch (IOException ioe) { - return false; - } - } - - private void SortRRs(DNSResourceRecord [] arr, boolean fDescending) { - if (arr == null || arr.length < 2) { - return; - } - - boolean fSwapped; - DNSResourceRecord rrSwap; - - do { - fSwapped = false; - - for (int i = 0; i < arr.length - 1; i++) { - boolean fSwap = false; - - if (arr[i+1].m_iType < arr[i].m_iType) { - fSwap = true; - } else if (arr[i+1].m_iType == arr[i].m_iType) { - switch (arr[i].m_iType) { - case TYPE_MX: { - fSwap = arr[i+1].m_lData < arr[i].m_lData; - } break; - } - } - - if (fSwap = fSwap ^ fDescending) { - rrSwap = arr[i]; - arr[i] = arr[i+1]; - arr[i+1] = rrSwap; - fSwapped = true; - } - } - } while (fSwapped); - } - - public boolean ReadQuery(byte [] abData, int cbData) { - try { - ByteArrayInputStream is = new ByteArrayInputStream(abData, 0, cbData); - - DataInputStream dis = new DataInputStream(is); - - // query sequence ID - m_idQuery = dis.readShort(); - - // query flags - if (!SetFlags(dis.readShort())) { - return false; - } - - // question count - m_cQuestions = dis.readShort(); - - // answer count - m_cAnswerRRs = dis.readShort(); - - // authority count - m_cAuthRRs = dis.readShort(); - - // additional info count - m_cInfoRRs = dis.readShort(); - - // read query name - m_strQryName = ReadLabelList(dis, abData); - - // query type - m_iQryType = dis.readShort(); - - // query class - m_iQryClass = dis.readShort(); - - m_arrAns = new DNSResourceRecord[m_cAnswerRRs]; - - for (int i = 0; i < m_cAnswerRRs; i++) { - m_arrAns[i] = new DNSResourceRecord(); - - if (!m_arrAns[i].readRecord(dis, abData)) { - return false; - } - } - - SortRRs(m_arrAns, false); - - if (m_cAuthRRs > 0) { - m_arrAuth = new DNSResourceRecord[m_cAuthRRs]; - - for (int i = 0; i < m_cAuthRRs; i++) { - m_arrAuth[i] = new DNSResourceRecord(); - - if (!m_arrAuth[i].readRecord(dis, abData)) { - return false; - } - } - - SortRRs(m_arrAuth, false); - } else { - m_arrAuth = null; - } - - if (m_cInfoRRs > 0) { - m_arrInfo = new DNSResourceRecord[m_cInfoRRs]; - - for (int i = 0; i < m_cInfoRRs; i++) { - m_arrInfo[i] = new DNSResourceRecord(); - - if (!m_arrInfo[i].readRecord(dis, abData)) { - return false; - } - } - - SortRRs(m_arrInfo, false); - } else { - m_arrInfo = null; - } - - } catch (IOException ioe) { - System.err.println("exception: " + ioe.getMessage()); - - return false; - } - - return true; - } - -} diff --git a/hsarback/src/de/hsadmin/core/util/dns/DNSResourceRecord.java b/hsarback/src/de/hsadmin/core/util/dns/DNSResourceRecord.java deleted file mode 100644 index 5eb6dd6..0000000 --- a/hsarback/src/de/hsadmin/core/util/dns/DNSResourceRecord.java +++ /dev/null @@ -1,190 +0,0 @@ -package de.hsadmin.core.util.dns; - -import java.io.DataInputStream; -import java.io.IOException; -import java.io.PrintStream; -import java.util.Date; - -public class DNSResourceRecord { - - public String m_strDomainName; - public int m_iType; - public int m_iClass; - public Date m_dtExpire = new Date(); - public int m_cbData; - public byte [] m_abData = null; - - // these fields are interpreted differently depending on m_iType - // (can you say union?) - public long m_lData; - public long m_lData1; - public long m_lData2; - public long m_lData3; - public long m_lData4; - public long m_lData5; - - public String m_strData; - public String m_strData1; - - public boolean readRecord(DataInputStream dis, byte [] abData) { - try { - m_strDomainName = DNSQuery.ReadLabelList(dis, abData); - m_iType = dis.readShort(); - m_iClass = dis.readShort(); - - // time from DNS is in seconds, need milliseconds - long lSecondsToLive = dis.readInt(); - - Date dtNow = new Date(); - - m_dtExpire.setTime(dtNow.getTime() + (lSecondsToLive * 1000L)); - - m_cbData = dis.readShort(); - - m_abData = null; - - switch (m_iType) { - case DNSQuery.TYPE_A: { - m_lData = dis.readInt(); - } break; - - case DNSQuery.TYPE_MX: { - m_lData = dis.readShort(); - m_strData = DNSQuery.ReadLabelList(dis, abData); - } break; - - case DNSQuery.TYPE_NS: - case DNSQuery.TYPE_MD: - case DNSQuery.TYPE_MF: - case DNSQuery.TYPE_CNAME: - case DNSQuery.TYPE_MB: - case DNSQuery.TYPE_MG: - case DNSQuery.TYPE_MR: - case DNSQuery.TYPE_PTR: { - m_strData = DNSQuery.ReadLabelList(dis, abData); - } break; - - case DNSQuery.TYPE_SOA: { - // !!!LATER!!! I had a real problem getting this code to work. - // I think the spec I had was old RFC 883 - m_strData = DNSQuery.ReadLabelList(dis, abData); - m_strData1 = DNSQuery.ReadLabelList(dis, abData); - - // SERIAL - m_lData = dis.readUnsignedShort(); - // REFRESH - m_lData1 = dis.readInt() & 0xffffffff; - // RETRY - m_lData2 = dis.readInt() & 0xffffffff; - // EXPIRE - m_lData3 = dis.readInt() & 0xffffffff; - // MINIMUM - m_lData4 = dis.readUnsignedShort(); - // UNKNOWN - m_lData5 = dis.readInt() & 0xffffffff; - } break; - - case DNSQuery.TYPE_MINFO: - case DNSQuery.TYPE_HINFO: { - m_strData = DNSQuery.ReadLabelList(dis, abData); - m_strData1 = DNSQuery.ReadLabelList(dis, abData); - } break; - - default: { - m_abData = new byte[m_cbData]; - dis.read(m_abData); - } break; - } - } catch (IOException ioe) { - System.err.println("exception: " + ioe.getMessage()); - } - - return true; - } - - public String getMXServer() { - if (m_iType != DNSQuery.TYPE_MX) { - return new String(); - } - - return new String(m_strData); - } - - public int getMXPref() { - if (m_iType != DNSQuery.TYPE_MX) { - return -1; - } - - return (int)m_lData; - } - - public void dumpRecord(PrintStream ps) { - ps.println("Domain: " + m_strDomainName); - ps.println("Type: " + DNSQuery.GetTypeDesc(m_iType)); - ps.println("Class: " + DNSQuery.GetClassDesc(m_iClass)); - - ps.println("Expires: " + m_dtExpire.toString()); - - switch (m_iType) { - case DNSQuery.TYPE_A: { - ps.println("IP Address: " + Long.toHexString(m_lData)); - } break; - - case DNSQuery.TYPE_MX: { - ps.println("MX Server: " + m_strData); - ps.println("MX Pref: " + Long.toString(m_lData)); - } break; - - case DNSQuery.TYPE_NS: - case DNSQuery.TYPE_MD: - case DNSQuery.TYPE_MF: - case DNSQuery.TYPE_CNAME: - case DNSQuery.TYPE_MB: - case DNSQuery.TYPE_MG: - case DNSQuery.TYPE_MR: - case DNSQuery.TYPE_PTR: { - ps.println("Domain: " + m_strData); - } break; - - case DNSQuery.TYPE_HINFO: { - ps.println("CPU: " + m_strData); - ps.println("OS: " + m_strData1); - } break; - - case DNSQuery.TYPE_SOA: { - ps.println("MNAME: " + m_strData); - ps.println("RNAME: " + m_strData1); - ps.println("SERIAL: " + Long.toString(m_lData)); - ps.println("REFRESH: " + Long.toString(m_lData1)); - ps.println("RETRY: " + Long.toString(m_lData2)); - ps.println("EXPIRE: " + Long.toString(m_lData3)); - ps.println("MINIMUM: " + Long.toString(m_lData4)); - ps.println("UNKNOWN: " + Long.toString(m_lData4)); - } break; - - default: { - ps.println("Data: " + new String(m_abData)); - dumpBytes(ps, m_abData); - } - } - } - - private void dumpBytes(PrintStream ps, byte [] ab) { - int i; - String strTemp; - - for (i = 0; i < ab.length; i++) { - strTemp = Integer.toHexString(ab[i]); - if (strTemp.length() < 2) { - strTemp = "0" + strTemp; - } - - ps.print(strTemp + " "); - - if (i > 0 && ((i % 8) == 0 || i == ab.length-1)) { - ps.println(); - } - } - } - -} diff --git a/hsarback/src/de/hsadmin/core/util/dns/DNSService.java b/hsarback/src/de/hsadmin/core/util/dns/DNSService.java deleted file mode 100644 index ccfb747..0000000 --- a/hsarback/src/de/hsadmin/core/util/dns/DNSService.java +++ /dev/null @@ -1,80 +0,0 @@ -package de.hsadmin.core.util.dns; - -import java.io.BufferedInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.net.InetAddress; -import java.net.Socket; - - -public class DNSService { - - public static int DNS_SOCKET = 53; - private static InetAddress m_iaDNS = null; - private static Socket m_sockService = null; - private static byte[] m_abReceive = new byte[512]; - - private static int m_iQuerySerial = 0x1234; - - public static void SetDNSAddress(InetAddress iaDNS) { - m_iaDNS = iaDNS; - - if (m_sockService == null) { - try { - m_sockService = new Socket(m_iaDNS, DNS_SOCKET, false); - } catch (IOException ioe) { - System.err.println("exception: " + ioe.getMessage()); - } - } - } - - public static boolean PerformDNSQuery(DNSQuery dns) { - if (m_iaDNS == null || dns == null) { - return false; - } - - ByteArrayOutputStream bas = new ByteArrayOutputStream(); - - dns.WriteQuery(bas); - - try { - m_sockService.getOutputStream().write(bas.toByteArray()); - } catch (IOException ioe) { - return false; - } - - try { - BufferedInputStream bis = new BufferedInputStream(m_sockService.getInputStream(), 512); - - int cRetry = 5; - int cbAvail = 0; - - while (cRetry-- > 0 && ((cbAvail = bis.available()) <= 0)) { - try { - Thread.currentThread().sleep(200); - } catch (InterruptedException ie) { - System.err.println("exception: " + ie.getMessage()); - } - } - - if (cbAvail > 0) { - int cbRead = bis.read(m_abReceive, 0, cbAvail); - - m_iQuerySerial++; - - if (cbRead > 0) { - dns.ReadQuery(m_abReceive, cbRead); - } else { - return false; - } - } else { - return false; - } - } catch (IOException ioe) { - return false; - } - - return true; - } - -} diff --git a/hsarback/src/de/hsadmin/mods/dom/DomainModuleImpl.java b/hsarback/src/de/hsadmin/mods/dom/DomainModuleImpl.java index b63e151..6a8e6a0 100644 --- a/hsarback/src/de/hsadmin/mods/dom/DomainModuleImpl.java +++ b/hsarback/src/de/hsadmin/mods/dom/DomainModuleImpl.java @@ -11,7 +11,6 @@ import de.hsadmin.core.model.AbstractEntity; import de.hsadmin.core.model.AbstractModuleImpl; import de.hsadmin.core.model.AuthorisationException; import de.hsadmin.core.model.HSAdminException; -import de.hsadmin.core.util.DNSCheck; import de.hsadmin.mods.dom.Domain.Status; import de.hsadmin.mods.email.EMailAddress; import de.hsadmin.mods.pac.Pac; @@ -117,12 +116,6 @@ public class DomainModuleImpl extends AbstractModuleImpl { if (loginUser.hasCustomerRoleFor(superDom.getUser().getPac().getCustomer())) { break; // same customer } - DNSCheck dnsCheck = new DNSCheck(dom.getDnsMaster()); - if (dnsCheck.checkDomain(dom.getName())) { - break; - } else { - throw new AuthorisationException(loginUser, "add", dom); - } } } }