|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <sys/inet/in.h> ! 3: #include "config.h" ! 4: ! 5: /* imported */ ! 6: extern char *in_getw(); ! 7: extern char *strchr(); ! 8: ! 9: /* ! 10: * Look up the service matching the given parameters. ! 11: */ ! 12: struct in_service * ! 13: in_service(name, proto, port) ! 14: char *name; ! 15: char *proto; ! 16: unsigned long port; ! 17: { ! 18: static struct in_service serv; ! 19: static char sname[64], sproto[64]; ! 20: char buf[512], *p; ! 21: FILE *fp; ! 22: ! 23: if((fp = fopen(SERVICES, "r")) == 0){ ! 24: perror(SERVICES); ! 25: return(0); ! 26: } ! 27: while(fgets(buf, sizeof(buf), fp)){ ! 28: if(buf[0] == '\n' || buf[0] == '#') ! 29: continue; ! 30: if((p = in_getw(buf, sname)) == 0) ! 31: continue; ! 32: serv.name = sname; ! 33: if(name != NULL && strcmp(name, serv.name) != 0) ! 34: continue; ! 35: if((p = in_getw(p, sproto)) == 0) ! 36: continue; ! 37: serv.port = atoi(sproto); ! 38: if((port || name==NULL) && port != serv.port) ! 39: continue; ! 40: p = strchr(sproto, '/'); ! 41: serv.proto = p == NULL ? "tcp" : p+1; ! 42: if(proto != NULL && strcmp(proto, serv.proto) != 0) ! 43: continue; ! 44: ! 45: /* we've got a match */ ! 46: fclose(fp); ! 47: return(&serv); ! 48: } ! 49: fclose(fp); ! 50: if (name == NULL) { ! 51: sprintf(sname, "%d", port); ! 52: strcpy(sproto, proto!=NULL ? proto : "tcp"); ! 53: serv.proto = sproto; ! 54: serv.name = sname; ! 55: serv.port = port; ! 56: return(&serv); ! 57: } ! 58: ! 59: return(NULL); ! 60: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.