979c737f9b
the acl.c code parsing a site-spec has been factored out into a new TU: hostspec. it was superior to the parsing code in upstream.c in that it properly deals with both ipv4 and ipv6. both upstream and acl now use the new code for parsing, and upstream also for checking for a match. acl.c still uses the old matching code as it has a lot of special case code for specifications containing a hostname, and in case such a spec is encountered, tries to do reverse name lookup to see if a numeric ip matches that spec. removing that code could break existing usecases, however since that was never implemented for upstream nobody will miss it there.
27 lines
504 B
C
27 lines
504 B
C
#ifndef HOSTSPEC_H
|
|
#define HOSTSPEC_H
|
|
|
|
#define IPV6_LEN 16
|
|
|
|
enum hostspec_type {
|
|
HST_NONE,
|
|
HST_STRING,
|
|
HST_NUMERIC,
|
|
};
|
|
|
|
struct hostspec {
|
|
enum hostspec_type type;
|
|
union {
|
|
char *string;
|
|
struct {
|
|
unsigned char network[IPV6_LEN];
|
|
unsigned char mask[IPV6_LEN];
|
|
} ip;
|
|
} address;
|
|
};
|
|
|
|
int hostspec_parse(char *domain, struct hostspec *h);
|
|
int hostspec_match(const char *ip, const struct hostspec *h);
|
|
|
|
#endif
|