X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=helper.c;h=a58e7aae666f30899a9673f2efbaf7b070b8bdd2;hb=4b19c2885bae85dee45ecfc3cfcd8d503d3f3e23;hp=09250753bd8b28a93a03723a046fc93533eb6854;hpb=a2521aede92f9f335874de3574cd8827394ba384;p=authbind.git diff --git a/helper.c b/helper.c index 0925075..a58e7aa 100644 --- a/helper.c +++ b/helper.c @@ -34,8 +34,6 @@ # define CONFIGDIR "/etc/authbind" #endif -static const char *rcsid="$Id$"; - static void exiterrno(int e) { exit(e>0 && e<128 ? e : ENOSYS); } @@ -48,7 +46,7 @@ static void perrorfail(const char *m) { } static void badusage(void) { - fprintf(stderr,"libauthbind's helper: bad usage\n (%s)\n",rcsid); + fprintf(stderr,"libauthbind's helper: bad usage\n"); exit(ENOSYS); } @@ -64,6 +62,11 @@ static void authorised(void) { else _exit(0); } +static void checkexecflagfile(const char *file) { + if (!access(file,X_OK)) authorised(); + if (errno != ENOENT) exiterrno(errno); +} + static void hex2bytes(const char *string, unsigned char *out, int len) { int i; for (i=0; i> pfxlen_thisbyte); + unsigned thaddr_thisbyte = thaddr[i]; + unsigned addr_thisbyte = ((unsigned char*)addr_any)[i]; + if ((addr_thisbyte & mask_thisbyte) != thaddr_thisbyte) + goto badline; + } + if (pfxlen_remain) badline: continue; + /* hooray */ } else { - min = fnbuf; - max = fnbuf; + const char *min, *max; + if (hyphen) { + *hyphen++ = '\0'; + min = fnbuf; + max = hyphen; + } else { + min = fnbuf; + max = fnbuf; + } + unsigned char minaddr[addrlen_any]; + unsigned char maxaddr[addrlen_any]; + if (inet_pton(af,min,minaddr) != 1 || + inet_pton(af,max,maxaddr) != 1) + continue; + if (memcmp(addr_any,minaddr,addrlen_any) < 0 || + memcmp(addr_any,maxaddr,addrlen_any) > 0) + continue; } - unsigned char minaddr[addrlen_any]; - unsigned char maxaddr[addrlen_any]; - if (inet_pton(af,min,minaddr) != 1 || - inet_pton(af,max,maxaddr) != 1) - continue; - if (memcmp(addr_any,minaddr,addrlen_any) < 0 || - memcmp(addr_any,maxaddr,addrlen_any) > 0) - continue; - sscanf(comma," %u-%u %n", - &pmin,&pmax,&nchar); - if (nchar != strlen(comma)) + if (nchar = -1, + sscanf(comma," %u-%u %n", + &pmin,&pmax,&nchar), + nchar == strlen(comma)) { + /* good */ + } else if (nchar = -1, + sscanf(comma," %u %n", + &pmin,&nchar), + nchar == strlen(comma)) { + pmax = pmin; + } else { continue; + } } if (hportpmax) continue;