diff options
author | swills <swills@FreeBSD.org> | 2012-08-18 00:58:53 +0800 |
---|---|---|
committer | swills <swills@FreeBSD.org> | 2012-08-18 00:58:53 +0800 |
commit | 1f881892caa58ddb5b818d23d1336ed5d0ab5a68 (patch) | |
tree | 5f7d10a0e500112744472d9cf309a350a106f878 /irc/inspircd | |
parent | 9175bbf645edcccaee18d369efe1e1ebd7c6b6cc (diff) | |
download | freebsd-ports-gnome-1f881892caa58ddb5b818d23d1336ed5d0ab5a68.tar.gz freebsd-ports-gnome-1f881892caa58ddb5b818d23d1336ed5d0ab5a68.tar.zst freebsd-ports-gnome-1f881892caa58ddb5b818d23d1336ed5d0ab5a68.zip |
- Update to 2.0.8
- Made the knobs actually work
- Added regex modules as new knobs
- Added ldapoper module knob
PR: ports/170644
Submitted by: Mark Felder <feld@feld.me> (maintainer)
Diffstat (limited to 'irc/inspircd')
-rw-r--r-- | irc/inspircd/Makefile | 61 | ||||
-rw-r--r-- | irc/inspircd/distinfo | 4 | ||||
-rw-r--r-- | irc/inspircd/files/patch-make_template_main.mk | 22 | ||||
-rw-r--r-- | irc/inspircd/files/patch-src_dns.cpp | 135 | ||||
-rw-r--r-- | irc/inspircd/pkg-plist | 79 |
5 files changed, 121 insertions, 180 deletions
diff --git a/irc/inspircd/Makefile b/irc/inspircd/Makefile index 5b49c8e97b65..9a6730008837 100644 --- a/irc/inspircd/Makefile +++ b/irc/inspircd/Makefile @@ -6,8 +6,7 @@ # PORTNAME= inspircd -PORTVERSION= 2.0.5 -PORTREVISION= 2 +PORTVERSION= 2.0.8 CATEGORIES= irc MASTER_SITES= http://cloud.github.com/downloads/inspircd/inspircd/ DISTNAME= InspIRCd-${PORTVERSION} @@ -36,34 +35,44 @@ USE_PERL5_BUILD=yes HAS_CONFIGURE= yes CONFIGURE_ARGS= --with-cc=${CXX} --config-dir=${ETCDIR} \ - --module-dir=${PREFIX}/lib/${PORTNAME}/modules \ - --library-dir=${PREFIX}/lib/${PORTNAME} \ + --module-dir=${PREFIX}/lib/${PORTNAME}/modules \ --prefix=${PREFIX}/lib/${PORTNAME} --binary-dir=${PREFIX}/bin \ - --enable-kqueue --enable-ipv6 --disable-interactive \ + --enable-kqueue --disable-interactive \ --uid=${INSPIRCD_UID} - PORTDOCS= docs/* extras/* -OPTIONS_DEFINE= MYSQL PGSQL SQLITE LDAP GNUTLS OPENSSL +OPTIONS_DEFINE= MYSQL PGSQL SQLITE LDAPAUTH LDAPOPER GNUTLS OPENSSL PCRE POSIX +OPTIONS_DEFAULT= POSIX GNUTLS_DESC= Build m_ssl_gnutls module -LDAP_DESC= Build m_ldapauth module +LDAPAUTH_DESC= Build m_ldapauth module +LDAPOPER_DESC= Build m_ldapoper module MYSQL_DESC= Build m_mysql module OPENSSL_DESC= Build m_ssl_openssl module PGSQL_DESC= Build m_pgsql module SQLITE_DESC= Build m_sqlite3 module +PCRE_DESC= Build m_regex_pcre module +POSIX_DESC= Build m_regex_posix module .include <bsd.port.options.mk> post-extract: @(cd ${WRKDIR} && ${MV} ${PORTNAME} ${DISTNAME}) -.if ${PORT_OPTIONS:MLDAP} +.if ${PORT_OPTIONS:MLDAPAUTH} USE_OPENLDAP= yes EXTRAS:=${EXTRAS},m_ldapauth.cpp -PLIST_SUB+= LDAP="" +PLIST_SUB+= LDAPAUTH="" +.else +PLIST_SUB+= LDAPAUTH="@comment " +.endif + +.if ${PORT_OPTIONS:MLDAPOPER} +USE_OPENLDAP= yes +EXTRAS:=${EXTRAS},m_ldapoper.cpp +PLIST_SUB+= LDAPOPER="" .else -PLIST_SUB+= LDAP="@comment " +PLIST_SUB+= LDAPOPER="@comment " .endif .if ${PORT_OPTIONS:MMYSQL} @@ -94,6 +103,7 @@ PLIST_SUB+= SQLITE="@comment " LIB_DEPENDS+= gnutls.47:${PORTSDIR}/security/gnutls \ gcrypt.18:${PORTSDIR}/security/libgcrypt CONFIGURE_ARGS+= --enable-gnutls +EXTRAS:=${EXTRAS},m_ssl_gnutls.cpp PLIST_SUB+= GNUTLS="" .else PLIST_SUB+= GNUTLS="@comment " @@ -102,22 +112,41 @@ PLIST_SUB+= GNUTLS="@comment " .if ${PORT_OPTIONS:MOPENSSL} USE_OPENSSL=yes CONFIGURE_ARGS+= --enable-openssl +EXTRAS:=${EXTRAS},m_ssl_openssl.cpp PLIST_SUB+= OPENSSL="" .else PLIST_SUB+= OPENSSL="@comment " .endif -CONFIGURE_ARGS+= --enable-extras=${EXTRAS} +.if ${PORT_OPTIONS:MPCRE} +LIB_DEPENDS+= pcre:${PORTSDIR}/devel/pcre +EXTRAS:=${EXTRAS},m_regex_pcre.cpp +PLIST_SUB+= PCRE="" +.else +PLIST_SUB+= PCRE="@comment " +.endif + +.if ${PORT_OPTIONS:MPOSIX} +EXTRAS:=${EXTRAS},m_regex_posix.cpp +PLIST_SUB+= POSIX="" +.else +PLIST_SUB+= POSIX="@comment " +.endif + +pre-configure: + @if [ ${EXTRAS} ]; then \ + cd ${WRKSRC} && ./${CONFIGURE_SCRIPT} --enable-extras=${EXTRAS} ; \ + fi post-install: @${STRIP_CMD} ${PREFIX}/lib/${PORTNAME}/modules/*.so @${STRIP_CMD} ${PREFIX}/bin/${PORTNAME} .for FILE in inspircd.censor inspircd.conf inspircd.filter inspircd.helpop-full \ inspircd.helpop inspircd.motd inspircd.quotes inspircd.rules links.conf modules.conf opers.conf - @if ${TEST} -f ${ETCDIR}/${FILE} && \ - ${TEST} ! -f ${ETCDIR}/${FILE}.example ; then \ - ${CP} -p ${ETCDIR}/${FILE}.example \ - ${ETCDIR}/${FILE}; \ + @if ${TEST} -f ${ETCDIR}/${FILE} && \ + ${TEST} ! -f ${ETCDIR}/examples/${FILE}.example ; then \ + ${CP} -p ${ETCDIR}/examples/${FILE}.example \ + ${ETCDIR}/${FILE}; \ fi .endfor diff --git a/irc/inspircd/distinfo b/irc/inspircd/distinfo index bfc666f95d11..481eb3ae1688 100644 --- a/irc/inspircd/distinfo +++ b/irc/inspircd/distinfo @@ -1,2 +1,2 @@ -SHA256 (InspIRCd-2.0.5.tar.bz2) = 425bf79ae1348b398ce6d2348f6cc8baeebe8125f62337e98c136942223f4fc6 -SIZE (InspIRCd-2.0.5.tar.bz2) = 575852 +SHA256 (InspIRCd-2.0.8.tar.bz2) = 5fd57df1a2a10f480aefc61272f22fdd8addb5ab3a544582235377b8fa8b9296 +SIZE (InspIRCd-2.0.8.tar.bz2) = 591761 diff --git a/irc/inspircd/files/patch-make_template_main.mk b/irc/inspircd/files/patch-make_template_main.mk new file mode 100644 index 000000000000..e3248d9525bc --- /dev/null +++ b/irc/inspircd/files/patch-make_template_main.mk @@ -0,0 +1,22 @@ +--- make/template/main.mk.orig 2012-07-13 10:38:01.000000000 -0500 ++++ make/template/main.mk 2012-08-14 23:58:06.816315279 -0500 +@@ -58,6 +58,10 @@ + @IFEQ $(SYSTEM) linux + LDLIBS += -ldl -lrt + @ENDIF ++@IFEQ $(SYSTEM) freebsd ++ CXXFLAGS += -I/usr/local/include ++ LDFLAGS += -L/usr/local/lib ++@ENDIF + @IFEQ $(SYSTEM) gnukfreebsd + LDLIBS += -ldl -lrt + @ENDIF +@@ -124,7 +128,7 @@ + CXXFLAGS += -DPURE_STATIC + @ENDIF + +-@DO_EXPORT RUNCC RUNLD CXXFLAGS LDLIBS PICLDFLAGS VERBOSE SOCKETENGINE CORELDFLAGS ++@DO_EXPORT RUNCC RUNLD CXXFLAGS LDLIBS PICLDFLAGS VERBOSE SOCKETENGINE CORELDFLAGS LDFLAGS + @DO_EXPORT SOURCEPATH BUILDPATH PURE_STATIC SPLIT_CC + + # Default target diff --git a/irc/inspircd/files/patch-src_dns.cpp b/irc/inspircd/files/patch-src_dns.cpp deleted file mode 100644 index 3f5990254f9a..000000000000 --- a/irc/inspircd/files/patch-src_dns.cpp +++ /dev/null @@ -1,135 +0,0 @@ ---- src/dns.cpp.orig 2012-05-15 21:45:31.840274636 -0500 -+++ src/dns.cpp 2012-05-15 21:45:58.653278686 -0500 -@@ -38,6 +49,8 @@ - #include "configreader.h" - #include "socket.h" - -+#define DN_COMP_BITMASK 0xC000 /* highest 6 bits in a DN label header */ -+ - /** Masks to mask off the responses we get from the DNSRequest methods - */ - enum QueryInfo -@@ -98,7 +111,7 @@ - - DNSRequest(DNS* dns, int id, const std::string &original); - ~DNSRequest(); -- DNSInfo ResultIsReady(DNSHeader &h, int length); -+ DNSInfo ResultIsReady(DNSHeader &h, unsigned length); - int SendRequests(const DNSHeader *header, const int length, QueryType qt); - }; - -@@ -161,7 +174,10 @@ - /* Allocate the processing buffer */ - DNSRequest::DNSRequest(DNS* dns, int rid, const std::string &original) : dnsobj(dns) - { -- res = new unsigned char[512]; -+ /* hardening against overflow here: make our work buffer twice the theoretical -+ * maximum size so that hostile input doesn't screw us over. -+ */ -+ res = new unsigned char[sizeof(DNSHeader) * 2]; - *res = 0; - orig = original; - RequestTimeout* RT = new RequestTimeout(ServerInstance->Config->dns_timeout ? ServerInstance->Config->dns_timeout : 5, this, rid); -@@ -688,11 +704,11 @@ - } - - /** A result is ready, process it */ --DNSInfo DNSRequest::ResultIsReady(DNSHeader &header, int length) -+DNSInfo DNSRequest::ResultIsReady(DNSHeader &header, unsigned length) - { -- int i = 0; -+ unsigned i = 0, o; - int q = 0; -- int curanswer, o; -+ int curanswer; - ResourceRecord rr; - unsigned short ptr; - -@@ -755,7 +771,7 @@ - else i += header.payload[i] + 1; /* skip length and label */ - } - } -- if (length - i < 10) -+ if (static_cast<int>(length - i) < 10) - return std::make_pair((unsigned char*)NULL,"Incorrectly sized DNS reply"); - - /* XXX: We actually initialise 'rr' here including its ttl field */ -@@ -790,17 +806,37 @@ - - switch (rr.type) - { -+ /* -+ * CNAME and PTR are compressed. We need to decompress them. -+ */ - case DNS_QUERY_CNAME: -- /* CNAME and PTR have the same processing code */ - case DNS_QUERY_PTR: -+ { -+ unsigned short lowest_pos = length; - o = 0; - q = 0; - while (q == 0 && i < length && o + 256 < 1023) - { -+ /* DN label found (byte over 63) */ - if (header.payload[i] > 63) - { - memcpy(&ptr,&header.payload[i],2); -- i = ntohs(ptr) - 0xC000 - 12; -+ -+ i = ntohs(ptr); -+ -+ /* check that highest two bits are set. if not, we've been had */ -+ if ((i & DN_COMP_BITMASK) != DN_COMP_BITMASK) -+ return std::make_pair((unsigned char *) NULL, "DN label decompression header is bogus"); -+ -+ /* mask away the two highest bits. */ -+ i &= ~DN_COMP_BITMASK; -+ -+ /* and decrease length by 12 bytes. */ -+ i -= 12; -+ -+ if (i >= lowest_pos) -+ return std::make_pair((unsigned char *) NULL, "Invalid decompression pointer"); -+ lowest_pos = i; - } - else - { -@@ -813,25 +849,35 @@ - res[o] = 0; - if (o != 0) - res[o++] = '.'; -- memcpy(&res[o],&header.payload[i + 1],header.payload[i]); -+ -+ if (o + header.payload[i] > sizeof(DNSHeader)) -+ return std::make_pair((unsigned char *) NULL, "DN label decompression is impossible -- malformed/hostile packet?"); -+ -+ memcpy(&res[o], &header.payload[i + 1], header.payload[i]); - o += header.payload[i]; - i += header.payload[i] + 1; - } - } - } - res[o] = 0; -+ } - break; - case DNS_QUERY_AAAA: -+ if (rr.rdlength != sizeof(struct in6_addr)) -+ return std::make_pair((unsigned char *) NULL, "rr.rdlength is larger than 16 bytes for an ipv6 entry -- malformed/hostile packet?"); -+ - memcpy(res,&header.payload[i],rr.rdlength); - res[rr.rdlength] = 0; - break; - case DNS_QUERY_A: -+ if (rr.rdlength != sizeof(struct in_addr)) -+ return std::make_pair((unsigned char *) NULL, "rr.rdlength is larger than 4 bytes for an ipv4 entry -- malformed/hostile packet?"); -+ - memcpy(res,&header.payload[i],rr.rdlength); - res[rr.rdlength] = 0; - break; - default: -- memcpy(res,&header.payload[i],rr.rdlength); -- res[rr.rdlength] = 0; -+ return std::make_pair((unsigned char *) NULL, "don't know how to handle undefined type (" + ConvToStr(rr.type) + ") -- rejecting"); - break; - } - return std::make_pair(res,"No error"); diff --git a/irc/inspircd/pkg-plist b/irc/inspircd/pkg-plist index c590d4591e74..d730472c1ef4 100644 --- a/irc/inspircd/pkg-plist +++ b/irc/inspircd/pkg-plist @@ -1,4 +1,21 @@ bin/inspircd +etc/inspircd/examples/opers.conf.example +etc/inspircd/examples/modules/modules.conf.unreal +etc/inspircd/examples/modules/modules.conf.charybdis +etc/inspircd/examples/modules.conf.example +etc/inspircd/examples/links.conf.example +etc/inspircd/examples/inspircd.rules.example +etc/inspircd/examples/inspircd.quotes.example +etc/inspircd/examples/inspircd.motd.example +etc/inspircd/examples/inspircd.helpop.example +etc/inspircd/examples/inspircd.helpop-full.example +etc/inspircd/examples/inspircd.filter.example +etc/inspircd/examples/inspircd.conf.example +etc/inspircd/examples/inspircd.censor.example +etc/inspircd/examples/aliases/neostats.conf.example +etc/inspircd/examples/aliases/ircservices.conf.example +etc/inspircd/examples/aliases/atheme.conf.example +etc/inspircd/examples/aliases/anope.conf.example lib/inspircd/.gdbargs lib/inspircd/inspircd lib/inspircd/modules/cmd_admin.so @@ -117,6 +134,7 @@ lib/inspircd/modules/m_httpd_config.so lib/inspircd/modules/m_httpd_stats.so lib/inspircd/modules/m_ident.so lib/inspircd/modules/m_inviteexception.so +lib/inspircd/modules/m_ircv3.so lib/inspircd/modules/m_joinflood.so lib/inspircd/modules/m_jumpserver.so lib/inspircd/modules/m_kicknorejoin.so @@ -125,6 +143,7 @@ lib/inspircd/modules/m_lockserv.so lib/inspircd/modules/m_maphide.so lib/inspircd/modules/m_md5.so lib/inspircd/modules/m_messageflood.so +lib/inspircd/modules/m_mlock.so lib/inspircd/modules/m_muteban.so lib/inspircd/modules/m_namedmodes.so lib/inspircd/modules/m_namesx.so @@ -182,12 +201,15 @@ lib/inspircd/modules/m_silence.so lib/inspircd/modules/m_spanningtree.so lib/inspircd/modules/m_sqlauth.so lib/inspircd/modules/m_sqloper.so -%%LDAP%%lib/inspircd/modules/m_ldapauth.so +%%LDAPAUTH%%lib/inspircd/modules/m_ldapauth.so +%%LDAPOPER%%lib/inspircd/modules/m_ldapoper.so %%MYSQL%%lib/inspircd/modules/m_mysql.so %%PGSQL%%lib/inspircd/modules/m_pgsql.so %%SQLITE%%lib/inspircd/modules/m_sqlite3.so %%GNUTLS%%lib/inspircd/modules/m_ssl_gnutls.so %%OPENSSL%%lib/inspircd/modules/m_ssl_openssl.so +%%PCRE%%lib/inspircd/modules/m_regex_pcre.so +%%POSIX%%lib/inspircd/modules/m_regex_posix.so lib/inspircd/modules/m_sslinfo.so lib/inspircd/modules/m_sslmodes.so lib/inspircd/modules/m_stripcolor.so @@ -202,42 +224,45 @@ lib/inspircd/modules/m_userip.so lib/inspircd/modules/m_vhost.so lib/inspircd/modules/m_watch.so lib/inspircd/modules/m_xline_db.so +@dirrm etc/inspircd/examples/aliases +@dirrm etc/inspircd/examples/modules +@dirrm etc/inspircd/examples @dirrm lib/inspircd/modules @dirrm lib/inspircd/logs @dirrm lib/inspircd/data @dirrm lib/inspircd -@unexec if cmp -s %D/%%ETCDIR%%/inspircd.censor.example %D/%%ETCDIR%%/inspircd.censor; then rm -f %D/%%ETCDIR%%/inspircd.censor; fi -%%ETCDIR%%/inspircd.censor.example +@unexec if cmp -s %D/%%ETCDIR%%/examples/inspircd.censor.example %D/%%ETCDIR%%/inspircd.censor; then rm -f %D/%%ETCDIR%%/inspircd.censor; fi +%%ETCDIR%%/examples/inspircd.censor.example @exec if [ ! -f %B/inspircd.censor ] ; then cp -p %D/%F %B/inspircd.censor; fi -@unexec if cmp -s %D/%%ETCDIR%%/inspircd.conf.example %D/%%ETCDIR%%/inspircd.conf; then rm -f %D/%%ETCDIR%%/inspircd.conf; fi -%%ETCDIR%%/inspircd.conf.example +@unexec if cmp -s %D/%%ETCDIR%%/examples/inspircd.conf.example %D/%%ETCDIR%%/inspircd.conf; then rm -f %D/%%ETCDIR%%/inspircd.conf; fi +%%ETCDIR%%/examples/inspircd.conf.example @exec if [ ! -f %B/inspircd.conf ] ; then cp -p %D/%F %B/inspircd.conf; fi -@unexec if cmp -s %D/%%ETCDIR%%/inspircd.filter.example %D/%%ETCDIR%%/inspircd.filter; then rm -f %D/%%ETCDIR%%/inspircd.filter; fi -%%ETCDIR%%/inspircd.filter.example +@unexec if cmp -s %D/%%ETCDIR%%/examples/inspircd.filter.example %D/%%ETCDIR%%/inspircd.filter; then rm -f %D/%%ETCDIR%%/inspircd.filter; fi +%%ETCDIR%%/examples/inspircd.filter.example @exec if [ ! -f %B/inspircd.filter ] ; then cp -p %D/%F %B/inspircd.filter; fi -@unexec if cmp -s %D/%%ETCDIR%%/inspircd.helpop.example %D/%%ETCDIR%%/inspircd.helpop; then rm -f %D/%%ETCDIR%%/inspircd.helpop; fi -%%ETCDIR%%/inspircd.helpop.example +@unexec if cmp -s %D/%%ETCDIR%%/examples/inspircd.helpop.example %D/%%ETCDIR%%/inspircd.helpop; then rm -f %D/%%ETCDIR%%/inspircd.helpop; fi +%%ETCDIR%%/examples/inspircd.helpop.example @exec if [ ! -f %B/inspircd.helpop ] ; then cp -p %D/%F %B/inspircd.helpop; fi -@unexec if cmp -s %D/%%ETCDIR%%/inspircd.helpop-full.example %D/%%ETCDIR%%/inspircd.helpop-full; then rm -f %D/%%ETCDIR%%/inspircd.helpop-full; fi -%%ETCDIR%%/inspircd.helpop-full.example +@unexec if cmp -s %D/%%ETCDIR%%/examples/inspircd.helpop-full.example %D/%%ETCDIR%%/inspircd.helpop-full; then rm -f %D/%%ETCDIR%%/inspircd.helpop-full; fi +%%ETCDIR%%/examples/inspircd.helpop-full.example @exec if [ ! -f %B/inspircd.helpop-full ] ; then cp -p %D/%F %B/inspircd.helpop-full; fi -@unexec if cmp -s %D/%%ETCDIR%%/inspircd.motd.example %D/%%ETCDIR%%/inspircd.motd; then rm -f %D/%%ETCDIR%%/inspircd.motd; fi -%%ETCDIR%%/inspircd.motd.example +@unexec if cmp -s %D/%%ETCDIR%%/examples/inspircd.motd.example %D/%%ETCDIR%%/inspircd.motd; then rm -f %D/%%ETCDIR%%/inspircd.motd; fi +%%ETCDIR%%/examples/inspircd.motd.example @exec if [ ! -f %B/inspircd.motd ] ; then cp -p %D/%F %B/inspircd.motd; fi -@unexec if cmp -s %D/%%ETCDIR%%/inspircd.quotes.example %D/%%ETCDIR%%/inspircd.quotes; then rm -f %D/%%ETCDIR%%/inspircd.quotes; fi -%%ETCDIR%%/inspircd.quotes.example +@unexec if cmp -s %D/%%ETCDIR%%/examples/inspircd.quotes.example %D/%%ETCDIR%%/inspircd.quotes; then rm -f %D/%%ETCDIR%%/inspircd.quotes; fi +%%ETCDIR%%/examples/inspircd.quotes.example @exec if [ ! -f %B/inspircd.quotes ] ; then cp -p %D/%F %B/inspircd.quotes; fi -@unexec if cmp -s %D/%%ETCDIR%%/inspircd.rules.example %D/%%ETCDIR%%/inspircd.rules; then rm -f %D/%%ETCDIR%%/inspircd.rules; fi -%%ETCDIR%%/inspircd.rules.example +@unexec if cmp -s %D/%%ETCDIR%%/examples/inspircd.rules.example %D/%%ETCDIR%%/inspircd.rules; then rm -f %D/%%ETCDIR%%/inspircd.rules; fi +%%ETCDIR%%/examples/inspircd.rules.example @exec if [ ! -f %B/inspircd.rules ] ; then cp -p %D/%F %B/inspircd.rules; fi -@unexec if cmp -s %D/%%ETCDIR%%/links.conf.example %D/%%ETCDIR%%/links.conf; then rm -f %D/%%ETCDIR%%/links.conf; fi -%%ETCDIR%%/links.conf.example -@exec if [ ! -f %B/links.conf.example ] ; then cp -p %D/%F %B/links.conf.example; fi -@unexec if cmp -s %D/%%ETCDIR%%/modules.conf.example %D/%%ETCDIR%%/modules.conf; then rm -f %D/%%ETCDIR%%/modules.conf; fi -%%ETCDIR%%/modules.conf.example -@exec if [ ! -f %B/modules.conf.example ] ; then cp -p %D/%F %B/modules.conf.example; fi -@unexec if cmp -s %D/%%ETCDIR%%/opers.conf.example %D/%%ETCDIR%%/opers.conf; then rm -f %D/%%ETCDIR%%/opers.conf; fi -%%ETCDIR%%/opers.conf.example -@exec if [ ! -f %B/opers.conf.example ] ; then cp -p %D/%F %B/opers.conf.example; fi -@unexec echo "If permanently removing software, you may wish to remove the configuration directory by running \"rm -rf %%LOCALBASE%%/%%ETCDIR%%\"" +@unexec if cmp -s %D/%%ETCDIR%%/examples/links.conf.example %D/%%ETCDIR%%/links.conf; then rm -f %D/%%ETCDIR%%/links.conf; fi +%%ETCDIR%%/examples/links.conf.example +@exec if [ ! -f %B/links.conf ] ; then cp -p %D/%F %B/links.conf; fi +@unexec if cmp -s %D/%%ETCDIR%%/examples/modules.conf.example %D/%%ETCDIR%%/modules.conf; then rm -f %D/%%ETCDIR%%/modules.conf; fi +%%ETCDIR%%/examples/modules.conf.example +@exec if [ ! -f %B/modules.conf ] ; then cp -p %D/%F %B/modules.conf; fi +@unexec if cmp -s %D/%%ETCDIR%%/examples/opers.conf.example %D/%%ETCDIR%%/opers.conf; then rm -f %D/%%ETCDIR%%/opers.conf; fi +%%ETCDIR%%/examples/opers.conf.example +@exec if [ ! -f %B/opers.conf ] ; then cp -p %D/%F %B/opers.conf; fi @dirrmtry %%ETCDIR%% +@unexec echo "If permanently removing software, you may wish to remove the configuration directory by running \"rm -rf %%LOCALBASE%%/%%ETCDIR%%\"" |