Source File modules/co/constants.c

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