summaryrefslogtreecommitdiff
path: root/tcpserver.c
diff options
context:
space:
mode:
authorGerrit Pape <pape@smarden.org>2008-03-30 23:06:24 +0000
committerDmitry Bogatov <KAction@debian.org>2018-11-29 05:18:32 +0000
commita2670d6b2b9050b7d110ab7d732a65a96c9a03e3 (patch)
treeb76afb0f16d00d4d3a778d37518a8d52830baec4 /tcpserver.c
parentea0237e72a0305379fa489dc18e93369e65ec5bd (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.c112
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;