diff options
author | Andrew Shadura <andrew.shadura@collabora.co.uk> | 2018-04-24 16:40:18 +0200 |
---|---|---|
committer | Andrew Shadura <andrew.shadura@collabora.co.uk> | 2018-04-24 16:40:18 +0200 |
commit | 7333956d44bebd2e17c6211c60c855ab29509ea4 (patch) | |
tree | 5796fc54e237c8e46589e0be0b0102329129843d | |
parent | 46060486c87eae436edc7a92c93e7023b7c2570d (diff) | |
parent | 2163dad61af4711fcbfab4103ec97c19ff714587 (diff) |
Updated version 0.7 from 'upstream/0.7'
with Debian dir f7472d5bcc10740151744430428b01f92443ba16
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | README | 33 | ||||
-rwxr-xr-x | nat-traverse | 48 | ||||
-rw-r--r-- | nat-traverse.1 | 90 |
4 files changed, 94 insertions, 83 deletions
@@ -1,4 +1,8 @@ -nat-traverse -- Use of UDP to traverse NAT gateways +nat-traverse -- NAT gateway traversal utility + +2017-10-28 + * v0.7: Fixed a minor syntactical issue which caused a warning on modern + Perl and relicensed under GPL version 3 or later. 2012-12-24 * v0.6: Fixed the port forwarding example in the documentation, @@ -1,5 +1,5 @@ NAME - nat-traverse - Use of UDP to traverse NAT gateways + nat-traverse - NAT gateway traversal utility SYNOPSIS To create a simple text-only tunnel, use the commands @@ -11,7 +11,7 @@ SYNOPSIS on "right". See "EXAMPLES" for more. VERSION - This document describes nat-traverse v0.5. + This document describes nat-traverse v0.7. DESCRIPTION nat-traverse establishes connections between nodes which are behind NAT @@ -137,8 +137,8 @@ EXAMPLES above. Setup of a VPN with OpenVPN - You can use <OpenVPN> over nat-traverse if you want to have a *secure* - VPN. + You can use OpenVPN <https://openvpn.net/> over nat-traverse if you want + to have a *secure* VPN. Using OpenVPN over nat-traverse requires only one change to OpenVPN's configuration file, presuming that you don't want to use OpenVPN's @@ -189,26 +189,30 @@ LIMITATIONS port numbers are (in general) not predictable. SEE ALSO - <RFC 1631 at http://www.ietf.org/rfc/rfc1631.txt> + RFC 1631 at https://www.ietf.org/rfc/rfc1631.txt + <https://www.ietf.org/rfc/rfc1631.txt> The IP Network Address Translator (NAT). K. Egevang, P. Francis. May 1994. (Obsoleted by RFC3022) (Status: INFORMATIONAL) - <RFC 3022 at http://www.ietf.org/rfc/rfc3022.txt> + RFC 3022 at https://www.ietf.org/rfc/rfc3022.txt + <https://www.ietf.org/rfc/rfc3022.txt> Traditional IP Network Address Translator (Traditional NAT). P. Srisuresh, K. Egevang. January 2001. (Obsoletes RFC1631) (Status: INFORMATIONAL) - <RFC 1661 at http://www.ietf.org/rfc/rfc1661.txt> + RFC 1661 at https://www.ietf.org/rfc/rfc1661.txt + <https://www.ietf.org/rfc/rfc1661.txt> The Point-to-Point Protocol (PPP). W. Simpson, Ed.. July 1994. (Obsoletes RFC1548) (Updated by RFC2153) (Also STD0051) (Status: STANDARD) - <http://ppp.samba.org/> + <https://ppp.samba.org/> Website of Paul's PPP Package (open source implementation of the Point-to-Point Protocol (PPP) on Linux and Solaris) - <German talk about nat-traverse at - http://linide.sourceforge.net/nat-traverse/nat-traverse-talk.pdf> + German talk about nat-traverse at + https://www.speicherleck.de/iblech/nat-traverse/nat-traverse-talk.pdf + <https://www.speicherleck.de/iblech/nat-traverse/nat-traverse-talk.pdf> Dieser Vortrag zeigt, wie man einen Tunnel zwischen zwei Computern, die beide hinter NAT-Gateways sitzen, hinbekommt. Dazu wird ein neues Programm vorgestellt, welches sowohl einfache Tastendrücke an @@ -217,15 +221,16 @@ SEE ALSO VPN schnell aufgebaut. AUTHOR - Copyright (C) 2005, 2012 Ingo Blechschmidt, <iblech@web.de>. + Copyright (C) 2005, 2012, 2017 Ingo Blechschmidt, + <iblech@speicherleck.de>. - You may want to visit nat-traverse's Freecode project page, - <http://freecode.com/projects/nat-traverse/>. + The source code repository is hosted at + <https://gitlab.com/iblech/nat-traverse>. LICENSE This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your + Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but diff --git a/nat-traverse b/nat-traverse index e829154..c5ab5d1 100755 --- a/nat-traverse +++ b/nat-traverse @@ -1,21 +1,20 @@ -#!/usr/bin/perl -# nat-traverse -- Use of UDP to traverse NAT gateways -# Copyright (C) 2005, 2012 Ingo Blechschmidt <iblech@web.de> +#!/usr/bin/env perl +# nat-traverse -- NAT gateway traversal utility +# Copyright (C) 2005, 2012, 2017 Ingo Blechschmidt <iblech@speicherleck.de> # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 +# as published by the Free Software Foundation; either version 3 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -# USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. use warnings; use strict; @@ -38,7 +37,7 @@ GetOptions( "timeout=i" => \(my $TIMEOUT = 10), "quit-after-connect" => \my $QUIT_AFTER_CONNECT, "cmd=s" => \my $CMD, - "version" => sub { print "nat-traverse 0.6\n"; exit }, + "version" => sub { print "nat-traverse 0.7\n"; exit }, "help" => \&usage, ) or usage(); usage() unless @ARGV == 1; @@ -86,7 +85,7 @@ syswrite $sock, ACK_MAGIC; debug " done.\n"; # Waiting for ACK packet so we see the connection is established. -debug "Waiting for ACK (timeout: $TIMEOUT\Es)... "; +debug "Waiting for ACK (timeout: ${TIMEOUT}s)... "; { local $SIG{ALRM} = sub { die " timeout.\n" }; alarm $TIMEOUT; @@ -155,7 +154,7 @@ if(defined $CMD) { # Display usage info. sub usage { print STDERR <<'USAGE'; exit } -nat-traverse v0.6 -- Use of UDP to traverse NAT gateways +nat-traverse v0.7 -- NAT gateway traversal utility Usage: user@left $ nat-traverse [options] port1:natgw-of-right:port2 @@ -181,13 +180,13 @@ Available options: --help This help. Options may be abbreviated to uniqueness. -Run "perldoc nat-traverse" for more information. +Run "man nat-traverse" for more information. USAGE =head1 NAME -nat-traverse - Use of UDP to traverse NAT gateways +nat-traverse - NAT gateway traversal utility =head1 SYNOPSIS @@ -201,7 +200,7 @@ C<right>. See L</EXAMPLES> for more. =head1 VERSION -This document describes nat-traverse v0.6. +This document describes nat-traverse v0.7. =head1 DESCRIPTION @@ -345,7 +344,7 @@ reliable streams, use PPP on top of nat-traverse, as described above. =head2 Setup of a VPN with OpenVPN -You can use L<OpenVPN|http://openvpn.net/> over nat-traverse if you want to +You can use L<OpenVPN|https://openvpn.net/> over nat-traverse if you want to have a I<secure> VPN. Using OpenVPN over nat-traverse requires only one change to OpenVPN's @@ -402,30 +401,30 @@ are (in general) not predictable. =over =item L<RFC 1631 at -http://www.ietf.org/rfc/rfc1631.txt|http://www.ietf.org/rfc/rfc1631.txt> +https://www.ietf.org/rfc/rfc1631.txt|https://www.ietf.org/rfc/rfc1631.txt> The IP Network Address Translator (NAT). K. Egevang, P. Francis. May 1994. (Obsoleted by RFC3022) (Status: INFORMATIONAL) =item L<RFC 3022 at -http://www.ietf.org/rfc/rfc3022.txt|http://www.ietf.org/rfc/rfc3022.txt> +https://www.ietf.org/rfc/rfc3022.txt|https://www.ietf.org/rfc/rfc3022.txt> Traditional IP Network Address Translator (Traditional NAT). P. Srisuresh, K. Egevang. January 2001. (Obsoletes RFC1631) (Status: INFORMATIONAL) =item L<RFC 1661 at -http://www.ietf.org/rfc/rfc1661.txt|http://www.ietf.org/rfc/rfc1661.txt> +https://www.ietf.org/rfc/rfc1661.txt|https://www.ietf.org/rfc/rfc1661.txt> The Point-to-Point Protocol (PPP). W. Simpson, Ed.. July 1994. (Obsoletes RFC1548) (Updated by RFC2153) (Also STD0051) (Status: STANDARD) -=item L<http://ppp.samba.org/> +=item L<https://ppp.samba.org/> Website of Paul's PPP Package (open source implementation of the Point-to-Point Protocol (PPP) on Linux and Solaris) =item L<German talk about nat-traverse at -http://linide.sourceforge.net/nat-traverse/nat-traverse-talk.pdf|http://linide.sourceforge.net/nat-traverse/nat-traverse-talk.pdf> +https://www.speicherleck.de/iblech/nat-traverse/nat-traverse-talk.pdf|https://www.speicherleck.de/iblech/nat-traverse/nat-traverse-talk.pdf> Dieser Vortrag zeigt, wie man einen Tunnel zwischen zwei Computern, die beide hinter NAT-Gateways sitzen, hinbekommt. Dazu wird ein neues Programm @@ -437,22 +436,21 @@ starten kann. Damit ist ein einfaches VPN schnell aufgebaut. =head1 AUTHOR -Copyright (C) 2005, 2012 Ingo Blechschmidt, E<lt>iblech@web.deE<gt>. +Copyright (C) 2005, 2012, 2017 Ingo Blechschmidt, E<lt>iblech@speicherleck.deE<gt>. -You may want to visit nat-traverse's Freecode project page, -L<http://freecode.com/projects/nat-traverse/>. +The source code repository is hosted at L<https://gitlab.com/iblech/nat-traverse>. =head1 LICENSE This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software -Foundation; either version 2 of the License, or (at your option) any later +Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A -PARTICULAR PURPOSE. See the GNU General Public License for more details. +PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin -Street, Fifth Floor, Boston, MA 02110-1301, USA. +Street, Fifth Floor, Boston, MA 02110-1301, USA. diff --git a/nat-traverse.1 b/nat-traverse.1 index 76700c8..2ccdb7c 100644 --- a/nat-traverse.1 +++ b/nat-traverse.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.14) +.\" Automatically generated by Pod::Man 4.07 (Pod::Simple 3.32) .\" .\" Standard preamble: .\" ======================================================================== @@ -38,26 +38,31 @@ . ds PI \(*p . ds L" `` . ds R" '' +. ds C` +. ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" -.\" If the F register is turned on, we'll generate index entries on stderr for +.\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. -.ie \nF \{\ -. de IX -. tm Index:\\$1\t\\n%\t"\\$2" +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX .. -. nr % 0 -. rr F -.\} -.el \{\ +.if !\nF .nr F 0 +.if \nF>0 \{\ . de IX +. tm Index:\\$1\t\\n%\t"\\$2" .. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). @@ -123,14 +128,14 @@ .rm #[ #] #H #V #F C .\" ======================================================================== .\" -.IX Title "NAT-TRAVERSE-0.6 1" -.TH NAT-TRAVERSE-0.6 1 "2012-12-24" "perl v5.10.1" "User Contributed Perl Documentation" +.IX Title "NAT-TRAVERSE 1" +.TH NAT-TRAVERSE 1 "2017-10-28" "perl v5.24.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" -nat\-traverse \- Use of UDP to traverse NAT gateways +nat\-traverse \- NAT gateway traversal utility .SH "SYNOPSIS" .IX Header "SYNOPSIS" To create a simple text-only tunnel, use the commands @@ -141,27 +146,27 @@ To create a simple text-only tunnel, use the commands .Ve .PP where \f(CW40000\fR is an unused \s-1UDP\s0 port on \f(CW\*(C`left\*(C'\fR and \f(CW40001\fR is an unused port on -\&\f(CW\*(C`right\*(C'\fR. See \*(L"\s-1EXAMPLES\s0\*(R" for more. +\&\f(CW\*(C`right\*(C'\fR. See \*(L"\s-1EXAMPLES\*(R"\s0 for more. .SH "VERSION" .IX Header "VERSION" -This document describes nat-traverse v0.5. +This document describes nat-traverse v0.7. .SH "DESCRIPTION" .IX Header "DESCRIPTION" nat-traverse establishes connections between nodes which are behind \s-1NAT\s0 gateways, i.e. hosts which do \fInot\fR have public \s-1IP\s0 addresses. Additionally, you can setup a small \s-1VPN\s0 by using pppd on top of nat-traverse (see -\&\*(L"\s-1EXAMPLES\s0\*(R"). nat-traverse does \fInot\fR need an external server on the +\&\*(L"\s-1EXAMPLES\*(R"\s0). nat-traverse does \fInot\fR need an external server on the Internet, and it isn't necessary to reconfigure the involved \s-1NAT\s0 gateways, either. \fInat-traverse works out-of-the-box.\fR .PP -See \*(L"\s-1TECHNIQUE\s0\*(R" for how this is achieved. +See \*(L"\s-1TECHNIQUE\*(R"\s0 for how this is achieved. .PP Limitation: nat-traverse does not work with gateways which change the port numbers. This is a fundamental problem of nat-traverse's design, as the changed port numbers are (in general) not predictable. .SH "OPTIONS" .IX Header "OPTIONS" -.ie n .IP """\f(CIlocal_port\f(CW:\f(CIpeer\f(CW:\f(CIremote_port\f(CW"" (required)" 4 +.ie n .IP """\fIlocal_port\fP:\fIpeer\fP:\fIremote_port\fP"" (required)" 4 .el .IP "\f(CW\f(CIlocal_port\f(CW:\f(CIpeer\f(CW:\f(CIremote_port\f(CW\fR (required)" 4 .IX Item "local_port:peer:remote_port (required)" Sets the local port to use and the remote address to connect to. @@ -169,7 +174,7 @@ Sets the local port to use and the remote address to connect to. Note that you have to give the \s-1IP\s0 address or hostname of the \fI\s-1NAT\s0 gateway\fR of the host you want to connect to, as the target host doesn't have a public \s-1IP\s0 address. -.ie n .IP """\-\-cmd=""\f(CIpppd...\f(CW""""" 4 +.ie n .IP """\-\-cmd=""\fIpppd...\fP""""" 4 .el .IP "\f(CW\-\-cmd=``\f(CIpppd...\f(CW''\fR" 4 .IX Item "--cmd=""pppd...""" Runs the specified command after establishing the connection. @@ -179,12 +184,12 @@ everything the command writes to \s-1STDOUT\s0 will be forwarded to the peer. .Sp If no command is specified, nat-traverse will relay input from \s-1STDIN\s0 to the peer and vice versa, i.e. nat-traverse degrades to netcat. -.ie n .IP """\-\-window=\f(CI10\f(CW""" 4 +.ie n .IP """\-\-window=\fI10\fP""" 4 .el .IP "\f(CW\-\-window=\f(CI10\f(CW\fR" 4 .IX Item "--window=10" Sets the number of initial garbage packets to send. The default, 10, should work with most firewalls. -.ie n .IP """\-\-timeout=\f(CI10\f(CW""" 4 +.ie n .IP """\-\-timeout=\fI10\fP""" 4 .el .IP "\f(CW\-\-timeout=\f(CI10\f(CW\fR" 4 .IX Item "--timeout=10" Sets the maximum number of seconds to wait for an acknowledgement by the peer. @@ -225,7 +230,7 @@ either relay \s-1STDIN/STDOUT\s0 to the socket or execute a program. .IX Header "EXAMPLES" .SS "Setup of a small \s-1VPN\s0 with \s-1PPP\s0" .IX Subsection "Setup of a small VPN with PPP" -It's easy to setup a \s-1VPN\s0 (Virtual Private Network) by using the Point-to-Point +It's easy to setup a \s-1VPN \s0(Virtual Private Network) by using the Point-to-Point Protocol Daemon, \f(CW\*(C`pppd\*(C'\fR: .PP .Vb 7 @@ -245,7 +250,7 @@ establish reliable \s-1TCP\s0 connections over the tunnel, even though the tunne \&\s-1UDP\s0! Furthermore, you could even add IPv6 addresses to \f(CW\*(C`ppp0\*(C'\fR by running \f(CW\*(C`ip \&\-6 addr add...\*(C'\fR! .PP -Note though that although this \s-1VPN\s0 \fIis\fR arguably a private network, it is \fInot\fR +Note though that although this \s-1VPN \s0\fIis\fR arguably a private network, it is \fInot\fR secured in any way. You may want to use \s-1SSH\s0 to encrypt the connection. .SS "Port Forwarding with netcat" .IX Subsection "Port Forwarding with netcat" @@ -274,8 +279,8 @@ data is transported via \s-1UDP\s0; so this is only a toy example. If you want reliable streams, use \s-1PPP\s0 on top of nat-traverse, as described above. .SS "Setup of a \s-1VPN\s0 with OpenVPN" .IX Subsection "Setup of a VPN with OpenVPN" -You can use <OpenVPN> over nat-traverse if you want to -have a \fIsecure\fR \s-1VPN\s0. +You can use OpenVPN <https://openvpn.net/> over nat-traverse if you want to +have a \fIsecure\fR \s-1VPN.\s0 .PP Using OpenVPN over nat-traverse requires only one change to OpenVPN's configuration file, presuming that you don't want to use OpenVPN's multi-client @@ -330,46 +335,45 @@ is a fundamental problem of nat-traverse's design, as the changed port numbers are (in general) not predictable. .SH "SEE ALSO" .IX Header "SEE ALSO" -.IP "<\s-1RFC\s0 1631 at http://www.ietf.org/rfc/rfc1631.txt>" 4 -.IX Item "<RFC 1631 at http://www.ietf.org/rfc/rfc1631.txt>" +.IP "\s-1RFC 1631\s0 at https://www.ietf.org/rfc/rfc1631.txt <https://www.ietf.org/rfc/rfc1631.txt>" 4 +.IX Item "RFC 1631 at https://www.ietf.org/rfc/rfc1631.txt <https://www.ietf.org/rfc/rfc1631.txt>" The \s-1IP\s0 Network Address Translator (\s-1NAT\s0). K. Egevang, P. Francis. May 1994. (Obsoleted by \s-1RFC3022\s0) (Status: \s-1INFORMATIONAL\s0) -.IP "<\s-1RFC\s0 3022 at http://www.ietf.org/rfc/rfc3022.txt>" 4 -.IX Item "<RFC 3022 at http://www.ietf.org/rfc/rfc3022.txt>" +.IP "\s-1RFC 3022\s0 at https://www.ietf.org/rfc/rfc3022.txt <https://www.ietf.org/rfc/rfc3022.txt>" 4 +.IX Item "RFC 3022 at https://www.ietf.org/rfc/rfc3022.txt <https://www.ietf.org/rfc/rfc3022.txt>" Traditional \s-1IP\s0 Network Address Translator (Traditional \s-1NAT\s0). P. Srisuresh, K. Egevang. January 2001. (Obsoletes \s-1RFC1631\s0) (Status: \s-1INFORMATIONAL\s0) -.IP "<\s-1RFC\s0 1661 at http://www.ietf.org/rfc/rfc1661.txt>" 4 -.IX Item "<RFC 1661 at http://www.ietf.org/rfc/rfc1661.txt>" +.IP "\s-1RFC 1661\s0 at https://www.ietf.org/rfc/rfc1661.txt <https://www.ietf.org/rfc/rfc1661.txt>" 4 +.IX Item "RFC 1661 at https://www.ietf.org/rfc/rfc1661.txt <https://www.ietf.org/rfc/rfc1661.txt>" The Point-to-Point Protocol (\s-1PPP\s0). W. Simpson, Ed.. July 1994. (Obsoletes \&\s-1RFC1548\s0) (Updated by \s-1RFC2153\s0) (Also \s-1STD0051\s0) (Status: \s-1STANDARD\s0) -.IP "<http://ppp.samba.org/>" 4 -.IX Item "<http://ppp.samba.org/>" +.IP "<https://ppp.samba.org/>" 4 +.IX Item "<https://ppp.samba.org/>" Website of Paul's \s-1PPP\s0 Package (open source implementation of the Point-to-Point Protocol (\s-1PPP\s0) on Linux and Solaris) -.IP "<German talk about nat-traverse at http://linide.sourceforge.net/nat\-traverse/nat\-traverse\-talk.pdf>" 4 -.IX Item "<German talk about nat-traverse at http://linide.sourceforge.net/nat-traverse/nat-traverse-talk.pdf>" +.IP "German talk about nat-traverse at https://www.speicherleck.de/iblech/nat\-traverse/nat\-traverse\-talk.pdf <https://www.speicherleck.de/iblech/nat-traverse/nat-traverse-talk.pdf>" 4 +.IX Item "German talk about nat-traverse at https://www.speicherleck.de/iblech/nat-traverse/nat-traverse-talk.pdf <https://www.speicherleck.de/iblech/nat-traverse/nat-traverse-talk.pdf>" Dieser Vortrag zeigt, wie man einen Tunnel zwischen zwei Computern, die beide hinter NAT-Gateways sitzen, hinbekommt. Dazu wird ein neues Programm -vorgestellt, welches sowohl einfache TastendrA\*~Xcke an die Gegenseite +vorgestellt, welches sowohl einfache Tastendru\*:cke an die Gegenseite weiterleiten, als auch beliebige Programme mit Verbindungen zur Gegenseite starten kann. Damit ist ein einfaches \s-1VPN\s0 schnell aufgebaut. .SH "AUTHOR" .IX Header "AUTHOR" -Copyright (C) 2005, 2012 Ingo Blechschmidt, <iblech@web.de>. +Copyright (C) 2005, 2012, 2017 Ingo Blechschmidt, <iblech@speicherleck.de>. .PP -You may want to visit nat-traverse's Freecode project page, -<http://freecode.com/projects/nat\-traverse/>. +The source code repository is hosted at <https://gitlab.com/iblech/nat\-traverse>. .SH "LICENSE" .IX Header "LICENSE" This program is free software; you can redistribute it and/or modify it under the terms of the \s-1GNU\s0 General Public License as published by the Free Software -Foundation; either version 2 of the License, or (at your option) any later +Foundation; either version 3 of the License, or (at your option) any later version. .PP -This program is distributed in the hope that it will be useful, but \s-1WITHOUT\s0 \s-1ANY\s0 -\&\s-1WARRANTY\s0; without even the implied warranty of \s-1MERCHANTABILITY\s0 or \s-1FITNESS\s0 \s-1FOR\s0 A -\&\s-1PARTICULAR\s0 \s-1PURPOSE\s0. See the \s-1GNU\s0 General Public License for more details. +This program is distributed in the hope that it will be useful, but \s-1WITHOUT ANY +WARRANTY\s0; without even the implied warranty of \s-1MERCHANTABILITY\s0 or \s-1FITNESS FOR A +PARTICULAR PURPOSE.\s0 See the \s-1GNU\s0 General Public License for more details. .PP You should have received a copy of the \s-1GNU\s0 General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin -Street, Fifth Floor, Boston, \s-1MA\s0 02110\-1301, \s-1USA\s0. +Street, Fifth Floor, Boston, \s-1MA 02110\-1301, USA.\s0 |