1 | /***************************************
2 | $Revision: 1.16 $
3 |
4 | Constants module (co) - this _should_ eventually get merged in with the
5 | config module.
6 |
7 | Status: NOT REVUED, NOT TESTED
8 |
9 | +html+ <DL COMPACT>
10 | +html+ <DT>Online References:
11 | +html+ <DD><UL>
12 | +html+ </UL>
13 | +html+ </DL>
14 | +html+ <PRE>
15 | Instructions for use:
16 |
17 | To add a constant:
18 | 0. Add a default value for the constant. (string)
19 | 1. Add the constant declaration to the _Constants struct.
20 | 2. Add a CO_get_function()
21 | 3. Add initializing code to init_constants()
22 |
23 | To access the constant:
24 | use the CO_get<Constant>() function from your other code.
25 | +html+ </PRE>
26 |
27 | ******************/ /******************
28 | Filename : constants.c
29 | Author : ottrey@ripe.net
30 | OSs Tested : Solaris
31 | Related Modules : Used in conjunction with the properties module.
32 | Problems :
33 | To Do : Merge into a "config module"
34 | Comments :
35 | ******************/ /******************
36 | Copyright (c) 1999 RIPE NCC
37 |
38 | All Rights Reserved
39 |
40 | Permission to use, copy, modify, and distribute this software and its
41 | documentation for any purpose and without fee is hereby granted,
42 | provided that the above copyright notice appear in all copies and that
43 | both that copyright notice and this permission notice appear in
44 | supporting documentation, and that the name of the author not be
45 | used in advertising or publicity pertaining to distribution of the
46 | software without specific, written prior permission.
47 |
48 | THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
49 | ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
50 | AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
51 | DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
52 | AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
53 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
54 | ***************************************/
55 | #include <stdio.h>
56 | #include <stdlib.h>
57 | #include <string.h>
58 |
59 | #include "memwrap.h"
60 | #include "properties.h"
61 |
62 | #define STR_XL 4095
63 |
64 | /*+ Maximum number of constants. +*/
65 | #define MAX_CONSTS 100
66 |
67 | /*+ Default values for constants. +*/
68 | #define DEFLT_MAX_THREADS "10"
69 | #define DEFLT_WHOIS_PORT "0"
70 | #define DEFLT_CONFIG_PORT "0"
71 | #define DEFLT_MIRROR_PORT "0"
72 | #define DEFLT_UPDATE_PORT "0"
73 | #define DEFLT_HOST "mysql.database.net"
74 | #define DEFLT_USER "xxx"
75 | #define DEFLT_PASSWORD "xxx"
76 | #define DEFLT_DATABASE_PORT "3306"
77 | #define DEFLT_DATABASE "RIPE"
78 | #define DEFLT_QUERY "SHOW TABLES"
79 | #define DEFLT_IN_QUERY "SELECT * FROM inetnum"
80 | #define DEFLT_RT_QUERY "SELECT * FROM route"
81 | #define DEFLT_AUTHENTICATE "0"
82 | #define DEFLT_WHOIS_SUSPENDED "0"
83 | #define DEFLT_DO_SERVER "1"
84 | #define DEFLT_WELCOME "Welcome to the whois R.I.P. server.\n"
85 | #define DEFLT_PROMPT "whois R.I.P. config> "
86 | #define DEFLT_CLEAR_SCREEN "0"
87 | #define DEFLT_SLEEP_TIME "1"
88 | #define DEFLT_ACCOUNTING "0"
89 | #define DEFLT_QUERY_LOGGING "1"
90 | #define DEFLT_QUERY_LOGFILE "stdout"
91 | #define DEFLT_INSTR_LOGGING "1"
92 | #define DEFLT_INSTR_LOGFILE "stdout"
93 | #define DEFLT_COMND_LOGGING "1"
94 | #define DEFLT_COMND_LOGFILE "stdout"
95 | #define DEFLT_TESTS_LOGGING "1"
96 | #define DEFLT_TESTS_LOGFILE "stdout"
97 | #define DEFLT_THREAD_LOGGING "1"
98 | #define DEFLT_THREAD_LOGFILE "stdout"
99 | #define DEFLT_SOCKET_LOGGING "1"
100 | #define DEFLT_SOCKET_LOGFILE "stdout"
101 | #define DEFLT_CONFIG_LOGGING "1"
102 | #define DEFLT_CONFIG_LOGFILE "stdout"
103 | #define DEFLT_CONFIG_FILE "rip.config"
104 | #define DEFLT_NRTM_HOST "nrtm.nowhere.xx"
105 | #define DEFLT_NRTM_VERSION "1"
106 | #define DEFLT_NRTM_DELAY "600"
107 | #define DEFLT_NRTM_CSERFILE "RIPE.CURRENTSERIAL"
108 | #define DEFLT_NRTM_LOGFILE "nrtm.log"
109 | #define DEFLT_UPDATE_MODE "0"
110 |
111 | /*+ Each constant has a +*/
112 | struct _constant {
113 | const char *token; /*+ Token to be found in properties file. +*/
114 | const char *deflt; /*+ Default value for the constant. +*/
115 | int (*set_func)(void *, char *); /*+ Function to set the constant. +*/
116 | void *constant_ptr; /*+ Pointer to the constant value +*/
117 | char *(*show_func)(void *); /*+ Function to show the constant. +*/
118 | };
119 |
120 |
121 | /*+ The Constants array has a +*/
122 | typedef struct _Constants {
123 | int max_threads[1]; /*+ Maximum number of server threads. +*/
124 | char whois_port[64]; /*+ Port for whois clients to rendezvous with. +*/
125 | char config_port[64]; /*+ Port for config clients to rendezvous with. +*/
126 | char mirror_port[64]; /*+ Port for mirror clients to rendezvous with. +*/
127 | char update_port[64]; /*+ Port for DBupdate clients to rendezvous with. +*/
128 | char host[64]; /*+ Host for the database. +*/
129 | char user[64]; /*+ User for the database. +*/
130 | char password[64]; /*+ Password for the database. +*/
131 | int database_port[1]; /*+ Port for the database. +*/
132 | char database[64]; /*+ Database name. +*/
133 | char query[1024]; /*+ Query for the database. +*/
134 | char in_query[1024]; /*+ Query for the radix tree initialization. +*/
135 | char rt_query[1024]; /*+ Query for the radix tree initialization. +*/
136 | int authenticate[1]; /*+ Authenticate users. +*/
137 | int whois_suspended[1]; /*+ Suspend the whois server. +*/
138 | char welcome[1024]; /*+ Welcome for config protocol. +*/
139 | char prompt[1024]; /*+ Prompt for config protocol. +*/
140 | int clear_screen[1]; /*+ Clear screen after config commands. +*/
141 | int sleep_time[1]; /*+ Sleep time (in sec) between config commands. +*/
142 | int accounting[1]; /*+ Conduct accounting on whois queries. +*/
143 | int query_logging[1]; /*+ Log the SQL queries. +*/
144 | char query_logfile[1024]; /*+ Query logfile for the database. +*/
145 | int instr_logging[1]; /*+ Log the whois instrucs. +*/
146 | char instr_logfile[1024]; /*+ Query logfile for the whois instrucs. +*/
147 | int comnd_logging[1]; /*+ Log the whois commands. +*/
148 | char comnd_logfile[1024]; /*+ Query logfile for the whois commands. +*/
149 | int tests_logging[1]; /*+ Log the whois tests. +*/
150 | char tests_logfile[1024]; /*+ Query logfile for the whois tests. +*/
151 | int thread_logging[1]; /*+ Log the whois threads. +*/
152 | char thread_logfile[1024]; /*+ Query logfile for the whois threads. +*/
153 | int socket_logging[1]; /*+ Log the socket. +*/
154 | char socket_logfile[1024]; /*+ Logfile for the socket. +*/
155 | int config_logging[1]; /*+ Log the config. +*/
156 | char config_logfile[1024]; /*+ Logfile for the config. +*/
157 | char config_file[1024]; /*+ File for the config. +*/
158 | char nrtm_host[64];/*+ NRTM server +*/
159 | char nrtm_port[64];/*+ Port of NRTM server when we are acting as a client +*/
160 | int nrtm_version[1];/*+ NRTM protocol version +*/
161 | int nrtm_delay[1];/*+ delay between syncs +*/
162 | char nrtm_cserialfile[1024];/*+ name of the file containing current serial +*/
163 | char nrtm_logfile[1024];/*+ NRTM logfile for failure reports +*/
164 | int do_nrtm[1];
165 | int update_mode[1];/*+ protected/unprotected (==dummy_allowed) +*/
166 | int do_update[1]; /*+ switches on and off the updates +*/
167 | int do_server[1]; /*+ turns off execution of the all servers(threads) +*/
168 | } *Constants;
169 |
170 | /* in addition, we make a table of Sources here: */
171 | /*+ Source database mirrors +*/
172 | typedef struct {
173 | char src[32];
174 | char db[32];
175 | } source_info_t;
176 |
177 | source_info_t const Sources[] = {
178 | {"RIPE","RIPE6"}, /* the db part actually gets overwritten in
179 | init_constants */
180 |
181 | /* "ARIN",
182 | "APNIC",
183 | */
184 |
185 | {"",""}
186 | }; /* Sources */
187 |
188 | char * const Sources_vector[] = {
189 | "RIPE",
190 | NULL
191 | };
192 |
193 | /*
194 | * Global Variables
195 | */
196 | /*+ The array of Global Constants. +*/
197 | static Constants Global_constants=NULL;
198 |
199 | /*
200 | * Set Functions
201 | */
202 | static int set_string(void *constant, char *value) {
203 |
204 | strcpy((char *)constant, value);
205 |
206 | return 0;
207 | } /* set_string() */
208 |
209 | static int set_int(void *constant, char *value) {
210 | int i;
211 |
212 | i = atol(value);
213 | ((int *)constant)[0] = i;
214 |
215 | return 0;
216 | } /* set_int() */
217 |
218 | static int set_boolean(void *constant, char *value) {
219 | int result=1;
220 | int i;
221 |
222 | i = atol(value);
223 |
224 | /* If a valid boolean */
225 | if ( (i == 0) || (i == 1)) {
226 | ((int *)constant)[0] = i;
227 | result = 0;
228 | }
229 |
230 | return result;
231 | } /* set_boolean() */
232 |
233 |
234 | /*
235 | * Show Functions
236 | */
237 | /* AR. changed for unification with oter show funcs */
238 | static char *show_string(void *constant) {
239 | char *tmp;
240 |
241 | /* tmp = calloc(1, strlen((char *)constant)+1); */
242 | dieif( wr_malloc((void **)&tmp, strlen((char *)constant)+1) != UT_OK);
243 |
244 | strcpy(tmp, (char *)constant);
245 | /* return((char *)constant); */
246 | return tmp;
247 | } /* show_string() */
248 |
249 | static char *show_int(void *constant) {
250 | char *tmp;
251 |
252 | /* tmp = calloc(1, 64); */
253 | dieif( wr_malloc((void **)&tmp, 64) != UT_OK);
254 |
255 | sprintf(tmp, "%d", ((int *)constant)[0]);
256 | return tmp;
257 | } /* show_int() */
258 |
259 | static char *show_boolean(void *constant) {
260 | char *tmp;
261 |
262 | /* tmp = calloc(1, 64); */
263 | dieif( wr_malloc((void **)&tmp, 64) != UT_OK);
264 |
265 | sprintf(tmp, "%d", ((int *)constant)[0]);
266 | return tmp;
267 | } /* show_boolean() */
268 |
269 |
270 | /*
271 | * Get Functions
272 | */
273 | int CO_get_max_threads() {
274 | return Global_constants->max_threads[0];
275 | }
276 |
277 | char *CO_get_whois_port() {
278 | return Global_constants->whois_port;
279 | }
280 |
281 | char *CO_get_config_port() {
282 | return Global_constants->config_port;
283 | }
284 |
285 | char *CO_get_mirror_port() {
286 | return Global_constants->mirror_port;
287 | }
288 |
289 | char *CO_get_update_port() {
290 | return Global_constants->update_port;
291 | }
292 |
293 | char *CO_get_host() {
294 | return Global_constants->host;
295 | }
296 |
297 | char *CO_get_user() {
298 | return Global_constants->user;
299 | }
300 |
301 | char *CO_get_password() {
302 | return Global_constants->password;
303 | }
304 |
305 | int CO_get_database_port() {
306 | return Global_constants->database_port[0];
307 | }
308 |
309 | char *CO_get_database() {
310 | return Global_constants->database;
311 | }
312 |
313 | char *CO_get_query() {
314 | return Global_constants->query;
315 | }
316 |
317 | char *CO_get_in_query() {
318 | return Global_constants->in_query;
319 | }
320 |
321 | char *CO_get_rt_query() {
322 | return Global_constants->rt_query;
323 | }
324 |
325 | int CO_get_authenticate() {
326 | return Global_constants->authenticate[0];
327 | }
328 |
329 | int CO_get_whois_suspended() {
330 | return Global_constants->whois_suspended[0];
331 | }
332 |
333 | char *CO_get_welcome() {
334 | return Global_constants->welcome;
335 | }
336 |
337 | char *CO_get_prompt() {
338 | return Global_constants->prompt;
339 | }
340 |
341 | int CO_get_clear_screen() {
342 | return Global_constants->clear_screen[0];
343 | }
344 |
345 | int CO_get_sleep_time() {
346 | return Global_constants->sleep_time[0];
347 | }
348 |
349 | int CO_get_accounting() {
350 | return Global_constants->accounting[0];
351 | }
352 |
353 | int CO_get_query_logging() {
354 | return Global_constants->query_logging[0];
355 | }
356 |
357 | char *CO_get_query_logfile() {
358 | return Global_constants->query_logfile;
359 | }
360 |
361 | int CO_get_instr_logging() {
362 | return Global_constants->instr_logging[0];
363 | }
364 |
365 | char *CO_get_instr_logfile() {
366 | return Global_constants->instr_logfile;
367 | }
368 |
369 | int CO_get_comnd_logging() {
370 | return Global_constants->comnd_logging[0];
371 | }
372 |
373 | char *CO_get_comnd_logfile() {
374 | return Global_constants->comnd_logfile;
375 | }
376 |
377 | int CO_get_tests_logging() {
378 | return Global_constants->tests_logging[0];
379 | }
380 |
381 | char *CO_get_tests_logfile() {
382 | return Global_constants->tests_logfile;
383 | }
384 |
385 | int CO_get_thread_logging() {
386 | return Global_constants->thread_logging[0];
387 | }
388 |
389 | char *CO_get_thread_logfile() {
390 | return Global_constants->thread_logfile;
391 | }
392 |
393 | int CO_get_socket_logging() {
394 | return Global_constants->socket_logging[0];
395 | }
396 |
397 | char *CO_get_socket_logfile() {
398 | return Global_constants->socket_logfile;
399 | }
400 |
401 | int CO_get_config_logging() {
402 | return Global_constants->config_logging[0];
403 | }
404 |
405 | char *CO_get_config_logfile() {
406 | return Global_constants->config_logfile;
407 | }
408 |
409 | char *CO_get_config_file() {
410 | return Global_constants->config_file;
411 | }
412 |
413 |
414 | /*++++ NRTM stuff ++++*/
415 |
416 | char *CO_get_nrtm_host() {
417 | return Global_constants->nrtm_host;
418 | }
419 |
420 | char *CO_get_nrtm_port() {
421 | return Global_constants->nrtm_port;
422 | }
423 |
424 | int CO_get_nrtm_version() {
425 | return Global_constants->nrtm_version[0];
426 | }
427 |
428 | int CO_get_nrtm_delay() {
429 | return Global_constants->nrtm_delay[0];
430 | }
431 |
432 | char *CO_get_nrtm_cserialfile() {
433 | return Global_constants->nrtm_cserialfile;
434 | }
435 |
436 | char *CO_get_nrtm_logfile() {
437 | return Global_constants->nrtm_logfile;
438 | }
439 |
440 | int CO_get_do_nrtm() {
441 | return Global_constants->do_nrtm[0];
442 | }
443 |
444 | int CO_get_update_mode() {
445 | return Global_constants->update_mode[0];
446 | }
447 |
448 | int CO_get_do_update() {
449 | return Global_constants->do_update[0];
450 | }
451 |
452 | int CO_get_do_server() {
453 | return Global_constants->do_server[0];
454 | }
455 |
456 | /* source_foreach() */
457 | /*++++++++++++++++++++++++++++++++++++++
458 | Function to adds the source string to the created string from the Glist of sources.
459 | It is called via g_list_foreach().
460 |
461 | void *element_data The source name.
462 |
463 | void *result_buf_ptr The string to be populated.
464 |
465 | More:
466 | +html+ <PRE>
467 | Authors:
468 | ottrey
469 |
470 | +html+ </PRE><DL COMPACT>
471 | +html+ <DT>Online References:
472 | +html+ <DD><UL>
473 | +html+ </UL></DL>
474 |
475 | ++++++++++++++++++++++++++++++++++++++*/
476 | static void source_foreach(void *element_data, void *result_buf_ptr) {
477 | char *source = element_data;
478 | char *result_buf = (char *)result_buf_ptr;
479 |
480 | strcat(result_buf, source);
481 | strcat(result_buf, ",");
482 |
483 | } /* source_foreach() */
484 |
485 | /* CO_sources_to_string() */
486 | /*++++++++++++++++++++++++++++++++++++++
487 | Creates a string from Sources.
488 |
489 | char * CO_sources_to_string Returns a string of the Sources.
490 |
491 | More:
492 | +html+ <PRE>
493 | Authors:
494 | ottrey
495 |
496 | +html+ </PRE><DL COMPACT>
497 | +html+ <DT>Online References:
498 | +html+ <DD><UL>
499 | +html+ </UL></DL>
500 |
501 | ++++++++++++++++++++++++++++++++++++++*/
502 | char * CO_sources_to_string(void) {
503 | char *result=NULL;
504 | char result_buf[STR_XL];
505 | int result_len;
506 | int i;
507 |
508 | strcpy(result_buf, "{");
509 | for (i=0; Sources[i].src[0] != 0 ; i++) {
510 | strcat(result_buf, Sources[i].src);
511 | strcat(result_buf, ",");
512 | }
513 | result_len = strlen(result_buf);
514 | result_buf[result_len-1] = '}';
515 | result_buf[result_len] = '\0';
516 |
517 | /* result = (char *)calloc(1, result_len+1); */
518 | dieif( wr_malloc((void **)&result, result_len+1) != UT_OK);
519 | strcpy(result, result_buf);
520 |
521 | return result;
522 |
523 | } /* CO_sources_to_string() */
524 |
525 | /* CO_sources_list_to_string() */
526 | /*++++++++++++++++++++++++++++++++++++++
527 | Creates a string from the sources in the GList.
528 |
529 | GList *sources_list The GList of sources.
530 |
531 | More:
532 | +html+ <PRE>
533 | Authors:
534 | ottrey
535 |
536 | +html+ </PRE><DL COMPACT>
537 | +html+ <DT>Online References:
538 | +html+ <DD><UL>
539 | +html+ </UL></DL>
540 |
541 | ++++++++++++++++++++++++++++++++++++++*/
542 | char *CO_sources_list_to_string(GList *sources_list) {
543 | char *result=NULL;
544 | char result_buf[STR_XL];
545 | int result_len;
546 |
547 | strcpy(result_buf, "{");
548 | g_list_foreach(sources_list, source_foreach, &result_buf);
549 | result_len = strlen(result_buf);
550 | if (result_len == 1) {
551 | /* If an empty set */
552 | result_buf[1] = '}';
553 | result_buf[2] = '\0';
554 | }
555 | else {
556 | result_buf[result_len-1] = '}';
557 | result_buf[result_len] = '\0';
558 | }
559 |
560 | /* result = (char *)calloc(1, result_len+1); */
561 | dieif( wr_malloc((void **)&result, result_len+1) != UT_OK);
562 | strcpy(result, result_buf);
563 |
564 | return result;
565 |
566 | } /* CO_sources_list_to_string() */
567 |
568 |
569 | char * const *CO_get_sources(void) {
570 | return Sources_vector;
571 | } /* CO_get_sources() */
572 |
573 | const char *CO_get_source(int index) {
574 | const char *s = Sources[index].src;
575 |
576 | return (*s == 0)
577 | ? NULL
578 | : s;
579 |
580 | } /* CO_get_source() */
581 |
582 | const char *CO_get_source_database(int index) {
583 | const char *s = Sources[index].db;
584 |
585 | return (*s == 0)
586 | ? NULL
587 | : s;
588 |
589 | } /* CO_get_database() */
590 |
591 |
592 |
593 | /*+
594 | * Contains the constant definitions for the Token, set_function, show_function.
595 | * (See: _constant)
596 | +*/
597 | static struct _constant constant[MAX_CONSTS];
598 |
599 | /* init_constants() */
600 | /*++++++++++++++++++++++++++++++++++++++
601 | Initialize all the constants.
602 |
603 | More:
604 | +html+ <PRE>
605 | Authors:
606 | ottrey
607 |
608 | +html+ </PRE><DL COMPACT>
609 | +html+ <DT>Online References:
610 | +html+ <DD><UL>
611 | +html+ </UL></DL>
612 |
613 | ++++++++++++++++++++++++++++++++++++++*/
614 | static void init_constants(void) {
615 | int n=0;
616 |
617 | constant[n].token="SV.max_threads";
618 | constant[n].deflt=DEFLT_MAX_THREADS;
619 | constant[n].set_func=set_int;
620 | constant[n].constant_ptr=Global_constants->max_threads;
621 | constant[n].show_func=show_int;
622 | n++;
623 |
624 | constant[n].token="SV.whois_port";
625 | constant[n].deflt=DEFLT_WHOIS_PORT;
626 | constant[n].set_func=set_string;
627 | constant[n].constant_ptr=Global_constants->whois_port;
628 | constant[n].show_func=show_string;
629 | n++;
630 |
631 | constant[n].token="SV.config_port";
632 | constant[n].deflt=DEFLT_CONFIG_PORT;
633 | constant[n].set_func=set_string;
634 | constant[n].constant_ptr=Global_constants->config_port;
635 | constant[n].show_func=show_string;
636 | n++;
637 |
638 | constant[n].token="SV.mirror_port";
639 | constant[n].deflt=DEFLT_MIRROR_PORT;
640 | constant[n].set_func=set_string;
641 | constant[n].constant_ptr=Global_constants->mirror_port;
642 | constant[n].show_func=show_string;
643 | n++;
644 |
645 | constant[n].token="SV.update_port";
646 | constant[n].deflt=DEFLT_UPDATE_PORT;
647 | constant[n].set_func=set_string;
648 | constant[n].constant_ptr=Global_constants->update_port;
649 | constant[n].show_func=show_string;
650 | n++;
651 |
652 | constant[n].token="DB.host";
653 | constant[n].deflt=DEFLT_HOST;
654 | constant[n].set_func=set_string;
655 | constant[n].constant_ptr=Global_constants->host;
656 | constant[n].show_func=show_string;
657 | n++;
658 |
659 | constant[n].token="DB.user";
660 | constant[n].deflt=DEFLT_USER;
661 | constant[n].set_func=set_string;
662 | constant[n].constant_ptr=Global_constants->user;
663 | constant[n].show_func=show_string;
664 | n++;
665 |
666 | constant[n].token="DB.password";
667 | constant[n].deflt=DEFLT_PASSWORD;
668 | constant[n].set_func=set_string;
669 | constant[n].constant_ptr=Global_constants->password;
670 | constant[n].show_func=show_string;
671 | n++;
672 |
673 | constant[n].token="DB.database_port";
674 | constant[n].deflt=DEFLT_DATABASE_PORT;
675 | constant[n].set_func=set_int;
676 | constant[n].constant_ptr=Global_constants->database_port;
677 | constant[n].show_func=show_int;
678 | n++;
679 |
680 | constant[n].token="DB.database";
681 | constant[n].deflt=DEFLT_DATABASE;
682 | constant[n].set_func=set_string;
683 | constant[n].constant_ptr=Global_constants->database;
684 | constant[n].show_func=show_string;
685 | n++;
686 |
687 | constant[n].token="DB.query";
688 | constant[n].deflt=DEFLT_QUERY;
689 | constant[n].set_func=set_string;
690 | constant[n].constant_ptr=Global_constants->query;
691 | constant[n].show_func=show_string;
692 | n++;
693 |
694 | constant[n].token="RX.in_query";
695 | constant[n].deflt=DEFLT_IN_QUERY;
696 | constant[n].set_func=set_string;
697 | constant[n].constant_ptr=Global_constants->in_query;
698 | constant[n].show_func=show_string;
699 | n++;
700 |
701 | constant[n].token="RX.rt_query";
702 | constant[n].deflt=DEFLT_RT_QUERY;
703 | constant[n].set_func=set_string;
704 | constant[n].constant_ptr=Global_constants->rt_query;
705 | constant[n].show_func=show_string;
706 | n++;
707 |
708 | constant[n].token="SV.authenticate";
709 | constant[n].deflt=DEFLT_AUTHENTICATE;
710 | constant[n].set_func=set_boolean;
711 | constant[n].constant_ptr=Global_constants->authenticate;
712 | constant[n].show_func=show_boolean;
713 | n++;
714 |
715 | constant[n].token="SV.whois_suspended";
716 | constant[n].deflt=DEFLT_WHOIS_SUSPENDED;
717 | constant[n].set_func=set_boolean;
718 | constant[n].constant_ptr=Global_constants->whois_suspended;
719 | constant[n].show_func=show_boolean;
720 | n++;
721 |
722 | constant[n].token="SV.do_server";
723 | constant[n].deflt=DEFLT_DO_SERVER;
724 | constant[n].set_func=set_boolean;
725 | constant[n].constant_ptr=Global_constants->do_server;
726 | constant[n].show_func=show_boolean;
727 | n++;
728 |
729 | constant[n].token="PC.welcome";
730 | constant[n].deflt=DEFLT_WELCOME;
731 | constant[n].set_func=set_string;
732 | constant[n].constant_ptr=Global_constants->welcome;
733 | constant[n].show_func=show_string;
734 | n++;
735 |
736 | constant[n].token="PC.prompt";
737 | constant[n].deflt=DEFLT_PROMPT;
738 | constant[n].set_func=set_string;
739 | constant[n].constant_ptr=Global_constants->prompt;
740 | constant[n].show_func=show_string;
741 | n++;
742 |
743 | constant[n].token="PC.clear_screen";
744 | constant[n].deflt=DEFLT_CLEAR_SCREEN;
745 | constant[n].set_func=set_boolean;
746 | constant[n].constant_ptr=Global_constants->clear_screen;
747 | constant[n].show_func=show_boolean;
748 | n++;
749 |
750 | constant[n].token="PC.sleep_time";
751 | constant[n].deflt=DEFLT_SLEEP_TIME;
752 | constant[n].set_func=set_int;
753 | constant[n].constant_ptr=Global_constants->sleep_time;
754 | constant[n].show_func=show_int;
755 | n++;
756 |
757 | constant[n].token="WQ.accounting";
758 | constant[n].deflt=DEFLT_ACCOUNTING;
759 | constant[n].set_func=set_boolean;
760 | constant[n].constant_ptr=Global_constants->accounting;
761 | constant[n].show_func=show_boolean;
762 | n++;
763 |
764 | constant[n].token="LO.query_logging";
765 | constant[n].deflt=DEFLT_QUERY_LOGGING;
766 | constant[n].set_func=set_boolean;
767 | constant[n].constant_ptr=Global_constants->query_logging;
768 | constant[n].show_func=show_boolean;
769 | n++;
770 |
771 | constant[n].token="LO.query_logfile";
772 | constant[n].deflt=DEFLT_QUERY_LOGFILE;
773 | constant[n].set_func=set_string;
774 | constant[n].constant_ptr=Global_constants->query_logfile;
775 | constant[n].show_func=show_string;
776 | n++;
777 |
778 | constant[n].token="LO.instr_logging";
779 | constant[n].deflt=DEFLT_INSTR_LOGGING;
780 | constant[n].set_func=set_boolean;
781 | constant[n].constant_ptr=Global_constants->instr_logging;
782 | constant[n].show_func=show_boolean;
783 | n++;
784 |
785 | constant[n].token="LO.insrt_logfile";
786 | constant[n].deflt=DEFLT_INSTR_LOGFILE;
787 | constant[n].set_func=set_string;
788 | constant[n].constant_ptr=Global_constants->instr_logfile;
789 | constant[n].show_func=show_string;
790 | n++;
791 |
792 | constant[n].token="LO.comnd_logging";
793 | constant[n].deflt=DEFLT_COMND_LOGGING;
794 | constant[n].set_func=set_boolean;
795 | constant[n].constant_ptr=Global_constants->comnd_logging;
796 | constant[n].show_func=show_boolean;
797 | n++;
798 |
799 | constant[n].token="LO.comnd_logfile";
800 | constant[n].deflt=DEFLT_COMND_LOGFILE;
801 | constant[n].set_func=set_string;
802 | constant[n].constant_ptr=Global_constants->comnd_logfile;
803 | constant[n].show_func=show_string;
804 | n++;
805 |
806 | constant[n].token="LO.tests_logging";
807 | constant[n].deflt=DEFLT_TESTS_LOGGING;
808 | constant[n].set_func=set_boolean;
809 | constant[n].constant_ptr=Global_constants->tests_logging;
810 | constant[n].show_func=show_boolean;
811 | n++;
812 |
813 | constant[n].token="LO.tests_logfile";
814 | constant[n].deflt=DEFLT_TESTS_LOGFILE;
815 | constant[n].set_func=set_string;
816 | constant[n].constant_ptr=Global_constants->tests_logfile;
817 | constant[n].show_func=show_string;
818 | n++;
819 |
820 | constant[n].token="LO.thread_logging";
821 | constant[n].deflt=DEFLT_THREAD_LOGGING;
822 | constant[n].set_func=set_boolean;
823 | constant[n].constant_ptr=Global_constants->thread_logging;
824 | constant[n].show_func=show_boolean;
825 | n++;
826 |
827 | constant[n].token="LO.thread_logfile";
828 | constant[n].deflt=DEFLT_THREAD_LOGFILE;
829 | constant[n].set_func=set_string;
830 | constant[n].constant_ptr=Global_constants->thread_logfile;
831 | constant[n].show_func=show_string;
832 | n++;
833 |
834 | constant[n].token="LO.socket_logging";
835 | constant[n].deflt=DEFLT_SOCKET_LOGGING;
836 | constant[n].set_func=set_boolean;
837 | constant[n].constant_ptr=Global_constants->socket_logging;
838 | constant[n].show_func=show_boolean;
839 | n++;
840 |
841 | constant[n].token="LO.socket_logfile";
842 | constant[n].deflt=DEFLT_SOCKET_LOGFILE;
843 | constant[n].set_func=set_string;
844 | constant[n].constant_ptr=Global_constants->socket_logfile;
845 | constant[n].show_func=show_string;
846 | n++;
847 |
848 | constant[n].token="LO.config_logging";
849 | constant[n].deflt=DEFLT_CONFIG_LOGGING;
850 | constant[n].set_func=set_boolean;
851 | constant[n].constant_ptr=Global_constants->config_logging;
852 | constant[n].show_func=show_boolean;
853 | n++;
854 |
855 | constant[n].token="LO.config_logfile";
856 | constant[n].deflt=DEFLT_CONFIG_LOGFILE;
857 | constant[n].set_func=set_string;
858 | constant[n].constant_ptr=Global_constants->config_logfile;
859 | constant[n].show_func=show_string;
860 | n++;
861 |
862 | constant[n].token="MI.nrtm_host";
863 | constant[n].deflt=DEFLT_NRTM_HOST;
864 | constant[n].set_func=set_string;
865 | constant[n].constant_ptr=Global_constants->nrtm_host;
866 | constant[n].show_func=show_string;
867 | n++;
868 |
869 | constant[n].token="MI.nrtm_port";
870 | constant[n].deflt=DEFLT_MIRROR_PORT;
871 | constant[n].set_func=set_string;
872 | constant[n].constant_ptr=Global_constants->nrtm_port;
873 | constant[n].show_func=show_string;
874 | n++;
875 |
876 | constant[n].token="MI.nrtm_version";
877 | constant[n].deflt=DEFLT_NRTM_VERSION;
878 | constant[n].set_func=set_int;
879 | constant[n].constant_ptr=Global_constants->nrtm_version;
880 | constant[n].show_func=show_int;
881 | n++;
882 |
883 | constant[n].token="MI.nrtm_delay";
884 | constant[n].deflt=DEFLT_NRTM_DELAY;
885 | constant[n].set_func=set_int;
886 | constant[n].constant_ptr=Global_constants->nrtm_delay;
887 | constant[n].show_func=show_int;
888 | n++;
889 |
890 | constant[n].token="MI.nrtm_cserialfile";
891 | constant[n].deflt=DEFLT_NRTM_CSERFILE;
892 | constant[n].set_func=set_string;
893 | constant[n].constant_ptr=Global_constants->nrtm_cserialfile;
894 | constant[n].show_func=show_string;
895 | n++;
896 |
897 | constant[n].token="MI.nrtm_logfile";
898 | constant[n].deflt=DEFLT_NRTM_LOGFILE;
899 | constant[n].set_func=set_string;
900 | constant[n].constant_ptr=Global_constants->nrtm_logfile;
901 | constant[n].show_func=show_string;
902 | n++;
903 |
904 | constant[n].token="MI.do_nrtm";
905 | constant[n].deflt="1";
906 | constant[n].set_func=set_int;
907 | constant[n].constant_ptr=Global_constants->do_nrtm;
908 | constant[n].show_func=show_int;
909 | n++;
910 |
911 | constant[n].token="UD.update_mode";
912 | constant[n].deflt=DEFLT_UPDATE_MODE;
913 | constant[n].set_func=set_int;
914 | constant[n].constant_ptr=Global_constants->update_mode;
915 | constant[n].show_func=show_int;
916 | n++;
917 |
918 | constant[n].token="UD.do_update";
919 | constant[n].deflt="1";
920 | constant[n].set_func=set_int;
921 | constant[n].constant_ptr=Global_constants->do_update;
922 | constant[n].show_func=show_int;
923 | n++;
924 |
925 | constant[n].token="CO.config_file";
926 | constant[n].deflt=DEFLT_CONFIG_FILE;
927 | constant[n].set_func=set_string;
928 | constant[n].constant_ptr=Global_constants->config_file;
929 | constant[n].show_func=show_string;
930 | n++;
931 |
932 | constant[n].token=NULL;
933 |
934 | } /* init_constants() */
935 |
936 |
937 | /* CO_to_string() */
938 | /*++++++++++++++++++++++++++++++++++++++
939 | Returns the constants as a string.
940 |
941 | More:
942 | +html+ <PRE>
943 | Authors:
944 | ottrey
945 |
946 | +html+ </PRE><DL COMPACT>
947 | +html+ <DT>Online References:
948 | +html+ <DD><UL>
949 | +html+ </UL></DL>
950 |
951 | ++++++++++++++++++++++++++++++++++++++*/
952 | char *CO_to_string(void) {
953 | char *consts;
954 | const char *token;
955 | char *value;
956 | char tmp_consts[2048];
957 | char tmp_const[1024];
958 | int i=0;
959 |
960 | sprintf(tmp_consts, "Constants = { ");
961 | while(constant[i].token != NULL) {
962 | token = constant[i].token;
963 | value = constant[i].show_func(constant[i].constant_ptr);
964 | sprintf(tmp_const, "\n[%s]=\"%s\"", token, value);
965 | wr_free(value); /* Otherwise we have memory leaks */
966 | strcat(tmp_consts, tmp_const);
967 | i++;
968 | }
969 | strcat(tmp_consts, "}");
970 |
971 | /* consts = calloc(1, strlen(tmp_consts)+1); */
972 | dieif( wr_malloc((void **)&consts, strlen(tmp_consts)+1) != UT_OK);
973 |
974 | strcpy(consts, tmp_consts);
975 |
976 | return consts;
977 | } /* CO_to_string() */
978 |
979 |
980 | char *CO_const_to_string(char *name) {
981 | char *result=NULL;
982 | int i;
983 |
984 | for (i=0; constant[i].token != NULL; i++) {
985 | if (strcmp(constant[i].token, name) == 0) {
986 | result = constant[i].show_func(constant[i].constant_ptr);
987 | break;
988 | }
989 | }
990 |
991 | return result;
992 | } /* CO_const_to_string() */
993 |
994 | /* CO_set_const() */
995 | /*++++++++++++++++++++++++++++++++++++++
996 | Sets the value of one constant. Returns 0 if no error.
997 |
998 | More:
999 | +html+ <PRE>
1000 | Authors:
1001 | ottrey
1002 |
1003 | +html+ </PRE><DL COMPACT>
1004 | +html+ <DT>Online References:
1005 | +html+ <DD><UL>
1006 | +html+ </UL></DL>
1007 |
1008 | ++++++++++++++++++++++++++++++++++++++*/
1009 | int CO_set_const(char *name, char *value) {
1010 | int result=1;
1011 | int i;
1012 |
1013 | for (i=0; constant[i].token != NULL; i++) {
1014 | if (strcmp(constant[i].token, name) == 0) {
1015 | result = constant[i].set_func((void *)constant[i].constant_ptr, value);
1016 | break;
1017 | }
1018 | }
1019 |
1020 | return result;
1021 | } /* CO_set_const() */
1022 |
1023 |
1024 | /* CO_set() */
1025 | /*++++++++++++++++++++++++++++++++++++++
1026 | Sets the constants from the properties module.
1027 | Returns the number of constants set.
1028 |
1029 | More:
1030 | +html+ <PRE>
1031 | Authors:
1032 | ottrey
1033 | +html+ </PRE><DL COMPACT>
1034 | +html+ <DT>Online References:
1035 | +html+ <DD><UL>
1036 | +html+ <LI><A HREF="../src/.properties">.properties</A>
1037 | +html+ </UL></DL>
1038 |
1039 | ++++++++++++++++++++++++++++++++++++++*/
1040 | char *CO_set(void) {
1041 | int i;
1042 | int set_count=0;
1043 | int set;
1044 | char result_buff[256];
1045 | char *result;
1046 | char *property;
1047 |
1048 | /* Initialize if necessary */
1049 | if (Global_constants == NULL) {
1050 | /* Global_constants = (Constants)calloc(1, sizeof(struct _Constants)); */
1051 | dieif( wr_calloc((void **)&Global_constants, 1,
1052 | sizeof(struct _Constants)) != UT_OK);
1053 |
1054 | init_constants();
1055 | }
1056 |
1057 | for (i=0; constant[i].token != NULL; i++) {
1058 | property = PR_get_property(constant[i].token, constant[i].deflt);
1059 | set = constant[i].set_func((void *)constant[i].constant_ptr, property);
1060 | wr_free(property);
1061 | if (set == 0) {
1062 | set_count++;
1063 | }
1064 | }
1065 |
1066 | sprintf(result_buff, "%d out of %d constant(s) set.", set_count, i);
1067 |
1068 | /* result = (char *)calloc(1, strlen(result_buff)+1); */
1069 | dieif( wr_malloc((void **)&result, strlen(result_buff)+1) != UT_OK);
1070 | strcpy(result, result_buff);
1071 |
1072 | return result;
1073 | } /* CO_set() */
1074 |