chiark
/
gitweb
/
~ian
/
authbind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
introduce checkexecflagfile
[authbind.git]
/
helper.c
diff --git
a/helper.c
b/helper.c
index f58ee9ec4f30c9a4aa359b6e7bcd3b608ee46b4f..0841cd2f89f2083acff44e5669b5e5ca9c8a7089 100644
(file)
--- a/
helper.c
+++ b/
helper.c
@@
-62,6
+62,11
@@
static void authorised(void) {
else _exit(0);
}
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<len; i++) {
static void hex2bytes(const char *string, unsigned char *out, int len) {
int i;
for (i=0; i<len; i++) {
@@
-139,18
+144,25
@@
int main(int argc, const char *const *argv) {
if (af == AF_INET) {
snprintf(fnbuf,sizeof(fnbuf)-1,"byaddr/%s%s:%u",tophalfchar,np,hport);
if (af == AF_INET) {
snprintf(fnbuf,sizeof(fnbuf)-1,"byaddr/%s%s:%u",tophalfchar,np,hport);
- if (!access(fnbuf,X_OK)) authorised();
- if (errno != ENOENT) exiterrno(errno);
+ checkexecflagfile(fnbuf);
}
snprintf(fnbuf,sizeof(fnbuf)-1,"byaddr/%s%s,%u",tophalfchar,np,hport);
}
snprintf(fnbuf,sizeof(fnbuf)-1,"byaddr/%s%s,%u",tophalfchar,np,hport);
- if (!access(fnbuf,X_OK)) authorised();
- if (errno != ENOENT) exiterrno(errno);
+ checkexecflagfile(fnbuf);
if (af == AF_INET6) {
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);
snprintf(fnbuf,sizeof(fnbuf)-1,"byaddr/%s%s,%u",tophalfchar,sbuf,hport);
+ checkexecflagfile(fnbuf);
}
uid= getuid(); if (uid==(uid_t)-1) perrorfail("getuid");
}
uid= getuid(); if (uid==(uid_t)-1) perrorfail("getuid");
@@
-161,10
+173,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;
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 &&
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))) {
&a1,&a2,&a3,&a4,&alen,&pmin,&pmax,&nchar),
nchar == strlen(fnbuf))) {
@@
-180,7
+193,7
@@
int main(int argc, const char *const *argv) {
} else {
char *comma = strchr(fnbuf,',');
} else {
char *comma = strchr(fnbuf,',');
- if (comma) continue;
+ if (
!
comma) continue;
*comma++ = '\0';
char *hyphen = strchr(fnbuf,'-');
*comma++ = '\0';
char *hyphen = strchr(fnbuf,'-');
@@
-202,6
+215,7
@@
int main(int argc, const char *const *argv) {
memcmp(addr_any,maxaddr,addrlen_any) > 0)
continue;
memcmp(addr_any,maxaddr,addrlen_any) > 0)
continue;
+ nchar = -1;
sscanf(comma," %u-%u %n",
&pmin,&pmax,&nchar);
if (nchar != strlen(comma))
sscanf(comma," %u-%u %n",
&pmin,&pmax,&nchar);
if (nchar != strlen(comma))