26ff9578a8c79a7efabad6937ece0ee07e35dfa1
[openafs.git] / src / auth / test / testnetrestrict.c
1 /*
2  * testnetstrict.c
3  *
4  * Utility to test NetInfo and NetRestrict parsing
5  */
6
7 #include <afsconfig.h>
8 #include <afs/param.h>
9 #include <afs/cellconfig.h>
10
11 #include <sys/types.h>
12 #include <stddef.h>
13 #include <stdlib.h>
14 #include <stdio.h>
15
16 #include <arpa/inet.h>
17
18 char *interfaceList, *filenameNetInfo, *filenameNetRestrict;
19
20 int
21 rx_getAllAddrMaskMtu(afs_uint32 addrBuffer[],
22                      afs_uint32 maskBuffer[],
23                      afs_uint32 mtuBuffer[],
24                      int maxSize)
25 {
26     FILE *fp;
27     int nInterfaces = 0, lineNo = 1;
28     int a[4], m[4], mtu;
29     char line[80];
30
31     fp = fopen(interfaceList, "r");
32     if (fp == NULL) {
33         perror("fopen");
34         exit(1);
35     }
36
37     while (nInterfaces < maxSize) {
38         ++lineNo;
39         if (fgets(line, 80, fp) == NULL)
40                 break;
41         if (sscanf(line, "%d.%d.%d.%d %d.%d.%d.%d %d\n",
42                   &a[0], &a[1], &a[2], &a[3],
43                   &m[0], &m[1], &m[2], &m[3], &mtu) == 9) {
44
45             addrBuffer[nInterfaces] = htonl(a[0] << 24 | a[1] << 16
46                                             | a[2] << 8 | a[3]);
47             maskBuffer[nInterfaces] = htonl(m[0] << 24 | m[1] << 16
48                                             | m[2] << 8 | m[3]);
49             mtuBuffer[nInterfaces] = htonl(mtu);
50             ++nInterfaces;
51         } else {
52             fprintf(stderr, "failed to parse line %d in %s\n", lineNo, interfaceList);
53         }
54     }
55     fclose(fp);
56
57     return nInterfaces;
58 }
59
60 #define MAXADDRS 16
61
62 int
63 main(int argc, char *argv[])
64 {
65     afs_uint32 outAddrs[MAXADDRS], outMask[MAXADDRS], outMtu[MAXADDRS], nAddrs;
66     char reason[1024];
67     int i, retval;
68
69     if (argc < 4) {
70         fprintf(stderr, "usage: testnetrestrict <interface list> <netinfo> <netstrict>\n");
71         exit(1);
72     }
73
74     interfaceList = argv[1];
75     filenameNetInfo = argv[2];
76     filenameNetRestrict = argv[3];
77
78     reason[0] = '\0';
79     retval = afsconf_ParseNetInfoFile(outAddrs, outMask, outMtu, MAXADDRS,
80                                       reason, filenameNetInfo);
81
82     printf("afsconf_ParseNetInfoFile() returned %d\n", retval);
83     if (reason[0] != '\0')
84         printf("reason: %s\n", reason);
85
86     printf("final address list:\n");
87     if (retval > 0) {
88         for(i = 0; i < retval; ++i) {
89             printf("\taddress 0x%x  mask 0x%x  mtu %d\n",
90                    ntohl(outAddrs[i]), ntohl(outMask[i]), ntohl(outMtu[i]));
91         }
92     }
93
94     reason[0] = '\0';
95     retval = afsconf_ParseNetRestrictFile(outAddrs, outMask, outMtu, MAXADDRS,
96                                           &nAddrs, reason, filenameNetRestrict);
97
98     printf("\nafsconf_ParseNetRestrictFile() returned %d\n", retval);
99     if (reason[0] != '\0')
100         printf("reason: %s\n", reason);
101     if (nAddrs > 0) {
102         printf("final address list:\n");
103         for(i = 0; i < nAddrs; ++i) {
104             printf("\taddress 0x%x  mask 0x%x  mtu %d\n",
105                    ntohl(outAddrs[i]), ntohl(outMask[i]), ntohl(outMtu[i]));
106         }
107     }
108
109     reason[0] = '\0';
110     retval = afsconf_ParseNetFiles(outAddrs, outMask, outMtu, MAXADDRS,
111                                    reason, filenameNetInfo, filenameNetRestrict);
112
113     printf("\nafsconf_ParseNetFiles() returned %d\n", retval);
114     if (reason[0] != '\0')
115         printf("reason: %s\n", reason);
116     if (retval > 0) {
117         printf("final address list:\n");
118         for(i = 0; i < retval; ++i) {
119             printf("\taddress 0x%x  mask 0x%x  mtu %d\n",
120                    ntohl(outAddrs[i]), ntohl(outMask[i]), ntohl(outMtu[i]));
121         }
122     }
123
124     exit(0);
125 }