--- tcpclient prints usage message without enough arguments tcpclient: usage: tcpclient [ -hHrRdDqQv ] [ -i localip ] [ -p localport ] [ -T timeoutconn ] [ -l localname ] [ -t timeoutinfo ] host port program 100 --- tcpclient prints error message with unknown port name tcpclient: fatal: unable to figure out port number for nonexistentport 111 --- tcpclient prints error message when connection fails tcpclient: unable to connect to 127.0.0.1 port 16: connection refused 111 --- tcpclient -q does not print error message when connection fails 111 --- tcpclient understands empty host name as synonym for 0 tcpclient: unable to connect to 127.0.0.1 port 16: connection refused 111 --- tcpclient understands unbracketed IP address tcpclient: unable to connect to 127.0.0.1 port 16: connection refused 111 --- tcpclient understands bracketed IP address tcpclient: unable to connect to 127.0.0.1 port 16: connection refused 111 --- tcpclient prints error message with unknown host name tcpclient: fatal: no IP address for nonexistent.local. 111 --- tcpclient prints error message with unresolvable host name tcpclient: fatal: temporarily unable to figure out IP address for thislabelistoolongbecausednshasalimitof63charactersinasinglelabel.: protocol error 111 --- tcpserver prints usage message without enough arguments tcpserver: usage: tcpserver [ -1UXpPhHrRoOdDqQv ] [ -c limit ] [ -x rules.cdb ] [ -B banner ] [ -g gid ] [ -u uid ] [ -b backlog ] [ -l localname ] [ -t timeout ] host port program 100 --- tcpserver -u 1 attempts to set uid to 1 tcpserver: fatal: unable to set uid: permission denied 111 --- tcpserver -U reads $UID tcpserver: fatal: unable to set uid: permission denied 111 --- tcpserver -g 2 attempts to set gid to 2 tcpserver: fatal: unable to set gid: permission denied 111 --- tcpserver -U reads $GID tcpserver: fatal: unable to set gid: permission denied 111 --- tcpserver prints error message with unknown port name tcpserver: fatal: unable to figure out port number for nonexistentport 111 --- tcpserver prints error message with unknown host name tcpserver: fatal: no IP address for nonexistent.local. 111 --- tcpserver prints error message with unresolvable host name tcpserver: fatal: temporarily unable to figure out IP address for thislabelistoolongbecausednshasalimitof63charactersinasinglelabel.: protocol error 111 --- tcpserver prints error message with non-local host name tcpserver: fatal: unable to bind: address not available 111 --- tcpserver sets basic environment variables bannerPROTO=TCP TCPLOCALHOST=Local TCPLOCALIP=127.0.0.1 TCPLOCALPORT=50016 TCPREMOTEHOST=localhost TCPREMOTEIP=127.0.0.1 TCPREMOTEPORT=50017 TCPREMOTEINFO=unset 0 --- tcpclient recognizes -D, -i, -r, -h, -t bannerPROTO=TCP TCPLOCALHOST=Local TCPLOCALIP=127.0.0.1 TCPLOCALPORT=50016 TCPREMOTEHOST=localhost TCPREMOTEIP=127.0.0.1 TCPREMOTEPORT=50018 TCPREMOTEINFO=unset 0 --- tcpclient sets basic environment variables PROTO=TCP TCPLOCALHOST=Local TCPLOCALIP=127.0.0.1 TCPLOCALPORT=50019 TCPREMOTEHOST=unset TCPREMOTEIP=127.0.0.1 TCPREMOTEPORT=50016 TCPREMOTEINFO=unset 0 --- tcpclient looks up host names properly PROTO=TCP TCPLOCALHOST=localhost TCPLOCALIP=127.0.0.1 TCPLOCALPORT=50020 TCPREMOTEHOST=localhost TCPREMOTEIP=127.0.0.1 TCPREMOTEPORT=50016 TCPREMOTEINFO=unset 0 --- tcpclient -v works tcpclient: connected to 127.0.0.1 port 50016 ok 0 --- tcpserver prints error message with used port tcpserver: fatal: unable to bind: address already used 111 --- tcpcat works bannerPROTO=TCP TCPLOCALHOST=Local TCPLOCALIP=127.0.0.1 TCPLOCALPORT=50016 TCPREMOTEHOST=localhost TCPREMOTEIP=127.0.0.1 TCPREMOTEINFO=unset 0 --- mconnect works bannerPROTO=TCP TCPLOCALHOST=Local TCPLOCALIP=127.0.0.1 TCPLOCALPORT=50016 TCPREMOTEHOST=localhost TCPREMOTEIP=127.0.0.1 TCPREMOTEINFO=unset 0 --- tcprules prints usage message without enough arguments tcprules: usage: tcprules rules.cdb rules.tmp 100 --- tcprules prints error message if it cannot create tmp tcprules: fatal: unable to create /dev/nonexistent/tmp: file does not exist 111 --- tcprules prints error message if it cannot move tmp to cdb tcprules: fatal: unable to move test.tmp to /dev/nonexistent/cdb: file does not exist 111 --- tcprules creates a cdb file 0 --- tcprulescheck sees deny rule 1.2.3.4: deny connection 0 --- tcprulescheck does not apply deny to another host default: allow connection 0 --- tcprules replaces a cdb file 0 --- tcprulescheck finds rule with address and info rule joe@127.0.0.1: set environment variable which=first allow connection 0 --- tcprulescheck finds rule with address rule 18.23.0.32: set environment variable which=second allow connection 0 --- tcprulescheck finds one-dot wildcard rule 127.: set environment variable which=third allow connection 0 --- tcprulescheck finds zero-dot wildcard rule : set environment variable which=fourth allow connection 0 --- tcprules handles comments, address ranges, multiple variables 0 rule 127.0.: set environment variable which=first set environment variable where=whatever allow connection rule 127.1.: set environment variable which=first set environment variable where=whatever allow connection rule 127.2.: set environment variable which=first set environment variable where=whatever allow connection rule 127.3.: set environment variable which=first set environment variable where=whatever allow connection rule 127.4.: set environment variable which=first set environment variable where=whatever allow connection rule 127.5.: set environment variable which=first set environment variable where=whatever allow connection default: allow connection default: allow connection default: allow connection default: allow connection default: allow connection --- tcprules handles host names 0 rule =known.edu: set environment variable which=known allow connection rule : set environment variable which=anybody allow connection rule : set environment variable which=anybody allow connection rule =.abuser.edu: deny connection rule =.abuser.edu: deny connection --- tcprulescheck searches for rules in the proper order 0 rule xyz@86.75.30.9: set environment variable which=first allow connection rule xyz@86.75.30.9: set environment variable which=first allow connection rule xyz@=one.two.three: set environment variable which=second allow connection rule 86.75.30.9: set environment variable which=third allow connection rule 86.75.30.9: set environment variable which=third allow connection rule 86.75.30.9: set environment variable which=third allow connection rule 86.75.30.9: set environment variable which=third allow connection rule =one.two.three: set environment variable which=fourth allow connection rule =one.two.three: set environment variable which=fourth allow connection rule 86.75.30.: set environment variable which=fifth allow connection rule 86.75.30.: set environment variable which=fifth allow connection rule 86.75.: set environment variable which=sixth allow connection rule 86.75.: set environment variable which=sixth allow connection rule 86.75.: set environment variable which=sixth allow connection rule 86.75.: set environment variable which=sixth allow connection rule 86.: set environment variable which=seventh allow connection rule 86.: set environment variable which=seventh allow connection rule 86.: set environment variable which=seventh allow connection rule 86.: set environment variable which=seventh allow connection rule =.two.three: set environment variable which=eighth allow connection rule =.two.three: set environment variable which=eighth allow connection rule =.three: set environment variable which=ninth allow connection rule =.three: set environment variable which=ninth allow connection rule =: set environment variable which=tenth allow connection rule =: set environment variable which=tenth allow connection rule : set environment variable which=eleventh allow connection rule : set environment variable which=eleventh allow connection --- addcr leaves an empty file alone 0 --- addcr leaves a partial final line alone test0 --- addcr adds CR after the first line test^M 0 --- addcr adds CR after the second line test^M test2^M 0 --- addcr handles nulls t^@st^M 0 --- delcr leaves an empty file alone 0 --- delcr leaves a non-CR line alone test 0 --- delcr removes CR if a line has it test 0 --- delcr converts CR CR LF to CR LF test^M 0 --- delcr does not remove CR from a partial final line test^M0 --- delcr handles a non-CR partial final line test0 --- delcr handles nulls t^@st 0 --- fixcrio works ^M hi^M there^M bye^M --- recordio works ... < test $ ... > test $ ... < [EOF]$ ... > [EOF]$ --- recordio handles multiple-line packets ... < test $ ... < test2 $ ... > test $ ... > test2 $ ... < [EOF]$ ... > [EOF]$ --- recordio handles partial final lines ... < test+$ ... > test+$ ... < [EOF]$ ... > [EOF]$ --- argv0 works zero 0 --- argv0 requires arguments argv0: usage: argv0 realname program [ arg ... ] 100 --- rblsmtpd does not find 127.0.0.1 on the RBL ok 0 --- rblsmtpd finds 127.0.0.2 on the RBL rblsmtpd: 127.0.0.2 pid x: 451 Blackholed - see 220 rblsmtpd.local^M 451 Blackholed - see ^M 221 rblsmtpd.local^M 0 --- rblsmtpd -b uses a permanent error code rblsmtpd: 127.0.0.2 pid x: 553 Blackholed - see 220 rblsmtpd.local^M 553 Blackholed - see ^M 221 rblsmtpd.local^M 0 --- rblsmtpd quits after a timeout rblsmtpd: 127.0.0.2 pid x: 451 Blackholed - see 220 rblsmtpd.local^M 0 --- rblsmtpd prints an immediate error message with -t0 rblsmtpd: 127.0.0.2 pid x: 451 Blackholed - see 451 Blackholed - see ^M 0 --- rblsmtpd understands an empty $RBLSMTPD ok 0 --- rblsmtpd understands a nonempty $RBLSMTPD rblsmtpd: 127.0.0.2 pid x: 451 Error 220 rblsmtpd.local^M 451 Error^M 221 rblsmtpd.local^M 0 --- rblsmtpd understands a permanent $RBLSMTPD rblsmtpd: 127.0.0.2 pid x: 553 Error 220 rblsmtpd.local^M 553 Error^M 221 rblsmtpd.local^M 0 --- rblsmtpd understands -r ok 0 --- rblsmtpd understands -a ok 0 --- tcpserver -1v prints proper messages 50016 tcpserver: status: 0/2 tcpserver: status: 1/2 tcpserver: pid x from 127.0.0.1 tcpserver: ok x Local:127.0.0.1:50016 localhost:127.0.0.1::x tcpserver: end x status 0 tcpserver: status: 0/2 tcpserver: status: 1/2 tcpserver: pid x from 127.0.0.1 tcpserver: ok x Local:127.0.0.1:50016 localhost:127.0.0.1::x tcpserver: end x status 0 tcpserver: status: 0/2 tcpserver: status: 1/2 tcpserver: pid x from 127.0.0.1 tcpserver: ok x Local:127.0.0.1:50016 localhost:127.0.0.1::x tcpserver: end x status 0 tcpserver: status: 0/2 tcpserver: status: 1/2 tcpserver: pid x from 127.0.0.1 tcpserver: ok x Local:127.0.0.1:50016 localhost:127.0.0.1::x tcpserver: end x status 0 tcpserver: status: 0/2 tcpserver: status: 1/2 tcpserver: pid x from 127.0.0.1 tcpserver: ok x Local:127.0.0.1:50016 localhost:127.0.0.1::x tcpserver: end x status 0 tcpserver: status: 0/2 tcpserver: status: 1/2 tcpserver: pid x from 127.0.0.1 tcpserver: ok x Local:127.0.0.1:50016 localhost:127.0.0.1::x tcpserver: end x status 0 tcpserver: status: 0/2 tcpserver: status: 1/2 tcpserver: pid x from 127.0.0.1 tcpserver: ok x Local:127.0.0.1:50016 localhost:127.0.0.1::x tcpserver: end x status 0 tcpserver: status: 0/2