diff options
author | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2012-06-02 01:38:47 +0100 |
---|---|---|
committer | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2012-06-02 01:38:47 +0100 |
commit | c4ec7395c65a9a0c8df87434cc91030ba47d7542 (patch) | |
tree | 09f579fa06749a02a1cbfabe23cc68e2a499ceb1 /helper.c | |
parent | 291fc0e6df99b0fc654f6b15c9f86fb2ea7165cd (diff) |
fixes, also do uncompressed v6 addr
Diffstat (limited to 'helper.c')
-rw-r--r-- | helper.c | 22 |
1 files changed, 17 insertions, 5 deletions
@@ -148,9 +148,19 @@ int main(int argc, const char *const *argv) { if (errno != ENOENT) exiterrno(errno); if (af == AF_INET6) { - char sbuf[addrlen_any*2+1]; - bytes2hex(addr_any,sbuf,addrlen_any); + char sbuf[addrlen_any*3+1], *sp = sbuf; + const unsigned char *ip = addr_any; + int i; + for (i=0; i<8; i++) { + unsigned val = 0; + val |= *ip++; val <<= 8; + val |= *ip++; + if (i) *sp++ = ':'; + sp += sprintf(sp,"%x",val); + } snprintf(fnbuf,sizeof(fnbuf)-1,"byaddr/%s%s,%u",tophalfchar,sbuf,hport); + if (!access(fnbuf,X_OK)) authorised(); + if (errno != ENOENT) exiterrno(errno); } uid= getuid(); if (uid==(uid_t)-1) perrorfail("getuid"); @@ -161,10 +171,11 @@ int main(int argc, const char *const *argv) { while (fgets(fnbuf,sizeof(fnbuf)-1,file)) { unsigned int a1,a2,a3,a4, alen,pmin,pmax; - int nchar= -1; + int nchar; if (af == AF_INET && - (sscanf(fnbuf," %u.%u.%u.%u/%u: %u,%u %n", + (nchar = -1, + sscanf(fnbuf," %u.%u.%u.%u/%u: %u,%u %n", &a1,&a2,&a3,&a4,&alen,&pmin,&pmax,&nchar), nchar == strlen(fnbuf))) { @@ -180,7 +191,7 @@ int main(int argc, const char *const *argv) { } else { char *comma = strchr(fnbuf,','); - if (comma) continue; + if (!comma) continue; *comma++ = '\0'; char *hyphen = strchr(fnbuf,'-'); @@ -202,6 +213,7 @@ int main(int argc, const char *const *argv) { memcmp(addr_any,maxaddr,addrlen_any) > 0) continue; + nchar = -1; sscanf(comma," %u-%u %n", &pmin,&pmax,&nchar); if (nchar != strlen(comma)) |