diff options
author | Gerrit Pape <pape@smarden.org> | 2008-03-30 23:06:24 +0000 |
---|---|---|
committer | Dmitry Bogatov <KAction@debian.org> | 2018-11-29 05:18:32 +0000 |
commit | a2670d6b2b9050b7d110ab7d732a65a96c9a03e3 (patch) | |
tree | b76afb0f16d00d4d3a778d37518a8d52830baec4 /tcpserver.c | |
parent | ea0237e72a0305379fa489dc18e93369e65ec5bd (diff) |
Import Debian changes 1:0.88-1~bpo40+1
ucspi-tcp (1:0.88-1~bpo40+1) etch-backports; urgency=low
* build for etch.
ucspi-tcp (1:0.88-1) unstable; urgency=low
* debian/changelog: add epoch 1 to supersede unofficial package.
* debian/rules: remove target configure:; use glibc by default instead
of dietlibc.
* debian/control: no longer Build-Depends: dietlibc.
* debian/gcc/: remove; obsolete.
* debian/rules: install programs into /usr/bin/.
* debian/rules: new target patch: apply diffs from debian/diff/, reverse
apply in target clean:.
* debian/diff/0001-error.h-include-errno.h-instead-of-extern-int.diff:
new; error.h: '#include <errno.h>' instead of 'extern int errno;'.
* debian/ucspi-tcp-man/: new; add manpages downloaded from
http://smarden.org/pape/djb/manpages/ucspi-tcp-0.88-man-20020317.tar.gz.
* debian/rules: install manpages from debian/ucspi-tcp-man/ into
/usr/share/man/man1/.
* debian/control: no longer Recommends: ucspi-tcp-doc; Replaces:
ucspi-tcp-doc.
* debian/implicit: add proper dependencies to support 'parallel build'
through make -j (thx Daniel Schepler for the patch).
* debian/rules: run dpkg-shlibdeps; remove debian/substvars in target
clean:.
* debian/control: Depends: ${shlibs:Depends}.
* debian/control: Standards-Version: 3.7.2.2.
* debian/copyright: rewrite copyright.
* debian/ucspi-tcp.README.Debian: remove reference to unofficial packages.
* debian/control: minor updates to descriptions.
* debian/diff/0002-rblsmtpd.c-don-t-use-a-the-default-rbl.maps.vix.com.diff:
new; rblsmtpd.c: don't use a the default rbl.maps.vix.com if run without
-r switch.
* first upload to Debian/main (closes: #459318).
* debian/ucspi-tcp.NEWS.Debian: new; package introduced to Debian/main,
mention how to put on hold if upgrade from non-free is not desired.
ucspi-tcp (0.88-zarge2) sarge; urgency=low
* build against sarge's dietlibc-dev (0.28-3).
ucspi-tcp (0.88-zarge1) sarge; urgency=low
* debian/rules: minor cleanup.
* debian/implicit: update to revision 1.10.
ucspi-tcp (0.88-zarge0.3) sarge; urgency=low
* debian/rules: stop using debhelper, use implicit rules.
* debian/implicit: new; implicit Makefile rules.
* debian/README.Debian, debian/docs: rename to debian/ucspi-tcp.*.
* debian/dirs: remove; obsolete.
* debian/copyright: minor.
* debian/control: no longer Build-Depends: dephelper; remove
Standards-Version.
ucspi-tcp (0.88-zarge0.2) sarge; urgency=low
* use diet libc.
* debian/rules: set up diet program as c compiler wrapper; conditionally
overwrite PATH to have diet program used as c compiler wrapper; minor
cleanup.
* debian/gcc/gcc*: new; diet program as c compiler wrapper.
* debian/control: Build-Depends: dietlibc-dev; no longer Depends:
${shlibs:Depends}.
ucspi-tcp (0.88-woody0.1) woody; urgency=low
* woody package; new Standards-Version: 3.5.2.
* just _recommend_ ucspi-tcp-doc.
Diffstat (limited to 'tcpserver.c')
-rw-r--r-- | tcpserver.c | 112 |
1 files changed, 35 insertions, 77 deletions
diff --git a/tcpserver.c b/tcpserver.c index aab637f..979a0be 100644 --- a/tcpserver.c +++ b/tcpserver.c @@ -7,7 +7,6 @@ #include "fmt.h" #include "scan.h" #include "ip4.h" -#include "ip6.h" #include "fd.h" #include "exit.h" #include "env.h" @@ -29,7 +28,6 @@ #include "sig.h" #include "dns.h" -int forcev6 = 0; int verbosity = 1; int flagkillopts = 1; int flagdelay = 1; @@ -38,21 +36,20 @@ int flagremoteinfo = 1; int flagremotehost = 1; int flagparanoid = 0; unsigned long timeout = 26; -uint32 netif = 0; static stralloc tcpremoteinfo; uint16 localport; char localportstr[FMT_ULONG]; -char localip[16]; -char localipstr[IP6_FMT]; +char localip[4]; +char localipstr[IP4_FMT]; static stralloc localhostsa; char *localhost = 0; uint16 remoteport; char remoteportstr[FMT_ULONG]; -char remoteip[16]; -char remoteipstr[IP6_FMT]; +char remoteip[4]; +char remoteipstr[IP4_FMT]; static stralloc remotehostsa; char *remotehost = 0; @@ -99,12 +96,12 @@ void safecats(char *s) if (ch < 33) ch = '?'; if (ch > 126) ch = '?'; if (ch == '%') ch = '?'; /* logger stupidity */ -/* if (ch == ':') ch = '?'; */ + if (ch == ':') ch = '?'; append(&ch); } cats("..."); } -void env(const char *s,const char *t) +void env(char *s,char *t) { if (!pathexec_env(s,t)) drop_nomem(); } @@ -138,16 +135,9 @@ void found(char *data,unsigned int datalen) void doit(int t) { - int fakev4=0; int j; - uint32 scope_id; - if (!forcev6 && ip6_isv4mapped(remoteip)) - fakev4=1; - if (fakev4) - remoteipstr[ip4_fmt(remoteipstr,remoteip+12)] = 0; - else - remoteipstr[ip6_fmt(remoteipstr,remoteip)] = 0; + remoteipstr[ip4_fmt(remoteipstr,remoteip)] = 0; if (verbosity >= 2) { strnum[fmt_ulong(strnum,getpid())] = 0; @@ -165,40 +155,30 @@ void doit(int t) strerr_die2sys(111,DROP,"unable to print banner: "); } - if (socket_local6(t,localip,&localport,&scope_id) == -1) + if (socket_local4(t,localip,&localport) == -1) strerr_die2sys(111,DROP,"unable to get local address: "); - if (fakev4) - localipstr[ip4_fmt(localipstr,localip+12)] = 0; - else - localipstr[ip6_fmt(localipstr,localip)] = 0; + localipstr[ip4_fmt(localipstr,localip)] = 0; remoteportstr[fmt_ulong(remoteportstr,remoteport)] = 0; if (!localhost) - if (dns_name6(&localhostsa,localip) == 0) + if (dns_name4(&localhostsa,localip) == 0) if (localhostsa.len) { if (!stralloc_0(&localhostsa)) drop_nomem(); localhost = localhostsa.s; } - env("PROTO",fakev4?"TCP":"TCP6"); + env("PROTO","TCP"); env("TCPLOCALIP",localipstr); - localipstr[ip6_fmt(localipstr,localip)]=0; - env("TCP6LOCALIP",localipstr); - env("TCPLOCALPORT",localportstr); - env("TCP6LOCALPORT",localportstr); env("TCPLOCALHOST",localhost); - env("TCP6LOCALHOST",localhost); - if (!fakev4 && scope_id) - env("TCP6INTERFACE",socket_getifname(scope_id)); if (flagremotehost) - if (dns_name6(&remotehostsa,remoteip) == 0) + if (dns_name4(&remotehostsa,remoteip) == 0) if (remotehostsa.len) { if (flagparanoid) - if (dns_ip6(&tmp,&remotehostsa) == 0) - for (j = 0;j + 16 <= tmp.len;j += 16) - if (byte_equal(remoteip,16,tmp.s + j)) { + if (dns_ip4(&tmp,&remotehostsa) == 0) + for (j = 0;j + 4 <= tmp.len;j += 4) + if (byte_equal(remoteip,4,tmp.s + j)) { flagparanoid = 0; break; } @@ -208,20 +188,15 @@ void doit(int t) } } env("TCPREMOTEIP",remoteipstr); - remoteipstr[ip6_fmt(remoteipstr,remoteip)]=0; - env("TCP6REMOTEIP",remoteipstr); env("TCPREMOTEPORT",remoteportstr); - env("TCP6REMOTEPORT",remoteportstr); env("TCPREMOTEHOST",remotehost); - env("TCP6REMOTEHOST",remotehost); if (flagremoteinfo) { - if (remoteinfo6(&tcpremoteinfo,remoteip,remoteport,localip,localport,timeout,netif) == -1) + if (remoteinfo(&tcpremoteinfo,remoteip,remoteport,localip,localport,timeout) == -1) flagremoteinfo = 0; if (!stralloc_0(&tcpremoteinfo)) drop_nomem(); } env("TCPREMOTEINFO",flagremoteinfo ? tcpremoteinfo.s : 0); - env("TCP6REMOTEINFO",flagremoteinfo ? tcpremoteinfo.s : 0); if (fnrules) { int fdrules; @@ -231,15 +206,7 @@ void doit(int t) if (!flagallownorules) drop_rules(); } else { - int fakev4=0; - char* temp; - if (!forcev6 && ip6_isv4mapped(remoteip)) - fakev4=1; - if (fakev4) - temp=remoteipstr+7; - else - temp=remoteipstr; - if (rules(found,fdrules,temp,remotehost,flagremoteinfo ? tcpremoteinfo.s : 0) == -1) drop_rules(); + if (rules(found,fdrules,remoteipstr,remotehost,flagremoteinfo ? tcpremoteinfo.s : 0) == -1) drop_rules(); close(fdrules); } } @@ -273,7 +240,7 @@ void usage(void) { strerr_warn1("\ tcpserver: usage: tcpserver \ -[ -461UXpPhHrRoOdDqQv ] \ +[ -1UXpPhHrRoOdDqQv ] \ [ -c limit ] \ [ -x rules.cdb ] \ [ -B banner ] \ @@ -282,7 +249,6 @@ tcpserver: usage: tcpserver \ [ -b backlog ] \ [ -l localname ] \ [ -t timeout ] \ -[ -I interface ] \ host port program",0); _exit(100); } @@ -333,8 +299,8 @@ main(int argc,char **argv) unsigned long u; int s; int t; - - while ((opt = getopt(argc,argv,"46dDvqQhHrR1UXx:t:u:g:l:b:B:c:I:pPoO")) != opteof) + + while ((opt = getopt(argc,argv,"dDvqQhHrR1UXx:t:u:g:l:b:B:c:pPoO")) != opteof) switch(opt) { case 'b': scan_ulong(optarg,&backlog); break; case 'c': scan_ulong(optarg,&limit); break; @@ -359,10 +325,7 @@ main(int argc,char **argv) x = env_get("GID"); if (x) scan_ulong(x,&gid); break; case 'u': scan_ulong(optarg,&uid); break; case 'g': scan_ulong(optarg,&gid); break; - case 'I': netif=socket_getifidx(optarg); break; case '1': flag1 = 1; break; - case '4': noipv6 = 1; break; - case '6': forcev6 = 1; break; case 'l': localhost = optarg; break; default: usage(); } @@ -374,7 +337,8 @@ main(int argc,char **argv) hostname = *argv++; if (!hostname) usage(); - if (str_equal(hostname,"")) hostname = "0"; + if (str_equal(hostname,"")) hostname = "0.0.0.0"; + if (str_equal(hostname,"0")) hostname = "0.0.0.0"; x = *argv++; if (!x) usage(); @@ -384,7 +348,7 @@ main(int argc,char **argv) se = getservbyname(x,"tcp"); if (!se) strerr_die3x(111,FATAL,"unable to figure out port number for ",x); - uint16_unpack_big((char*)&se->s_port,&localport); + localport = ntohs(se->s_port); } if (!*argv) usage(); @@ -394,26 +358,20 @@ main(int argc,char **argv) sig_catch(sig_term,sigterm); sig_ignore(sig_pipe); - if (str_equal(hostname,"0")) { - byte_zero(localip,sizeof localip); - } else { - if (!stralloc_copys(&tmp,hostname)) - strerr_die2x(111,FATAL,"out of memory"); - if (dns_ip6_qualify(&addresses,&fqdn,&tmp) == -1) - strerr_die4sys(111,FATAL,"temporarily unable to figure out IP address for ",hostname,": "); - if (addresses.len < 16) - strerr_die3x(111,FATAL,"no IP address for ",hostname); - byte_copy(localip,16,addresses.s); - if (ip6_isv4mapped(localip)) - noipv6=1; - } - - s = socket_tcp6(); + if (!stralloc_copys(&tmp,hostname)) + strerr_die2x(111,FATAL,"out of memory"); + if (dns_ip4_qualify(&addresses,&fqdn,&tmp) == -1) + strerr_die4sys(111,FATAL,"temporarily unable to figure out IP address for ",hostname,": "); + if (addresses.len < 4) + strerr_die3x(111,FATAL,"no IP address for ",hostname); + byte_copy(localip,4,addresses.s); + + s = socket_tcp(); if (s == -1) strerr_die2sys(111,FATAL,"unable to create socket: "); - if (socket_bind6_reuse(s,localip,localport,netif) == -1) + if (socket_bind4_reuse(s,localip,localport) == -1) strerr_die2sys(111,FATAL,"unable to bind: "); - if (socket_local6(s,localip,&localport,&netif) == -1) + if (socket_local4(s,localip,&localport) == -1) strerr_die2sys(111,FATAL,"unable to get local address: "); if (socket_listen(s,backlog) == -1) strerr_die2sys(111,FATAL,"unable to listen: "); @@ -441,7 +399,7 @@ main(int argc,char **argv) while (numchildren >= limit) sig_pause(); sig_unblock(sig_child); - t = socket_accept6(s,remoteip,&remoteport,&netif); + t = socket_accept4(s,remoteip,&remoteport); sig_block(sig_child); if (t == -1) continue; |