FreeCalypso > hg > themwi-rtp-mgr
annotate rtp-mgr/readconf.c @ 6:191d58f5c24f
librtpalloc: port the simple client
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 27 May 2024 21:10:01 +0000 |
parents | 247f4bbde24c |
children | 9499d41fc393 |
rev | line source |
---|---|
2
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * In this module we implement the reading of /var/gsm/themwi-rtp.cfg: |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * we parse and save the configured IP address and port range for each |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * of our two sides, GSM and PSTN. |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 */ |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <sys/types.h> |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <sys/socket.h> |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <sys/time.h> |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <netinet/in.h> |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <arpa/inet.h> |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include <ctype.h> |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include <stdio.h> |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include <stdint.h> |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 #include <stdlib.h> |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 #include <string.h> |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 #include <strings.h> |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 #include <syslog.h> |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 #include "struct.h" |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 struct bind_range_cfg bind_range_gsm, bind_range_pstn; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 int syslog_facility = LOG_USER; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 static const char config_file_pathname[] = "/var/gsm/themwi-rtp.cfg"; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 struct parse_state { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 int lineno; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 int set_mask; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 }; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 static void |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 handle_bind_ip(st, kw, brc, line) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 struct parse_state *st; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 char *kw, *line; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 struct bind_range_cfg *brc; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 char *cp, *np; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 for (cp = line; isspace(*cp); cp++) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 ; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 if (*cp == '\0' || *cp == '#') { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 inv_syntax: fprintf(stderr, |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 "%s line %d: %s setting requires one argument\n", |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 config_file_pathname, st->lineno, kw); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 exit(1); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 for (np = cp; *cp && !isspace(*cp); cp++) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 ; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 if (*cp) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 *cp++ = '\0'; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 while (isspace(*cp)) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 cp++; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 if (*cp != '\0' && *cp != '#') |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 goto inv_syntax; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 brc->bind_ip.s_addr = inet_addr(np); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 if (brc->bind_ip.s_addr == INADDR_NONE) { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 fprintf(stderr, |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 "%s line %d: invalid IP address argument \"%s\"\n", |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 config_file_pathname, st->lineno, np); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 exit(1); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 static void |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 handle_port_range(st, kw, brc, line) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 struct parse_state *st; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 char *kw, *line; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 struct bind_range_cfg *brc; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 char *cp, *np1, *np2; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 for (cp = line; isspace(*cp); cp++) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 ; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 if (!isdigit(*cp)) { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 inv_syntax: fprintf(stderr, |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 "%s line %d: %s setting requires two numeric arguments\n", |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 config_file_pathname, st->lineno, kw); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 exit(1); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 for (np1 = cp; isdigit(*cp); cp++) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 ; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 if (!isspace(*cp)) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 goto inv_syntax; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 while (isspace(*cp)) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 cp++; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 if (!isdigit(*cp)) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 goto inv_syntax; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 for (np2 = cp; isdigit(*cp); cp++) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 ; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 if (*cp && !isspace(*cp)) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 goto inv_syntax; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 while (isspace(*cp)) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 cp++; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 if (*cp != '\0' && *cp != '#') |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 goto inv_syntax; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 brc->port_range_start = atoi(np1); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 brc->port_range_end = atoi(np2); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 if (brc->port_range_start & 1) { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 fprintf(stderr, "%s line %d: start port must be even\n", |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 config_file_pathname, st->lineno); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 exit(1); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 if (!(brc->port_range_end & 1)) { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 fprintf(stderr, "%s line %d: end port must be odd\n", |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 config_file_pathname, st->lineno); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 exit(1); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 if (brc->port_range_end <= brc->port_range_start) { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 fprintf(stderr, |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 "%s line %d: end port must be greater than start port\n", |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 config_file_pathname, st->lineno); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 exit(1); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 brc->port_next = brc->port_range_start; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 brc->port_tries = (brc->port_range_end - brc->port_range_start + 1) / 2; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 static void |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 handle_syslog_facility(st, kw, dummy_ptr, line) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 struct parse_state *st; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 char *kw, *line; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 void *dummy_ptr; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 char *cp, *np; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 for (cp = line; isspace(*cp); cp++) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 ; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 if (*cp == '\0' || *cp == '#') { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 inv_syntax: fprintf(stderr, |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 "%s line %d: %s setting requires one argument\n", |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 config_file_pathname, st->lineno, kw); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 exit(1); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 for (np = cp; *cp && !isspace(*cp); cp++) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 ; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 if (*cp) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 *cp++ = '\0'; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 while (isspace(*cp)) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 cp++; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 if (*cp != '\0' && *cp != '#') |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 goto inv_syntax; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 if (!strcmp(np, "authpriv")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 syslog_facility = LOG_AUTHPRIV; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 else if (!strcmp(np, "cron")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 syslog_facility = LOG_CRON; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 else if (!strcmp(np, "daemon")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 syslog_facility = LOG_DAEMON; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 else if (!strcmp(np, "ftp")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 syslog_facility = LOG_FTP; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 else if (!strcmp(np, "lpr")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 syslog_facility = LOG_LPR; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 else if (!strcmp(np, "mail")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 syslog_facility = LOG_MAIL; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 else if (!strcmp(np, "news")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 syslog_facility = LOG_NEWS; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 else if (!strcmp(np, "user")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 syslog_facility = LOG_USER; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 else if (!strcmp(np, "uucp")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 syslog_facility = LOG_UUCP; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 else if (!strcmp(np, "local0")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 syslog_facility = LOG_LOCAL0; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 else if (!strcmp(np, "local1")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 syslog_facility = LOG_LOCAL1; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 else if (!strcmp(np, "local2")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 syslog_facility = LOG_LOCAL2; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 else if (!strcmp(np, "local3")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 syslog_facility = LOG_LOCAL3; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 else if (!strcmp(np, "local4")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 syslog_facility = LOG_LOCAL4; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 else if (!strcmp(np, "local5")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 syslog_facility = LOG_LOCAL5; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 else if (!strcmp(np, "local6")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 syslog_facility = LOG_LOCAL6; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 else if (!strcmp(np, "local7")) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 syslog_facility = LOG_LOCAL7; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 else { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 fprintf(stderr, |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 "%s line %d: \"%s\" is not a recognized syslog facility\n", |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 config_file_pathname, st->lineno, np); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 exit(1); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 static void |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 process_line(st, line) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 struct parse_state *st; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 char *line; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 char *cp, *np; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 void (*handler)(); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 struct bind_range_cfg *ipside; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 int set_id; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 if (!index(line, '\n')) { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 fprintf(stderr, "%s line %d: too long or missing newline\n", |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 config_file_pathname, st->lineno); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 exit(1); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 for (cp = line; isspace(*cp); cp++) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 ; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 if (*cp == '\0' || *cp == '#') |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 return; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 for (np = cp; *cp && !isspace(*cp); cp++) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 ; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 if (*cp) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 *cp++ = '\0'; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 if (!strcmp(np, "gsm-ip-addr")) { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 handler = handle_bind_ip; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 ipside = &bind_range_gsm; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 set_id = 1; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 } else if (!strcmp(np, "gsm-port-range")) { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 handler = handle_port_range; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 ipside = &bind_range_gsm; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 set_id = 2; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 } else if (!strcmp(np, "pstn-ip-addr")) { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 handler = handle_bind_ip; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 ipside = &bind_range_pstn; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 set_id = 4; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 } else if (!strcmp(np, "pstn-port-range")) { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 handler = handle_port_range; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 ipside = &bind_range_pstn; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 set_id = 8; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 } else if (!strcmp(np, "syslog-facility")) { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 handler = handle_syslog_facility; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 ipside = NULL; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 set_id = 0; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 } else { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 fprintf(stderr, "%s line %d: non-understood keyword \"%s\"\n", |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 config_file_pathname, st->lineno, np); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 exit(1); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 if (st->set_mask & set_id) { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 fprintf(stderr, "%s line %d: duplicate %s setting\n", |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 config_file_pathname, st->lineno, np); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 exit(1); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 handler(st, np, ipside, cp); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 st->set_mask |= set_id; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 read_config_file() |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 FILE *inf; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 struct parse_state pst; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 char linebuf[256]; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 inf = fopen(config_file_pathname, "r"); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 if (!inf) { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 perror(config_file_pathname); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 exit(1); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 pst.set_mask = 0; |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 for (pst.lineno = 1; fgets(linebuf, sizeof linebuf, inf); pst.lineno++) |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 process_line(&pst, linebuf); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 fclose(inf); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 if (pst.set_mask != 15) { |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 fprintf(stderr, "error: %s did not set all required settings\n", |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 config_file_pathname); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 exit(1); |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 } |
247f4bbde24c
rtp-mgr: daemon ported over
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 } |