|
|
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.