Description: fix upstream issue 912 causing test failures on big endian arches
Origin: https://github.com/PowerDNS/pdns/issues/912
Author: PowerDNS.COM BV & the PowerDNS Community
Description:
  git diff
    b969c229e1fe9a88e6ff6b68af461d15649fdf75^..
    6e4271016b30da83de2d0e3eb4962a5de1574376
--- a/pdns/base64.cc
+++ b/pdns/base64.cc
@@ -1,6 +1,6 @@
 #include "base64.hh"
 #include <inttypes.h>
-
+#include "dns.hh"
 namespace anonpdns {
 char B64Decode1(char cInChar)
 {
@@ -164,9 +164,16 @@ int B64Decode(const std::string& strInpu
     // Interpret the resulting 3 bytes...note there
     // may have been padding, so those padded bytes
     // are actually ignored.
+#if BYTE_ORDER == BIG_ENDIAN
+    strOutput += pBuf[1];
+    strOutput += pBuf[2];
+    strOutput += pBuf[3];
+#else
     strOutput += pBuf[2];
     strOutput += pBuf[1];
     strOutput += pBuf[0];
+#endif
+                        
   } // while
   if(pad)
     strOutput.resize(strOutput.length()-pad);
--- a/pdns/test-dnsrecords_cc.cc
+++ b/pdns/test-dnsrecords_cc.cc
@@ -264,10 +264,10 @@ BOOST_AUTO_TEST_CASE(test_opt_record_out
 
   DNSPacketWriter pw(pak, "www.powerdns.com", ns_t_a);
   pw.startRecord("www.powerdns.com", ns_t_a, 16, 1, DNSPacketWriter::ANSWER);
-  pw.xfrIP(0x0100007f);
+  pw.xfrIP(htonl(0x7f000001));
   opts.push_back(pair<uint16_t,string>(3, "powerdns"));
   pw.addOpt(1280, 0, 0, opts);
-  pw.getHeader()->id = 0x01f0;
+  pw.getHeader()->id = htons(0xf001); 
   pw.getHeader()->rd = 1;
   pw.commit();
 
--- a/pdns/test-misc_hh.cc
+++ b/pdns/test-misc_hh.cc
@@ -3,6 +3,7 @@
 
 #include <boost/test/unit_test.hpp>
 #include "misc.hh"
+#include "dns.hh"
 #include <utility>
 
 using std::string;
@@ -67,6 +68,17 @@ BOOST_AUTO_TEST_CASE(test_AtomicCounter)
     BOOST_CHECK_EQUAL(ac, 2);
 }
 
+BOOST_AUTO_TEST_CASE(test_endianness) {
+  uint32_t i = 1;
+#if BYTE_ORDER == BIG_ENDIAN
+  BOOST_CHECK_EQUAL(i, htonl(i));
+#elif BYTE_ORDER == LITTLE_ENDIAN 
+  uint32_t j=0x01000000;
+  BOOST_CHECK_EQUAL(i, ntohl(j));
+#else
+  BOOST_FAIL("Did not detect endianness at all");
+#endif
+}
 
 BOOST_AUTO_TEST_CASE(test_parseService) {
     ServiceTuple tp;
