aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorehaupt <ehaupt@FreeBSD.org>2006-01-09 21:56:03 +0800
committerehaupt <ehaupt@FreeBSD.org>2006-01-09 21:56:03 +0800
commitdee8a10e9dedbcb3fa7b2a8bce0b75b131f5437d (patch)
tree5e1811eeb9edb052c00ac0b58375e2541215fe35 /net
parentc03047ee0f2b8027ac04a886fdb7a17f89d59416 (diff)
downloadfreebsd-ports-gnome-dee8a10e9dedbcb3fa7b2a8bce0b75b131f5437d.tar.gz
freebsd-ports-gnome-dee8a10e9dedbcb3fa7b2a8bce0b75b131f5437d.tar.zst
freebsd-ports-gnome-dee8a10e9dedbcb3fa7b2a8bce0b75b131f5437d.zip
- Update to 2.3
- New version has IPv6 support, thus add to ipv6 sub category - Provide rcNG script - Install config file PR: 91547 Submitted by: Yoshihiko Sarumaru <mistral@imasy.or.jp> (maintainer)
Diffstat (limited to 'net')
-rw-r--r--net/stone/Makefile56
-rw-r--r--net/stone/distinfo5
-rw-r--r--net/stone/files/stone.1464
-rw-r--r--net/stone/files/stone.1.ja455
-rw-r--r--net/stone/files/stone.cnf6
-rw-r--r--net/stone/files/stone.sh.in59
-rw-r--r--net/stone/pkg-plist4
7 files changed, 1017 insertions, 32 deletions
diff --git a/net/stone/Makefile b/net/stone/Makefile
index 4a3e6c9ee3e3..6b5b9cd8606e 100644
--- a/net/stone/Makefile
+++ b/net/stone/Makefile
@@ -6,48 +6,44 @@
#
PORTNAME= stone
-PORTVERSION= 2.2c
-CATEGORIES= net
+PORTVERSION= 2.3
+CATEGORIES= net ipv6
MASTER_SITES= http://www.gcd.org/sengoku/stone/
MAINTAINER= mistral@imasy.or.jp
COMMENT= Stone is a TCP/IP packet repeater in the application layer
-MAN1= ${PORTNAME}.1
+MAN1= stone.1
MANLANG= "" ja
-PLIST_FILES= bin/stone
-USE_REINPLACE= yes
+USE_RC_SUBR= stone.sh
+USE_OPENSSL= yes
+USE_REINPLACE= yes
-.if exists(${PREFIX}/lib/libssl.so)
-ALL_TARGET= bsd-ssl
-MAKE_ARGS= -e SSL_FLAGS="-DUSE_SSL -I${PREFIX}/include" SSL_LIBS="-L${PREFIX}/lib -lssl -lcrypto"
-.elif exists(/usr/lib/libssl.so)
-ALL_TARGET= bsd-ssl
-MAKE_ARGS= -e SSL_FLAGS="-DUSE_SSL" SSL_LIBS="-lssl -lcrypto"
-.else
-ALL_TARGET= bsd-pop
-MAKE_ARGS= -e POP_LIBS="-lmd"
-NEED_GLOBAL_H= yes
-.endif
-
-pre-everything::
-.if ${ALL_TARGET} != bsd-ssl
- @${ECHO_CMD} "You can build stone with SSL support by installing OpenSSL."
-.endif
+.include <bsd.port.pre.mk>
-pre-patch:
- ${REINPLACE_CMD} -e "s/-D_THREAD_SAFE/${PTHREAD_CFLAGS}/g;s/-pthread/${PTHREAD_LIBS}/g" ${WRKSRC}/Makefile
-
-pre-build:
-.if defined(NEED_GLOBAL_H)
+.if defined(WITHOUT_SSL)
+.undef USE_OPENSSL
+ALL_TARGET= bsd-pop
+MAKE_ARGS= POP_LIBS="-lmd" LIBS="-DUNIX_DAEMON"
+post-extract:
${TOUCH} ${WRKSRC}/global.h
+.else
+ALL_TARGET= bsd-ssl
+MAKE_ARGS= SSL_FLAGS="-DUSE_SSL -I${OPENSSLINC}" \
+ SSL_LIBS="-L${OPENSSLLIB} -lssl -lcrypto" LIBS="-DUNIX_DAEMON"
.endif
+post-patch:
+ @${REINPLACE_CMD} -e '/^CFLAGS/d' ${WRKSRC}/${MAKEFILE}
+
do-install:
${INSTALL_PROGRAM} ${WRKSRC}/stone ${PREFIX}/bin/stone
- ${INSTALL_MAN} ${WRKSRC}/stone.1 ${PREFIX}/man/man1/stone.1
- ${INSTALL_MAN} ${WRKSRC}/stone.1.ja ${PREFIX}/man/ja/man1/stone.1
+ ${INSTALL_MAN} ${FILESDIR}/stone.1 ${PREFIX}/man/man1/stone.1
+ ${INSTALL_MAN} ${FILESDIR}/stone.1.ja ${PREFIX}/man/ja/man1/stone.1
+ ${INSTALL_DATA} ${FILESDIR}/stone.cnf ${PREFIX}/etc/stone.cnf.sample
+.if !exists(${PREFIX}/etc/stone.cnf)
+ ${INSTALL_DATA} ${FILESDIR}/stone.cnf ${PREFIX}/etc
+.endif
-#.include <bsd.port.post.mk>
-.include <bsd.port.mk>
+.include <bsd.port.post.mk>
diff --git a/net/stone/distinfo b/net/stone/distinfo
index 6d63d85cc387..398db37175db 100644
--- a/net/stone/distinfo
+++ b/net/stone/distinfo
@@ -1,2 +1,3 @@
-MD5 (stone-2.2c.tar.gz) = c13a7e240f939c44a24173954e52b6eb
-SIZE (stone-2.2c.tar.gz) = 61819
+MD5 (stone-2.3.tar.gz) = 1edb56a30d3f6dd8c38f8333d67f2720
+SHA256 (stone-2.3.tar.gz) = 539cc251ee2b3eae09b33063603a419a4405ae3abdc30f3d003907b8cbcf340d
+SIZE (stone-2.3.tar.gz) = 82141
diff --git a/net/stone/files/stone.1 b/net/stone/files/stone.1
new file mode 100644
index 000000000000..fa10c6eef18f
--- /dev/null
+++ b/net/stone/files/stone.1
@@ -0,0 +1,464 @@
+.\" Roff format skeleton provided by Taketo Kabe <kabe@sra-tohoku.co.jp>
+.TH stone 1 "version 2.3"
+.
+.SH NAME
+stone \- Simple Repeater
+.
+.SH SYNOPSIS
+.B "stone [-C \fIfile\fP] [-P \fIcommand\fP] [-Q \fIoptions\fP] [-N] [-d] [-p] [-n]"
+.br
+.B " [-u \fImax\fP] [-f \fIn\fP] [-l] [-L \fIfile\fP] [-a \fIfile\fP] [-i \fIfile\fP]"
+.br
+.B " [-X \fIn\fP] [-T \fIn\fP] [-r]"
+.br
+.B " [-x \fIport\fP[,\fIport\fP][-\fIport\fP]... \fIxhost\fP... --]"
+.br
+.B " [-s \fIsend\fP \fIexpect\fP... --]"
+.br
+.B " [-b [\fIvar\fP=\fIval\fP]... \fIn\fP \fImaster\fP:\fIport\fP \fIbackup\fP:\fIport\fP]"
+.br
+.B " [-B \fIhost\fP:\fIport\fP \fIhost1\fP:\fIport1\fP... --]"
+.br
+.B " [-I \fIhost\fP]"
+.br
+.B " [-o \fIn\fP] [-g \fIn\fP] [-t \fIdir\fP] [-D] [-c \fIdir\fP]"
+.br
+.B " [-q \fISSL\fP] [-z \fISSL\fP]"
+.br
+.B " [-M install \fIname\fP] [-M remove \fIname\fP]"
+.br
+.B " \fIst\fP [-- \fIst\fP]..."
+.
+.SH DESCRIPTION
+\fBStone\fP is a TCP & UDP repeater in the application layer. It repeats TCP
+and UDP from inside to outside of a firewall, or from outside to inside.
+.P
+\fBStone\fP has following features:
+.
+.TP
+.B 1. Stone supports Win32.
+Formerly, UNIX machines are used as firewalls, but recently
+WindowsNT machines are used, too. You can easily run \fBstone\fP on
+WindowsNT and Windows95. Of course, available on Linux,
+FreeBSD, BSD/OS, SunOS, Solaris, HP-UX and so on.
+.
+.TP
+.B 2. Simple.
+\fBStone\fP's source code is only 8000 lines long (written in C
+language), so you can minimize the risk of security
+holes.
+.
+.TP
+.B 3. Stone supports SSL.
+Using OpenSSL (\fIhttp://www.openssl.org/\fP), \fBstone\fP can
+encrypt/decrypt. Client verifications, and server verifications
+are also supported. \fBStone\fP can send a substring of the subject
+of the certificate to the destination.
+.
+.TP
+.B 4. Stone is a http proxy.
+\fBStone\fP can also be a tiny http proxy.
+.
+.TP
+.B 5. POP -> APOP conversion.
+With \fBstone\fP and a mailer that does not support APOP, you can
+access to an APOP server.
+.
+.TP
+.B 6. Stone supports IPv6.
+\fBStone\fP can convert IP and IPv6 each other. With \fBstone\fP, you can
+use IP-only software on IPv6 network.
+.
+.SH OPTIONS
+If the \fB-C\fP \fIfile\fP flag is used, the program read these
+options and \fIst\fPs from the configuration file \fIfile\fP.
+If the \fB-P\fP \fIcommand\fP flag is used, the program executes
+specified pre-processor to read the configuration file. \fB-Q\fP \fIoptions\fP
+can be used to pass options to the pre-processor. If the \fB-N\fP
+flag is used, \fBstone\fP will terminate after parsing options
+and configuration file without opening the ports.
+.P
+If the \fB-d\fP flag is used, then increase the debug level. If
+the \fB-p\fP flag is used, data repeated by \fBstone\fP are dumped. If
+the \fB-n\fP is used, IP addresses and service port numbers are
+shown instead of host names and service names.
+.P
+If the \fB-u\fP \fImax\fP flag (\fImax\fP is integer) is used, the
+program memorize \fImax\fP UDP sources simultaneously. The default value
+is 100. If the
+\fB-f\fP \fIn\fP flag (\fIn\fP is integer) is used, the program spawn
+\fIn\fP child processes. The default behavior is not to spawn any child processes.
+.P
+If the \fB-l\fP flag is used, the program sends error messages to
+the syslog instead of stderr. If the \fB-L\fP \fIfile\fP (\fIfile\fP
+is a file name) flag is used, the program writes error messages
+to the file. If the \fB-a\fP \fIfile\fP flag is used, the program
+writes accounting to the file. If the \fB-i\fP \fIfile\fP flag is
+used, the program writes its process ID to the file.
+.P
+The \fB-X\fP \fIn\fP flag alters the buffer size of the repeater.
+The default value is 1000 bytes. If
+the \fB-T\fP \fIn\fP is used, the timeout of TCP sessions can be
+specified to \fIn\fP sec. Default: 600 (10 min). The \fB-r\fP flag is
+used, SO_REUSEADDR is set on the socket of \fIst\fP .
+.P
+Using the \fB-x\fP \fIport\fP[,\fIport\fP][-\fIport\fP]... \fIxhost\fP... \fB--\FP flag,
+the http proxy (described later) can only connect to
+\fIxhost\fP:\fIport\fP. If more than one \fB-x\fP ... \fB--\fI flags are
+designated, the posterior one whose \fIport\fP list matches the
+connecting port. If the \fB-x\fP \fB--\fP is used, prior \fB-x\fP flags
+are ignored.
+.P
+The \fB-b\fP \fIn\fP \fImaster\fP:\fIport\fP \fIbackup\fP:\fIport\fP flag designates
+the backup destination for \fImaster\fP:\fIport\fP. The program checks
+every \fIn\fP seconds whether \fImaster\fP:\fIport\fP is connectable, using
+the health check script defined by \fB-s\fP flag described below.
+If not, the backup is used instead. Alternative \fIhost\fP can be
+checked, using host=\fIhost\fP and alternative \fIport\fP, using
+port=\fIport\fP.
+.P
+The \fB-s\fP \fIsend\fP \fIexpect\fP... \fB--\fP flag defines the health check
+script. Sending \fIsend\fP, then checks whether the response match
+the regular expression \fIexpect\fP.
+.P
+The \fB-B\fP \fIhost\fP:\fIport\fP \fIhost1\fP:\fIport1\fP... \fB--\fP is for the
+destination group. If the destination of \fIst\fP is \fIhost\fP:\fIport\fP,
+the program chooses a destination randomly from the group. The
+destination \fIhost\fP:\fIport\fP that is designated by \fB-b\fP flag and
+turned out unhealthy, is excluded from the group.
+.P
+The \fB-I\fP \fIhost\fP designates the interface used as the source
+address of the connection to the desctination.
+.P
+If the \fB-o\fP \fIn\fP or \fB-g\fP \fIn\fP flag is used, the program set
+its uid or gid to \fIn\fP respectively. If the \fB-t\fP \fIdir\fP
+flag (\fIdir\fP is a directory) is used, the program change its
+root to the directory. If the \fB-D\fP flas is used, \fBstone\fP runs
+as a daemon. The \fB-c\fP \fIdir\fP flag designates the
+directory for core dump.
+.P
+The \fB-M\fP install \fIname\fP and the \fB-M\fP remove \fIname\fP flags are
+for NT service. \fIname\fP is the service name. Start the
+service using the command: net start \fIname\fP. To install \fBstone\fP
+service as the name \fIrepeater\fP, for example:
+.P
+.RS
+C:\\>\fBstone -M install \fIrepeater\fB -C \fIC:\\stone.cfg\fR
+.br
+C:\\>\fBnet start \fIrepeater\fR
+.RE
+.P
+The \fB-q\fP \FISSL\FP and the \fB-z\fP \FISSL\FP flags are for SSL
+encryption. The \fB-q\fP \FISSL\FP is for the client mode, that is,
+when \fBstone\fP connects to the other SSL server as a SSL client.
+The \fB-z\fP \FISSL\FP if for the server mode, that is, when other SSL
+clients connect to the \fBstone\fP.
+.P
+\FISSL\FP is one of the following.
+.P
+.PD 0
+.IP default 15
+reset SSL options to the default.
+Using multiple \fIst\fP, different SSL options can
+be designated for each \fIst\fP.
+.IP verbose
+verbose mode.
+.IP verify
+require SSL certificate to the peer.
+.IP verify,once
+request a client certificate on the initial TLS/SSL
+handshake. (\fB-z\fP only)
+.IP verify,ifany
+The certificate returned (if any) is checked. (\fB-z\fP only)
+.IP verify,none
+never request SSL certificate to the peer.
+.IP crl_check
+lookup CRLs.
+.IP crl_check_all
+lookup CRLs for whole chain.
+.IP uniq
+if the serial number of peer's SSL certificate
+is different from the previous session, deny it.
+.IP re\fIn\fP=\fIregex\fP
+The certificate of the peer must satisfy the
+\fIregex\fP. \fIn\fP is the depth. re0 means the subject
+of the certificate, and re1 means the issure.
+The maximum of \fIn\fP is 9.
+.IP depth=\fIn\fP
+The maximum of the certificate chain.
+If the peer's certificate exceeds \fIn\fP, the
+verification fails. The maximum of \fIn\fP is 9.
+.IP tls1
+Just use TLSv1 protocol.
+.IP ssl3
+Just use SSLv3 protocol.
+.IP ssl2
+Just use SSLv2 protocol.
+.IP no_tls1
+Turn off TLSv1 protocol.
+.IP no_ssl3
+Turn off SSLv3 protocol.
+.IP no_ssl2
+Turn off SSLv2 protocol.
+.IP bugs
+Switch on all SSL implementation bug workarounds.
+.IP serverpref
+Use server's cipher preferences (only SSLv2).
+.IP sid_ctx=\fIstr\fP
+Set session ID context.
+.IP passfile=\fIfile\fP
+The filename of the file containing password of the key
+.IP key=\fIfile\fP
+The filename of the secret key of the certificate.
+.IP cert=\fIfile\fP
+The filename of the certificate.
+.IP CAfile=\fIfile\fP
+The filename of the certificate of the CA.
+.IP CApath=\fIdir\fP
+The directory of the certificate files.
+.IP pfx=\fIfile\fP
+The filename of the PKCS#12 bag.
+.IP cipher=\fIlist\fP
+The list of ciphers.
+.IP lb\fIn\fP=\fIm\fP
+change the destination according to the
+certificate of the peer. The number calculated
+from the matched string to the \fIn\fPth ( ... ) in
+the ``regex'' of SSL options (mod \fIm\fP) is used
+to select the destination from the destination
+group defined by \fB-B\fP flag.
+.PD
+.P
+\fIst\fP is one of the following. Multiple \fIst\fP can be
+designated, separated by \fB--\fP.
+.P
+.PD 0
+.IP (1)
+\fIhost\fP:\fIport\fP \fIsport\fP [\fIxhost\fP...]
+.IP (2)
+\fIhost\fP:\fIport\fP \fIshost\fP:\fIsport\fP [\fIxhost\fP...]
+.IP (3)
+proxy \fIsport\fP [\fIxhost\fP...]
+.IP (4)
+\fIhost\fP:\fIport\fP/http \fIrequest\fP [\fIxhost\fP...]
+.IP (5)
+\fIhost\fP:\fIport\fP/proxy \fIheader\fP [\fIxhost\fP...]
+.IP (6)
+health \fIsport\fP [\fIxhost\fP...]
+.PD
+.P
+The program repeats the connection on port \fIsport\fP to the
+other machine \fIhost\fP port \fIport\fP. If the machine, on
+which the program runs, has two or more interfaces, type (2) can
+be used to repeat the connection on the specified interface
+\fIshost\fP. You can also specify path name that begins with
+``/'' or ``./'', instead of \fIhost\fP:\fIport\fP so that the
+program handles a unix domain socket.
+.P
+Type (3) is a http proxy. Specify the machine, on which the
+program runs, and port \fIsport\fP in the http proxy settings of
+your WWW browser.
+Extentions can be added to the ``proxy'' like \fIxhost\fP/\fIext\fP.
+\fIext\fP is:
+.P
+.IP v4only
+limit the destination within IP addresses.
+.IP v6only
+limit the destination within IPv6 addresses.
+.P
+Type (4) relays stream over http request. \fIrequest\fP is the
+request specified in HTTP 1.0. In the \fIrequest\fP, \ is
+the escape character, and the following substitution occurs.
+.PP
+.RS 8
+.PD 0
+.IP \\\\n 8
+newline (0x0A)
+.IP \\\\r
+return (0x0D)
+.IP \\\\t
+tab (0x09)
+.IP \\\\\\\\
+\ itself (0x5C)
+.IP \\\\a
+the IP address of the client connecting to the \fBstone\fP.
+.IP \\\\A
+\fIIP address of the client\fP:\fIport number\fP
+.IP \\\\0
+the serial number of peer's SSL certificate.
+.IP "\\\\1 - \\\\9"
+the matched string in the ``regex'' of SSL options.
+.IP \\\\?1\fIthen\fP\\\\:\fIelse\fP\\\\/
+if \1 (\2 - \9 in a similar way) is not null,
+\fIthen\fP, otherwise \fIelse\fP.
+.PD
+.RE
+.P
+Type (5) repeats http request with \fIheader\fP in the top of
+request headers. The above escapes can be also used.
+.P
+Type (6) designates the port that other programs can check
+whether the \fBstone\fP runs `healthy' or not. Following commands are
+available to check the \fBstone\fP.
+.P
+.RS 8
+.PD 0
+.IP "HELO \fIany string\fP" 24
+returns the status of the \fBstone\fP
+.IP "LIMIT \fIvar\fP \fIn\fP"
+check the value of \fIvar\fP is
+less than \fIn\fP
+.PD
+.RE
+.P
+\fIvar\fP is one of the following:
+.P
+.RS 8
+.PD 0
+.IP PAIR 16
+the number of ``pair''
+.IP CONN
+the number of ``conn''
+.IP ESTABLISHED
+seconds passed since the last conn established
+.IP READWRITE
+seconds passed since the last read/write
+.IP ASYNC
+the number of threads
+.PD
+.RE
+.P
+The response of the \fBstone\fP is 2xx when normal, or 5xx when
+abnormal on the top of line.
+.P
+If the \fIxhost\fP are used, only machines or its IP addresses
+listed in \fIxhost\fP separated by space character can
+connect to the program and to be repeated.
+.P
+Extentions can be added to the \fIxhost\fP like
+\fIxhost\fP/\fIex\fP,\fIex\fP.... \fIex\fP is:
+.IP \fIm\fP
+You can designate the length of prefix bits of the
+netmask, so that only machines on specified. In the
+case of class C network 192.168.1.0, for example, use
+``192.168.1.0/24''.
+.IP v4
+\fIxhost\fP is resolved as the IP address.
+.IP v6
+\fIxhost\fP is resolved as the IPv6 address.
+.IP p\fIm\fP
+the data repeated by the program are dumped, only if it
+was connected by the machines specified by \fIxhost\fP. \fIm\fP
+is the dump mode, equivalent to the number of \fB-p\fP
+options.
+.P
+Use ``!'' instead of ``\fIxhost\fP'', to deny machines by following
+\fIxhost\fP.
+.P
+Extentions can be added to the \fIport\fP like
+\fIport\fP/\fIext\fP,\fIext\fP.... \fIext\fP is:
+.IP udp
+repeats UDP instead of TCP.
+.IP ssl
+forwards with encryption.
+.IP v6
+connects to the destination using IPv6.
+.IP base
+forwards with MIME base64 encoding.
+.P
+Extentions can be added to the \fIsport\fP like
+\fIsport\fP/\fIext\fP,\fIext\fP.... \fIext\fP is:
+.IP udp
+repeats UDP instead of TCP.
+.IP apop
+converts POP to APOP. The conversion is derived from
+the RSA Data Security, Inc. MD5 Message-Digest Algorithm.
+.IP ssl
+forwards with decryption.
+.IP v6
+accepts connection using IPv6. If \fIshost\fP is omitted
+like (1), IP is also acceptable.
+.IP v6only
+accepts connection using IPv6 only. Even if \fIshost\fP is
+omitted like (1), IP is not acceptable.
+.IP base
+forwards with MIME base64 decoding.
+.IP http
+relays stream over http.
+.IP ident
+identifies the owner of the incoming connection
+on the peer using ident protocol (RFC1413).
+.SH EXAMPLES
+.PD 0
+.IP \fIouter\fP\^:
+a machine in the outside of the firewall
+.IP \fIinner\fP\^:
+a machine in the inside of the firewall
+.IP \fIfwall\fP\^:
+the firewall on which the \fBstone\fP is executed
+.PD
+.TP
+\fBstone \fIouter\fB:telnet 10023\fR
+Repeats the telnet protocol to \fIouter\fP.
+Run telnet fwall 10023 on \fIinner\fR.
+.TP
+\fBstone \fIouter\fB:domain/udp domain/udp\fR
+Repeats the DNS query to \fIouter\fP.
+Run \fBnslookup -\fP \fIfwall\fP on \fIinner\fP.
+.TP
+\fBstone \fIouter\fB:ntp/udp ntp/udp\fR
+Repeats the NTP to \fIouter\fP.
+Run \fBntpdate \fIfwall\fR on \fIinner\fP.
+.TP
+\fBstone localhost:http 443/ssl\fR
+Make WWW server that supports https.
+Access \fBhttps://\fIfwall\fB/\fR using a WWW browser.
+.TP
+\fBstone localhost:telnet 10023/ssl\fR
+Make telnet server that supports SSL.
+Run \fBSSLtelnet -z ssl \fIfwall\fB 10023\fR on \fIinner\fP.
+.TP
+\fBstone proxy 8080\fR
+http proxy
+.TP
+\fBstone\fP \fIouter\fB:110/apop 110\fR
+connect to \fIinner\fP:pop using a mailer that does not
+support APOP.
+.PP
+Where \fIfwall\fP is a http proxy (port 8080):
+.TP
+\fBstone \fIfwall\fB:8080/http 10023 'POST http://\fIouter\fB:8023 HTTP/1.0'\fR
+.br
+.ns
+.TP
+\fBstone localhost:telnet 8023/http
+.nf
+Run \fBstone\fPs on \fIinner\fP and \fIouter\fP respectively.
+Relays stream over http.
+.TP
+\fBstone \fIfwall\fB:8080/proxy 9080 \'Proxy-Authorization: Basic \fIc2VuZ29rdTpoaXJvYWtp\fB\'\fR
+for browser that does not support proxy authorization.
+.fi
+.
+.SH HOMEPAGE
+The official homepage of \fBstone\fP is:
+.br
+\fIhttp://www.gcd.org/sengoku/stone/\fP
+.
+.SH COPYRIGHT
+All rights about this program \fBstone\fP are reserved by the
+original author, Hiroaki Sengoku. The program is free software;
+you can redistribute it and/or modify it under the terms of the
+\fIGNU IGeneral Public License (GPL)\fP. Furthermore you can link it
+with openssl.
+.
+.SH NO WARRANTY
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY.
+.
+.SH AUTHOR
+.nf
+Hiroaki Sengoku
+sengoku@gcd.org
+http://www.gcd.org/sengoku/
+.fi
diff --git a/net/stone/files/stone.1.ja b/net/stone/files/stone.1.ja
new file mode 100644
index 000000000000..874b1b66fda4
--- /dev/null
+++ b/net/stone/files/stone.1.ja
@@ -0,0 +1,455 @@
+.\" Roff format skeleton provided by Taketo Kabe <kabe@sra-tohoku.co.jp>
+.TH stone 1 "version 2.3"
+.
+.SH 名称
+stone \- Simple Repeater
+.
+.SH 書式
+.B "stone [-C \fIfile\fP] [-P \fIcommand\fP] [-Q \fIoptions\fP] [-N] [-d] [-p] [-n]"
+.br
+.B " [-u \fImax\fP] [-f \fIn\fP] [-l] [-L \fIfile\fP] [-a \fIfile\fP] [-i \fIfile\fP]"
+.br
+.B " [-X \fIn\fP] [-T \fIn\fP] [-r]"
+.br
+.B " [-x \fIport\fP[,\fIport\fP][-\fIport\fP]... \fIxhost\fP... --]"
+.br
+.B " [-s \fIsend\fP \fIexpect\fP... --]"
+.br
+.B " [-b [\fIvar\fP=\fIval\fP]... \fIn\fP \fImaster\fP:\fIport\fP \fIbackup\fP:\fIport\fP]"
+.br
+.B " [-B \fIhost\fP:\fIport\fP \fIhost1\fP:\fIport1\fP... --]"
+.br
+.B " [-I \fIhost\fP]"
+.br
+.B " [-o \fIn\fP] [-g \fIn\fP] [-t \fIdir\fP] [-D] [-c \fIdir\fP]"
+.br
+.B " [-q \fISSL\fP] [-z \fISSL\fP]"
+.br
+.B " [-M install \fIname\fP] [-M remove \fIname\fP]"
+.br
+.B " \fIst\fP [-- \fIst\fP]..."
+.
+.SH 解説
+\fBstone\fPは、アプリケーションレベルの TCP & UDP リピーターです。ファイア
+ウォールの内から外へ、あるいは外から内へ、TCP あるいは UDP を中継します。
+.P
+\fBstone\fP には以下のような特徴があります。
+.
+.TP
+.B 1. Win32 に対応している
+以前は UNIX マシンで構成されることが多かったファイアウォールです
+が、最近は WindowsNT が使われるケースが増えてきました。\fBstone\fP は
+WindowsNT あるいは Windows95 上で手軽に実行することができます。
+もちろん、Linux, FreeBSD, BSD/OS, SunOS, Solaris, HP-UX などの
+UNIX マシンでも使うことができます。
+.
+.TP
+.B 2. 単純
+わずか 8000 行 (C 言語) ですので、セキュリティホールが生じる可能
+性を最小限にできます。
+.
+.TP
+.B 3. SSL 対応
+OpenSSL (\fIhttp://www.openssl.org/\fP) を使うことにより、暗号化/復号
+して中継できます。また、クライアント認証およびサーバ認証をサポー
+トしています。さらに、認証によって得られる証明書のサブジェクトの
+一部を、中継先へ送ることもできます。
+.
+.TP
+.B 4. http proxy
+簡易型 http proxy としても使うことができます。
+.
+.TP
+.B 5. POP -> APOP 変換
+APOP に対応していないメーラと \fBstone\fP を使うことで、APOP サーバへ
+アクセスできます。
+.
+.TP
+.B 6. IPv6 対応
+IP/IPv6 変換して中継することができます。IPv6 に対応していない
+ソフトウェアを手軽に IPv6 化することが可能です。
+.
+.SH オプション
+\fB-C\fP はオプションおよび \fIst\fP をコマンドラインで指定するかわりに設
+定ファイルから読み込みます。\fB-P\fP は設定ファイルを読み込む際のプリ
+プロセッサを指定します。プリプロセッサへ与える引数は \fB-Q\fP で指定で
+きます。\fB-N\fP を指定すると、コマンドラインおよび設定ファイルを読み
+込んだ後、終了します。つまりポートを開くこと無く設定ファイルの
+チェックを行なうことができます。
+.P
+オプションとして \fB-d\fP を指定すると、デバッグレベルを増加させます。
+\fB-p\fP を指定すると中継したデータをダンプします。\fB-n\fP を指定すると、ホ
+スト名やサービス名の代わりに IP アドレスやサービス番号を表示しま
+す。
+.P
+\fB-u\fP オプションは同時に記憶できる UDP の発信元の最大数を指定します。
+デフォルトは 100 です。\fB-f\fP オプションは子プロセスの数を指定します。
+デフォルトは子プロセス無しです。
+.P
+\fB-l\fP を指定すると、エラーメッセージ等を syslog へ出力します。\fB-L\fP を
+指定すると、エラーメッセージ等を \fIfile\fP へ出力します。\fB-a\fP を指定す
+ると、アクセスログを \fIfile\fP へ出力します。\fB-i\fP は \fBstone\fP のプロセス
+ID を出力するファイルを指定します。
+.P
+\fB-X\fP は中継を行なう際のバッファの大きさを指定します。デフォルトは
+1000 バイトです。\fB-T\fP を指定すると TCP セッションのタイムアウトの
+秒数を変更できます。デフォルトは 600 (10 分) です。\fB-r\fP を指定する
+と \fIst\fP のソケットに SO_REUSEADDR を設定します。
+.P
+\fB-x\fP を指定すると http proxy の接続先を制限できます。接続先のポー
+ト番号のリスト \fIport\fP[,\fIport\fP][-\fIport\fP]... および接続先ホストの
+リスト \fIxhost\fP... を指定します。\fB-x\fP を複数指定すると、最後に指定
+したものから順に、ポート番号のリストがマッチするものを検索します。
+\fB-x\fP \fB--\fP を指定すると、それ以前のものは検索対象となりません。
+.P
+\fB-b\fP は中継先 \fImaster\fP:\fIport\fP に接続できないときのバックアップとし
+て \fIbackup\fP:\fIport\fP を指定します。すなわち \fIn\fP 秒ごとに
+\fImaster\fP:\fIport\fP に対するヘルスチェック (後述する \fB-s\fP オプションで
+設定) が成功するかチェックし、もしチェックに失敗した場合は、中継
+先を \fIbackup\fP:\fIport\fP へ変更します。\fIvar\fP として「host」を指定す
+ることにより、\fImaster\fP とは異なるホストをチェックすることができ
+ます。同様に、\fIvar\fP として「port」を指定することにより、異なるポー
+トをチェックすることができます。
+.P
+\fB-s\fP はヘルスチェックのスクリプトを設定します。\fIsend\fP を送信後、レ
+スポンスが、正規表現 \fIexpect\fP にマッチするか確認します。
+.P
+\fB-B\fP は中継先グループの指定です。中継先が \fIhost\fP:\fIport\fP である場合、
+このグループの中からランダムに一つの中継先を選んで中継します。\fB-b\fP
+オプションで設定済みの中継先で、ヘルスチェックに失敗したものは、
+選択枝から除外します。
+.P
+\fB-I\fP は中継先へ接続する際に用いるインタフェースを指定します。
+.P
+\fB-o\fP と \fB-g\fP はそれぞれユーザ ID とグループ ID を指定します。ID は数
+字のみ指定可能です。\fB-t\fP を指定すると、\fIdir\fP へ chroot します。\fB-D\fP を
+指定すると、\fBstone\fP をデーモンとして起動します。\fB-c\fP はコアダンプを
+行なうディレクトリを指定します。
+.P
+\fB-M\fP は \fBstone\fP を NT サービスとして登録/削除するためのオプションで
+す。サービス名 \fIname\fP を指定します。サービスとして登録した後、
+net start \fIname\fP コマンドを実行してサービスを開始させてください。
+例:
+.P
+.RS
+C:\\>\fBstone -M install \fIrepeater\fB -C \fIC:\\stone.cfg\fR
+.br
+C:\\>\fBnet start \fIrepeater\fR
+.RE
+.P
+\fB-q\fP および \fB-z\fP は、SSL 暗号化/復号 のオプションです。\fB-q\fP は、\fBstone\fP
+が SSL クライアントとして、他の SSL サーバへ接続するとき、すなわ
+ち中継先が SSL サーバの時の、SSL オプションです。\fB-z\fP は \fBstone\fP が
+SSL サーバとして、他の SSL クライアントからの接続を受付ける時の、
+SSL オプションです。
+.P
+\fISSL\fP は SSL オプションで、次のいずれかです。
+.P
+.PD 0
+.IP default 15
+SSL オプション指定をデフォルトに戻します。
+複数の \fIst\fP を指定する際、\fIst\fP 毎に異なる SSL オ
+プションを指定することができます。
+.IP verbose
+デバッグ用文字列をログに出力します。
+.IP verify
+SSL 接続相手に、SSL 証明書を要求します。
+.IP verify,once
+セッション開始時に一度だけ、
+SSL クライアントに証明書を要求します。(\fB-z\fP 専用)
+.IP verify,ifany
+SSL クライアントから証明書が送られてきたときのみ
+認証します。送られてこない場合は認証せずに
+セッションを開始します。(\fB-z\fP 専用)
+.IP verify,none
+SSL 接続相手に SSL 証明書を要求しません。
+.IP crl_check
+CRL をチェックします。
+.IP crl_check_all
+証明書チェーンの全てにおいて CRL をチェックします。
+.IP uniq
+SSL 接続相手の SSL 証明書のシリアル番号が前回の
+接続と異なる場合、接続を拒否します。
+.IP re\fIn\fP=\fIregex\fP
+SSL 証明書のチェーンが満たすべき正規表現を指定します。
+\fIn\fP は depth です。re0 が証明書のサブジェクト、
+re1 がその発行者を意味します。
+\fIn\fP は 9 まで指定できます。
+.IP depth=\fIn\fP
+SSL 証明書チェーンの長さの最大値を指定します。
+チェーンの長さがこの値を越えると認証が失敗します。
+\fIn\fP の最大値は 9 です。
+.IP tls1
+プロトコルとして TLSv1 を用います。
+.IP ssl3
+プロトコルとして SSLv3 を用います。
+.IP ssl2
+プロトコルとして SSLv2 を用います。
+.IP no_tls1
+プロトコルの選択枝から TLSv1 を外します。
+.IP no_ssl3
+プロトコルの選択枝から SSLv3 を外します。
+.IP no_ssl2
+プロトコルの選択枝から SSLv2 を外します。
+.IP bugs
+SSL の実装にバグがある接続相手との接続を可能にします。
+.IP serverpref
+SSL サーバの指定した暗号を用います (SSLv2 のみ)。
+.IP sid_ctx=\fIstr\fP
+SSL セッション ID コンテキストを設定します。
+.IP passfile=\fIfile\fP
+秘密鍵のパスフレーズを格納したファイルを指定します。
+.IP key=\fIfile\fP
+証明書の秘密鍵ファイルを指定します。
+.IP cert=\fIfile\fP
+証明書ファイルを指定します。
+.IP CAfile=\fIfile\fP
+認証局の証明書ファイルを指定します。
+.IP CApath=\fIdir\fP
+認証局の証明書があるディレクトリを指定します。
+.IP pfx=\fIfile\fP
+PKCS#12 ファイルを指定します。
+.IP cipher=\fIlist\fP
+暗号化アルゴリズムのリストを指定します。
+.IP lb\fIn\fP=\fIm\fP
+SSL 証明書の CN に応じて中継先を切り替えます。
+SSL オプションの re\fIn\fP= で指定した正規表現中、
+\fIn\fP 番目の ( ... ) 内の正規表現にマッチした文字
+列から算出した数値の剰余 \fIm\fP に基づいて、\fB-B\fP オプ
+ションで指定した中継先グループの中から中継先を選
+びます。
+.PD
+.P
+\fIst\fP は次のいずれかです。\fIst\fP は「\fB--\fP」で区切ることにより、複数個
+指定できます。
+.P
+.PD 0
+.IP (1)
+\fIhost\fP:\fIport\fP \fIsport\fP [\fIxhost\fP...]
+.IP (2)
+\fIhost\fP:\fIport\fP \fIshost\fP:\fIsport\fP [\fIxhost\fP...]
+.IP (3)
+proxy \fIsport\fP [\fIxhost\fP...]
+.IP (4)
+\fIhost\fP:\fIport\fP/http \fIrequest\fP [\fIxhost\fP...]
+.IP (5)
+\fIhost\fP:\fIport\fP/proxy \fIheader\fP [\fIxhost\fP...]
+.IP (6)
+health \fIsport\fP [\fIxhost\fP...]
+.PD
+.P
+\fBstone\fP を実行しているマシンのポート \fIsport\fP への接続を、他のマシ
+ン \fIhost\fP のポート \fIport\fP へ中継します。インタフェースを複数持つ
+マシンでは、(2) のようにインタフェースのアドレス \fIshost\fP を指定
+することにより、特定のインタフェースへの接続のみを転送することが
+できます。\fIhost\fP:\fIport\fP の代わりに、「/」ないし「./」から始まる
+パス名を指定することにより、UNIX ドメインソケットを扱うこともで
+きます。
+.P
+(3) は、http proxy です。WWW ブラウザの http proxy の設定で、
+\fBstone\fP を実行しているマシンおよびポート \fIsport\fP を指定します。
+「proxy」には、「/」に続けて以下の拡張子を付けることができます。
+.P
+.IP v4only
+proxy の接続先を IP アドレスに限定します。
+.IP v6only
+proxy の接続先を IPv6 アドレスに限定します。
+.P
+(4) は、http リクエストにのせて中継します。\fIrequest\fP は HTTP 1.0
+で規定されるリクエストです。リクエスト文字列中、「\\」はエスケー
+プ文字であり、次のような置き換えが行なわれます。
+.PP
+.RS 8
+.PD 0
+.IP \\\\n 8
+改行 (0x0A)
+.IP \\\\r
+復帰 (0x0D)
+.IP \\\\t
+タブ (0x09)
+.IP \\\\\\\\
+\\ (0x5C)
+.IP \\\\a
+接続元の IP アドレス
+.IP \\\\A
+「接続元の IP アドレス」:「ポート番号」
+.IP \\\\0
+SSL 証明書のシリアル番号
+.IP "\\\\1 - \\\\9"
+SSL オプションの re\fIn\fP= で指定した正規表現中、
+( ... ) 内の正規表現にマッチした文字列
+.IP \\\\?1\fIthen\fP\\\\:\fIelse\fP\\\\/
+もし \\1 (\\2 - \\9 も同様) の文字列が、空文字列で
+なければ \fIthen\fP、空文字列であれば \fIelse\fP
+.PD
+.RE
+.P
+(5) は、http リクエストヘッダの先頭に \fIheader\fP を追加して中継し
+ます。(4) と同様のエスケープを使うことができます。
+.P
+(6) は、\fBstone\fP が正常に動作しているか検査するためのポートの指定で
+す。\fIsport\fP で指定したポートに接続して以下のコマンドを送信すると、
+\fBstone\fP の状態が返されます。
+.P
+.RS 8
+.PD 0
+.IP "HELO \fI任意の文字列\fP" 24
+\fBstone\fP の状態の一覧を返す
+.IP "LIMIT \fIvar\fP \fIn\fP"
+変数 \fIvar\fP の値が \fIn\fP 未満か調べる
+.PD
+.RE
+.P
+\fIvar\fP は次のうちのいずれかです。
+.P
+.RS 8
+.PD 0
+.IP PAIR 16
+pair の個数
+.IP CONN
+conn の個数
+.IP ESTABLISHED
+最後に接続確立してからの秒数
+.IP READWRITE
+最後に read or write してからの秒数
+.IP ASYNC
+スレッドの本数
+.PD
+.RE
+.P
+\fBstone\fP からの応答は、正常時は 200 番台、異常時は 500 番台の数値が
+先頭につきます。
+.P
+\fIxhost\fP を列挙することにより、\fBstone\fP へ接続可能なマシンを制限する
+ことができます。マシン名、あるいはその IP アドレスを空白で区切っ
+て指定すると、そのマシンからの接続のみを中継します。
+.P
+\fIxhost\fP には、「/」に続けて以下の拡張子を付けることができます。
+複数の拡張子を指定するときは「,」で区切ります。
+.IP \fIm\fP
+ネットワーク・マスクのビット数を指定することにより、特定
+のネットワークのマシンからの接続を許可することができます。
+例えば、クラス C のネットワーク 192.168.1.0 の場合は、
+「192.168.1.0/24」と指定します。
+.IP v4
+\fIxhost\fP を IP アドレスとして扱います。
+.IP v6
+\fIxhost\fP を IPv6 アドレスとして扱います。
+.IP p\fIm\fP
+\fIxhost\fP からの接続のみ、中継したデータをダンプします。
+\fIm\fP はダンプ方法の指定です。\fB-p\fP オプションの個数に相当し
+ます。
+.P
+\fIxhost\fP の代わりに「!」を指定すると、後続の \fIxhost\fP は接続を拒否
+するマシンの指定になります。
+.P
+\fIport\fP には、「/」に続けて以下の拡張子を付けることができます。
+複数の拡張子を指定するときは「,」で区切ります。
+.IP udp
+TCP を中継する代わりに、UDP を中継します。
+.IP ssl
+SSL で暗号化して中継します。
+.IP v6
+中継先へ IPv6 接続します。
+.IP base
+MIME base64 で符号化して中継します。
+.P
+\fIsport\fP には、「/」に続けて以下の拡張子を付けることができます。
+複数の拡張子を指定するときは「,」で区切ります。
+.IP udp
+TCP を中継する代わりに、UDP を中継します。
+.IP apop
+POP を APOP へ変換して中継します。
+変換には RSA Data Security 社の MD5 Message-Digest アル
+ゴリズムを使用します。
+.IP ssl
+SSL を復号して中継します。
+.IP v6
+IPv6 接続を受付けます。(1) のようにインタフェースの
+アドレス \fIshost\fP を指定しない場合は、IP 接続も受付けるこ
+とができます。
+.IP v6only
+IPv6 接続のみを受付けます。(1) のようにインタフェースの
+アドレス \fIshost\fP を指定しない場合も、IP 接続を受付けるこ
+とはありません。
+.IP base
+MIME base64 を復号して中継します。
+.IP http
+http リクエストヘッダを取り除いて中継します。
+.IP ident
+接続を受付けるときに接続元に対し ident プロトコル
+(RFC1413) を使ってユーザ名を照会します。
+.SH 例
+.PD 0
+.IP \fIouter\fP\^:
+ファイアウォールの外側にあるマシン
+.IP \fIinner\fP\^:
+ファイアウォールの内側にあるマシン
+.IP \fIfwall\fP\^:
+ファイアウォール. このマシン上で \fBstone\fP を実行
+.PD
+.TP
+\fBstone \fIouter\fB:telnet 10023\fR
+\fIouter\fP へ telnet プロトコルを中継
+\fIinner\fP で telnet fwall 10023 を実行
+.TP
+\fBstone \fIouter\fB:domain/udp domain/udp\fR
+DNS 問い合わせを \fIouter\fP へ中継
+\fIinner\fP で \fBnslookup -\fP \fIfwall\fP を実行
+.TP
+\fBstone \fIouter\fB:ntp/udp ntp/udp\fR
+\fIouter\fP へ NTP を中継
+\fIinner\fP で \fBntpdate \fIfwall\fR を実行
+.TP
+\fBstone localhost:http 443/ssl\fR
+WWW サーバを https 対応にする
+WWW ブラウザで \fBhttps://\fIfwall\fB/\fR をアクセス
+.TP
+\fBstone localhost:telnet 10023/ssl\fR
+telnet を SSL 化
+\fIinner\fP で \fBSSLtelnet -z ssl \fIfwall\fB 10023\fR を実行
+.TP
+\fBstone proxy 8080\fR
+http proxy
+.TP
+\fBstone\fP \fIouter\fB:110/apop 110\fR
+APOP に対応していないメーラで \fIinner\fP:pop へ接続
+.PP
+\fIfwall\fP が http proxy (port 8080) である時:
+.TP
+\fBstone \fIfwall\fB:8080/http 10023 'POST http://\fIouter\fB:8023 HTTP/1.0'\fR
+.br
+.ns
+.TP
+\fBstone localhost:telnet 8023/http
+.nf
+\fIinner\fP と \fIouter\fP でそれぞれ \fBstone\fP を実行
+http 上でパケットを中継
+.TP
+\fBstone \fIfwall\fB:8080/proxy 9080 \'Proxy-Authorization: Basic \fIc2VuZ29rdTpoaXJvYWtp\fB\'\fR
+proxy 認証に対応していないブラウザ用
+.fi
+.
+.SH ホームページ
+\fBstone\fP の公式ホームページは次の URL です。
+.br
+\fIhttp://www.gcd.org/sengoku/stone/Welcome.ja.html\fP
+.
+.SH 著作権
+この \fBstone\fP に関する全ての著作権は、原著作者である仙石浩明が所有
+します。この \fBstone\fP は、\fIGNU General Public License (GPL)\fP に準ずる
+フリーソフトウェアです。個人的に使用する場合は、改変・複製に制限
+はありません。配布する場合は GPL に従って下さい。また、openssl と
+リンクして使用することを許可します。
+.
+.SH 無保証
+この \fBstone\fP は無保証です。この \fBstone\fP を使って生じたいかなる損害に
+対しても、原著作者は責任を負いません。詳しくは \fIGPL\fP を参照して下
+さい。
+.
+.SH 著者
+.nf
+仙石 浩明
+sengoku@gcd.org
+http://www.gcd.org/sengoku/
+.fi
diff --git a/net/stone/files/stone.cnf b/net/stone/files/stone.cnf
new file mode 100644
index 000000000000..3a2adbcc292e
--- /dev/null
+++ b/net/stone/files/stone.cnf
@@ -0,0 +1,6 @@
+# options
+-dd
+
+# args
+asaogw:23 30023 --
+localhost:10080/http "$HOST:5902" 'CONNECT localhost:5901'
diff --git a/net/stone/files/stone.sh.in b/net/stone/files/stone.sh.in
new file mode 100644
index 000000000000..92133d63b61a
--- /dev/null
+++ b/net/stone/files/stone.sh.in
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+# PROVIDE: stone
+# REQUIRE: DAEMON
+# BEFORE: LOGIN
+# KEYWORD: shutdown
+#
+# Add the following line to /etc/rc.conf to enable stone:
+# stone_enable (bool): Set it to "YES" to enable stone.
+# Default: NO
+
+# Add at least one of the followings to /etc/rc.conf to give rules to stone:
+# stone_flags (str): See stone(1).
+# Default: "" (-D will be added automatically)
+# stone_conffile (str): Stone config file
+# Default: ""
+# You can find an example in
+# %%PREFIX%%/share/examples/stone/
+#
+
+. %%RC_SUBR%%
+
+name="stone"
+rcvar=`set_rcvar`
+
+command="%%PREFIX%%/bin/stone"
+start_precmd="stone_precmd"
+restart_precmd="stone_precmd"
+
+stone_enable="NO"
+
+load_rc_config $name
+
+stone_precmd()
+{
+ if [ -z "${stone_flags}" -a -z "${stone_conffile}" ]; then
+ warn "set at least stone_flags or stone_conffile."
+ return 1
+ fi
+
+ # doesn't use required_files because stone accepts only one conffile
+ if [ -n "${stone_conffile}" ]; then
+ if [ ! -r "${stone_conffile}" ]; then
+ warn "${stone_conffile} is not readable."
+ if [ -n "$stone_conffile" -a -n "$rc_force" ]; then
+ warn "start without ${stone_conffile} anyway."
+ else
+ return 1
+ fi
+ else
+ rc_flags="-C ${stone_conffile} ${rc_flags}"
+ fi
+ fi
+
+ # make sure daemonize option will be given
+ rc_flags="-D ${rc_flags}"
+}
+
+run_rc_command "$1"
diff --git a/net/stone/pkg-plist b/net/stone/pkg-plist
new file mode 100644
index 000000000000..eb88be93290b
--- /dev/null
+++ b/net/stone/pkg-plist
@@ -0,0 +1,4 @@
+@unexec if cmp -s %D/etc/stone.cnf %D/etc/stone.cnf.sample; then rm -f %D/etc/stone.cnf; fi
+etc/stone.cnf.sample
+@exec [ -f %B/stone.cnf ] || cp %B/%f %B/stone.cnf
+bin/stone