ndb/cs: handle v4 only case for rudp
This commit is contained in:
parent
1d10ecdaae
commit
b3b938d5ec
1 changed files with 27 additions and 27 deletions
|
@ -146,8 +146,12 @@ struct Network
|
|||
char *net;
|
||||
Ndbtuple *(*lookup)(Network*, char*, char*);
|
||||
char *(*trans)(Ndbtuple*, Network*, char*, char*, int);
|
||||
int considered; /* flag: ignored for "net!"? */
|
||||
int fasttimeouthack; /* flag. was for IL */
|
||||
|
||||
char considered; /* flag: ignored for "net!"? */
|
||||
char fasttimeouthack; /* flag. was for IL */
|
||||
char v4only;
|
||||
char v6only;
|
||||
|
||||
Network *next;
|
||||
};
|
||||
|
||||
|
@ -159,15 +163,15 @@ enum {
|
|||
* net doesn't apply to (r)udp, icmp(v6), or telco (for speed).
|
||||
*/
|
||||
Network network[] = {
|
||||
{ "il", iplookup, iptrans, 0, 1, },
|
||||
{ "tcp", iplookup, iptrans, 0, 0, },
|
||||
{ "il", iplookup, iptrans, 0, 0, },
|
||||
{ "udp", iplookup, iptrans, 1, 0, },
|
||||
{ "icmp", iplookup, iptrans, 1, 0, },
|
||||
{ "icmpv6", iplookup, iptrans, 1, 0, },
|
||||
{ "rudp", iplookup, iptrans, 1, 0, },
|
||||
{ "ssh", iplookup, iptrans, 1, 0, },
|
||||
{ "telco", telcolookup, telcotrans, 1, 0, },
|
||||
{ "il", iplookup, iptrans, 0, 1, 1, 0, },
|
||||
{ "tcp", iplookup, iptrans, 0, 0, 0, 0, },
|
||||
{ "il", iplookup, iptrans, 0, 0, 1, 0, },
|
||||
{ "udp", iplookup, iptrans, 1, 0, 0, 0, },
|
||||
{ "icmp", iplookup, iptrans, 1, 0, 1, 0, },
|
||||
{ "icmpv6", iplookup, iptrans, 1, 0, 0, 1, },
|
||||
{ "rudp", iplookup, iptrans, 1, 0, 1, 0, },
|
||||
{ "ssh", iplookup, iptrans, 1, 0, 0, 0, },
|
||||
{ "telco", telcolookup, telcotrans, 1, 0, 0, 0, },
|
||||
{ 0 },
|
||||
};
|
||||
|
||||
|
@ -1369,6 +1373,13 @@ ipattrlookup(Ndb *db, char *ipa, char *attr, char *val, int vlen)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
isv4str(char *s)
|
||||
{
|
||||
uchar ip[IPaddrlen];
|
||||
return parseip(ip, s) != -1 && isv4(ip);
|
||||
}
|
||||
|
||||
/*
|
||||
* lookup (and translate) an ip destination
|
||||
*/
|
||||
|
@ -1385,7 +1396,6 @@ iplookup(Network *np, char *host, char *serv)
|
|||
uchar tnet[IPaddrlen];
|
||||
Ipifc *ifc;
|
||||
Iplifc *lifc;
|
||||
int v6;
|
||||
|
||||
/*
|
||||
* start with the service since it's the most likely to fail
|
||||
|
@ -1444,20 +1454,19 @@ iplookup(Network *np, char *host, char *serv)
|
|||
*/
|
||||
t = 0;
|
||||
werrstr("can't translate address");
|
||||
v6 = strcmp(np->net, "il") != 0;
|
||||
if(strcmp(attr, "dom") == 0)
|
||||
t = dnsiplookup(host, &s, v6);
|
||||
t = dnsiplookup(host, &s, !np->v4only);
|
||||
if(t == nil)
|
||||
free(ndbgetvalue(db, &s, attr, host, "ip", &t));
|
||||
if(t == nil){
|
||||
dnsname = ndbgetvalue(db, &s, attr, host, "dom", nil);
|
||||
if(dnsname){
|
||||
t = dnsiplookup(dnsname, &s, v6);
|
||||
t = dnsiplookup(dnsname, &s, !np->v4only);
|
||||
free(dnsname);
|
||||
}
|
||||
}
|
||||
if(t == nil)
|
||||
t = dnsiplookup(host, &s, v6);
|
||||
t = dnsiplookup(host, &s, !np->v4only);
|
||||
if(t == nil)
|
||||
return nil;
|
||||
|
||||
|
@ -1492,13 +1501,6 @@ iplookup(Network *np, char *host, char *serv)
|
|||
return t;
|
||||
}
|
||||
|
||||
static int
|
||||
isv4str(char *s)
|
||||
{
|
||||
uchar ip[IPaddrlen];
|
||||
return parseip(ip, s) != -1 && isv4(ip);
|
||||
}
|
||||
|
||||
/*
|
||||
* translate an ip address
|
||||
*/
|
||||
|
@ -1525,12 +1527,10 @@ iptrans(Ndbtuple *t, Network *np, char *serv, char *rem, int hack)
|
|||
snprint(reply, sizeof(reply), "%s/%s/clone %s%s",
|
||||
mntpt, np->net, ts, x);
|
||||
else {
|
||||
/* il and icmp only supports ipv4 addresses */
|
||||
if((strcmp(np->net, "il") == 0 || strcmp(np->net, "icmp") == 0) && !isv4str(t->val))
|
||||
if(np->v4only && !isv4str(t->val))
|
||||
return nil;
|
||||
|
||||
/* icmpv6 does not support ipv4 addresses */
|
||||
if(strcmp(np->net, "icmpv6") == 0 && isv4str(t->val))
|
||||
if(np->v6only && isv4str(t->val))
|
||||
return nil;
|
||||
|
||||
snprint(reply, sizeof(reply), "%s/%s/clone %s!%s%s%s",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue