Hello community, here is the log from the commit of package ppp for openSUSE:Factory checked in at 2020-08-06 17:30:40 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ppp (Old) and /work/SRC/openSUSE:Factory/.ppp.new.3399 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ppp" Thu Aug 6 17:30:40 2020 rev:43 rq:824334 version:2.4.8 Changes: -------- --- /work/SRC/openSUSE:Factory/ppp/ppp.changes 2020-05-26 17:14:28.903347043 +0200 +++ /work/SRC/openSUSE:Factory/.ppp.new.3399/ppp.changes 2020-08-06 17:31:06.121080078 +0200 @@ -1,0 +2,45 @@ +Mon Aug 3 14:52:55 UTC 2020 - Reinhard Max <[email protected]> + +- New version 2.4.8. + * New pppd options have been added: + * ifname, to set the name for the PPP interface device + * defaultroute-metric, to set the metric for the default route + * defaultroute6, to add an IPv6 default route (with + nodefaultroute6 to prevent adding an IPv6 default route). + * up_sdnotify, to have pppd notify systemd when the link is up. + + * The rp-pppoe plugin has new options: + * host-uniq, to set the Host-Uniq value to send + * pppoe-padi-timeout, to set the timeout for discovery packets + * pppoe-padi-attempts, to set the number of discovery attempts. + + * Added the CLASS attribute in radius packets. + + * Fixed warnings and issues found by static analysis. + +- Obsoleted patches: + * ppp-2.4.3-pppoatm.diff + * ppp-2.4.4-strncatfix.patch + * ppp-2.4.6-ifname.diff + * ppp-2.4.7-DES-openssl.patch + * ppp-2.4.7.tar.gz.asc + * ppp-send-padt.patch + +- Patches that got renamed, because they needed rediffing: + * ppp-2.4.1-higher-speeds.diff -> ppp-higher-speeds.patch + * ppp-2.4.1-higher-speeds.diff -> ppp-higher-speeds.patch + * ppp-2.4.2-__P.diff -> ppp-__P.patch + * ppp-2.4.2-cifdefroute.diff -> ppp-cifdefroute.patch + * ppp-2.4.2-pie.patch -> ppp-pie.patch + * ppp-2.4.2-smpppd.diff -> ppp-smpppd.patch + * ppp-2.4.3-filter.diff -> ppp-filter.patch + * ppp-2.4.3-fork-fix.diff -> ppp-fork-fix.patch + * ppp-2.4.4-var_run_resolv_conf.patch -> ppp-var_run_resolv_conf.patch + * ppp-2.4.6-lib64.patch -> ppp-lib64.patch + * ppp-2.4.6-make.diff -> ppp-make.patch + * ppp-2.4.6-misc.diff -> ppp-misc.patch + * ppp-2.4.7-fix-bashisms.patch -> ppp-fix-bashisms.patch + +- bsc#1172916: Fix an outdated comment for lcp-echo-interval. + +------------------------------------------------------------------- Old: ---- ppp-2.4.1-higher-speeds.diff ppp-2.4.2-__P.diff ppp-2.4.2-cifdefroute.diff ppp-2.4.2-pie.patch ppp-2.4.2-smpppd.diff ppp-2.4.3-filter.diff ppp-2.4.3-fork-fix.diff ppp-2.4.3-pppoatm.diff ppp-2.4.4-strncatfix.patch ppp-2.4.4-var_run_resolv_conf.patch ppp-2.4.6-ifname.diff ppp-2.4.6-lib64.patch ppp-2.4.6-make.diff ppp-2.4.6-misc.diff ppp-2.4.7-DES-openssl.patch ppp-2.4.7-fix-bashisms.patch ppp-2.4.7.tar.gz ppp-2.4.7.tar.gz.asc ppp-send-padt.patch New: ---- ppp-2.4.8.tar.gz ppp-2.4.8.tar.gz.asc ppp-__P.patch ppp-cifdefroute.patch ppp-filter.patch ppp-fix-bashisms.patch ppp-fork-fix.patch ppp-higher-speeds.patch ppp-lib64.patch ppp-make.patch ppp-misc.patch ppp-pie.patch ppp-smpppd.patch ppp-var_run_resolv_conf.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ppp.spec ++++++ --- /var/tmp/diff_new_pack.32mDe6/_old 2020-08-06 17:31:08.089080539 +0200 +++ /var/tmp/diff_new_pack.32mDe6/_new 2020-08-06 17:31:08.097080541 +0200 @@ -18,7 +18,7 @@ %define _group dialout Name: ppp -Version: 2.4.7 +Version: 2.4.8 Release: 0 Summary: The Point to Point Protocol for Linux License: BSD-3-Clause AND LGPL-2.1-or-later AND GPL-2.0-or-later @@ -49,35 +49,29 @@ Source17: %{name}.keyring Source18: https://download.samba.org/pub/%{name}/%{name}-%{version}.tar.gz.asc # Makefile changes -Patch0: ppp-2.4.6-make.diff +Patch0: ppp-make.patch # replacedefaultroute option -Patch2: ppp-2.4.2-cifdefroute.diff +Patch2: ppp-cifdefroute.patch # misc tiny stuff -Patch3: ppp-2.4.6-misc.diff +Patch3: ppp-misc.patch # more log output for smpppd -Patch4: ppp-2.4.2-smpppd.diff +Patch4: ppp-smpppd.patch # allow higher serial speeds -Patch5: ppp-2.4.1-higher-speeds.diff +Patch5: ppp-higher-speeds.patch # fixed use of libpcap including dial on demand -Patch6: ppp-2.4.3-filter.diff -# option to rename ppp interface -Patch8: ppp-2.4.6-ifname.diff +Patch6: ppp-filter.patch # Don't use __P from glibc (pppd uses it wrong) -Patch9: ppp-2.4.2-__P.diff -Patch10: ppp-2.4.3-pppoatm.diff -Patch11: ppp-2.4.7-fix-bashisms.patch -Patch12: ppp-2.4.2-pie.patch -Patch14: ppp-2.4.3-fork-fix.diff +Patch9: ppp-__P.patch +Patch11: ppp-fix-bashisms.patch +Patch12: ppp-pie.patch +Patch14: ppp-fork-fix.patch Patch17: ppp-2.4.3-strip.diff Patch18: ppp-2.4.3-winbind-setuidfix.patch -Patch19: ppp-2.4.4-strncatfix.patch -Patch21: ppp-2.4.6-lib64.patch -Patch22: ppp-2.4.4-var_run_resolv_conf.patch -Patch23: ppp-send-padt.patch +Patch21: ppp-lib64.patch +Patch22: ppp-var_run_resolv_conf.patch # PATCH-FIX-UPSTREAM -- Patch for CVE-2015-3310 Patch24: ppp-CVE-2015-3310.patch Patch25: fix-header-conflict.patch -Patch26: ppp-2.4.7-DES-openssl.patch Patch27: ppp-CVE-2020-8597.patch BuildRequires: libpcap-devel BuildRequires: linux-atm-devel @@ -132,24 +126,19 @@ %patch3 %patch4 %patch5 -%patch6 -p1 -%patch8 +%patch6 %patch9 -%patch10 -p1 %patch11 -p1 -%patch12 -p1 +%patch12 %patch14 %patch17 %patch18 -%patch19 -p1 %if %{_lib} == lib64 %patch21 %endif %patch22 -%patch23 -p1 %patch24 %patch25 -p1 -%patch26 -p1 %patch27 sed -i -e '1s/local\///' scripts/secure-card find scripts -type f | xargs chmod a-x ++++++ options ++++++ --- /var/tmp/diff_new_pack.32mDe6/_old 2020-08-06 17:31:08.257080578 +0200 +++ /var/tmp/diff_new_pack.32mDe6/_new 2020-08-06 17:31:08.257080578 +0200 @@ -114,11 +114,10 @@ nodetach # If this option is given, pppd will send an LCP echo-request frame to -# the peer every n seconds. Under Linux, the echo-request is sent when -# no packets have been received from the peer for n seconds. Normally -# the peer should respond to the echo-request by sending an echo-reply. -# This option can be used with the lcp-echo-failure option to detect -# that the peer is no longer connected. +# the peer every n seconds. Normally the peer should respond to the +# echo-request by sending an echo-reply. This option can be used with +# the lcp-echo-failure option to detect that the peer is no longer +# connected. lcp-echo-interval 30 # If this option is given, pppd will presume the peer to be dead if n ++++++ ppp-2.4.7.tar.gz -> ppp-2.4.8.tar.gz ++++++ ++++ 2972 lines of diff (skipped) ++++++ ppp-CVE-2015-3310.patch ++++++ --- /var/tmp/diff_new_pack.32mDe6/_old 2020-08-06 17:31:08.445080622 +0200 +++ /var/tmp/diff_new_pack.32mDe6/_new 2020-08-06 17:31:08.445080622 +0200 @@ -1,4 +1,4 @@ ---- pppd/plugins/radius/util.c +--- pppd/plugins/radius/util.c.orig +++ pppd/plugins/radius/util.c @@ -77,7 +77,7 @@ rc_mksid (void) static unsigned short int cnt = 0; @@ -9,5 +9,3 @@ cnt & 0xFF); cnt++; return buf; - - ++++++ ppp-CVE-2020-8597.patch ++++++ --- /var/tmp/diff_new_pack.32mDe6/_old 2020-08-06 17:31:08.461080626 +0200 +++ /var/tmp/diff_new_pack.32mDe6/_new 2020-08-06 17:31:08.461080626 +0200 @@ -15,7 +15,7 @@ --- pppd/eap.c.orig +++ pppd/eap.c -@@ -1421,7 +1421,7 @@ int len; +@@ -1420,7 +1420,7 @@ int len; } /* Not so likely to happen. */ @@ -24,7 +24,7 @@ dbglog("EAP: trimming really long peer name down"); BCOPY(inp + vallen, rhostname, sizeof (rhostname) - 1); rhostname[sizeof (rhostname) - 1] = '\0'; -@@ -1847,7 +1847,7 @@ int len; +@@ -1846,7 +1846,7 @@ int len; } /* Not so likely to happen. */ ++++++ ppp-__P.patch ++++++ --- pppd/pppd.h.orig +++ pppd/pppd.h @@ -59,14 +59,17 @@ #include <net/ppp_defs.h> #include "patchlevel.h" +#undef __P #if defined(__STDC__) #include <stdarg.h> #define __V(x) x +#define __P(args) args #else #include <varargs.h> #define __V(x) (va_alist) va_dcl #define const #define volatile +#define __P(args) #endif #ifdef INET6 ++++++ ppp-cifdefroute.patch ++++++ --- pppd/ipcp.c.orig +++ pppd/ipcp.c @@ -197,6 +197,16 @@ static option_t ipcp_option_list[] = { "disable defaultroute option", OPT_ALIAS | OPT_A2CLR, &ipcp_wantoptions[0].default_route }, +#ifdef __linux__ + { "replacedefaultroute", o_bool, + &ipcp_wantoptions[0].replace_default_route, + "Replace default route", 1 + }, + { "noreplacedefaultroute", o_bool, + &ipcp_allowoptions[0].replace_default_route, + "Never replace default route", OPT_A2COPY, + &ipcp_wantoptions[0].replace_default_route }, +#endif { "proxyarp", o_bool, &ipcp_wantoptions[0].proxy_arp, "Add proxy ARP entry", OPT_ENABLE|1, &ipcp_allowoptions[0].proxy_arp }, { "noproxyarp", o_bool, &ipcp_allowoptions[0].proxy_arp, @@ -270,7 +280,7 @@ struct protent ipcp_protent = { ip_active_pkt }; -static void ipcp_clear_addrs __P((int, u_int32_t, u_int32_t)); +static void ipcp_clear_addrs __P((int, u_int32_t, u_int32_t, bool)); static void ipcp_script __P((char *, int)); /* Run an up/down script */ static void ipcp_script_done __P((void *)); @@ -1760,7 +1770,12 @@ ip_demand_conf(u) if (!sifnpmode(u, PPP_IP, NPMODE_QUEUE)) return 0; if (wo->default_route) +#ifndef __linux__ if (sifdefaultroute(u, wo->ouraddr, wo->hisaddr)) +#else + if (sifdefaultroute(u, wo->ouraddr, wo->hisaddr, + wo->replace_default_route)) +#endif default_route_set[u] = 1; if (wo->proxy_arp) if (sifproxyarp(u, wo->hisaddr)) @@ -1848,7 +1863,8 @@ ipcp_up(f) */ if (demand) { if (go->ouraddr != wo->ouraddr || ho->hisaddr != wo->hisaddr) { - ipcp_clear_addrs(f->unit, wo->ouraddr, wo->hisaddr); + ipcp_clear_addrs(f->unit, wo->ouraddr, wo->hisaddr, + wo->replace_default_route); if (go->ouraddr != wo->ouraddr) { warn("Local IP address changed to %I", go->ouraddr); script_setenv("OLDIPLOCAL", ip_ntoa(wo->ouraddr), 0); @@ -1873,7 +1889,12 @@ ipcp_up(f) /* assign a default route through the interface if required */ if (ipcp_wantoptions[f->unit].default_route) +#ifndef __linux__ if (sifdefaultroute(f->unit, go->ouraddr, ho->hisaddr)) +#else + if (sifdefaultroute(f->unit, go->ouraddr, ho->hisaddr, + wo->replace_default_route)) +#endif default_route_set[f->unit] = 1; /* Make a proxy ARP entry if requested. */ @@ -1923,7 +1944,12 @@ ipcp_up(f) /* assign a default route through the interface if required */ if (ipcp_wantoptions[f->unit].default_route) +#ifndef __linux__ if (sifdefaultroute(f->unit, go->ouraddr, ho->hisaddr)) +#else + if (sifdefaultroute(f->unit, go->ouraddr, ho->hisaddr, + wo->replace_default_route)) +#endif default_route_set[f->unit] = 1; /* Make a proxy ARP entry if requested. */ @@ -2001,7 +2027,7 @@ ipcp_down(f) sifnpmode(f->unit, PPP_IP, NPMODE_DROP); sifdown(f->unit); ipcp_clear_addrs(f->unit, ipcp_gotoptions[f->unit].ouraddr, - ipcp_hisoptions[f->unit].hisaddr); + ipcp_hisoptions[f->unit].hisaddr, 0); } /* Execute the ip-down script */ @@ -2017,16 +2043,25 @@ ipcp_down(f) * proxy arp entries, etc. */ static void -ipcp_clear_addrs(unit, ouraddr, hisaddr) +ipcp_clear_addrs(unit, ouraddr, hisaddr, replacedefaultroute) int unit; u_int32_t ouraddr; /* local address */ u_int32_t hisaddr; /* remote address */ + bool replacedefaultroute; { if (proxy_arp_set[unit]) { cifproxyarp(unit, hisaddr); proxy_arp_set[unit] = 0; } - if (default_route_set[unit]) { + /* If replacedefaultroute, sifdefaultroute will be called soon + * with replacedefaultroute set and that will overwrite the current + * default route. This is the case only when doing demand, otherwise + * during demand, this cifdefaultroute would restore the old default + * route which is not what we want in this case. In the non-demand + * case, we'll delete the default route and restore the old if there + * is one saved by an sifdefaultroute with replacedefaultroute. + */ + if (!replacedefaultroute && default_route_set[unit]) { cifdefaultroute(unit, ouraddr, hisaddr); default_route_set[unit] = 0; } --- pppd/ipcp.h.orig +++ pppd/ipcp.h @@ -70,6 +70,7 @@ typedef struct ipcp_options { bool old_addrs; /* Use old (IP-Addresses) option? */ bool req_addr; /* Ask peer to send IP address? */ bool default_route; /* Assign default route through interface? */ + bool replace_default_route; /* Replace default route through interface? */ bool proxy_arp; /* Make proxy ARP entry for peer? */ bool neg_vj; /* Van Jacobson Compression? */ bool old_vj; /* use old (short) form of VJ option? */ --- pppd/pppd.8.orig +++ pppd/pppd.8 @@ -133,6 +133,13 @@ the gateway, when IPv6CP negotiation is This entry is removed when the PPP connection is broken. This option is privileged if the \fInodefaultroute6\fR option has been specified. .TP +.B replacedefaultroute +This option is a flag to the defaultroute option. If defaultroute is +set and this flag is also set, pppd replaces an existing default route +with the new default route. + + +.TP .B disconnect \fIscript Execute the command specified by \fIscript\fR, by passing it to a shell, after @@ -746,7 +753,12 @@ disable both forms of hardware flow cont .TP .B nodefaultroute Disable the \fIdefaultroute\fR option. The system administrator who -wishes to prevent users from creating default routes with pppd +wishes to prevent users from adding a default route with pppd +can do so by placing this option in the /etc/ppp/options file. +.TP +.B noreplacedefaultroute +Disable the \fIreplacedefaultroute\fR option. The system administrator who +wishes to prevent users from replacing a default route with pppd can do so by placing this option in the /etc/ppp/options file. .TP .B nodefaultroute6 --- pppd/pppd.h.orig +++ pppd/pppd.h @@ -681,7 +681,11 @@ int sif6addr __P((int, eui64_t, eui64_t int cif6addr __P((int, eui64_t, eui64_t)); /* Remove an IPv6 address from i/f */ #endif +#ifndef __linux__ int sifdefaultroute __P((int, u_int32_t, u_int32_t)); +#else +int sifdefaultroute __P((int, u_int32_t, u_int32_t, bool replace_default_rt)); +#endif /* Create default route through i/f */ int cifdefaultroute __P((int, u_int32_t, u_int32_t)); /* Delete default route through i/f */ --- pppd/sys-linux.c.orig +++ pppd/sys-linux.c @@ -209,6 +209,8 @@ static int if_is_up; /* Interface has be static int if6_is_up; /* Interface has been marked up for IPv6, to help differentiate */ static int have_default_route; /* Gateway for default route added */ static int have_default_route6; /* Gateway for default IPv6 route added */ +static struct rtentry old_def_rt; /* Old default route */ +static int default_rt_repl_rest; /* replace and restore old default rt */ static u_int32_t proxy_arp_addr; /* Addr for proxy arp entry added */ static char proxy_arp_dev[16]; /* Device for proxy arp entry */ static u_int32_t our_old_addr; /* for detecting address changes */ @@ -1570,6 +1572,9 @@ static int read_route_table(struct rtent p = NULL; } + SET_SA_FAMILY (rt->rt_dst, AF_INET); + SET_SA_FAMILY (rt->rt_gateway, AF_INET); + SIN_ADDR(rt->rt_dst) = strtoul(cols[route_dest_col], NULL, 16); SIN_ADDR(rt->rt_gateway) = strtoul(cols[route_gw_col], NULL, 16); SIN_ADDR(rt->rt_genmask) = strtoul(cols[route_mask_col], NULL, 16); @@ -1642,20 +1647,52 @@ int have_route_to(u_int32_t addr) /******************************************************************** * * sifdefaultroute - assign a default route through the address given. - */ - -int sifdefaultroute (int unit, u_int32_t ouraddr, u_int32_t gateway) -{ - struct rtentry rt; - - if (defaultroute_exists(&rt, dfl_route_metric) && strcmp(rt.rt_dev, ifname) != 0) { - if (rt.rt_flags & RTF_GATEWAY) - error("not replacing existing default route via %I with metric %d", - SIN_ADDR(rt.rt_gateway), dfl_route_metric); - else - error("not replacing existing default route through %s with metric %d", - rt.rt_dev, dfl_route_metric); - return 0; + * + * If the global default_rt_repl_rest flag is set, then this function + * already replaced the original system defaultroute with some other + * route and it should just replace the current defaultroute with + * another one, without saving the current route. Use: demand mode, + * when pppd sets first a defaultroute it it's temporary ppp0 addresses + * and then changes the temporary addresses to the addresses for the real + * ppp connection when it has come up. + */ + +int sifdefaultroute (int unit, u_int32_t ouraddr, u_int32_t gateway, bool replace) +{ + struct rtentry rt, tmp_rt; + struct rtentry *del_rt = NULL; + + if (default_rt_repl_rest) { + /* We have already reclaced the original defaultroute, if we + * are called again, we will delete the current default route + * and set the new default route in this function. + * - this is normally only the case the doing demand: */ + if (defaultroute_exists( &tmp_rt, dfl_route_metric )) + del_rt = &tmp_rt; + } else if ( defaultroute_exists( &old_def_rt, dfl_route_metric ) && + strcmp( old_def_rt.rt_dev, ifname ) != 0) { + /* We did not yet replace an existing default route, let's + * check if we should save and replace a default route: + */ + u_int32_t old_gateway = SIN_ADDR(old_def_rt.rt_gateway); + + if (old_gateway != gateway) { + if (!replace) { + error("not replacing default route to %s [%I] with metric %d", + old_def_rt.rt_dev, old_gateway, dfl_route_metric); + return 0; + } else { + // we need to copy rt_dev because we need it permanent too: + char * tmp_dev = malloc(strlen(old_def_rt.rt_dev)+1); + strcpy(tmp_dev, old_def_rt.rt_dev); + old_def_rt.rt_dev = tmp_dev; + + notice("replacing old default route to %s [%I] with metric $d", + old_def_rt.rt_dev, old_gateway, dfl_route_metric); + default_rt_repl_rest = 1; + del_rt = &old_def_rt; + } + } } memset (&rt, 0, sizeof (rt)); @@ -1675,6 +1712,12 @@ int sifdefaultroute (int unit, u_int32_t error("default route ioctl(SIOCADDRT): %m"); return 0; } + if (default_rt_repl_rest && del_rt) + if (ioctl(sock_fd, SIOCDELRT, del_rt) < 0) { + if ( ! ok_error ( errno )) + error("del old default route ioctl(SIOCDELRT): %m(%d)", errno); + return 0; + } have_default_route = 1; return 1; @@ -1713,6 +1756,16 @@ int cifdefaultroute (int unit, u_int32_t return 0; } } + if (default_rt_repl_rest) { + notice("restoring old default route to %s [%I]", + old_def_rt.rt_dev, SIN_ADDR(old_def_rt.rt_gateway)); + if (ioctl(sock_fd, SIOCADDRT, &old_def_rt) < 0) { + if ( ! ok_error ( errno )) + error("restore default route ioctl(SIOCADDRT): %m(%d)", errno); + return 0; + } + default_rt_repl_rest = 0; + } return 1; } ++++++ ppp-filter.patch ++++++ --- pppd/demand.c.orig +++ pppd/demand.c @@ -45,6 +45,7 @@ #include <sys/socket.h> #ifdef PPP_FILTER #include <pcap-bpf.h> +#include <linux/if_ether.h> #endif #include "pppd.h" @@ -340,6 +341,7 @@ active_packet(p, len) return 0; proto = PPP_PROTOCOL(p); #ifdef PPP_FILTER + *p = 1; /* set outbound for the filter rule */ p[0] = 1; /* outbound packet indicator */ if ((pass_filter.bf_len != 0 && bpf_filter(pass_filter.bf_insns, p, len, len) == 0) @@ -349,6 +351,7 @@ active_packet(p, len) return 0; } p[0] = 0xff; + *p = 0xff; /* restore original ppp header */ #endif for (i = 0; (protp = protocols[i]) != NULL; ++i) { if (protp->protocol < 0xC000 && (protp->protocol & ~0x8000) == proto) { --- pppd/options.c.orig +++ pppd/options.c @@ -1505,6 +1505,10 @@ setpassfilter(argv) int ret = 1; pc = pcap_open_dead(DLT_PPP_PPPD, 65535); + if (!pc) { + option_error("error in pass-filter expression: pcap_open_dead failed\n"); + return 0; + } if (pcap_compile(pc, &pass_filter, *argv, 1, netmask) == -1) { option_error("error in pass-filter expression: %s\n", pcap_geterr(pc)); @@ -1526,6 +1530,11 @@ setactivefilter(argv) int ret = 1; pc = pcap_open_dead(DLT_PPP_PPPD, 65535); + if (!pc) { + option_error("error in active-filter expression: pcap_open_dead failed\n"); + return 0; + } + if (pcap_compile(pc, &active_filter, *argv, 1, netmask) == -1) { option_error("error in active-filter expression: %s\n", pcap_geterr(pc)); ++++++ ppp-fix-bashisms.patch ++++++ diff -Ndur ppp-2.4.7/scripts/redialer ppp-2.4.7-fix-bashisms/scripts/redialer --- ppp-2.4.7/scripts/redialer 2014-08-09 15:31:39.000000000 +0300 +++ ppp-2.4.7-fix-bashisms/scripts/redialer 2014-11-19 05:09:46.168864978 +0200 @@ -31,7 +31,7 @@ # Function to initialize the modem and ensure that it is in command # state. This may not be needed, but it doesn't hurt. # -function initialize +initialize() { chat -v TIMEOUT 3 '' AT 'OK-+++\c-OK' return @@ -41,7 +41,7 @@ # # Script to dial a telephone # -function callnumber +callnumber() { chat -v \ ABORT '\nBUSY\r' \ @@ -66,7 +66,7 @@ # # Script to dial any telephone number # -function callall +callall() { # echo "dialing attempt number: $1" >/dev/console callnumber $PHONE1 ++++++ ppp-fork-fix.patch ++++++ --- pppd/main.c.orig +++ pppd/main.c @@ -1551,14 +1551,6 @@ safe_fork(int infd, int outfd, int errfd int fd, pipefd[2]; char buf[1]; - /* make sure fds 0, 1, 2 are occupied (probably not necessary) */ - while ((fd = dup(fd_devnull)) >= 0) { - if (fd > 2) { - close(fd); - break; - } - } - if (pipe(pipefd) == -1) pipefd[0] = pipefd[1] = -1; pid = fork(); @@ -1582,25 +1574,31 @@ safe_fork(int infd, int outfd, int errfd tdb_close(pppdb); #endif - /* make sure infd, outfd and errfd won't get tromped on below */ - if (infd == 1 || infd == 2) - infd = dup(infd); - if (outfd == 0 || outfd == 2) - outfd = dup(outfd); - if (errfd == 0 || errfd == 1) - errfd = dup(errfd); - + /* make sure fds 0, 1, 2 are occupied, so the duplicated fds always > 2 */ + while ((fd = dup(fd_devnull)) >= 0) { + if (fd > 2) { + close(fd); + break; + } + } + + /* always copy fd's to avoid to use a already closed fd later */ + { + int fdi = infd, fdo = outfd; + + infd = dup(infd); + outfd = dup(outfd); + if (errfd >= 0) { + fd = errfd; + errfd = dup(errfd); + close(fd); + } + close(fdi); + close(fdo); + } closelog(); - /* dup the in, out, err fds to 0, 1, 2 */ - if (infd != 0) - dup2(infd, 0); - if (outfd != 1) - dup2(outfd, 1); - if (errfd != 2) - dup2(errfd, 2); - - if (log_to_fd > 2) + if (log_to_fd > 0) close(log_to_fd); if (the_channel->close) (*the_channel->close)(); @@ -1608,12 +1606,18 @@ safe_fork(int infd, int outfd, int errfd close(devfd); /* some plugins don't have a close function */ close(fd_ppp); close(fd_devnull); - if (infd != 0) - close(infd); - if (outfd != 1) - close(outfd); - if (errfd != 2) - close(errfd); + + close(0); + dup2(infd, 0); + close(infd); + close(1); + dup2(outfd, 1); + close(outfd); + if (errfd >= 0) { + close(2); + dup2(errfd, 2); + close(errfd); + } notify(fork_notifier, 0); close(pipefd[0]); ++++++ ppp-higher-speeds.patch ++++++ --- pppd/sys-linux.c.orig +++ pppd/sys-linux.c @@ -904,6 +904,24 @@ struct speed { #ifdef B4000000 { 4000000, B4000000 }, #endif +#ifdef B1500000 + { 1500000, B1500000 }, +#endif +#ifdef B2000000 + { 2000000, B2000000 }, +#endif +#ifdef B2500000 + { 2500000, B2500000 }, +#endif +#ifdef B3000000 + { 3000000, B3000000 }, +#endif +#ifdef B3500000 + { 3500000, B3500000 }, +#endif +#ifdef B4000000 + { 4000000, B4000000 }, +#endif { 0, 0 } }; ++++++ ppp-lib64.patch ++++++ --- PLUGINS.orig +++ PLUGINS @@ -14,7 +14,7 @@ plugin support only under Linux and Sola Plugins are loaded into pppd using the `plugin' option, which takes one argument, the name of a shared object file. The plugin option is a privileged option. If the name given does not contain a slash, pppd -will look in the /usr/lib/pppd/<version> directory for the file, where +will look in the /usr/lib64/pppd/<version> directory for the file, where <version> is the version number of pppd, for example, 2.4.2. I suggest that you either give the full path name of the shared object file or just the base name; if you don't, it may be possible for --- README.orig +++ README @@ -261,8 +261,8 @@ What was new in ppp-2.4.1. per-tty options file are parsed correctly, and don't override values from the command line in most cases. -* The plugin option now looks in /usr/lib/pppd/<pppd-version> (for - example, /usr/lib/pppd/2.4.1b1) for shared objects for plugins if +* The plugin option now looks in /usr/lib64/pppd/<pppd-version> (for + example, /usr/lib64/pppd/2.4.1b1) for shared objects for plugins if there is no slash in the plugin name. * When loading a plugin, pppd will now check the version of pppd for --- pppd/pathnames.h.orig +++ pppd/pathnames.h @@ -57,9 +57,9 @@ #ifdef PLUGIN #ifdef __STDC__ -#define _PATH_PLUGIN DESTDIR "/lib/pppd/" VERSION +#define _PATH_PLUGIN DESTDIR "/lib64/pppd/" VERSION #else /* __STDC__ */ -#define _PATH_PLUGIN "/usr/lib/pppd" +#define _PATH_PLUGIN "/usr/lib64/pppd" #endif /* __STDC__ */ #endif /* PLUGIN */ --- pppd/plugins/Makefile.linux.orig +++ pppd/plugins/Makefile.linux @@ -7,7 +7,7 @@ INSTALL = install DESTDIR = $(INSTROOT)@DESTDIR@ BINDIR = $(DESTDIR)/sbin MANDIR = $(DESTDIR)/share/man/man8 -LIBDIR = $(DESTDIR)/lib/pppd/$(VERSION) +LIBDIR = $(DESTDIR)/lib64/pppd/$(VERSION) SUBDIRS := rp-pppoe pppoatm pppol2tp # Uncomment the next line to include the radius authentication plugin --- pppd/plugins/pppoatm/Makefile.linux.orig +++ pppd/plugins/pppoatm/Makefile.linux @@ -7,7 +7,7 @@ INSTALL = install #*********************************************************************** DESTDIR = $(INSTROOT)@DESTDIR@ -LIBDIR = $(DESTDIR)/lib/pppd/$(VERSION) +LIBDIR = $(DESTDIR)/lib64/pppd/$(VERSION) VERSION = $(shell awk -F '"' '/VERSION/ { print $$2; }' ../../patchlevel.h) --- pppd/plugins/pppol2tp/Makefile.linux.orig +++ pppd/plugins/pppol2tp/Makefile.linux @@ -7,7 +7,7 @@ INSTALL = install #*********************************************************************** DESTDIR = @DESTDIR@ -LIBDIR = $(DESTDIR)/lib/pppd/$(VERSION) +LIBDIR = $(DESTDIR)/lib64/pppd/$(VERSION) VERSION = $(shell awk -F '"' '/VERSION/ { print $$2; }' ../../patchlevel.h) --- pppd/plugins/radius/Makefile.linux.orig +++ pppd/plugins/radius/Makefile.linux @@ -5,7 +5,7 @@ DESTDIR = $(INSTROOT)@DESTDIR@ MANDIR = $(DESTDIR)/share/man/man8 -LIBDIR = $(DESTDIR)/lib/pppd/$(VERSION) +LIBDIR = $(DESTDIR)/lib64/pppd/$(VERSION) VERSION = $(shell awk -F '"' '/VERSION/ { print $$2; }' ../../patchlevel.h) --- pppd/plugins/rp-pppoe/Makefile.linux.orig +++ pppd/plugins/rp-pppoe/Makefile.linux @@ -16,7 +16,7 @@ DESTDIR = $(INSTROOT)@DESTDIR@ BINDIR = $(DESTDIR)/sbin -LIBDIR = $(DESTDIR)/lib/pppd/$(PPPDVERSION) +LIBDIR = $(DESTDIR)/lib64/pppd/$(PPPDVERSION) PPPDVERSION = $(shell awk -F '"' '/VERSION/ { print $$2; }' ../../patchlevel.h) --- pppd/pppd.8.orig +++ pppd/pppd.8 @@ -946,7 +946,7 @@ persistent connections. .B plugin \fIfilename Load the shared library object file \fIfilename\fR as a plugin. This is a privileged option. If \fIfilename\fR does not contain a slash -(/), pppd will look in the \fB/usr/lib/pppd/\fIversion\fR directory +(/), pppd will look in the \fB/usr/lib64/pppd/\fIversion\fR directory for the plugin, where \fIversion\fR is the version number of pppd (for example, 2.4.2). .TP ++++++ ppp-make.patch ++++++ --- chat/Makefile.linux.orig +++ chat/Makefile.linux @@ -11,7 +11,7 @@ CDEF4= -DFNDELAY=O_NDELAY # Old name va CDEFS= $(CDEF1) $(CDEF2) $(CDEF3) $(CDEF4) COPTS= -O2 -g -pipe -CFLAGS= $(COPTS) $(CDEFS) +CFLAGS= $(MY_CFLAGS) $(COPTS) $(CDEFS) INSTALL= install @@ -25,8 +25,8 @@ chat.o: chat.c install: chat mkdir -p $(BINDIR) $(MANDIR) - $(INSTALL) -s -c chat $(BINDIR) - $(INSTALL) -c -m 644 chat.8 $(MANDIR) + $(INSTALL) chat $(BINDIR) + $(INSTALL) -m 644 chat.8 $(MANDIR) clean: rm -f chat.o chat *~ --- pppd/Makefile.linux.orig +++ pppd/Makefile.linux @@ -32,8 +32,9 @@ endif # CC = gcc # -COPTS = -O2 -pipe -Wall -g -LIBS = +CC = gcc +COPTS = $(MY_CFLAGS) -O2 -pipe -Wall -fno-strict-aliasing +LIBS = -lutil # Uncomment the next line to include support for Microsoft's # MS-CHAP authentication protocol. Also, edit plugins/radius/Makefile.linux. @@ -219,10 +220,8 @@ all: $(TARGETS) install: pppd mkdir -p $(BINDIR) $(MANDIR) $(EXTRAINSTALL) - $(INSTALL) -s -c -m 555 pppd $(BINDIR)/pppd - if chgrp pppusers $(BINDIR)/pppd 2>/dev/null; then \ - chmod o-rx,u+s $(BINDIR)/pppd; fi - $(INSTALL) -c -m 444 pppd.8 $(MANDIR) + $(INSTALL) -m 755 pppd $(BINDIR)/pppd + $(INSTALL) -m 644 pppd.8 $(MANDIR) pppd: $(PPPDOBJS) $(CC) $(CFLAGS) $(LDFLAGS) $(LDFLAGS_PLUGIN) -o pppd $(PPPDOBJS) $(LIBS) --- pppd/plugins/Makefile.linux.orig +++ pppd/plugins/Makefile.linux @@ -1,5 +1,5 @@ -#CC = gcc -COPTS = -O2 -g +CC = gcc +COPTS = $(MY_CFLAGS) -O2 -g -Wall CFLAGS = $(COPTS) -I.. -I../../include -fPIC LDFLAGS_SHARED = -shared INSTALL = install --- pppd/plugins/pppoatm/Makefile.linux.orig +++ pppd/plugins/pppoatm/Makefile.linux @@ -1,5 +1,5 @@ #CC = gcc -COPTS = -O2 -g +COPTS = $(MY_CFLAGS) -O2 -g CFLAGS = $(COPTS) -I../.. -I../../../include -fPIC LDFLAGS_SHARED = -shared INSTALL = install --- pppd/plugins/pppol2tp/Makefile.linux.orig +++ pppd/plugins/pppol2tp/Makefile.linux @@ -1,5 +1,5 @@ -#CC = gcc -COPTS = -O2 -g +CC = gcc +COPTS = $(MY_CFLAGS) -O2 -pipe -Wall CFLAGS = $(COPTS) -I. -I../.. -I../../../include -fPIC LDFLAGS_SHARED = -shared INSTALL = install @@ -20,7 +20,7 @@ all: $(PLUGINS) install: all $(INSTALL) -d -m 755 $(LIBDIR) - $(INSTALL) -c -m 755 $(PLUGINS) $(LIBDIR) + $(INSTALL) -m 755 $(PLUGINS) $(LIBDIR) clean: rm -f *.o *.so --- pppd/plugins/radius/Makefile.linux.orig +++ pppd/plugins/radius/Makefile.linux @@ -12,7 +12,8 @@ VERSION = $(shell awk -F '"' '/VERSION/ INSTALL = install PLUGIN=radius.so radattr.so radrealms.so -CFLAGS=-I. -I../.. -I../../../include -O2 -fPIC -DRC_LOG_FACILITY=LOG_DAEMON +COPTS = $(MY_CFLAGS) -O2 -fPIC +CFLAGS= $(COPTS) -I. -I../.. -I../../../include -DRC_LOG_FACILITY=LOG_DAEMON -fno-strict-aliasing # Uncomment the next line to include support for Microsoft's # MS-CHAP authentication protocol. --- pppd/plugins/rp-pppoe/Makefile.linux.orig +++ pppd/plugins/rp-pppoe/Makefile.linux @@ -25,7 +25,7 @@ INSTALL = install # Version is set ONLY IN THE MAKEFILE! Don't delete this! RP_VERSION=3.8p -COPTS=-O2 -g +COPTS= $(MY_CFLAGS) -O2 -pipe -Wall CFLAGS=$(COPTS) -I../../../include '-DRP_VERSION="$(RP_VERSION)"' all: rp-pppoe.so pppoe-discovery @@ -43,7 +43,7 @@ rp-pppoe.so: plugin.o discovery.o if.o c install: all $(INSTALL) -d -m 755 $(LIBDIR) - $(INSTALL) -s -c -m 4550 rp-pppoe.so $(LIBDIR) + $(INSTALL) rp-pppoe.so $(LIBDIR) $(INSTALL) -d -m 755 $(BINDIR) $(INSTALL) -s -c -m 555 pppoe-discovery $(BINDIR) --- pppdump/Makefile.linux.orig +++ pppdump/Makefile.linux @@ -2,7 +2,7 @@ DESTDIR = $(INSTROOT)@DESTDIR@ BINDIR = $(DESTDIR)/sbin MANDIR = $(DESTDIR)/share/man/man8 -CFLAGS= -O -I../include/net +CFLAGS = $(MY_CFLAGS) -pipe -Wall -O -I../include/net OBJS = pppdump.o bsd-comp.o deflate.o zlib.o INSTALL= install @@ -17,5 +17,5 @@ clean: install: mkdir -p $(BINDIR) $(MANDIR) - $(INSTALL) -s -c pppdump $(BINDIR) - $(INSTALL) -c -m 444 pppdump.8 $(MANDIR) + $(INSTALL) pppdump $(BINDIR) + $(INSTALL) -m 444 pppdump.8 $(MANDIR) --- pppstats/Makefile.linux.orig +++ pppstats/Makefile.linux @@ -9,8 +9,8 @@ MANDIR = $(DESTDIR)/share/man/man8 PPPSTATSRCS = pppstats.c PPPSTATOBJS = pppstats.o -#CC = gcc -COPTS = -O +CC = gcc +COPTS = $(MY_CFLAGS) -O2 -pipe -Wall COMPILE_FLAGS = -I../include LIBS = @@ -22,8 +22,8 @@ all: pppstats install: pppstats -mkdir -p $(MANDIR) - $(INSTALL) -s -c pppstats $(BINDIR) - $(INSTALL) -c -m 444 pppstats.8 $(MANDIR) + $(INSTALL) pppstats $(BINDIR) + $(INSTALL) -m 444 pppstats.8 $(MANDIR) pppstats: $(PPPSTATSRCS) $(CC) $(CFLAGS) $(LDFLAGS) -o pppstats pppstats.c $(LIBS) ++++++ ppp-misc.patch ++++++ --- pppd/auth.c.orig +++ pppd/auth.c @@ -2105,9 +2105,10 @@ check_access(f, filename) if (fstat(fileno(f), &sbuf) < 0) { warn("cannot stat secret file %s: %m", filename); - } else if ((sbuf.st_mode & (S_IRWXG | S_IRWXO)) != 0) { - warn("Warning - secret file %s has world and/or group access", - filename); + } else if ((sbuf.st_mode & S_IRWXO) != 0) { + warn("Warning - secret file %s has world access", filename); + } else if ((sbuf.st_mode & S_IRWXG) != 0 && sbuf.st_gid != 15) { + warn("Warning - secret file %s has group access", filename); } } --- pppd/lcp.c.orig +++ pppd/lcp.c @@ -2302,7 +2302,7 @@ lcp_received_echo_reply (f, id, inp, len if (lcp_gotoptions[f->unit].neg_magicnumber && magic == lcp_gotoptions[f->unit].magicnumber) { warn("appear to have received our own echo-reply!"); - return; + /* M$-Software did get this wrong so we also accept those packets. */ } /* Reset the number of outstanding echo frames */ --- pppd/pppd.h.orig +++ pppd/pppd.h @@ -873,15 +873,7 @@ extern void (*snoop_send_hook) __P((unsi #define DEBUGCHAP 1 #endif -#ifndef LOG_PPP /* we use LOG_LOCAL2 for syslog by default */ -#if defined(DEBUGMAIN) || defined(DEBUGFSM) || defined(DEBUGSYS) \ - || defined(DEBUGLCP) || defined(DEBUGIPCP) || defined(DEBUGUPAP) \ - || defined(DEBUGCHAP) || defined(DEBUG) || defined(DEBUGIPV6CP) #define LOG_PPP LOG_LOCAL2 -#else -#define LOG_PPP LOG_DAEMON -#endif -#endif /* LOG_PPP */ #ifdef DEBUGMAIN #define MAINDEBUG(x) if (debug) dbglog x ++++++ ppp-pie.patch ++++++ --- pppd/Makefile.linux.orig +++ pppd/Makefile.linux @@ -224,7 +224,7 @@ install: pppd $(INSTALL) -m 644 pppd.8 $(MANDIR) pppd: $(PPPDOBJS) - $(CC) $(CFLAGS) $(LDFLAGS) $(LDFLAGS_PLUGIN) -o pppd $(PPPDOBJS) $(LIBS) + $(CC) $(CFLAGS) -pie -fPIC $(LDFLAGS) $(LDFLAGS_PLUGIN) -o pppd $(PPPDOBJS) $(LIBS) srp-entry: srp-entry.c $(CC) $(CFLAGS) $(LDFLAGS) -o $@ srp-entry.c $(LIBS) --- chat/Makefile.linux.orig +++ chat/Makefile.linux @@ -18,7 +18,7 @@ INSTALL= install all: chat chat: chat.o - $(CC) $(LDFLAGS) -o chat chat.o + $(CC) -pie $(LDFLAGS) -o chat chat.o chat.o: chat.c $(CC) -c $(CFLAGS) -o chat.o chat.c --- pppstats/Makefile.linux.orig +++ pppstats/Makefile.linux @@ -26,7 +26,7 @@ install: pppstats $(INSTALL) -m 444 pppstats.8 $(MANDIR) pppstats: $(PPPSTATSRCS) - $(CC) $(CFLAGS) $(LDFLAGS) -o pppstats pppstats.c $(LIBS) + $(CC) $(CFLAGS) -pie -fPIE $(LDFLAGS) -o pppstats pppstats.c $(LIBS) clean: rm -f pppstats *~ #* core ++++++ ppp-smpppd.patch ++++++ --- pppd/main.c.orig +++ pppd/main.c @@ -1920,8 +1920,8 @@ forget_child(pid, status) if (WIFSIGNALED(status)) { warn("Child process %s (pid %d) terminated with signal %d", (chp? chp->prog: "??"), pid, WTERMSIG(status)); - } else if (debug) - dbglog("Script %s finished (pid %d), status = 0x%x", + } else + info("Script %s finished (pid %d), status = 0x%x", (chp? chp->prog: "??"), pid, WIFEXITED(status) ? WEXITSTATUS(status) : status); if (chp && chp->done) ++++++ ppp-var_run_resolv_conf.patch ++++++ --- Changes-2.3.orig +++ Changes-2.3 @@ -262,10 +262,10 @@ What was new in ppp-2.3.6. * Added new option `usepeerdns', thanks to Nick Walker <[email protected]>. If the peer supplies DNS addresses, these - will be written to /etc/ppp/resolv.conf. The ip-up script can then - be used to add these addresses to /etc/resolv.conf if desired (see - the ip-up.local.add and ip-down.local.add files in the scripts - directory). + will be written to /var/run/ppp_resolv.conf.$INTERFACE_NAME. + The ip-up script can then be used to add these addresses to + /etc/resolv.conf if desired (see the ip-up.local.add and + ip-down.local.add files in the scripts directory). * The Solaris ppp driver should now work correctly on SMP systems. --- pppd/ipcp.c.orig +++ pppd/ipcp.c @@ -2148,10 +2148,13 @@ create_resolv(peerdns1, peerdns2) u_int32_t peerdns1, peerdns2; { FILE *f; + char rcfilename[MAXIFNAMELEN]; - f = fopen(_PATH_RESOLV, "w"); + slprintf(rcfilename, sizeof(rcfilename), "%s.%s", + _PATH_RESOLV, ifname); + f = fopen(rcfilename, "w"); if (f == NULL) { - error("Failed to create %s: %m", _PATH_RESOLV); + error("Failed to create %s: %m", rcfilename); return; } @@ -2162,7 +2165,7 @@ create_resolv(peerdns1, peerdns2) fprintf(f, "nameserver %s\n", ip_ntoa(peerdns2)); if (ferror(f)) - error("Write failed to %s: %m", _PATH_RESOLV); + error("Write failed to %s: %m", rcfilename); fclose(f); } --- pppd/pathnames.h.orig +++ pppd/pathnames.h @@ -30,7 +30,7 @@ #define _PATH_TTYOPT _ROOT_PATH "/etc/ppp/options." #define _PATH_CONNERRS _ROOT_PATH "/etc/ppp/connect-errors" #define _PATH_PEERFILES _ROOT_PATH "/etc/ppp/peers/" -#define _PATH_RESOLV _ROOT_PATH "/etc/ppp/resolv.conf" +#define _PATH_RESOLV _ROOT_PATH "/var/run/ppp_resolv.conf" #define _PATH_USEROPT ".ppprc" #define _PATH_PSEUDONYM ".ppp_pseudonym" --- pppd/pppd.8.orig +++ pppd/pppd.8 @@ -1143,8 +1143,8 @@ Ask the peer for up to 2 DNS server addr by the peer (if any) are passed to the /etc/ppp/ip\-up script in the environment variables DNS1 and DNS2, and the environment variable USEPEERDNS will be set to 1. In addition, pppd will create an -/etc/ppp/resolv.conf file containing one or two nameserver lines with -the address(es) supplied by the peer. +/var/run/ppp_resolv.conf.$INTERFACE file containing one or two nameserver +lines with the address(es) supplied by the peer. .TP .B user \fIname Sets the name used for authenticating the local system to the peer to ++++++ ppp.keyring ++++++ --- /var/tmp/diff_new_pack.32mDe6/_old 2020-08-06 17:31:08.629080665 +0200 +++ /var/tmp/diff_new_pack.32mDe6/_new 2020-08-06 17:31:08.633080666 +0200 @@ -1,28 +1,157 @@ -----BEGIN PGP PUBLIC KEY BLOCK----- +Version: SKS 1.1.6 +Comment: Hostname: sks.pod02.fleetstreetops.com -mQINBE6U85gBEACYU+BDUOcO7uG3S2JilDFgHjr0i9bpoHjvEiFp63i6SDXPtWl4 -QtOVXM+f3uahAHyzfrJ0xe9Jx0hDDVNZqsk3jnEj5siAMAm80atoST5h4bk5TE9w -5fIOqUuKWh4i7bJOnUzmGoIF9N0xVCfcSaU4+kzRtnBnTPon+q+brDc79Tyk7PVj -P/2YTa5Vjzx1zqrHTOFBwXRk1RyVSATDAvqkA8vVw1odhmCP7EhKKT7nLBh8swz4 -DVk8ylVCkB+6UFlAXlq8c0cbFMB8Zjr9gYJaQ4nxJVQcSFizS67EalathxeHOjjg -QUK9kCWExOfkcf3zAfKxFUM6oq/iH+A1O0ieVYKxbGHYDZLmMAgkJweDhbyWzSoZ -WeWneuIIxaPvxH3wHDf5NLlsHaiTxoR08zq2PN5IHEmYgR6nvYxAd3ZXLEojWXZB -AbOIZxPUvbB+DHF+7WYMKPdBLWvY6W8w0t4EYOt5N0W+/+AL2ZTCYJjZCHvhZxhC -ki8grkIcShPf6BQLe3UJc/maJGu0Co1mhiCYx2a3AAkq8E1NZ0nzEP9+eoGohjvF -ht5P/omDpU/VrZOBrgCFBDHUymvBsKw9ofaLUIplH4gJRHB47pLLFob3LDzbXyb4 -GB3LrOuioqLaVgrjz6lymzxXVTzHlQkAYayN4jvve6jauFQF/QAZg1gotwARAQAB -tC9QYXVsIE1hY2tlcnJhcyAoU2lnbmluZyBrZXkpIDxwYXVsdXNAc2FtYmEub3Jn -PokCOAQTAQIAIgUCTpTzmAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ -nkKV1gX2bOmPOA/9Eom5EbPMPYjj7ejB3pHm3Sbz/F93NYfvKcCa/wGjrvwXegLG -7HONztAyD2ftr81LfiSTE+9iPcbEmjcvJrWaO+Id3LuTVTvNe7Nyzu/SpM2DUVDI -suqKDpVrXO5FUjAU3JRxTyPscaC7BJJFoksbwXEuNyCtZ8jCxb+Z7nxnVJrxh4p6 -Z5DucisiQbgVuMcM2LBtZz8CTeAOIwUgmNVuKnRJzvyPEiC7xMN8ilka/A5XHDbc -J8MEuWSb2cK3ETA4OU2h/xYS6hK2eHij2KOSlWbwBbtpAAy73+wku1v2KEulsC1Y -aRYCJE1lyZ9Wkvg0ErWxYml7HDluA7swWDxu+J4PyxfWood+8eEAs4kb8WCY1KTX -EhooIoX7Xo6CCu4FxUH1Qa0jdtqE/we9L0NNXul+AfhPUTDykWAXYGlNgFnDzJ4l -WsGlRK21Ku6a4RFrK9O1bvl3B3wAH57kWKcYVgDe1i/C/oHLDaWKQ+e/g2g07ooT -9gzJIyFbT8DHfFYAP5a5oCLKnR2tAfmtqWxuSoGX02IcBY2bmjZ1qEeiWOvz+WQb -MAx/1l0e42NODvUOHK2SInz+EPLyroQ/uaSSTnlR3yNgyhmr0Cllll5gqFIwVscs -TTzDLoR3NYb5IPRbye9aL8BDO6o/+TFaWQ7YYGAdQUABIqiirEWU6wu62xk= -=lGHU +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 +=lvBd -----END PGP PUBLIC KEY BLOCK----- +
