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