[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#915667: marked as done (stretch-pu: package pdns-recursor/4.0.4-1+deb9u4)



Your message dated Sun, 13 Jan 2019 20:10:37 +0000
with message-id <E1gim5d-00091G-6E@fasolo.debian.org>
and subject line Bug#915667: fixed in fcitx5 0~20181128+ds1-1~exp1
has caused the Debian Bug report #915667,
regarding stretch-pu: package pdns-recursor/4.0.4-1+deb9u4
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
915667: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=915667
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: stretch
User: release.debian.org@packages.debian.org
Usertags: pu

Dear Release Team,

I've prepared an update for pdns-recursor, which fixes some CVE issues.
As they are not critical bugs, security and me have agreed to do this via
a normal stable update, if that's okay with you too.

Sec bug: #913162

Thanks,
Chris

diff -Nru pdns-recursor-4.0.4/debian/changelog pdns-recursor-4.0.4/debian/changelog
--- pdns-recursor-4.0.4/debian/changelog	2017-12-07 12:40:02.000000000 +0000
+++ pdns-recursor-4.0.4/debian/changelog	2018-11-10 16:05:33.000000000 +0000
@@ -1,3 +1,9 @@
+pdns-recursor (4.0.4-1+deb9u4) stretch-security; urgency=high
+
+  * Security upload for CVE-2018-10851 CVE-2018-14626 CVE-2018-14644 (Closes: #913162).
+
+ -- Chris Hofstaedtler <zeha@debian.org>  Sat, 10 Nov 2018 16:05:33 +0000
+
 pdns-recursor (4.0.4-1+deb9u3) stretch-security; urgency=high
 
   * Security upload, including fix for CVE-2017-15120.
diff -Nru pdns-recursor-4.0.4/debian/patches/CVE-2018-10851-rec-4.0.8.patch pdns-recursor-4.0.4/debian/patches/CVE-2018-10851-rec-4.0.8.patch
--- pdns-recursor-4.0.4/debian/patches/CVE-2018-10851-rec-4.0.8.patch	1970-01-01 00:00:00.000000000 +0000
+++ pdns-recursor-4.0.4/debian/patches/CVE-2018-10851-rec-4.0.8.patch	2018-11-10 16:05:33.000000000 +0000
@@ -0,0 +1,396 @@
+diff -ru pdns-recursor-4.0.8.orig/dnsparser.cc pdns-recursor-4.0.8/dnsparser.cc
+--- pdns-recursor-4.0.8.orig/dnsparser.cc	2017-12-11 11:38:52.000000000 +0100
++++ pdns-recursor-4.0.8/dnsparser.cc	2018-10-10 10:29:54.182145934 +0200
+@@ -121,54 +121,42 @@
+   return ret;
+ }
+ 
+-DNSRecordContent* DNSRecordContent::mastermake(const DNSRecord &dr, 
+-                                               PacketReader& pr)
++std::shared_ptr<DNSRecordContent> DNSRecordContent::mastermake(const DNSRecord &dr, 
++                                                               PacketReader& pr)
+ {
+   uint16_t searchclass = (dr.d_type == QType::OPT) ? 1 : dr.d_class; // class is invalid for OPT
+ 
+   typemap_t::const_iterator i=getTypemap().find(make_pair(searchclass, dr.d_type));
+   if(i==getTypemap().end() || !i->second) {
+-    return new UnknownRecordContent(dr, pr);
++    return std::make_shared<UnknownRecordContent>(dr, pr);
+   }
+ 
+   return i->second(dr, pr);
+ }
+ 
+-DNSRecordContent* DNSRecordContent::mastermake(uint16_t qtype, uint16_t qclass,
+-                                               const string& content)
++std::shared_ptr<DNSRecordContent> DNSRecordContent::mastermake(uint16_t qtype, uint16_t qclass,
++                                                               const string& content)
+ {
+   zmakermap_t::const_iterator i=getZmakermap().find(make_pair(qclass, qtype));
+   if(i==getZmakermap().end()) {
+-    return new UnknownRecordContent(content);
++    return std::make_shared<UnknownRecordContent>(content);
+   }
+ 
+   return i->second(content);
+ }
+ 
+-std::unique_ptr<DNSRecordContent> DNSRecordContent::makeunique(uint16_t qtype, uint16_t qclass,
+-                                               const string& content)
+-{
+-  zmakermap_t::const_iterator i=getZmakermap().find(make_pair(qclass, qtype));
+-  if(i==getZmakermap().end()) {
+-    return std::unique_ptr<DNSRecordContent>(new UnknownRecordContent(content));
+-  }
+-
+-  return std::unique_ptr<DNSRecordContent>(i->second(content));
+-}
+-
+-
+-DNSRecordContent* DNSRecordContent::mastermake(const DNSRecord &dr, PacketReader& pr, uint16_t oc) {
++std::shared_ptr<DNSRecordContent> DNSRecordContent::mastermake(const DNSRecord &dr, PacketReader& pr, uint16_t oc) {
+   // For opcode UPDATE and where the DNSRecord is an answer record, we don't care about content, because this is
+   // not used within the prerequisite section of RFC2136, so - we can simply use unknownrecordcontent.
+   // For section 3.2.3, we do need content so we need to get it properly. But only for the correct Qclasses.
+   if (oc == Opcode::Update && dr.d_place == DNSResourceRecord::ANSWER && dr.d_class != 1)
+-    return new UnknownRecordContent(dr, pr);
++    return std::make_shared<UnknownRecordContent>(dr, pr);
+ 
+   uint16_t searchclass = (dr.d_type == QType::OPT) ? 1 : dr.d_class; // class is invalid for OPT
+ 
+   typemap_t::const_iterator i=getTypemap().find(make_pair(searchclass, dr.d_type));
+   if(i==getTypemap().end() || !i->second) {
+-    return new UnknownRecordContent(dr, pr);
++    return std::make_shared<UnknownRecordContent>(dr, pr);
+   }
+ 
+   return i->second(dr, pr);
+diff -ru pdns-recursor-4.0.8.orig/dnsparser.hh pdns-recursor-4.0.8/dnsparser.hh
+--- pdns-recursor-4.0.8.orig/dnsparser.hh	2017-12-11 11:38:52.000000000 +0100
++++ pdns-recursor-4.0.8/dnsparser.hh	2018-10-10 10:29:54.182145934 +0200
+@@ -166,10 +166,9 @@
+ class DNSRecordContent
+ {
+ public:
+-  static DNSRecordContent* mastermake(const DNSRecord &dr, PacketReader& pr);
+-  static DNSRecordContent* mastermake(const DNSRecord &dr, PacketReader& pr, uint16_t opcode);
+-  static DNSRecordContent* mastermake(uint16_t qtype, uint16_t qclass, const string& zone);
+-  static std::unique_ptr<DNSRecordContent> makeunique(uint16_t qtype, uint16_t qclass, const string& content);
++  static std::shared_ptr<DNSRecordContent> mastermake(const DNSRecord &dr, PacketReader& pr);
++  static std::shared_ptr<DNSRecordContent> mastermake(const DNSRecord &dr, PacketReader& pr, uint16_t opcode);
++  static std::shared_ptr<DNSRecordContent> mastermake(uint16_t qtype, uint16_t qclass, const string& zone);
+ 
+   virtual std::string getZoneRepresentation(bool noDot=false) const = 0;
+   virtual ~DNSRecordContent() {}
+@@ -198,8 +197,8 @@
+ 
+   void doRecordCheck(const struct DNSRecord&){}
+ 
+-  typedef DNSRecordContent* makerfunc_t(const struct DNSRecord& dr, PacketReader& pr);  
+-  typedef DNSRecordContent* zmakerfunc_t(const string& str);  
++  typedef std::shared_ptr<DNSRecordContent> makerfunc_t(const struct DNSRecord& dr, PacketReader& pr);
++  typedef std::shared_ptr<DNSRecordContent> zmakerfunc_t(const string& str);
+ 
+   static void regist(uint16_t cl, uint16_t ty, makerfunc_t* f, zmakerfunc_t* z, const char* name)
+   {
+diff -ru pdns-recursor-4.0.8.orig/dnsrecords.cc pdns-recursor-4.0.8/dnsrecords.cc
+--- pdns-recursor-4.0.8.orig/dnsrecords.cc	2017-12-11 11:38:52.000000000 +0100
++++ pdns-recursor-4.0.8/dnsrecords.cc	2018-10-10 10:29:54.182145934 +0200
+@@ -386,19 +386,19 @@
+ {
+   regist(1, QType::EUI48, &make, &make, "EUI48");
+ }
+-DNSRecordContent* EUI48RecordContent::make(const DNSRecord &dr, PacketReader& pr)
++std::shared_ptr<DNSRecordContent> EUI48RecordContent::make(const DNSRecord &dr, PacketReader& pr)
+ {
+     if(dr.d_clen!=6)
+       throw MOADNSException("Wrong size for EUI48 record");
+ 
+-    EUI48RecordContent* ret=new EUI48RecordContent();
++    auto ret=std::make_shared<EUI48RecordContent>();
+     pr.copyRecord((uint8_t*) &ret->d_eui48, 6);
+     return ret;
+ }
+-DNSRecordContent* EUI48RecordContent::make(const string& zone)
++std::shared_ptr<DNSRecordContent> EUI48RecordContent::make(const string& zone)
+ {
+     // try to parse
+-    EUI48RecordContent *ret=new EUI48RecordContent();
++    auto ret=std::make_shared<EUI48RecordContent>();
+     // format is 6 hex bytes and dashes    
+     if (sscanf(zone.c_str(), "%2hhx-%2hhx-%2hhx-%2hhx-%2hhx-%2hhx", 
+            ret->d_eui48, ret->d_eui48+1, ret->d_eui48+2, 
+@@ -429,19 +429,19 @@
+ {
+   regist(1, QType::EUI64, &make, &make, "EUI64");
+ }
+-DNSRecordContent* EUI64RecordContent::make(const DNSRecord &dr, PacketReader& pr)
++std::shared_ptr<DNSRecordContent> EUI64RecordContent::make(const DNSRecord &dr, PacketReader& pr)
+ {
+     if(dr.d_clen!=8)
+       throw MOADNSException("Wrong size for EUI64 record");
+ 
+-    EUI64RecordContent* ret=new EUI64RecordContent();
++    auto ret=std::make_shared<EUI64RecordContent>();
+     pr.copyRecord((uint8_t*) &ret->d_eui64, 8);
+     return ret;
+ }
+-DNSRecordContent* EUI64RecordContent::make(const string& zone)
++std::shared_ptr<DNSRecordContent> EUI64RecordContent::make(const string& zone)
+ {
+     // try to parse
+-    EUI64RecordContent *ret=new EUI64RecordContent();
++    auto ret=std::make_shared<EUI64RecordContent>();
+     // format is 8 hex bytes and dashes
+     if (sscanf(zone.c_str(), "%2hhx-%2hhx-%2hhx-%2hhx-%2hhx-%2hhx-%2hhx-%2hhx", 
+            ret->d_eui64, ret->d_eui64+1, ret->d_eui64+2,
+diff -ru pdns-recursor-4.0.8.orig/dnsrecords.hh pdns-recursor-4.0.8/dnsrecords.hh
+--- pdns-recursor-4.0.8.orig/dnsrecords.hh	2017-12-11 11:38:52.000000000 +0100
++++ pdns-recursor-4.0.8/dnsrecords.hh	2018-10-10 10:29:54.182145934 +0200
+@@ -33,8 +33,8 @@
+   RNAME##RecordContent(const string& zoneData);                                                  \
+   static void report(void);                                                                      \
+   static void unreport(void);                                                                    \
+-  static DNSRecordContent* make(const DNSRecord &dr, PacketReader& pr);                          \
+-  static DNSRecordContent* make(const string& zonedata);                                         \
++  static std::shared_ptr<DNSRecordContent> make(const DNSRecord &dr, PacketReader& pr);          \
++  static std::shared_ptr<DNSRecordContent> make(const string& zonedata);                         \
+   string getZoneRepresentation(bool noDot=false) const override;                                 \
+   void toPacket(DNSPacketWriter& pw) override;                                                   \
+   uint16_t getType() const override { return QType::RNAME; }                                   \
+@@ -467,8 +467,8 @@
+   {}
+   NSECRecordContent(const string& content, const string& zone=""); //FIXME400: DNSName& zone?
+ 
+-  static DNSRecordContent* make(const DNSRecord &dr, PacketReader& pr);
+-  static DNSRecordContent* make(const string& content);
++  static std::shared_ptr<DNSRecordContent> make(const DNSRecord &dr, PacketReader& pr);
++  static std::shared_ptr<DNSRecordContent> make(const string& content);
+   string getZoneRepresentation(bool noDot=false) const override;
+   void toPacket(DNSPacketWriter& pw) override;
+   uint16_t getType() const override
+@@ -488,8 +488,8 @@
+   {}
+   NSEC3RecordContent(const string& content, const string& zone=""); //FIXME400: DNSName& zone?
+ 
+-  static DNSRecordContent* make(const DNSRecord &dr, PacketReader& pr);
+-  static DNSRecordContent* make(const string& content);
++  static std::shared_ptr<DNSRecordContent> make(const DNSRecord &dr, PacketReader& pr);
++  static std::shared_ptr<DNSRecordContent> make(const string& content);
+   string getZoneRepresentation(bool noDot=false) const override;
+   void toPacket(DNSPacketWriter& pw) override;
+ 
+@@ -517,8 +517,8 @@
+   {}
+   NSEC3PARAMRecordContent(const string& content, const string& zone=""); // FIXME400: DNSName& zone?
+ 
+-  static DNSRecordContent* make(const DNSRecord &dr, PacketReader& pr);
+-  static DNSRecordContent* make(const string& content);
++  static std::shared_ptr<DNSRecordContent> make(const DNSRecord &dr, PacketReader& pr);
++  static std::shared_ptr<DNSRecordContent> make(const string& content);
+   string getZoneRepresentation(bool noDot=false) const override;
+   void toPacket(DNSPacketWriter& pw) override;
+ 
+@@ -542,8 +542,8 @@
+   {}
+   LOCRecordContent(const string& content, const string& zone="");
+ 
+-  static DNSRecordContent* make(const DNSRecord &dr, PacketReader& pr);
+-  static DNSRecordContent* make(const string& content);
++  static std::shared_ptr<DNSRecordContent> make(const DNSRecord &dr, PacketReader& pr);
++  static std::shared_ptr<DNSRecordContent> make(const string& content);
+   string getZoneRepresentation(bool noDot=false) const override;
+   void toPacket(DNSPacketWriter& pw) override;
+ 
+@@ -566,8 +566,8 @@
+   {}
+   WKSRecordContent(const string& content, const string& zone=""); // FIXME400: DNSName& zone?
+ 
+-  static DNSRecordContent* make(const DNSRecord &dr, PacketReader& pr);
+-  static DNSRecordContent* make(const string& content);
++  static std::shared_ptr<DNSRecordContent> make(const DNSRecord &dr, PacketReader& pr);
++  static std::shared_ptr<DNSRecordContent> make(const string& content);
+   string getZoneRepresentation(bool noDot=false) const override;
+   void toPacket(DNSPacketWriter& pw) override;
+ 
+@@ -581,8 +581,8 @@
+ public:
+   EUI48RecordContent() {};
+   static void report(void);
+-  static DNSRecordContent* make(const DNSRecord &dr, PacketReader& pr);
+-  static DNSRecordContent* make(const string& zone); // FIXME400: DNSName& zone?
++  static std::shared_ptr<DNSRecordContent> make(const DNSRecord &dr, PacketReader& pr);
++  static std::shared_ptr<DNSRecordContent> make(const string& zone); // FIXME400: DNSName& zone?
+   string getZoneRepresentation(bool noDot=false) const override;
+   void toPacket(DNSPacketWriter& pw) override;
+   uint16_t getType() const override { return QType::EUI48; }
+@@ -596,8 +596,8 @@
+ public:
+   EUI64RecordContent() {};
+   static void report(void);
+-  static DNSRecordContent* make(const DNSRecord &dr, PacketReader& pr);
+-  static DNSRecordContent* make(const string& zone); // FIXME400: DNSName& zone?
++  static std::shared_ptr<DNSRecordContent> make(const DNSRecord &dr, PacketReader& pr);
++  static std::shared_ptr<DNSRecordContent> make(const string& zone); // FIXME400: DNSName& zone?
+   string getZoneRepresentation(bool noDot=false) const override;
+   void toPacket(DNSPacketWriter& pw) override;
+   uint16_t getType() const override { return QType::EUI64; }
+@@ -644,9 +644,9 @@
+ };
+ 
+ #define boilerplate(RNAME, RTYPE)                                                                         \
+-RNAME##RecordContent::DNSRecordContent* RNAME##RecordContent::make(const DNSRecord& dr, PacketReader& pr) \
++std::shared_ptr<RNAME##RecordContent::DNSRecordContent> RNAME##RecordContent::make(const DNSRecord& dr, PacketReader& pr) \
+ {                                                                                                  \
+-  return new RNAME##RecordContent(dr, pr);                                                         \
++  return std::make_shared<RNAME##RecordContent>(dr, pr);                                           \
+ }                                                                                                  \
+                                                                                                    \
+ RNAME##RecordContent::RNAME##RecordContent(const DNSRecord& dr, PacketReader& pr)                  \
+@@ -655,9 +655,9 @@
+   xfrPacket(pr);                                                                                   \
+ }                                                                                                  \
+                                                                                                    \
+-RNAME##RecordContent::DNSRecordContent* RNAME##RecordContent::make(const string& zonedata)         \
++std::shared_ptr<RNAME##RecordContent::DNSRecordContent> RNAME##RecordContent::make(const string& zonedata)         \
+ {                                                                                                  \
+-  return new RNAME##RecordContent(zonedata);                                                       \
++  return std::make_shared<RNAME##RecordContent>(zonedata);                                         \
+ }                                                                                                  \
+                                                                                                    \
+ void RNAME##RecordContent::toPacket(DNSPacketWriter& pw)                                           \
+diff -ru pdns-recursor-4.0.8.orig/nsecrecords.cc pdns-recursor-4.0.8/nsecrecords.cc
+--- pdns-recursor-4.0.8.orig/nsecrecords.cc	2017-12-11 11:38:52.000000000 +0100
++++ pdns-recursor-4.0.8/nsecrecords.cc	2018-10-10 10:29:54.182145934 +0200
+@@ -29,9 +29,9 @@
+   regist(1, 47, &make, &make, "NSEC");
+ }
+ 
+-DNSRecordContent* NSECRecordContent::make(const string& content)
++std::shared_ptr<DNSRecordContent> NSECRecordContent::make(const string& content)
+ {
+-  return new NSECRecordContent(content);
++  return std::make_shared<NSECRecordContent>(content);
+ }
+ 
+ NSECRecordContent::NSECRecordContent(const string& content, const string& zone) 
+@@ -81,9 +81,9 @@
+   pw.xfrBlob(tmp);
+ }
+ 
+-NSECRecordContent::DNSRecordContent* NSECRecordContent::make(const DNSRecord &dr, PacketReader& pr) 
++std::shared_ptr<NSECRecordContent::DNSRecordContent> NSECRecordContent::make(const DNSRecord &dr, PacketReader& pr)
+ {
+-  NSECRecordContent* ret=new NSECRecordContent();
++  auto ret=std::make_shared<NSECRecordContent>();
+   pr.xfrName(ret->d_next);
+   string bitmap;
+   pr.xfrBlob(bitmap);
+@@ -136,9 +136,9 @@
+   regist(1, 50, &make, &make, "NSEC3");
+ }
+ 
+-DNSRecordContent* NSEC3RecordContent::make(const string& content)
++std::shared_ptr<DNSRecordContent> NSEC3RecordContent::make(const string& content)
+ {
+-  return new NSEC3RecordContent(content);
++  return std::make_shared<NSEC3RecordContent>(content);
+ }
+ 
+ NSEC3RecordContent::NSEC3RecordContent(const string& content, const string& zone)
+@@ -203,9 +203,9 @@
+   }
+ }
+ 
+-NSEC3RecordContent::DNSRecordContent* NSEC3RecordContent::make(const DNSRecord &dr, PacketReader& pr) 
++std::shared_ptr<NSEC3RecordContent::DNSRecordContent> NSEC3RecordContent::make(const DNSRecord &dr, PacketReader& pr)
+ {
+-  NSEC3RecordContent* ret=new NSEC3RecordContent();
++  auto ret=std::make_shared<NSEC3RecordContent>();
+   pr.xfr8BitInt(ret->d_algorithm);
+   pr.xfr8BitInt(ret->d_flags);
+   pr.xfr16BitInt(ret->d_iterations);
+@@ -273,9 +273,9 @@
+   regist(254, 51, &make, &make, "NSEC3PARAM");
+ }
+ 
+-DNSRecordContent* NSEC3PARAMRecordContent::make(const string& content)
++std::shared_ptr<DNSRecordContent> NSEC3PARAMRecordContent::make(const string& content)
+ {
+-  return new NSEC3PARAMRecordContent(content);
++  return std::make_shared<NSEC3PARAMRecordContent>(content);
+ }
+ 
+ NSEC3PARAMRecordContent::NSEC3PARAMRecordContent(const string& content, const string& zone) 
+@@ -297,9 +297,9 @@
+   pw.xfrBlob(d_salt);
+ }
+ 
+-NSEC3PARAMRecordContent::DNSRecordContent* NSEC3PARAMRecordContent::make(const DNSRecord &dr, PacketReader& pr) 
++std::shared_ptr<NSEC3PARAMRecordContent::DNSRecordContent> NSEC3PARAMRecordContent::make(const DNSRecord &dr, PacketReader& pr)
+ {
+-  NSEC3PARAMRecordContent* ret=new NSEC3PARAMRecordContent();
++  auto ret=std::make_shared<NSEC3PARAMRecordContent>();
+   pr.xfr8BitInt(ret->d_algorithm); 
+         pr.xfr8BitInt(ret->d_flags); 
+         pr.xfr16BitInt(ret->d_iterations); 
+diff -ru pdns-recursor-4.0.8.orig/rec-lua-conf.cc pdns-recursor-4.0.8/rec-lua-conf.cc
+--- pdns-recursor-4.0.8.orig/rec-lua-conf.cc	2017-12-11 11:38:52.000000000 +0100
++++ pdns-recursor-4.0.8/rec-lua-conf.cc	2018-10-10 10:29:54.182145934 +0200
+@@ -35,7 +35,7 @@
+ LuaConfigItems::LuaConfigItems()
+ {
+   for (const auto &dsRecord : rootDSs) {
+-    auto ds=unique_ptr<DSRecordContent>(dynamic_cast<DSRecordContent*>(DSRecordContent::make(dsRecord)));
++    auto ds=std::dynamic_pointer_cast<DSRecordContent>(DSRecordContent::make(dsRecord));
+     dsAnchors[DNSName(".")].insert(*ds);
+   }
+ }
+@@ -240,7 +240,7 @@
+ 
+   Lua.writeFunction("addDS", [&lci](const std::string& who, const std::string& what) {
+       DNSName zone(who);
+-      auto ds = unique_ptr<DSRecordContent>(dynamic_cast<DSRecordContent*>(DSRecordContent::make(what)));
++      auto ds=std::dynamic_pointer_cast<DSRecordContent>(DSRecordContent::make(what));
+       lci.dsAnchors[zone].insert(*ds);
+   });
+ 
+diff -ru pdns-recursor-4.0.8.orig/rec_channel_rec.cc pdns-recursor-4.0.8/rec_channel_rec.cc
+--- pdns-recursor-4.0.8.orig/rec_channel_rec.cc	2017-12-11 11:38:52.000000000 +0100
++++ pdns-recursor-4.0.8/rec_channel_rec.cc	2018-10-10 10:29:54.182145934 +0200
+@@ -490,7 +490,7 @@
+   try {
+     L<<Logger::Warning<<"Adding Trust Anchor for "<<who<<" with data '"<<what<<"', requested via control channel";
+     g_luaconfs.modify([who, what](LuaConfigItems& lci) {
+-      auto ds = unique_ptr<DSRecordContent>(dynamic_cast<DSRecordContent*>(DSRecordContent::make(what)));
++      auto ds=std::dynamic_pointer_cast<DSRecordContent>(DSRecordContent::make(what));
+       lci.dsAnchors[who].insert(*ds);
+       });
+     broadcastAccFunction<uint64_t>(boost::bind(pleaseWipePacketCache, who, true));
+diff -ru pdns-recursor-4.0.8.orig/sillyrecords.cc pdns-recursor-4.0.8/sillyrecords.cc
+--- pdns-recursor-4.0.8.orig/sillyrecords.cc	2017-12-11 11:38:52.000000000 +0100
++++ pdns-recursor-4.0.8/sillyrecords.cc	2018-10-10 10:29:54.182145934 +0200
+@@ -159,9 +159,9 @@
+   regist(254, QType::LOC, &make, &make, "LOC");
+ }
+ 
+-DNSRecordContent* LOCRecordContent::make(const string& content)
++std::shared_ptr<DNSRecordContent> LOCRecordContent::make(const string& content)
+ {
+-  return new LOCRecordContent(content);
++  return std::make_shared<LOCRecordContent>(content);
+ }
+ 
+ 
+@@ -177,9 +177,9 @@
+   pw.xfr32BitInt(d_altitude);
+ }
+ 
+-LOCRecordContent::DNSRecordContent* LOCRecordContent::make(const DNSRecord &dr, PacketReader& pr) 
++std::shared_ptr<LOCRecordContent::DNSRecordContent> LOCRecordContent::make(const DNSRecord &dr, PacketReader& pr) 
+ {
+-  LOCRecordContent* ret=new LOCRecordContent();
++  auto ret=std::make_shared<LOCRecordContent>();
+   pr.xfr8BitInt(ret->d_version);
+   pr.xfr8BitInt(ret->d_size);
+   pr.xfr8BitInt(ret->d_horizpre);
diff -Nru pdns-recursor-4.0.4/debian/patches/CVE-2018-14626-rec-4.0.8.patch pdns-recursor-4.0.4/debian/patches/CVE-2018-14626-rec-4.0.8.patch
--- pdns-recursor-4.0.4/debian/patches/CVE-2018-14626-rec-4.0.8.patch	1970-01-01 00:00:00.000000000 +0000
+++ pdns-recursor-4.0.4/debian/patches/CVE-2018-14626-rec-4.0.8.patch	2018-11-10 16:05:33.000000000 +0000
@@ -0,0 +1,238 @@
+diff -ru pdns-recursor-4.0.8.orig/pdns_recursor.cc pdns-recursor-4.0.8/pdns_recursor.cc
+--- pdns-recursor-4.0.8.orig/pdns_recursor.cc	2017-12-11 11:38:52.000000000 +0100
++++ pdns-recursor-4.0.8/pdns_recursor.cc	2018-10-09 17:14:58.052450425 +0200
+@@ -1134,7 +1134,7 @@
+       if(sendmsg(dc->d_socket, &msgh, 0) < 0 && g_logCommonErrors) 
+         L<<Logger::Warning<<"Sending UDP reply to client "<<dc->d_remote.toStringWithPort()<<" failed with: "<<strerror(errno)<<endl;
+       if(!SyncRes::s_nopacketcache && !variableAnswer && !sr.wasVariable() ) {
+-        t_packetCache->insertResponsePacket(dc->d_tag, dc->d_mdp.d_qname, dc->d_mdp.d_qtype, dc->d_query,
++        t_packetCache->insertResponsePacket(dc->d_tag, dc->d_mdp.d_qname, dc->d_mdp.d_qtype, dc->d_mdp.d_qclass, dc->d_query,
+                                             string((const char*)&*packet.begin(), packet.size()),
+                                             g_now.tv_sec,
+                                             pw.getHeader()->rcode == RCode::ServFail ? SyncRes::s_packetcacheservfailttl :
+diff -ru pdns-recursor-4.0.8.orig/recpacketcache.cc pdns-recursor-4.0.8/recpacketcache.cc
+--- pdns-recursor-4.0.8.orig/recpacketcache.cc	2017-12-11 11:38:52.000000000 +0100
++++ pdns-recursor-4.0.8/recpacketcache.cc	2018-10-09 17:08:20.176479437 +0200
+@@ -42,17 +42,59 @@
+   return count;
+ }
+ 
++static bool queryHeaderMatches(const std::string& cachedQuery, const std::string& query)
++{
++  if (cachedQuery.size() != query.size()) {
++    return false;
++  }
++
++  return (cachedQuery.compare(/* skip the ID */ 2, sizeof(dnsheader) - 2, query, 2, sizeof(dnsheader) - 2) == 0);
++}
++
++bool RecursorPacketCache::queryMatches(const std::string& cachedQuery, const std::string& query, const DNSName& qname, uint16_t ecsBegin, uint16_t ecsEnd)
++{
++  if (!queryHeaderMatches(cachedQuery, query)) {
++    return false;
++  }
++
++  size_t pos = sizeof(dnsheader) + qname.wirelength();
++
++  if (ecsBegin != 0 && ecsBegin >= pos && ecsEnd > ecsBegin) {
++    if (cachedQuery.compare(pos, ecsBegin - pos, query, pos, ecsBegin - pos) != 0) {
++      return false;
++    }
++
++    if (cachedQuery.compare(ecsEnd, cachedQuery.size() - ecsEnd, query, ecsEnd, query.size() - ecsEnd) != 0) {
++      return false;
++    }
++  }
++  else {
++    if (cachedQuery.compare(pos, cachedQuery.size() - pos, query, pos, query.size() - pos) != 0) {
++      return false;
++    }
++  }
++
++  return true;
++}
++
+ // one day this function could be really fast by doing only a case insensitive compare
+-static bool qrMatch(const std::string& query, const std::string& response)
++bool RecursorPacketCache::qrMatch(const packetCache_t::index<HashTag>::type::iterator& iter, const std::string& queryPacket, uint16_t ecsBegin, uint16_t ecsEnd)
+ {
+-  uint16_t rqtype, rqclass, qqtype, qqclass;
+-  DNSName queryname(query.c_str(), query.length(), sizeof(dnsheader), false, &qqtype, &qqclass, 0);
+-  DNSName respname(response.c_str(), response.length(), sizeof(dnsheader), false, &rqtype, &rqclass, 0);
+-  // this ignores checking on the EDNS subnet flags! 
+-  return queryname==respname && rqtype == qqtype && rqclass == qqclass;
++  uint16_t qqtype, qqclass;
++  DNSName queryname(queryPacket.c_str(), queryPacket.length(), sizeof(dnsheader), false, &qqtype, &qqclass, 0);
++   // this ignores checking on the EDNS subnet flags!
++  if (qqtype != iter->d_type || qqclass != iter->d_class || queryname != iter->d_name) {
++    return false;
++  }
++
++  if (iter->d_ecsBegin != ecsBegin || iter->d_ecsEnd != ecsEnd) {
++    return false;
++  }
++
++  return queryMatches(iter->d_query, queryPacket, queryname, ecsBegin, ecsEnd);
+ }
+ 
+-uint32_t RecursorPacketCache::canHashPacket(const std::string& origPacket)
++uint32_t RecursorPacketCache::canHashPacket(const std::string& origPacket, uint16_t* ecsBegin, uint16_t* ecsEnd)
+ {
+   //  return 42; // should still work if you do this!
+   uint32_t ret=0;
+@@ -68,6 +110,10 @@
+   struct dnsheader* dh = (struct dnsheader*)origPacket.c_str();
+   const char* skipBegin = p;
+   const char* skipEnd = p;
++  if (ecsBegin != nullptr && ecsEnd != nullptr) {
++    *ecsBegin = 0;
++    *ecsEnd = 0;
++  }
+   /* we need at least 1 (final empty label) + 2 (QTYPE) + 2 (QCLASS)
+      + OPT root label (1), type (2), class (2) and ttl (4)
+      + the OPT RR rdlen (2)
+@@ -82,6 +128,10 @@
+     if (res == 0) {
+       skipBegin = optionBegin;
+       skipEnd = optionBegin + optionLen;
++      if (ecsBegin != nullptr && ecsEnd != nullptr) {
++        *ecsBegin = optionBegin - origPacket.c_str();
++        *ecsEnd = *ecsBegin + optionLen;
++      }
+     }
+   }
+   if (skipBegin > p) {
+@@ -96,15 +146,11 @@
+ }
+ 
+ bool RecursorPacketCache::getResponsePacket(unsigned int tag, const std::string& queryPacket, time_t now,
+-                                            std::string* responsePacket, uint32_t* age)
+-{
+-  return getResponsePacket(tag, queryPacket, now, responsePacket, age, nullptr);
+-}
+-
+-bool RecursorPacketCache::getResponsePacket(unsigned int tag, const std::string& queryPacket, time_t now,
+                                             std::string* responsePacket, uint32_t* age, RecProtoBufMessage* protobufMessage)
+ {
+-  uint32_t h = canHashPacket(queryPacket);
++  uint16_t ecsBegin = 0;
++  uint16_t ecsEnd = 0;
++  uint32_t h = canHashPacket(queryPacket, &ecsBegin, &ecsEnd);
+   auto& idx = d_packetCache.get<HashTag>();
+   auto range = idx.equal_range(tie(tag,h)); 
+ 
+@@ -115,8 +161,9 @@
+     
+   for(auto iter = range.first ; iter != range.second ; ++ iter) {
+     // the possibility is VERY real that we get hits that are not right - birthday paradox
+-    if(!qrMatch(queryPacket, iter->d_packet))
++    if(!qrMatch(iter, queryPacket, ecsBegin, ecsEnd)) {
+       continue;
++    }
+     if((uint32_t)now < iter->d_ttd) { // it is right, it is fresh!
+       *age = now - iter->d_creation;
+       *responsePacket = iter->d_packet;
+@@ -153,27 +200,28 @@
+ }
+ 
+ 
+-void RecursorPacketCache::insertResponsePacket(unsigned int tag, const DNSName& qname, uint16_t qtype, const std::string& queryPacket, const std::string& responsePacket, time_t now, uint32_t ttl)
++void RecursorPacketCache::insertResponsePacket(unsigned int tag, const DNSName& qname, uint16_t qtype, uint16_t qclass, const std::string& queryPacket, const std::string& responsePacket, time_t now, uint32_t ttl, const RecProtoBufMessage* protobufMessage)
+ {
+-  insertResponsePacket(tag, qname, qtype, queryPacket, responsePacket, now, ttl, nullptr);
+-}
+-
+-void RecursorPacketCache::insertResponsePacket(unsigned int tag, const DNSName& qname, uint16_t qtype, const std::string& queryPacket, const std::string& responsePacket, time_t now, uint32_t ttl, const RecProtoBufMessage* protobufMessage)
+-{
+-  auto qhash = canHashPacket(queryPacket);
++  uint16_t ecsBegin = 0;
++  uint16_t ecsEnd = 0;
++  auto qhash = canHashPacket(queryPacket, &ecsBegin, &ecsEnd);
+   auto& idx = d_packetCache.get<HashTag>();
+   auto range = idx.equal_range(tie(tag,qhash));
+   auto iter = range.first;
+ 
+   for( ; iter != range.second ; ++iter)  {
+-    if(iter->d_type != qtype)
++    if(iter->d_type != qtype || iter->d_class != qclass) {
+       continue;
++    }
+     // this only happens on insert which is relatively rare and does not need to be super fast
+     DNSName respname(iter->d_packet.c_str(), iter->d_packet.length(), sizeof(dnsheader), false, 0, 0, 0);
+     if(qname != respname)
+       continue;
+     moveCacheItemToBack(d_packetCache, iter);
+     iter->d_packet = responsePacket;
++    iter->d_query = queryPacket;
++    iter->d_ecsBegin = ecsBegin;
++    iter->d_ecsEnd = ecsEnd;
+     iter->d_ttd = now + ttl;
+     iter->d_creation = now;
+ #ifdef HAVE_PROTOBUF
+@@ -188,9 +236,13 @@
+   if(iter == range.second) { // nothing to refresh
+     struct Entry e;
+     e.d_packet = responsePacket;
++    e.d_query = queryPacket;
+     e.d_name = qname;
+     e.d_qhash = qhash;
+     e.d_type = qtype;
++    e.d_class = qclass;
++    e.d_ecsBegin = ecsBegin;
++    e.d_ecsEnd = ecsEnd;
+     e.d_ttd = now+ttl;
+     e.d_creation = now;
+     e.d_tag = tag;
+diff -ru pdns-recursor-4.0.8.orig/recpacketcache.hh pdns-recursor-4.0.8/recpacketcache.hh
+--- pdns-recursor-4.0.8.orig/recpacketcache.hh	2017-12-11 11:38:52.000000000 +0100
++++ pdns-recursor-4.0.8/recpacketcache.hh	2018-10-09 17:14:58.052450425 +0200
+@@ -50,10 +50,8 @@
+ {
+ public:
+   RecursorPacketCache();
+-  bool getResponsePacket(unsigned int tag, const std::string& queryPacket, time_t now, std::string* responsePacket, uint32_t* age);
+-  void insertResponsePacket(unsigned int tag, const DNSName& qname, uint16_t qtype, const std::string& queryPacket, const std::string& responsePacket, time_t now, uint32_t ttd);
+   bool getResponsePacket(unsigned int tag, const std::string& queryPacket, time_t now, std::string* responsePacket, uint32_t* age, RecProtoBufMessage* protobufMessage);
+-  void insertResponsePacket(unsigned int tag, const DNSName& qname, uint16_t qtype, const std::string& queryPacket, const std::string& responsePacket, time_t now, uint32_t ttd, const RecProtoBufMessage* protobufMessage);
++  void insertResponsePacket(unsigned int tag, const DNSName& qname, uint16_t qtype, uint16_t qclass, const std::string& queryPacket, const std::string& responsePacket, time_t now, uint32_t ttd, const RecProtoBufMessage* protobufMessage);
+   void doPruneTo(unsigned int maxSize=250000);
+   uint64_t doDump(int fd);
+   int doWipePacketCache(const DNSName& name, uint16_t qtype=0xffff, bool subtree=false);
+@@ -72,12 +70,16 @@
+     mutable uint32_t d_creation; // so we can 'age' our packets
+     DNSName d_name;
+     uint16_t d_type;
++    uint16_t d_class;
+     mutable std::string d_packet; // "I know what I am doing"
++    mutable std::string d_query;
+ #ifdef HAVE_PROTOBUF
+     mutable RecProtoBufMessage d_protobufMessage;
+ #endif
+     uint32_t d_qhash;
+     uint32_t d_tag;
++    mutable uint16_t d_ecsBegin;
++    mutable uint16_t d_ecsEnd;
+     inline bool operator<(const struct Entry& rhs) const;
+     
+     uint32_t getTTD() const
+@@ -85,7 +87,7 @@
+       return d_ttd;
+     }
+   };
+-  uint32_t canHashPacket(const std::string& origPacket);
++
+   typedef multi_index_container<
+     Entry,
+     indexed_by  <
+@@ -96,6 +98,11 @@
+   > packetCache_t;
+   
+   packetCache_t d_packetCache;
++
++public:
++  static bool queryMatches(const std::string& cachedQuery, const std::string& query, const DNSName& qname, uint16_t ecsBegin, uint16_t ecsEnd);
++  static bool qrMatch(const packetCache_t::index<HashTag>::type::iterator& iter, const std::string& queryPacket, uint16_t ecsBegin, uint16_t ecsEnd);
++  static uint32_t canHashPacket(const std::string& origPacket, uint16_t* ecsBegin, uint16_t* ecsEnd);
+ };
+ 
+ #endif
diff -Nru pdns-recursor-4.0.4/debian/patches/CVE-2018-14644-rec-4.0.4.patch pdns-recursor-4.0.4/debian/patches/CVE-2018-14644-rec-4.0.4.patch
--- pdns-recursor-4.0.4/debian/patches/CVE-2018-14644-rec-4.0.4.patch	1970-01-01 00:00:00.000000000 +0000
+++ pdns-recursor-4.0.4/debian/patches/CVE-2018-14644-rec-4.0.4.patch	2018-11-10 16:05:33.000000000 +0000
@@ -0,0 +1,25 @@
+From a61af1fcec7f9c5fb94a8cdba7dc0ac1f3e4791c Mon Sep 17 00:00:00 2001
+From: Chris Hofstaedtler <chris.hofstaedtler@deduktiva.com>
+Date: Sat, 10 Nov 2018 17:02:30 +0100
+Subject: [PATCH] rec: Refuse queries for all meta-types
+
+Backport be44629dd2ef0f6805826fb6794f7a996c34aab4 from 4.1.x to 4.0.x
+---
+ syncres.cc | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/syncres.cc b/syncres.cc
+index f121cfac2d..f8b39ee8fb 100644
+--- a/syncres.cc
++++ b/syncres.cc
+@@ -128,7 +128,9 @@ int SyncRes::beginResolve(const DNSName &qname, const QType &qtype, uint16_t qcl
+   d_wasVariable=false;
+   d_wasOutOfBand=false;
+ 
+-  if( (qtype.getCode() == QType::AXFR))
++  auto qtypeCode = qtype.getCode();
++  /* rfc6895 section 3.1 */
++  if ((qtypeCode >= 128 && qtypeCode <= 254) || qtypeCode == QType::RRSIG || qtypeCode == QType::NSEC3 || qtypeCode == QType::OPT || qtypeCode == 65535)
+     return -1;
+ 
+   static const DNSName arpa("1.0.0.127.in-addr.arpa."), localhost("localhost."), 
diff -Nru pdns-recursor-4.0.4/debian/patches/series pdns-recursor-4.0.4/debian/patches/series
--- pdns-recursor-4.0.4/debian/patches/series	2017-12-07 12:40:02.000000000 +0000
+++ pdns-recursor-4.0.4/debian/patches/series	2018-11-10 16:05:33.000000000 +0000
@@ -4,3 +4,6 @@
 CVE-2017-15093-4.0.6.patch
 CVE-2017-15094-4.0.6.patch
 CVE-2017-15120.patch
+CVE-2018-10851-rec-4.0.8.patch
+CVE-2018-14626-rec-4.0.8.patch
+CVE-2018-14644-rec-4.0.4.patch

--- End Message ---
--- Begin Message ---
Source: fcitx5
Source-Version: 0~20181128+ds1-1~exp1

We believe that the bug you reported is fixed in the latest version of
fcitx5, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 915667@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Boyuan Yang <byang@debian.org> (supplier of updated fcitx5 package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Format: 1.8
Date: Thu, 06 Dec 2018 14:02:04 -0500
Source: fcitx5
Binary: fcitx5 fcitx5-data fcitx5-module-dbus fcitx5-module-ibus fcitx5-module-kimpanel fcitx5-module-wayland fcitx5-module-xorg fcitx5-module-quickphrase fcitx5-modules fcitx5-modules-dev libfcitx5config-dev libfcitx5config5 libfcitx5core-dev libfcitx5core5 libfcitx5utils-dev libfcitx5utils1
Architecture: source all amd64
Version: 0~20181128+ds1-1~exp1
Distribution: experimental
Urgency: medium
Maintainer: Debian Input Method Team <debian-input-method@lists.debian.org>
Changed-By: Boyuan Yang <byang@debian.org>
Description:
 fcitx5     - Next generation of Fcitx Input Method Framework
 fcitx5-data - Fcitx Input Method Framework v5 (common data files)
 fcitx5-module-dbus - Fcitx Input Method Framework v5 (dbus module)
 fcitx5-module-ibus - Fcitx Input Method Framework v5 (ibus module)
 fcitx5-module-kimpanel - Fcitx Input Method Framework v5 (kimpanel module)
 fcitx5-module-quickphrase - Fcitx Input Method Framework v5 (quickphrase module)
 fcitx5-module-wayland - Fcitx Input Method Framework v5 (wayland modules)
 fcitx5-module-xorg - Fcitx Input Method Framework v5 (xorg modules)
 fcitx5-modules - Fcitx Input Method Framework v5 (core modules)
 fcitx5-modules-dev - Fcitx Input Method Framework v5 (input modules dev files)
 libfcitx5config-dev - Fcitx Input Method Framework v5 (config library dev files)
 libfcitx5config5 - Fcitx Input Method Framework v5 (config library)
 libfcitx5core-dev - Fcitx Input Method Framework v5 (core library dev files)
 libfcitx5core5 - Fcitx Input Method Framework v5 (core library)
 libfcitx5utils-dev - Fcitx Input Method Framework v5 (utils library dev files)
 libfcitx5utils1 - Fcitx Input Method Framework v5 (utils library)
Closes: 915667
Changes:
 fcitx5 (0~20181128+ds1-1~exp1) experimental; urgency=medium
 .
   * Initial release. (Closes: #915667)
Checksums-Sha1:
 b2228e4c883ccf2ad05ec36a2d81d11d710edc27 3639 fcitx5_0~20181128+ds1-1~exp1.dsc
 9ea80d4028546ffb81471d3988fd3515f9dd50c8 2326487 fcitx5_0~20181128+ds1.orig.tar.gz
 91483bf3d3e039cf19c285eaf8ff5dd942f4fca5 5004 fcitx5_0~20181128+ds1-1~exp1.debian.tar.xz
 66147d4f5ce8c60d6109deacb7eaf3ca48d0db56 1364108 fcitx5-data_0~20181128+ds1-1~exp1_all.deb
 35836f9b021cf40bbeb78bf4cd27091534e8bb0c 1132064 fcitx5-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 83106016d41b462f20f1d40f7e1159502f4ea0ce 1514460 fcitx5-module-dbus-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 8869fa8a768e89975ae597dc4d00654c7ba28ea3 61024 fcitx5-module-dbus_0~20181128+ds1-1~exp1_amd64.deb
 99030f1116ad1b88defc987781cd5c0d4eee599a 819648 fcitx5-module-ibus-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 a8de5c7dba7a500322b4a547ed41d96828446666 40668 fcitx5-module-ibus_0~20181128+ds1-1~exp1_amd64.deb
 11769425e3d4093aad5ed37a44dd58675479bd1e 413588 fcitx5-module-kimpanel-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 a276f17b0b80cb997a1028ee6fe225bcd764da6a 25884 fcitx5-module-kimpanel_0~20181128+ds1-1~exp1_amd64.deb
 2164c8caa20868f0b582848311bc9105894d87b2 376768 fcitx5-module-quickphrase-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 ff42a34a176bc222ef50e47c85eff9ba9163a6ce 38112 fcitx5-module-quickphrase_0~20181128+ds1-1~exp1_amd64.deb
 c03d7034fbe54f5914e3eea259284afb64d939fa 3426064 fcitx5-module-wayland-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 a374dc7416fb3978ab966489c7eeff754b258654 73320 fcitx5-module-wayland_0~20181128+ds1-1~exp1_amd64.deb
 861e184b27c208810dd1d2d11e93a838c0111cde 1374800 fcitx5-module-xorg-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 c36416e30e477f162c8ced7e7d59b79720bd65c0 55204 fcitx5-module-xorg_0~20181128+ds1-1~exp1_amd64.deb
 19f3748122986ad2030568fb6be2232fb33fb04d 7178264 fcitx5-modules-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 70af49d76768a2e63e944d77bd8716847ad2661b 7808 fcitx5-modules-dev_0~20181128+ds1-1~exp1_amd64.deb
 a0320a3c4286e8dc7f3d240fe8284da3500aa6a6 240788 fcitx5-modules_0~20181128+ds1-1~exp1_amd64.deb
 e3af2e8e585bd8bad59a166a792898d1c3cf4e7c 21695 fcitx5_0~20181128+ds1-1~exp1_amd64.buildinfo
 0a44a57c9c1558da83292faf9d581af7097498be 65388 fcitx5_0~20181128+ds1-1~exp1_amd64.deb
 609e61258dd19dff650bcf4b132ec5322b8bebeb 11796 libfcitx5config-dev_0~20181128+ds1-1~exp1_amd64.deb
 b03359f226cab533c66b8d955200c9dc956c6a06 956428 libfcitx5config5-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 3ea4e77fa3997cf4af187db93f62148bef77e003 45544 libfcitx5config5_0~20181128+ds1-1~exp1_amd64.deb
 335725039d60df138aedd8eb17438deaa152640d 18784 libfcitx5core-dev_0~20181128+ds1-1~exp1_amd64.deb
 d0f360ef21ebec13032dcde90ecb85bff7d04929 4742932 libfcitx5core5-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 c31fd736844e8926a8507cb9482a322a8ddb842b 195888 libfcitx5core5_0~20181128+ds1-1~exp1_amd64.deb
 44d024b4731efd147a74860a53fb1815db806352 58760 libfcitx5utils-dev_0~20181128+ds1-1~exp1_amd64.deb
 dd2af704f6de4d067f2904a33b1df80e08626b40 2515552 libfcitx5utils1-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 5d18004b23b4b012b37f3f72b6ec308cef712e38 138752 libfcitx5utils1_0~20181128+ds1-1~exp1_amd64.deb
Checksums-Sha256:
 c2283804dc78d67e78ee04cca95dc1c5f76034a360ccdc0bfe9abc760cddabb2 3639 fcitx5_0~20181128+ds1-1~exp1.dsc
 4ba7d8240192b9273e242fca9385e8749f52e04794def04b00da28295568dc99 2326487 fcitx5_0~20181128+ds1.orig.tar.gz
 6d89bf2b92292300c1080dbc7b3a1e94e1f5e60a1dfd9e93aae05ce0f2b13a43 5004 fcitx5_0~20181128+ds1-1~exp1.debian.tar.xz
 41cd372cdea18a7d802bb56e75425394a72b1763033d138d415ec6dba0851c19 1364108 fcitx5-data_0~20181128+ds1-1~exp1_all.deb
 4fb6e01da0dcef20f729354b1a76e4f607b7f7e2fc7302b6778ed42d38c3151a 1132064 fcitx5-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 5cf8ae19b0e3fa28fa4b2249dcb95a71171834c31fb25227f27109bcf03388e1 1514460 fcitx5-module-dbus-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 4b02e94a29301e779631042da7b65460b084ca4506cb2ac52c2b9fd35bea226e 61024 fcitx5-module-dbus_0~20181128+ds1-1~exp1_amd64.deb
 fc7fe180598aa51b36e33564e8e090505d9ebe61b9c29ac2b8be221aa062cad5 819648 fcitx5-module-ibus-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 a3fd1da72931cae39f0c52d6fc75140785cafcbd329b45163821d5e0d8b50eae 40668 fcitx5-module-ibus_0~20181128+ds1-1~exp1_amd64.deb
 14426602d8546ac1466e592feed208ca504651f965f6baedad18ea7de28a8b41 413588 fcitx5-module-kimpanel-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 a5a6386602bac38bba913eb2b70d36ea29985fe6f005e771bd957a182aa1ca5d 25884 fcitx5-module-kimpanel_0~20181128+ds1-1~exp1_amd64.deb
 d502526189d2b7ec8bbde3252310f253bf4d82e2498951f42deeca60057a9af3 376768 fcitx5-module-quickphrase-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 d23b804fff59804a144abc1d8d5a95abea7bd557a0217abec556cb7d30607921 38112 fcitx5-module-quickphrase_0~20181128+ds1-1~exp1_amd64.deb
 2e15a4894a972d3dd9590b4a966398824e2cc3eb87c8f86857e835f82539574f 3426064 fcitx5-module-wayland-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 54e7e0f139278b1de12930982bb345b999478ece3f5b5fef7bd50518744b5ec9 73320 fcitx5-module-wayland_0~20181128+ds1-1~exp1_amd64.deb
 389f0adba6caf1c59c4a4224d82b5a893eb62fda452458fb3c9fc9c5d163a39c 1374800 fcitx5-module-xorg-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 cd9c4e44d3302201a241a16ad064b4ced2f6b0a18559aec7def0cd2d1aba06d2 55204 fcitx5-module-xorg_0~20181128+ds1-1~exp1_amd64.deb
 826619d595e025451a464d86338daca5c1e61af8e5dcd0253a153fb2e4c59793 7178264 fcitx5-modules-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 a099b7d1e5227106e0a3663daf698531fc0101f715d967c644049cac1dace47e 7808 fcitx5-modules-dev_0~20181128+ds1-1~exp1_amd64.deb
 fa0a2299ef6e59ac0e6f0034fe0b1385acf85ba1f4b3b62d25beda76147ef5e8 240788 fcitx5-modules_0~20181128+ds1-1~exp1_amd64.deb
 f1b2dcb2ed3873270e35b2461966187bddf9faf53bef10f74db274ff244aa712 21695 fcitx5_0~20181128+ds1-1~exp1_amd64.buildinfo
 1e7651a8b98c6fb57b2cd96b24d10fcc87ab478476f8b65f68780fcd4ae4e1af 65388 fcitx5_0~20181128+ds1-1~exp1_amd64.deb
 0b03b141d7c9ed2d6c8d2b8e16ad5f1b01aaf4485846e7a554d08d0f6ebaea21 11796 libfcitx5config-dev_0~20181128+ds1-1~exp1_amd64.deb
 b32a4008e61c822e663e487e6271e95876b0b1ced3bbfd486d6f7be6302428c2 956428 libfcitx5config5-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 c36ea1056efa0141393462c648d2a1993a4143666aef801d9b504a902dfc35f3 45544 libfcitx5config5_0~20181128+ds1-1~exp1_amd64.deb
 6f106c791134b16871774d7868b5f2707a5a91afccbe9a54e954efb15eada379 18784 libfcitx5core-dev_0~20181128+ds1-1~exp1_amd64.deb
 924d728459da5eaf3953f0934b9621ad92b12f327059ef7069f9c3cad214d3ec 4742932 libfcitx5core5-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 a682429b3e21a0062808b7aec5a5027f27b11f723cfda385146d96cd1649192c 195888 libfcitx5core5_0~20181128+ds1-1~exp1_amd64.deb
 91a33582a1da3e6e0dc11fcfbad2823d3ffc2da33b7d101069aaa954120d536c 58760 libfcitx5utils-dev_0~20181128+ds1-1~exp1_amd64.deb
 bad6ab2bb69ce54aadc6aa4e299dae3216f668dd6aac0e3cac70b1b276027369 2515552 libfcitx5utils1-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 2408ba9181dbd71bec369062197e8d7a9559086c2b52c68bcea79f276ed01d23 138752 libfcitx5utils1_0~20181128+ds1-1~exp1_amd64.deb
Files:
 c9d3d724e85691dcb116ac246c47fa43 3639 utils optional fcitx5_0~20181128+ds1-1~exp1.dsc
 b8f8098907263c4d94f7aa8cd9c968e7 2326487 utils optional fcitx5_0~20181128+ds1.orig.tar.gz
 0fd2bfff89d97b44216b3db6f4348aa2 5004 utils optional fcitx5_0~20181128+ds1-1~exp1.debian.tar.xz
 36855ca54baf77337aa4f91040792981 1364108 utils optional fcitx5-data_0~20181128+ds1-1~exp1_all.deb
 d62147cde7e6583cc8ccd8b5c982fa40 1132064 debug optional fcitx5-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 0716fcbe620950b91d421c87ac6725f0 1514460 debug optional fcitx5-module-dbus-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 a0abfbd545bcc0f7ee49ea56dbaec32d 61024 utils optional fcitx5-module-dbus_0~20181128+ds1-1~exp1_amd64.deb
 0cb2621b8dcd23b4f541f6129c105870 819648 debug optional fcitx5-module-ibus-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 28531ecfa33f03732c892f3f0d11e165 40668 utils optional fcitx5-module-ibus_0~20181128+ds1-1~exp1_amd64.deb
 fac7d15658aea229c17ee44e4a6bf0b8 413588 debug optional fcitx5-module-kimpanel-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 ff82a43bc029964c8cf5757b53f89ea9 25884 utils optional fcitx5-module-kimpanel_0~20181128+ds1-1~exp1_amd64.deb
 b7edcb25bd09cb1d2e17e13c6a5e14a2 376768 debug optional fcitx5-module-quickphrase-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 367a7f21a18eb3133c3da71f460f46f9 38112 utils optional fcitx5-module-quickphrase_0~20181128+ds1-1~exp1_amd64.deb
 b9df07b83b770ad0224aac1ae613c7ed 3426064 debug optional fcitx5-module-wayland-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 370c632fe309992ef1bc718e9c587cf0 73320 utils optional fcitx5-module-wayland_0~20181128+ds1-1~exp1_amd64.deb
 60d9302252727f0485993ba410d916ab 1374800 debug optional fcitx5-module-xorg-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 151c23e10048cf1a53e95a9ac2a97012 55204 utils optional fcitx5-module-xorg_0~20181128+ds1-1~exp1_amd64.deb
 1983631b335a009e81830cf52954143b 7178264 debug optional fcitx5-modules-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 967253e20ac97cfe5abba9b4df48c448 7808 libdevel optional fcitx5-modules-dev_0~20181128+ds1-1~exp1_amd64.deb
 de56de6d525307ff34fa53fcf5a3e51e 240788 utils optional fcitx5-modules_0~20181128+ds1-1~exp1_amd64.deb
 226be8cfb6b5609efc32c033c8f963a9 21695 utils optional fcitx5_0~20181128+ds1-1~exp1_amd64.buildinfo
 7d159295464de3811b42f977615c5559 65388 utils optional fcitx5_0~20181128+ds1-1~exp1_amd64.deb
 51bf4c9556e7661bb933b11c519f21c1 11796 libdevel optional libfcitx5config-dev_0~20181128+ds1-1~exp1_amd64.deb
 b4d765c1ab6a875f36a3d8d7b2f08f77 956428 debug optional libfcitx5config5-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 d8cccfe0cccc21bbe2782c542d18a741 45544 libs optional libfcitx5config5_0~20181128+ds1-1~exp1_amd64.deb
 27277f82fe08215d7ec5c7586aba85e8 18784 libdevel optional libfcitx5core-dev_0~20181128+ds1-1~exp1_amd64.deb
 2fd06b9448934b2db569a5ceced289de 4742932 debug optional libfcitx5core5-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 055ba81a36fe144a6debd8904559fa26 195888 libs optional libfcitx5core5_0~20181128+ds1-1~exp1_amd64.deb
 d8ef8b8f2d6ecf4be61014dee5ffba88 58760 libdevel optional libfcitx5utils-dev_0~20181128+ds1-1~exp1_amd64.deb
 723f6c28825aab6c097bb244b3e66b4d 2515552 debug optional libfcitx5utils1-dbgsym_0~20181128+ds1-1~exp1_amd64.deb
 a81ca0ecbcb6ea6db8ff4506d8a55825 138752 libs optional libfcitx5utils1_0~20181128+ds1-1~exp1_amd64.deb

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEfncpR22H1vEdkazLwpPntGGCWs4FAlwJhNAACgkQwpPntGGC
Ws7eiA//Xe0UH9+hFksaY5CPTDCid1gUZLOKQdm3Hls3DdXbt/qNfcjpKij36s9e
a5dfTnWQGOFKrk7F1Q0GWVHpIGLEa+AAOj9LZOiHPV44BTMGEgCsLMAPSD2mTEjv
+6VAhqrEdI6ZyVllFVz2a0TcGCZUOUCwpxpmxvvycSWhwBkXB9EQWAeyWTprcnZg
CGD/iH+EtW9JQQZYXjV67+TlWqHXTFCjVllyivqmx3g6hKbH+cimjShtB2lndDT4
F+SgHOHN3Bo64VAdpSoRR0yDEhqXSHx92XqFmQVnTcf4gFf1BSXkHUtmtk07ovbA
UF26oCjs14Yul0rvHZVf1qX5c49Z4WYx/WUaN3V5/zcA7JnjoE6A4EluTVvlJVX/
lwZBRtzxdhpenEVUerWRd7mrNKeqWjxUUjxYE9gMfB0etCDF9dFN/38wkRMAtzFb
H/VyPrEdFbbVUXGEjMlvmLB0iyqyak+C7CE0CTe7Zo5llSU6J+myu7arqpumFK54
4sYf8CUXOKOwefOenPJhJuApGVH8SKdKGSXiC2Jd6TV5oWXOVGYfqnZpEH4QPJNT
JSrDXBM6ZYOaj61t8RKRArXyAL97WtyMseqUgD/g9khKnecLNci8kkAuqMSjS2Ca
oxC8LgamZ26PXF1rPtAwa8eebLl1tKYYNctRHxI0XlTZ2e6D5D0=
=BQzn
-----END PGP SIGNATURE-----

--- End Message ---

Reply to: