Source File modules/co/constants.c

    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 |