X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=helper.c;fp=helper.c;h=9e8ab865b9ee4ee29d0c23624c295386405dd81f;hb=97c1bc1b3cb16224315db59268f64025cc00d172;hp=cc4efe25ce7652c8bf4c8db3c751157ffcec85ea;hpb=f62c5e576fd26e4e56f0304fe40b6a9f4ec86537;p=authbind.git diff --git a/helper.c b/helper.c index cc4efe2..9e8ab86 100644 --- a/helper.c +++ b/helper.c @@ -30,9 +30,7 @@ #include #include -#ifndef CONFIGDIR -# define CONFIGDIR "/etc/authbind" -#endif +#include "authbind.h" static void exiterrno(int e) { exit(e>0 && e<128 ? e : ENOSYS); @@ -138,15 +136,21 @@ int main(int argc, const char *const *argv) { assert(np); if (af == AF_INET) { - snprintf(fnbuf,sizeof(fnbuf)-1,"byaddr/%s%s:%u",np,tophalfchar,hport); + snprintf(fnbuf,sizeof(fnbuf)-1,"byaddr/%s%s:%u",tophalfchar,np,hport); if (!access(fnbuf,X_OK)) authorised(); if (errno != ENOENT) exiterrno(errno); } - snprintf(fnbuf,sizeof(fnbuf)-1,"byaddr/%s%s,%u",np,tophalfchar,hport); + snprintf(fnbuf,sizeof(fnbuf)-1,"byaddr/%s%s,%u",tophalfchar,np,hport); if (!access(fnbuf,X_OK)) authorised(); if (errno != ENOENT) exiterrno(errno); + if (af == AF_INET6) { + char sbuf[addrlen_any*2+1]; + bytes2hex(addr_any,sbuf,addrlen_any); + snprintf(fnbuf,sizeof(fnbuf)-1,"byaddr/%s%s,%u",tophalfchar,sbuf,hport); + } + uid= getuid(); if (uid==(uid_t)-1) perrorfail("getuid"); snprintf(fnbuf,sizeof(fnbuf)-1,"byuid/%s%lu",tophalfchar,(unsigned long)uid);