annotate config.c @ 15:54f08929b195 noffle

[svn] Bring up to date
author enz
date Sat, 29 Apr 2000 13:22:25 +0100
parents 26398b4be952
children 8e972daaeab9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
1 /*
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
2 config.c
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
3
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
4 The following macros must be set, when compiling this file:
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
5 CONFIGFILE
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
6 SPOOLDIR
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
7 VERSION
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
8
2
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
9 $Id: config.c 7 2000-01-06 09:30:49Z enz $
0
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
10 */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
11
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
12 #include "config.h"
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
13
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
14 #include <limits.h>
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
15 #include "log.h"
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
16 #include "util.h"
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
17
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
18 typedef struct
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
19 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
20 Str name;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
21 Str user;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
22 Str pass;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
23 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
24 ServEntry;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
25
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
26 struct
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
27 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
28 /* Compile time options */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
29 const char *spoolDir;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
30 const char *version;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
31 /* Options from the config file */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
32 int maxFetch;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
33 int autoUnsubscribeDays;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
34 int threadFollowTime;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
35 int connectTimeout;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
36 Bool autoSubscribe;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
37 Bool autoUnsubscribe;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
38 Bool removeMsgId;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
39 Bool replaceMsgId;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
40 Str autoSubscribeMode;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
41 Str mailTo;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
42 int numServ;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
43 int maxServ;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
44 ServEntry *serv;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
45 int servIdx; /* for server enumeration */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
46 } config =
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
47 {
2
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
48 SPOOLDIR, /* spoolDir */
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
49 VERSION, /* version */
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
50 300, /* maxFetch */
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
51 30, /* autoUnsubscribeDays */
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
52 7, /* threadFollowTime */
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
53 30, /* connectTimeout */
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
54 FALSE, /* autoSubscribe */
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
55 FALSE, /* autoUnsubscribe */
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
56 FALSE, /* removeMsgId */
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
57 TRUE, /* replaceMsgId */
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
58 "over", /* autoSubscribeMode */
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
59 "", /* mailTo */
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
60 0, /* numServ */
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
61 0, /* maxServ */
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
62 NULL, /* serv */
26398b4be952 [svn] Added some comments.
enz
parents: 0
diff changeset
63 0 /* servIdx */
0
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
64 };
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
65
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
66 const char * Cfg_spoolDir( void ) { return config.spoolDir; }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
67 const char * Cfg_version( void ) { return config.version; }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
68
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
69 int Cfg_maxFetch( void ) { return config.maxFetch; }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
70 int Cfg_autoUnsubscribeDays( void ) { return config.autoUnsubscribeDays; }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
71 int Cfg_threadFollowTime( void ) { return config.threadFollowTime; }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
72 int Cfg_connectTimeout( void ) { return config.connectTimeout; }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
73 Bool Cfg_autoUnsubscribe( void ) { return config.autoUnsubscribe; }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
74 Bool Cfg_autoSubscribe( void ) { return config.autoSubscribe; }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
75 Bool Cfg_removeMsgId( void ) { return config.removeMsgId; }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
76 Bool Cfg_replaceMsgId( void ) { return config.replaceMsgId; }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
77 const char * Cfg_autoSubscribeMode( void ) {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
78 return config.autoSubscribeMode; }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
79 const char * Cfg_mailTo( void ) { return config.mailTo; }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
80
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
81 void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
82 Cfg_beginServEnum( void )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
83 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
84 config.servIdx = 0;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
85 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
86
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
87 Bool
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
88 Cfg_nextServ( Str name )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
89 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
90 if ( config.servIdx >= config.numServ )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
91 return FALSE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
92 strcpy( name, config.serv[ config.servIdx ].name );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
93 ++config.servIdx;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
94 return TRUE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
95 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
96
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
97 static Bool
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
98 searchServ( const char *name, int *idx )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
99 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
100 int i;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
101
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
102 for ( i = 0; i < config.numServ; ++i )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
103 if ( strcmp( name, config.serv[ i ].name ) == 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
104 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
105 *idx = i;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
106 return TRUE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
107 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
108 return FALSE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
109 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
110
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
111 Bool
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
112 Cfg_servListContains( const char *name )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
113 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
114 int idx;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
115
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
116 return searchServ( name, &idx );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
117 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
118
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
119 Bool
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
120 Cfg_servIsPreferential( const char *name1, const char *name2 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
121 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
122 Bool exists1, exists2;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
123 int idx1, idx2;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
124
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
125 exists1 = searchServ( name1, &idx1 );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
126 exists2 = searchServ( name2, &idx2 );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
127 if ( exists1 && exists2 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
128 return ( idx1 < idx2 );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
129 if ( exists1 && ! exists2 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
130 return TRUE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
131 /* ( ! exists1 && exists2 ) || ( ! exists1 && ! exists2 ) */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
132 return FALSE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
133 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
134
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
135 void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
136 Cfg_authInfo( const char *name, Str user, Str pass )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
137 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
138 int idx;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
139
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
140 if ( searchServ( name, &idx ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
141 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
142 strcpy( user, config.serv[ idx ].user );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
143 strcpy( pass, config.serv[ idx ].pass );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
144 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
145 else
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
146 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
147 user[ 0 ] = '\0';
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
148 pass[ 0 ] = '\0';
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
149 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
150 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
151
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
152 static void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
153 logSyntaxErr( const char *line )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
154 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
155 Log_err( "Syntax error in config file: %s", line );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
156 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
157
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
158 static void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
159 getBool( Bool *variable, const char *line )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
160 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
161 Str value, name, lowerLn;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
162
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
163 strcpy( lowerLn, line );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
164 Utl_toLower( lowerLn );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
165 if ( sscanf( lowerLn, "%s %s", name, value ) != 2 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
166 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
167 logSyntaxErr( line );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
168 return;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
169 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
170
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
171 if ( strcmp( value, "yes" ) == 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
172 *variable = TRUE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
173 else if ( strcmp( value, "no" ) == 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
174 *variable = FALSE;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
175 else
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
176 Log_err( "Error in config file %s must be yes or no", name );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
177 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
178
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
179 static void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
180 getInt( int *variable, int min, int max, const char *line )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
181 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
182 int value;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
183 Str name;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
184
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
185 if ( sscanf( line, "%s %d", name, &value ) != 2 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
186 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
187 logSyntaxErr( line );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
188 return;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
189 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
190 if ( value < min || value > max )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
191 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
192 Log_err( "Range error in config file %s [%d,%d]", name, min, max );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
193 return;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
194 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
195 *variable = value;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
196 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
197
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
198 static void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
199 getStr( char *variable, const char *line )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
200 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
201 Str dummy;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
202
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
203 if ( sscanf( line, "%s %s", dummy, variable ) != 2 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
204 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
205 logSyntaxErr( line );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
206 return;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
207 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
208 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
209
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
210 static void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
211 getServ( const char *line )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
212 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
213 Str dummy;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
214 int r, len;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
215 ServEntry entry;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
216
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
217 entry.user[ 0 ] = '\0';
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
218 entry.pass[ 0 ] = '\0';
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
219 r = sscanf( line, "%s %s %s %s",
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
220 dummy, entry.name, entry.user, entry.pass );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
221 if ( r < 2 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
222 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
223 logSyntaxErr( line );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
224 return;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
225 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
226 len = strlen( entry.name );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
227 /* To make server name more definit, it is made lowercase and
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
228 port is removed, if it is the default port */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
229 if ( len > 4 && strcmp( entry.name + len - 4, ":119" ) == 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
230 entry.name[ len - 4 ] = '\0';
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
231 Utl_toLower( entry.name );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
232
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
233 if ( config.maxServ < config.numServ + 1 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
234 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
235 if ( ! ( config.serv = realloc( config.serv,
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
236 ( config.maxServ + 5 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
237 * sizeof( ServEntry ) ) ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
238 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
239 Log_err( "Could not realloc server list" );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
240 exit( EXIT_FAILURE );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
241 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
242 config.maxServ += 5;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
243 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
244 config.serv[ config.numServ++ ] = entry;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
245 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
246
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
247 void
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
248 Cfg_read( void )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
249 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
250 char *p;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
251 FILE *f;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
252 Str file, line, lowerLine, name, s;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
253
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
254 snprintf( file, MAXCHAR, CONFIGFILE );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
255 if ( ! ( f = fopen( file, "r" ) ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
256 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
257 Log_err( "Cannot read %s", file );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
258 return;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
259 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
260 while ( fgets( line, MAXCHAR, f ) )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
261 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
262 Utl_cpyStr( lowerLine, line );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
263 Utl_toLower( lowerLine );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
264 p = Utl_stripWhiteSpace( lowerLine );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
265 if ( *p == '#' || *p == '\0' )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
266 continue;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
267 if ( sscanf( p, "%s", name ) != 1 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
268 Log_err( "Syntax error in %s: %s", file, line );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
269 else if ( strcmp( "max-fetch", name ) == 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
270 getInt( &config.maxFetch, 0, INT_MAX, p );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
271 else if ( strcmp( "auto-unsubscribe-days", name ) == 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
272 getInt( &config.autoUnsubscribe, -1, INT_MAX, p );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
273 else if ( strcmp( "thread-follow-time", name ) == 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
274 getInt( &config.threadFollowTime, 0, INT_MAX, p );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
275 else if ( strcmp( "connect-timeout", name ) == 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
276 getInt( &config.connectTimeout, 0, INT_MAX, p );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
277 else if ( strcmp( "auto-subscribe", name ) == 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
278 getBool( &config.autoSubscribe, p );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
279 else if ( strcmp( "auto-unsubscribe", name ) == 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
280 getBool( &config.autoUnsubscribe, p );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
281 else if ( strcmp( "remove-messageid", name ) == 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
282 getBool( &config.removeMsgId, p );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
283 else if ( strcmp( "replace-messageid", name ) == 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
284 getBool( &config.replaceMsgId, p );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
285 else if ( strcmp( "auto-subscribe-mode", name ) == 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
286 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
287 getStr( s, p );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
288 Utl_toLower( s );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
289 if ( strcmp( s, "full" ) != 0
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
290 && strcmp( s, "thread" ) != 0
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
291 && strcmp( s, "over" ) != 0
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
292 && strcmp( s, "off" ) != 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
293 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
294 Log_err( "Syntax error in config file: %s", line );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
295 return;
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
296 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
297 else
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
298 strcpy( config.autoSubscribeMode, s );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
299 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
300 else if ( strcmp( "server", name ) == 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
301 /* Server needs line not p,
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
302 because password may contain uppercase */
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
303 getServ( line );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
304 else if ( strcmp( "mail-to", name ) == 0 )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
305 getStr( config.mailTo, p );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
306 else
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
307 Log_err( "Unknown config option: %s", name );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
308 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
309 fclose( f );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
310 if ( ! config.numServ )
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
311 {
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
312 Log_err( "Config file contains no server" );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
313 exit( EXIT_FAILURE );
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
314 }
04124a4423d4 [svn] Initial revision
enz
parents:
diff changeset
315 }