static void dump_acl(aclnode *a)
{
int act = ALLOW;
-
+
for (; a; a = a->next) {
dump_aclnode(a);
act = a->act;
#define KWMATCHP(kw) (strncmp(p, kw, sizeof(kw) - 1) == 0 && \
!isalnum(UC(p[sizeof(kw) - 1])) && \
(p += sizeof(kw) - 1))
-
+
static void parse_ports(char **pp, unsigned short *min, unsigned short *max)
{
char *p = *pp, *q;
NEXTNUMBER(q, del); *min = strtoul(q, 0, 0); RESCAN(del);
SKIPSPC;
if (*p == '-')
- { NEXTNUMBER(q, del); *max = strtoul(q, 0, 0); RESCAN(del); }
+ { p++; NEXTNUMBER(q, del); *max = strtoul(q, 0, 0); RESCAN(del); }
else
*max = *min;
}
{
struct sockaddr_un sun;
- if (sa->sa_family == AF_INET) {
+ if (sa->sa_family == AF_INET) {
PRESERVING_ERRNO({
if (acl_allows_p(bind_real, SIN(sa))) {
if (fixup_real_ip_socket(sk))
int connect(int sk, const struct sockaddr *sa, socklen_t len)
{
struct sockaddr_un sun;
+ int fixup_p = 0;
+ int rc;
if (sa->sa_family == AF_INET) {
PRESERVING_ERRNO({
do_implicit_bind(sk, &sa, &len, &sun);
+ fixup_p = 1;
});
}
- return real_connect(sk, sa, len);
+ rc = real_connect(sk, sa, len);
+ if (rc < 0) {
+ switch (errno) {
+ case ENOENT: errno = ECONNREFUSED; break;
+ }
+ }
+ return rc;
}
ssize_t sendto(int sk, const void *buf, size_t len, int flags,