## modules/co/constants.c

/* [<][>][^][v][top][bottom][index][help] */

## FUNCTIONS

This source file includes following functions.

1. set_string
2. set_int
3. set_boolean
4. show_string
5. show_int
6. show_boolean
7. CO_get_max_threads
8. CO_get_whois_port
9. CO_get_config_port
10. CO_get_mirror_port
11. CO_get_update_port
12. CO_get_host
13. CO_get_user
14. CO_get_password
15. CO_get_database_port
16. CO_get_database
17. CO_get_query
18. CO_get_in_query
19. CO_get_rt_query
20. CO_get_authenticate
21. CO_get_whois_suspended
22. CO_get_welcome
23. CO_get_prompt
24. CO_get_clear_screen
25. CO_get_sleep_time
26. CO_get_accounting
27. CO_get_query_logging
28. CO_get_query_logfile
29. CO_get_instr_logging
30. CO_get_instr_logfile
31. CO_get_comnd_logging
32. CO_get_comnd_logfile
33. CO_get_tests_logging
34. CO_get_tests_logfile
35. CO_get_thread_logging
36. CO_get_thread_logfile
37. CO_get_socket_logging
38. CO_get_socket_logfile
39. CO_get_config_logging
40. CO_get_config_logfile
41. CO_get_config_file
42. CO_get_nrtm_host
43. CO_get_nrtm_port
44. CO_get_nrtm_version
45. CO_get_nrtm_delay
46. CO_get_nrtm_cserialfile
47. CO_get_nrtm_logfile
48. CO_get_do_nrtm
49. CO_get_update_mode
50. CO_get_do_update
51. CO_get_do_server
52. source_foreach
53. CO_sources_to_string
54. CO_sources_list_to_string
55. CO_get_sources
56. CO_get_source
57. CO_get_source_database
58. init_constants
59. CO_to_string
60. CO_const_to_string
61. CO_set_const
62. CO_set

       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) {
         /* [<][>][^][v][top][bottom][index][help] */
     203
     204   strcpy((char *)constant, value);
     205
     206   return 0;
     207 } /* set_string() */
     208
     209 static int set_int(void *constant, char *value) {
         /* [<][>][^][v][top][bottom][index][help] */
     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) {
         /* [<][>][^][v][top][bottom][index][help] */
     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) {
         /* [<][>][^][v][top][bottom][index][help] */
     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) {
         /* [<][>][^][v][top][bottom][index][help] */
     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) {
         /* [<][>][^][v][top][bottom][index][help] */
     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() {
         /* [<][>][^][v][top][bottom][index][help] */
     274   return Global_constants->max_threads[0];
     275 }
     276
     277 char *CO_get_whois_port() {
         /* [<][>][^][v][top][bottom][index][help] */
     278   return Global_constants->whois_port;
     279 }
     280
     281 char *CO_get_config_port() {
         /* [<][>][^][v][top][bottom][index][help] */
     282   return Global_constants->config_port;
     283 }
     284
     285 char *CO_get_mirror_port() {
         /* [<][>][^][v][top][bottom][index][help] */
     286   return Global_constants->mirror_port;
     287 }
     288
     289 char *CO_get_update_port() {
         /* [<][>][^][v][top][bottom][index][help] */
     290   return Global_constants->update_port;
     291 }
     292
     293 char *CO_get_host() {
         /* [<][>][^][v][top][bottom][index][help] */
     294   return Global_constants->host;
     295 }
     296
     297 char *CO_get_user() {
         /* [<][>][^][v][top][bottom][index][help] */
     298   return Global_constants->user;
     299 }
     300
     301 char *CO_get_password() {
         /* [<][>][^][v][top][bottom][index][help] */
     302   return Global_constants->password;
     303 }
     304
     305 int CO_get_database_port() {
         /* [<][>][^][v][top][bottom][index][help] */
     306   return Global_constants->database_port[0];
     307 }
     308
     309 char *CO_get_database() {
         /* [<][>][^][v][top][bottom][index][help] */
     310   return Global_constants->database;
     311 }
     312
     313 char *CO_get_query() {
         /* [<][>][^][v][top][bottom][index][help] */
     314   return Global_constants->query;
     315 }
     316
     317 char *CO_get_in_query() {
         /* [<][>][^][v][top][bottom][index][help] */
     318   return Global_constants->in_query;
     319 }
     320
     321 char *CO_get_rt_query() {
         /* [<][>][^][v][top][bottom][index][help] */
     322   return Global_constants->rt_query;
     323 }
     324
     325 int CO_get_authenticate() {
         /* [<][>][^][v][top][bottom][index][help] */
     326   return Global_constants->authenticate[0];
     327 }
     328
     329 int CO_get_whois_suspended() {
         /* [<][>][^][v][top][bottom][index][help] */
     330   return Global_constants->whois_suspended[0];
     331 }
     332
     333 char *CO_get_welcome() {
         /* [<][>][^][v][top][bottom][index][help] */
     334   return Global_constants->welcome;
     335 }
     336
     337 char *CO_get_prompt() {
         /* [<][>][^][v][top][bottom][index][help] */
     338   return Global_constants->prompt;
     339 }
     340
     341 int CO_get_clear_screen() {
         /* [<][>][^][v][top][bottom][index][help] */
     342   return Global_constants->clear_screen[0];
     343 }
     344
     345 int CO_get_sleep_time() {
         /* [<][>][^][v][top][bottom][index][help] */
     346   return Global_constants->sleep_time[0];
     347 }
     348
     349 int CO_get_accounting() {
         /* [<][>][^][v][top][bottom][index][help] */
     350   return Global_constants->accounting[0];
     351 }
     352
     353 int CO_get_query_logging() {
         /* [<][>][^][v][top][bottom][index][help] */
     354   return Global_constants->query_logging[0];
     355 }
     356
     357 char *CO_get_query_logfile() {
         /* [<][>][^][v][top][bottom][index][help] */
     358   return Global_constants->query_logfile;
     359 }
     360
     361 int CO_get_instr_logging() {
         /* [<][>][^][v][top][bottom][index][help] */
     362   return Global_constants->instr_logging[0];
     363 }
     364
     365 char *CO_get_instr_logfile() {
         /* [<][>][^][v][top][bottom][index][help] */
     366   return Global_constants->instr_logfile;
     367 }
     368
     369 int CO_get_comnd_logging() {
         /* [<][>][^][v][top][bottom][index][help] */
     370   return Global_constants->comnd_logging[0];
     371 }
     372
     373 char *CO_get_comnd_logfile() {
         /* [<][>][^][v][top][bottom][index][help] */
     374   return Global_constants->comnd_logfile;
     375 }
     376
     377 int CO_get_tests_logging() {
         /* [<][>][^][v][top][bottom][index][help] */
     378   return Global_constants->tests_logging[0];
     379 }
     380
     381 char *CO_get_tests_logfile() {
         /* [<][>][^][v][top][bottom][index][help] */
     382   return Global_constants->tests_logfile;
     383 }
     384
     385 int CO_get_thread_logging() {
         /* [<][>][^][v][top][bottom][index][help] */
     386   return Global_constants->thread_logging[0];
     387 }
     388
     389 char *CO_get_thread_logfile() {
         /* [<][>][^][v][top][bottom][index][help] */
     390   return Global_constants->thread_logfile;
     391 }
     392
     393 int CO_get_socket_logging() {
         /* [<][>][^][v][top][bottom][index][help] */
     394   return Global_constants->socket_logging[0];
     395 }
     396
     397 char *CO_get_socket_logfile() {
         /* [<][>][^][v][top][bottom][index][help] */
     398   return Global_constants->socket_logfile;
     399 }
     400
     401 int CO_get_config_logging() {
         /* [<][>][^][v][top][bottom][index][help] */
     402   return Global_constants->config_logging[0];
     403 }
     404
     405 char *CO_get_config_logfile() {
         /* [<][>][^][v][top][bottom][index][help] */
     406   return Global_constants->config_logfile;
     407 }
     408
     409 char *CO_get_config_file() {
         /* [<][>][^][v][top][bottom][index][help] */
     410   return Global_constants->config_file;
     411 }
     412
     413
     414 /*++++ NRTM stuff ++++*/
     415
     416 char *CO_get_nrtm_host() {
         /* [<][>][^][v][top][bottom][index][help] */
     417   return Global_constants->nrtm_host;
     418 }
     419
     420 char *CO_get_nrtm_port() {
         /* [<][>][^][v][top][bottom][index][help] */
     421   return Global_constants->nrtm_port;
     422 }
     423
     424 int CO_get_nrtm_version() {
         /* [<][>][^][v][top][bottom][index][help] */
     425   return Global_constants->nrtm_version[0];
     426 }
     427
     428 int CO_get_nrtm_delay() {
         /* [<][>][^][v][top][bottom][index][help] */
     429   return Global_constants->nrtm_delay[0];
     430 }
     431
     432 char *CO_get_nrtm_cserialfile() {
         /* [<][>][^][v][top][bottom][index][help] */
     433   return Global_constants->nrtm_cserialfile;
     434 }
     435
     436 char *CO_get_nrtm_logfile() {
         /* [<][>][^][v][top][bottom][index][help] */
     437   return Global_constants->nrtm_logfile;
     438 }
     439
     440 int CO_get_do_nrtm() {
         /* [<][>][^][v][top][bottom][index][help] */
     441   return Global_constants->do_nrtm[0];
     442 }
     443
     444 int CO_get_update_mode() {
         /* [<][>][^][v][top][bottom][index][help] */
     445   return Global_constants->update_mode[0];
     446 }
     447
     448 int CO_get_do_update() {
         /* [<][>][^][v][top][bottom][index][help] */
     449   return Global_constants->do_update[0];
     450 }
     451
     452 int CO_get_do_server() {
         /* [<][>][^][v][top][bottom][index][help] */
     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) {
         /* [<][>][^][v][top][bottom][index][help] */
     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) {
         /* [<][>][^][v][top][bottom][index][help] */
     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) {
         /* [<][>][^][v][top][bottom][index][help] */
     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) {
         /* [<][>][^][v][top][bottom][index][help] */
     570   return Sources_vector;
     571 } /* CO_get_sources() */
     572
     573 const char *CO_get_source(int index) {
         /* [<][>][^][v][top][bottom][index][help] */
     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) {
         /* [<][>][^][v][top][bottom][index][help] */
     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) {
         /* [<][>][^][v][top][bottom][index][help] */
     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) {
         /* [<][>][^][v][top][bottom][index][help] */
     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) {
         /* [<][>][^][v][top][bottom][index][help] */
     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) {
         /* [<][>][^][v][top][bottom][index][help] */
    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) {
         /* [<][>][^][v][top][bottom][index][help] */
    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

/* [<][>][^][v][top][bottom][index][help] */