svn commit: r321813 - in head/net/rwhoisd: . files
Mark Felder
feld at FreeBSD.org
Wed Jun 26 20:22:38 UTC 2013
Author: feld
Date: Wed Jun 26 20:22:37 2013
New Revision: 321813
URL: http://svnweb.freebsd.org/changeset/ports/321813
Log:
- Fix sample install/uninstall
- Fix IPv6 case
- Clean up rc script
PR: ports/179964
Approved by: crees (mentor)
Added:
head/net/rwhoisd/files/patch-server-daemon.c (contents, props changed)
head/net/rwhoisd/files/patch-server-security.c (contents, props changed)
Modified:
head/net/rwhoisd/Makefile
head/net/rwhoisd/files/rwhoisd.in
head/net/rwhoisd/pkg-plist
Modified: head/net/rwhoisd/Makefile
==============================================================================
--- head/net/rwhoisd/Makefile Wed Jun 26 20:16:55 2013 (r321812)
+++ head/net/rwhoisd/Makefile Wed Jun 26 20:22:37 2013 (r321813)
@@ -3,7 +3,7 @@
PORTNAME= rwhoisd
PORTVERSION= 1.5.9.6
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= net ipv6
MASTER_SITES= http://projects.arin.net/rwhois/ftp/ \
http://www.rwhois.net/ftp/ \
@@ -34,6 +34,10 @@ MAN8= rwhois_indexer.8 rwhoisd.8
PORTDOCS= INSTALL.html TODO UPGRADE operations_guide.html \
operations_guide.txt rfc2167.txt security.html security.txt
+ETCFILES= rwhoisd.allow rwhoisd.auth_area rwhoisd.conf rwhoisd.deny \
+ rwhoisd.dir rwhoisd.root rwhoisd.x.dir
+PLIST_SUB+= ETCFILES="${ETCFILES}"
+
.include <bsd.port.options.mk>
.if empty(PORT_OPTIONS:MIPV6)
@@ -45,8 +49,6 @@ CONFIGURE_ARGS+= --enable-largefile
.endif
post-patch:
- @${REINPLACE_CMD} -e 's,rwhoisd/samples,rwhoisd,' \
- ${WRKSRC}/sample.data/Makefile.in
@${REINPLACE_CMD} -e 's,userid: rwhoisd,userid: nobody,' \
-e 's,pid-file: rwhoisd.pid,pid-file: /var/run/rwhoisd/rwhoisd.pid,' \
${WRKSRC}/sample.data/rwhoisd.conf
@@ -54,8 +56,6 @@ post-patch:
${WRKSRC}/common/conf.h
post-install:
- @${MKDIR} /var/log/rwhoisd /var/run/rwhoisd
- @${CHOWN} -R nobody /var/log/rwhoisd /var/run/rwhoisd
${INSTALL_MAN} ${WRKSRC}/doc/rwhois_indexer.8 ${PREFIX}/man/man8
${INSTALL_MAN} ${WRKSRC}/doc/rwhoisd.8 ${PREFIX}/man/man8
.if ${PORT_OPTIONS:MDOCS}
Added: head/net/rwhoisd/files/patch-server-daemon.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/net/rwhoisd/files/patch-server-daemon.c Wed Jun 26 20:22:37 2013 (r321813)
@@ -0,0 +1,190 @@
+--- server/daemon.c.orig 2005-06-01 09:20:55.000000000 +0900
++++ server/daemon.c 2013-06-26 14:51:58.000000000 +0900
+@@ -17,6 +17,8 @@
+ #include "session.h"
+ #include "sslave.h"
+
++#include <sys/select.h>
++
+ /* -------------------- Local Vars ---------------------- */
+
+ static int hup_recvd = FALSE;
+@@ -173,17 +175,16 @@
+ signal(SIGCHLD, sigchld_handler);
+ }
+
++#define MAXSOCK 16
++
+ int
+ run_daemon()
+ {
+-#ifdef HAVE_IPV6
+ struct sockaddr_storage client_addr;
+- struct sockaddr_in6 server_addr;
+-#else
+- struct sockaddr_in client_addr;
+- struct sockaddr_in server_addr;
+-#endif
+- int sockfd;
++ struct addrinfo hints, *res, *res0;
++ fd_set fds, fds0;
++ int sockfd[MAXSOCK], nsock, maxsock, i;
++ char servname[NI_MAXSERV];
+ int newsockfd;
+ int clilen;
+ int childpid;
+@@ -191,25 +192,39 @@
+ int port = get_port();
+ int failure = 0;
+
++ memset(&hints, 0, sizeof(hints));
++ hints.ai_family = PF_UNSPEC;
++ hints.ai_socktype = SOCK_STREAM;
++ hints.ai_flags = AI_PASSIVE | AI_NUMERICSERV;
++ snprintf(servname, sizeof(servname), "%d", port);
++ servname[sizeof(servname) - 1] = '\0';
++ failure = getaddrinfo(NULL, servname, &hints, &res0);
++
++ if (failure) {
++ log(L_LOG_ERR, CONFIG, "run_daemon: getaddrinfo().");
++ exit(1);
++ }
++ FD_ZERO(&fds0);
++ maxsock = nsock = 0;
++ for (res = res0; res && nsock < MAXSOCK; res = res->ai_next) {
++ if (res->ai_family != AF_INET
+ #ifdef HAVE_IPV6
+- /* This will accept both IPv4 and IPv6 connections on any interface
+- including the loopback so that a local client can send to us. */
+- if ( ( sockfd = socket( AF_INET6, SOCK_STREAM, IPPROTO_TCP ) ) < 0 )
+-#else
+- if ((sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
++ && res->ai_family != AF_INET6
+ #endif
+- {
+- log(L_LOG_ERR, CONFIG, "run_daemon: Can not open socket: %s",
++ )
++ continue;
++ sockfd[nsock] = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
++ if (sockfd[nsock] < 0) {
++ log(L_LOG_ERR, CONFIG, "run_daemon: Can not open socket: %s",
+ strerror(errno));
+- exit (1);
+- }
+-
+- if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&one, sizeof(one))
++ continue;
++ }
++ if (setsockopt(sockfd[nsock], SOL_SOCKET, SO_REUSEADDR, (char *)&one, sizeof(one))
+ < 0)
+ {
+ log(L_LOG_ERR, CONFIG,
+ "run_daemon: Can not set socket options SO_REUSEADDR");
+- exit(1);
++ continue;
+ }
+
+ #ifdef NEED_LINGER
+@@ -222,28 +237,31 @@
+ sizeof(struct linger));
+ }
+ #endif /* NEED_LINGER */
+-
+- /* for now, we will bind to all IP interfaces (INADDR_ANY) */
+- /* Bind our local address so that the client can send to us */
+- bzero((char *)&server_addr, sizeof(server_addr));
+-#ifdef HAVE_IPV6
+- server_addr.sin6_family = AF_INET6;
+- server_addr.sin6_port = htons(port);
+- server_addr.sin6_addr = in6addr_any;
+-#else
+- server_addr.sin_family = AF_INET;
+- server_addr.sin_port = htons(port);
+- server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+-#endif
+-
+- if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
+- {
+- log(L_LOG_ERR, CONFIG, "run_daemon: Can not bind socket: %s",
+- strerror(errno));
+- exit(1);
++ if (bind(sockfd[nsock], res->ai_addr, res->ai_addrlen) < 0) {
++ log(L_LOG_ERR, CONFIG, "run_daemon: Can not bind socket: %s",
++ strerror(errno));
++ close(sockfd[nsock]);
++ sockfd[nsock] = -1;
++ continue;
++ }
++ if (listen(sockfd[nsock], get_listen_queue_length()) == -1) {
++ log(L_LOG_ERR, CONFIG, "run_daemon: listen: %s",
++ strerror(errno));
++ close(sockfd[nsock]);
++ sockfd[nsock] = -1;
++ continue;
++ }
++ FD_SET(sockfd[nsock], &fds0);
++ if (maxsock < sockfd[nsock])
++ maxsock = sockfd[nsock];
++ nsock++;
+ }
++ freeaddrinfo(res0);
+
+- listen(sockfd, get_listen_queue_length());
++ if (nsock == 0) {
++ log(L_LOG_ERR, CONFIG, "run_daemon: Can not open socket");
++ exit (1);
++ }
+
+ no_zombies();
+
+@@ -274,16 +292,32 @@
+ hup_recvd = FALSE;
+ }
+
++ newsockfd = -1;
++ memcpy(&fds, &fds0, sizeof(fds));
+ clilen = sizeof(client_addr);
+- newsockfd = accept(sockfd, (struct sockaddr *) &client_addr, &clilen);
+- if (newsockfd < 0)
+- {
+- if (errno == EINTR)
+- {
++ if (select(maxsock + 1, &fds, NULL, NULL, NULL) > 0) {
++ for (i = 0; i < nsock; i++) {
++ if (FD_ISSET(sockfd[i], &fds)) {
++ newsockfd = accept(sockfd[i], (struct sockaddr *) &client_addr,
++ &clilen);
++ if (newsockfd < 0) {
++ if (errno != EINTR)
++ fprintf(stderr, "run_daemon: accept error: %s\n", strerror(errno));
++ continue;
++ } else
++ break;
++ }
++ }
++ if (newsockfd < 0) {
++ fprintf(stderr, "run_daemon: ignored\n");
++ continue;
++ }
++ } else {
++ if (errno != EINTR) {
++ fprintf(stderr, "run_daemon: select error: %s\n", strerror(errno));
++ exit(1);
++ } else
+ continue;
+- }
+- fprintf(stderr, "run_daemon: accept error: %s\n", strerror(errno));
+- continue;
+ }
+
+ failure = 0;
+@@ -312,7 +346,8 @@
+ exit(1);
+ }
+
+- close(sockfd);
++ for (i = 0; i < nsock; i++)
++ close(sockfd[i]);
+
+ if (!authorized_client())
+ {
Added: head/net/rwhoisd/files/patch-server-security.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/net/rwhoisd/files/patch-server-security.c Wed Jun 26 20:22:37 2013 (r321813)
@@ -0,0 +1,83 @@
+--- server/security.c.orig 2005-06-01 09:20:55.000000000 +0900
++++ server/security.c 2013-06-26 14:56:12.000000000 +0900
+@@ -110,18 +110,17 @@
+ char *hosts_deny;
+ extern char *hosts_allow_table;
+ extern char *hosts_deny_table;
+-# ifdef HAVE_IPV6
+- struct sockaddr_in *sin;
+ struct sockaddr_storage ss;
+- struct sockaddr_in6 *sin6;
+ struct sockaddr *sa;
+ socklen_t salen = sizeof ss;
++#ifdef HAVE_IPV6
+ char addr[INET6_ADDRSTRLEN];
+ char wrapper_addr[INET6_ADDRSTRLEN + 2];
++#else
++ char addr[INET_ADDRSTRLEN];
++ char wrapper_addr[INET_ADDRSTRLEN + 2];
++#endif
+ char client_name[NI_MAXHOST];
+-# else
+- struct request_info req;
+-# endif /* HAVE_IPV6 */
+
+ hosts_allow = get_security_allow();
+ hosts_deny = get_security_deny();
+@@ -133,7 +132,6 @@
+ hosts_allow_table = hosts_allow;
+ hosts_deny_table = hosts_deny;
+
+-# ifdef HAVE_IPV6
+ /* Do this the new way, which specifically knows how to format IPv6
+ addresses. */
+
+@@ -153,42 +151,15 @@
+
+ /* convert the address to a presentation format that tcp wrapper
+ understands */
+- switch ( sa->sa_family ) {
+- case AF_INET: {
+- sin = (struct sockaddr_in *) sa;
+- strncpy( wrapper_addr,
+- inet_ntop( AF_INET, (void *) sin->sin_addr.s_addr, addr,
+- sizeof addr ),
+- sizeof wrapper_addr ) ;
+- }
+- case AF_INET6: {
+- sin6 = (struct sockaddr_in6 *) sa;
+- inet_ntop( AF_INET6, (void *) sin6->sin6_addr.s6_addr, addr, sizeof
+- addr );
+- /* If it's an IPv4 mapped address, drop the leading '::ffff:' */
+- if ( IN6_IS_ADDR_V4MAPPED( &(sin6->sin6_addr) ) )
+- strncpy( wrapper_addr, addr + 7, sizeof wrapper_addr );
+- /* otherwise surround the address with braces to hopefully match
+- what tcp wrapper expects */
+- else sprintf( wrapper_addr, "%s", addr );
+- }
+- }
++
++ if (getnameinfo(sa, salen, wrapper_addr, sizeof(wrapper_addr), NULL, 0,
++ NI_NUMERICHOST) != 0)
++ log(L_LOG_WARNING, CONFIG, "getnameinfo failed: %s",
++ strerror(errno));
++
+ log( L_LOG_WARNING, CONFIG, "client tcp wrapper address: %s", wrapper_addr );
+
+ return( hosts_ctl( directive, client_name, wrapper_addr, STRING_UNKNOWN ) );
+-# else /* HAVE_IPV6 */
+-
+- /* Do this the old way, which still seems to work */
+-
+- /* set up the request structure */
+- request_init(&req, RQ_FILE, 0, RQ_DAEMON, directive, 0);
+-
+- /* fill in the client info */
+- fromhost(&req);
+-
+- /* return the results of the access check */
+- return(hosts_access(&req));
+-# endif /* HAVE_IPV6 */
+
+ #else /* USE_TCP_WRAPPERS */
+ return TRUE;
Modified: head/net/rwhoisd/files/rwhoisd.in
==============================================================================
--- head/net/rwhoisd/files/rwhoisd.in Wed Jun 26 20:16:55 2013 (r321812)
+++ head/net/rwhoisd/files/rwhoisd.in Wed Jun 26 20:22:37 2013 (r321813)
@@ -1,5 +1,7 @@
#!/bin/sh
-
+#
+# $FreeBSD$
+#
# PROVIDE: rwhoisd
# REQUIRE: LOGIN
# KEYWORD: shutdown
@@ -15,18 +17,17 @@
. /etc/rc.subr
-name="rwhoisd"
+name=rwhoisd
rcvar=rwhoisd_enable
-
-command=%%PREFIX%%/sbin/${name}
-pidfile=${rwhoisd_pidfile}
-
load_rc_config $name
-: ${rwhoisd_enable="NO"}
+: ${rwhoisd_enable:=NO}
: ${rwhoisd_config="%%PREFIX%%/etc/rwhoisd/rwhoisd.conf"}
: ${rwhoisd_pidfile="/var/run/${name}/${name}.pid"}
+command=%%PREFIX%%/sbin/${name}
+pidfile=${rwhoisd_pidfile}
+
command_args="-d -c $rwhoisd_config"
run_rc_command "$1"
Modified: head/net/rwhoisd/pkg-plist
==============================================================================
--- head/net/rwhoisd/pkg-plist Wed Jun 26 20:16:55 2013 (r321812)
+++ head/net/rwhoisd/pkg-plist Wed Jun 26 20:22:37 2013 (r321813)
@@ -2,66 +2,69 @@ bin/rwhois_deleter
bin/rwhois_indexer
bin/rwhois_repack
sbin/rwhoisd
-etc/rwhoisd/a.com/attribute_defs/asn.tmpl
-etc/rwhoisd/a.com/attribute_defs/contact.tmpl
-etc/rwhoisd/a.com/attribute_defs/domain.tmpl
-etc/rwhoisd/a.com/attribute_defs/guardian.tmpl
-etc/rwhoisd/a.com/attribute_defs/host.tmpl
-etc/rwhoisd/a.com/attribute_defs/org.tmpl
-etc/rwhoisd/a.com/attribute_defs/referral.tmpl
-etc/rwhoisd/a.com/data/asn/asn.txt
-etc/rwhoisd/a.com/data/contact/contact.txt
-etc/rwhoisd/a.com/data/domain/domain.txt
-etc/rwhoisd/a.com/data/guardian/guardian.txt
-etc/rwhoisd/a.com/data/host/host.txt
-etc/rwhoisd/a.com/data/org/org.txt
-etc/rwhoisd/a.com/data/referral/referral.txt
-etc/rwhoisd/a.com/schema
-etc/rwhoisd/a.com/soa
-etc/rwhoisd/net-10.0.0.0-8/attribute_defs/contact.tmpl
-etc/rwhoisd/net-10.0.0.0-8/attribute_defs/guardian.tmpl
-etc/rwhoisd/net-10.0.0.0-8/attribute_defs/host.tmpl
-etc/rwhoisd/net-10.0.0.0-8/attribute_defs/network.tmpl
-etc/rwhoisd/net-10.0.0.0-8/attribute_defs/referral.tmpl
-etc/rwhoisd/net-10.0.0.0-8/data/network/network.txt
-etc/rwhoisd/net-10.0.0.0-8/data/referral/referral.txt
-etc/rwhoisd/net-10.0.0.0-8/schema
-etc/rwhoisd/net-10.0.0.0-8/soa
-etc/rwhoisd/net-fd00:1234::-32/attribute_defs/host.tmpl
-etc/rwhoisd/net-fd00:1234::-32/attribute_defs/referral.tmpl
-etc/rwhoisd/net-fd00:1234::-32/attribute_defs/contact.tmpl
-etc/rwhoisd/net-fd00:1234::-32/attribute_defs/guardian.tmpl
-etc/rwhoisd/net-fd00:1234::-32/attribute_defs/network.tmpl
-etc/rwhoisd/net-fd00:1234::-32/data/referral/referral.txt
-etc/rwhoisd/net-fd00:1234::-32/data/network/network.txt
-etc/rwhoisd/net-fd00:1234::-32/soa
-etc/rwhoisd/net-fd00:1234::-32/schema
-etc/rwhoisd/rwhoisd.allow
-etc/rwhoisd/rwhoisd.auth_area
-etc/rwhoisd/rwhoisd.conf
-etc/rwhoisd/rwhoisd.deny
-etc/rwhoisd/rwhoisd.dir
-etc/rwhoisd/rwhoisd.root
-etc/rwhoisd/rwhoisd.x.dir
- at dirrm etc/rwhoisd/net-10.0.0.0-8/data/referral
- at dirrm etc/rwhoisd/net-10.0.0.0-8/data/network
- at dirrm etc/rwhoisd/net-10.0.0.0-8/data
- at dirrm etc/rwhoisd/net-10.0.0.0-8/attribute_defs
- at dirrm etc/rwhoisd/net-10.0.0.0-8
- at dirrm etc/rwhoisd/net-fd00:1234::-32/attribute_defs
- at dirrm etc/rwhoisd/net-fd00:1234::-32/data/referral
- at dirrm etc/rwhoisd/net-fd00:1234::-32/data/network
- at dirrm etc/rwhoisd/net-fd00:1234::-32/data
- at dirrm etc/rwhoisd/net-fd00:1234::-32
- at dirrm etc/rwhoisd/a.com/data/referral
- at dirrm etc/rwhoisd/a.com/data/org
- at dirrm etc/rwhoisd/a.com/data/host
- at dirrm etc/rwhoisd/a.com/data/guardian
- at dirrm etc/rwhoisd/a.com/data/domain
- at dirrm etc/rwhoisd/a.com/data/contact
- at dirrm etc/rwhoisd/a.com/data/asn
- at dirrm etc/rwhoisd/a.com/data
- at dirrm etc/rwhoisd/a.com/attribute_defs
- at dirrm etc/rwhoisd/a.com
- at dirrmtry etc/rwhoisd
- at exec mkdir -p /var/log/rwhoisd /var/run/rwhoisd; chown -R nobody /var/log/rwhoisd /var/run/rwhoisd
+%%ETCDIR%%/samples/a.com/attribute_defs/asn.tmpl
+%%ETCDIR%%/samples/a.com/attribute_defs/contact.tmpl
+%%ETCDIR%%/samples/a.com/attribute_defs/domain.tmpl
+%%ETCDIR%%/samples/a.com/attribute_defs/guardian.tmpl
+%%ETCDIR%%/samples/a.com/attribute_defs/host.tmpl
+%%ETCDIR%%/samples/a.com/attribute_defs/org.tmpl
+%%ETCDIR%%/samples/a.com/attribute_defs/referral.tmpl
+%%ETCDIR%%/samples/a.com/data/asn/asn.txt
+%%ETCDIR%%/samples/a.com/data/contact/contact.txt
+%%ETCDIR%%/samples/a.com/data/domain/domain.txt
+%%ETCDIR%%/samples/a.com/data/guardian/guardian.txt
+%%ETCDIR%%/samples/a.com/data/host/host.txt
+%%ETCDIR%%/samples/a.com/data/org/org.txt
+%%ETCDIR%%/samples/a.com/data/referral/referral.txt
+%%ETCDIR%%/samples/a.com/schema
+%%ETCDIR%%/samples/a.com/soa
+%%ETCDIR%%/samples/net-10.0.0.0-8/attribute_defs/contact.tmpl
+%%ETCDIR%%/samples/net-10.0.0.0-8/attribute_defs/guardian.tmpl
+%%ETCDIR%%/samples/net-10.0.0.0-8/attribute_defs/host.tmpl
+%%ETCDIR%%/samples/net-10.0.0.0-8/attribute_defs/network.tmpl
+%%ETCDIR%%/samples/net-10.0.0.0-8/attribute_defs/referral.tmpl
+%%ETCDIR%%/samples/net-10.0.0.0-8/data/network/network.txt
+%%ETCDIR%%/samples/net-10.0.0.0-8/data/referral/referral.txt
+%%ETCDIR%%/samples/net-10.0.0.0-8/schema
+%%ETCDIR%%/samples/net-10.0.0.0-8/soa
+%%ETCDIR%%/samples/net-fd00:1234::-32/attribute_defs/host.tmpl
+%%ETCDIR%%/samples/net-fd00:1234::-32/attribute_defs/referral.tmpl
+%%ETCDIR%%/samples/net-fd00:1234::-32/attribute_defs/contact.tmpl
+%%ETCDIR%%/samples/net-fd00:1234::-32/attribute_defs/guardian.tmpl
+%%ETCDIR%%/samples/net-fd00:1234::-32/attribute_defs/network.tmpl
+%%ETCDIR%%/samples/net-fd00:1234::-32/data/referral/referral.txt
+%%ETCDIR%%/samples/net-fd00:1234::-32/data/network/network.txt
+%%ETCDIR%%/samples/net-fd00:1234::-32/soa
+%%ETCDIR%%/samples/net-fd00:1234::-32/schema
+%%ETCDIR%%/samples/rwhoisd.allow
+%%ETCDIR%%/samples/rwhoisd.auth_area
+%%ETCDIR%%/samples/rwhoisd.conf
+%%ETCDIR%%/samples/rwhoisd.deny
+%%ETCDIR%%/samples/rwhoisd.dir
+%%ETCDIR%%/samples/rwhoisd.root
+%%ETCDIR%%/samples/rwhoisd.x.dir
+ at dirrm %%ETCDIR%%/samples/net-10.0.0.0-8/data/referral
+ at dirrm %%ETCDIR%%/samples/net-10.0.0.0-8/data/network
+ at dirrm %%ETCDIR%%/samples/net-10.0.0.0-8/data
+ at dirrm %%ETCDIR%%/samples/net-10.0.0.0-8/attribute_defs
+ at dirrm %%ETCDIR%%/samples/net-10.0.0.0-8
+ at dirrm %%ETCDIR%%/samples/net-fd00:1234::-32/attribute_defs
+ at dirrm %%ETCDIR%%/samples/net-fd00:1234::-32/data/referral
+ at dirrm %%ETCDIR%%/samples/net-fd00:1234::-32/data/network
+ at dirrm %%ETCDIR%%/samples/net-fd00:1234::-32/data
+ at dirrm %%ETCDIR%%/samples/net-fd00:1234::-32
+ at dirrm %%ETCDIR%%/samples/a.com/data/referral
+ at dirrm %%ETCDIR%%/samples/a.com/data/org
+ at dirrm %%ETCDIR%%/samples/a.com/data/host
+ at dirrm %%ETCDIR%%/samples/a.com/data/guardian
+ at dirrm %%ETCDIR%%/samples/a.com/data/domain
+ at dirrm %%ETCDIR%%/samples/a.com/data/contact
+ at dirrm %%ETCDIR%%/samples/a.com/data/asn
+ at dirrm %%ETCDIR%%/samples/a.com/data
+ at dirrm %%ETCDIR%%/samples/a.com/attribute_defs
+ at dirrm %%ETCDIR%%/samples/a.com
+ at dirrm %%ETCDIR%%/samples
+ at dirrmtry %%ETCDIR%%
+ at exec install -d -o nobody /var/log/rwhoisd /var/run/rwhoisd
+ at exec for f in %%ETCFILES%%; do [ -f %D/%%ETCDIR%%/$f ] || cp -p %D/%%ETCDIR%%/samples/$f %D/%%ETCDIR%%/$f; done
+ at unexec for f in %%ETCFILES%%; do cmp -s %D/%%ETCDIR%%/$f %D/%%ETCDIR%%/samples/$f && rm -f %D/%%ETCDIR%%/$f || true; done
More information about the svn-ports-head
mailing list