Annotation of coherent/g/usr/lib/uucp/tay104/uuconf/uucnfi.h, revision 1.1.1.1

1.1       root        1: /* uucnfi.h
                      2:    Internal header file for the uuconf package.
                      3: 
                      4:    Copyright (C) 1992 Ian Lance Taylor
                      5: 
                      6:    This file is part of the Taylor UUCP uuconf library.
                      7: 
                      8:    This library is free software; you can redistribute it and/or
                      9:    modify it under the terms of the GNU Library General Public License
                     10:    as published by the Free Software Foundation; either version 2 of
                     11:    the License, or (at your option) any later version.
                     12: 
                     13:    This library is distributed in the hope that it will be useful, but
                     14:    WITHOUT ANY WARRANTY; without even the implied warranty of
                     15:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     16:    Library General Public License for more details.
                     17: 
                     18:    You should have received a copy of the GNU Library General Public
                     19:    License along with this library; if not, write to the Free Software
                     20:    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
                     21: 
                     22:    The author of the program may be contacted at [email protected] or
                     23:    c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
                     24:    */
                     25: 
                     26: /* This is the internal header file for the uuconf package.  It should
                     27:    not be included by anything other than the uuconf code itself.  */
                     28: 
                     29: /* Get all the general definitions.  */
                     30: #include "uucp.h"
                     31: 
                     32: /* Get the uuconf header file itself.  */
                     33: #include "uuconf.h"
                     34: 
                     35: /* We need the system dependent header file.  */
                     36: #include "syshdr.h"
                     37: 
                     38: /* This is the generic information structure.  This holds all the
                     39:    per-thread global information needed by the uuconf code.  The
                     40:    per-process global information is held in an sprocess structure,
                     41:    which this structure points to.  This permits the code to not have
                     42:    any global variables at all.  */
                     43: 
                     44: struct sglobal
                     45: {
                     46:   /* A pointer to the per-process global information.  */
                     47:   struct sprocess *qprocess;
                     48:   /* A memory block in which all the memory for these fields is
                     49:      allocated.  */
                     50:   pointer pblock;
                     51:   /* The value of errno after an error.  */
                     52:   int ierrno;
                     53:   /* The filename for which an error occurred.  */
                     54:   const char *zfilename;
                     55:   /* The line number at which an error occurred.  */
                     56:   int ilineno;
                     57: };
                     58: 
                     59: /* This is the per-process information structure.  This essentially
                     60:    holds all the global variables used by uuconf.  */
                     61: 
                     62: struct sprocess
                     63: {
                     64:   /* The name of the local machine.  This will be NULL if it is not
                     65:      specified in a configuration file.  */
                     66:   const char *zlocalname;
                     67:   /* The spool directory.  */
                     68:   const char *zspooldir;
                     69:   /* The default public directory.  */
                     70:   const char *zpubdir;
                     71:   /* The lock directory.  */
                     72:   const char *zlockdir;
                     73:   /* The log file.  */
                     74:   const char *zlogfile;
                     75:   /* The statistics file.  */
                     76:   const char *zstatsfile;
                     77:   /* The debugging file.  */
                     78:   const char *zdebugfile;
                     79:   /* The default debugging level.  */
                     80:   const char *zdebug;
                     81:   /* The maximum number of simultaneously executing uuxqts.  */
                     82:   int cmaxuuxqts;
                     83:   /* Whether we are reading the V2 configuration files.  */
                     84:   boolean fv2;
                     85:   /* Whether we are reading the HDB configuration files.  */
                     86:   boolean fhdb;
                     87:   /* The names of the dialcode files.  */
                     88:   char **pzdialcodefiles;
                     89:   /* Timetables.  These are in pairs.  The first element is the name,
                     90:      the second is the time string.  */
                     91:   char **pztimetables;
                     92: 
                     93:   /* Taylor UUCP config file name.  */
                     94:   char *zconfigfile;
                     95:   /* Taylor UUCP sys file names.  */
                     96:   char **pzsysfiles;
                     97:   /* Taylor UUCP port file names.  */
                     98:   char **pzportfiles;
                     99:   /* Taylor UUCP dial file names.  */
                    100:   char **pzdialfiles;
                    101:   /* Taylor UUCP passwd file names.  */
                    102:   char **pzpwdfiles;
                    103:   /* Taylor UUCP call file names.  */
                    104:   char **pzcallfiles;
                    105:   /* List of "unknown" commands from config file.  */
                    106:   struct sunknown *qunknown;
                    107:   /* Whether the Taylor UUCP system information locations have been
                    108:      read.  */
                    109:   boolean fread_syslocs;
                    110:   /* Taylor UUCP system information locations.  */
                    111:   struct stsysloc *qsyslocs;
                    112:   /* Taylor UUCP validation restrictions.  */
                    113:   struct svalidate *qvalidate;
                    114:   /* Whether the "myname" command is used in a Taylor UUCP file.  */
                    115:   boolean fuses_myname;
                    116: 
                    117:   /* V2 system file name (L.sys).  */
                    118:   char *zv2systems;
                    119:   /* V2 device file name (L-devices).  */
                    120:   char *zv2devices;
                    121:   /* V2 user permissions file name (USERFILE).  */
                    122:   char *zv2userfile;
                    123:   /* V2 user permitted commands file (L.cmds).  */
                    124:   char *zv2cmds;
                    125: 
                    126:   /* HDB system file names (Systems).  */
                    127:   char **pzhdb_systems;
                    128:   /* HDB device file names (Devices).  */
                    129:   char **pzhdb_devices;
                    130:   /* HDB dialer file names (Dialers).  */
                    131:   char **pzhdb_dialers;
                    132:   /* Whether the HDB Permissions file has been read.  */
                    133:   boolean fhdb_read_permissions;
                    134:   /* The HDB Permissions file entries.  */
                    135:   struct shpermissions *qhdb_permissions;
                    136: };
                    137: 
                    138: /* This structure is used to hold the "unknown" commands from the
                    139:    Taylor UUCP config file before they have been parsed.  */
                    140: 
                    141: struct sunknown
                    142: {
                    143:   /* Next element in linked list.  */
                    144:   struct sunknown *qnext;
                    145:   /* Line number in config file.  */
                    146:   int ilineno;
                    147:   /* Number of arguments.  */
                    148:   int cargs;
                    149:   /* Arguments.  */
                    150:   char **pzargs;
                    151: };     
                    152: 
                    153: /* This structure is used to hold the locations of systems within the
                    154:    Taylor UUCP sys files.  */
                    155: 
                    156: struct stsysloc
                    157: {
                    158:   /* Next element in linked list.  */
                    159:   struct stsysloc *qnext;
                    160:   /* System name.  */
                    161:   const char *zname;
                    162:   /* Whether system is an alias or a real system.  If this is an
                    163:      alias, the real system is the next entry in the linked list which
                    164:      is not an alias.  */
                    165:   boolean falias;
                    166:   /* File name (one of the sys files).  */
                    167:   const char *zfile;
                    168:   /* Open file.  */
                    169:   FILE *e;
                    170:   /* Location within file (from ftell).  */
                    171:   long iloc;
                    172:   /* Line number within file.  */
                    173:   int ilineno;
                    174: };
                    175: 
                    176: /* This structure is used to hold validation restrictions.  This is a
                    177:    list of machines which are permitted to use a particular login
                    178:    name.  If a machine logs in, and there is no called login entry for
                    179:    it, the login name and machine name must be passed to
                    180:    uuconf_validate to confirm that either there is no entry for this
                    181:    login name or that the machine name appears on the entry.  */
                    182: 
                    183: struct svalidate
                    184: {
                    185:   /* Next element in linked list.  */
                    186:   struct svalidate *qnext;
                    187:   /* Login name.  */
                    188:   const char *zlogname;
                    189:   /* NULL terminated list of machine names.  */
                    190:   char **pzmachines;
                    191: };
                    192: 
                    193: /* This structure is used to hold a linked list of HDB Permissions
                    194:    file entries.  */
                    195: 
                    196: struct shpermissions
                    197: {
                    198:   /* Next entry in linked list.  */
                    199:   struct shpermissions *qnext;
                    200:   /* NULL terminated array of LOGNAME values.   */
                    201:   char **pzlogname;
                    202:   /* NULL terminated array of MACHINE values.  */
                    203:   char **pzmachine;
                    204:   /* Boolean REQUEST value.  */
                    205:   int frequest;
                    206:   /* Boolean SENDFILES value ("call" is taken as "no").  */
                    207:   int fsendfiles;
                    208:   /* NULL terminated array of READ values.  */
                    209:   char **pzread;
                    210:   /* NULL terminated array of WRITE values.  */
                    211:   char **pzwrite;
                    212:   /* Boolean CALLBACK value.  */
                    213:   int fcallback;
                    214:   /* NULL terminated array of COMMANDS values.  */
                    215:   char **pzcommands;
                    216:   /* NULL terminated array of VALIDATE values.  */
                    217:   char **pzvalidate;
                    218:   /* String MYNAME value.  */
                    219:   char *zmyname;
                    220:   /* String PUBDIR value.  */
                    221:   const char *zpubdir;
                    222:   /* NULL terminated array of ALIAS values.  */
                    223:   char **pzalias;
                    224: };
                    225: 
                    226: /* This structure is used to build reentrant uuconf_cmdtab tables.
                    227:    The ioff field is either (size_t) -1 or an offsetof macro.  The
                    228:    table is then copied into a uuconf_cmdtab, except that offsets of
                    229:    (size_t) -1 are converted to pvar elements of NULL, and other
                    230:    offsets are converted to an offset off some base address.  */
                    231: 
                    232: struct cmdtab_offset
                    233: {
                    234:   const char *zcmd;
                    235:   int itype;
                    236:   size_t ioff;
                    237:   uuconf_cmdtabfn pifn;
                    238: };
                    239: 
                    240: /* A value in a uuconf_system structure which holds the address of
                    241:    this special variable is known to be uninitialized.  */
                    242: extern char *_uuconf_unset;
                    243: 
                    244: /* Internal function to read a system from the Taylor UUCP
                    245:    configuration files.  This does not apply the basic defaults.  */
                    246: extern int _uuconf_itaylor_system_internal P((struct sglobal *qglobal,
                    247:                                              const char *zsystem,
                    248:                                              struct uuconf_system *qsys));
                    249: 
                    250: /* Read the system locations and validation information from the
                    251:    Taylor UUCP configuration files.  This sets the qsyslocs,
                    252:    qvalidate, and fread_syslocs elements of the global structure.  */
                    253: extern int _uuconf_iread_locations P((struct sglobal *qglobal));
                    254: 
                    255: /* Process a command for a port from a Taylor UUCP file.  */
                    256: extern int _uuconf_iport_cmd P((struct sglobal *qglobal, int argc,
                    257:                                char **argv, struct uuconf_port *qport));
                    258: 
                    259: /* Process a command for a dialer from a Taylor UUCP file.  */
                    260: extern int _uuconf_idialer_cmd P((struct sglobal *qglobal, int argc,
                    261:                                  char **argv,
                    262:                                  struct uuconf_dialer *qdialer));
                    263: 
                    264: /* Process a command for a chat script from a Taylor UUCP file; this
                    265:    is also called for HDB or V2 files, with a made up command.  */
                    266: extern int _uuconf_ichat_cmd P((struct sglobal *qglobal, int argc,
                    267:                                char **argv, struct uuconf_chat *qchat,
                    268:                                pointer pblock));
                    269: 
                    270: /* Process a protocol-parameter command from a Taylor UUCP file.  */
                    271: extern int _uuconf_iadd_proto_param P((struct sglobal *qglobal,
                    272:                                       int argc, char **argv,
                    273:                                       struct uuconf_proto_param **pq,
                    274:                                       pointer pblock));
                    275: 
                    276: /* Handle a "seven-bit", "reliable", or "half-duplex" command from a
                    277:    Taylor UUCP port or dialer file.  The pvar field should point to
                    278:    the ireliable element of the structure.  */
                    279: extern int _uuconf_iseven_bit P((pointer pglobal, int argc, char **argv,
                    280:                                 pointer pvar, pointer pinfo));
                    281: extern int _uuconf_ireliable P((pointer pglobal, int argc, char **argv,
                    282:                                pointer pvar, pointer pinfo));
                    283: extern int _uuconf_ihalf_duplex P((pointer pglobal, int argc, char **argv,
                    284:                                   pointer pvar, pointer pinfo));
                    285: 
                    286: /* Internal function to read a system from the V2 configuration files.
                    287:    This does not apply the basic defaults.  */
                    288: extern int _uuconf_iv2_system_internal P((struct sglobal *qglobal,
                    289:                                          const char *zsystem,
                    290:                                          struct uuconf_system *qsys));
                    291: 
                    292: /* Internal function to read a system from the HDB configuration
                    293:    files.  This does not apply the basic defaults.  */
                    294: extern int _uuconf_ihdb_system_internal P((struct sglobal *qglobal,
                    295:                                           const char *zsystem,
                    296:                                           struct uuconf_system *qsys));
                    297: 
                    298: /* Read the HDB Permissions file.  */
                    299: extern int _uuconf_ihread_permissions P((struct sglobal *qglobal));
                    300: 
                    301: /* Initialize the global information structure.  */
                    302: extern int _uuconf_iinit_global P((struct sglobal **pqglobal));
                    303: 
                    304: /* Clear system information.  */
                    305: extern void _uuconf_uclear_system P((struct uuconf_system *qsys));
                    306: 
                    307: /* Default unset aspects of one system to the contents of another.  */
                    308: extern int _uuconf_isystem_default P((struct sglobal *qglobal,
                    309:                                      struct uuconf_system *q,
                    310:                                      struct uuconf_system *qdefault,
                    311:                                      boolean faddalternates));
                    312: 
                    313: /* Put in the basic system defaults.  */
                    314: extern int _uuconf_isystem_basic_default P((struct sglobal *qglobal,
                    315:                                            struct uuconf_system *qsys));
                    316: 
                    317: /* Clear port information.  */
                    318: extern void _uuconf_uclear_port P((struct uuconf_port *qport));
                    319: 
                    320: /* Clear dialer information.  */
                    321: extern void _uuconf_uclear_dialer P((struct uuconf_dialer *qdialer));
                    322: 
                    323: /* Add a timetable.  */
                    324: extern int _uuconf_itimetable P((pointer pglobal, int argc, char **argv,
                    325:                                 pointer pvar, pointer pinfo));
                    326: 
                    327: /* Parse a time string.  */
                    328: extern int _uuconf_itime_parse P((struct sglobal *qglobal, char *ztime,
                    329:                                  long ival, int cretry,
                    330:                                  int (*picmp) P((long, long)),
                    331:                                  struct uuconf_timespan **pqspan,
                    332:                                  pointer pblock));
                    333: 
                    334: /* A grade comparison function to pass to _uuconf_itime_parse.  */
                    335: extern int _uuconf_itime_grade_cmp P((long, long));
                    336: 
                    337: /* Add a string to a NULL terminated list of strings.  */
                    338: extern int _uuconf_iadd_string P((struct sglobal *qglobal,
                    339:                                  char *zadd, boolean fcopy,
                    340:                                  boolean fdupcheck, char ***ppzstrings,
                    341:                                  pointer pblock));
                    342: 
                    343: /* Parse a string into a boolean value.  */
                    344: extern int _uuconf_iboolean P((struct sglobal *qglobal, const char *zval,
                    345:                               int *pi));
                    346: 
                    347: /* Parse a string into an integer value.  The argument p is either an
                    348:    int * or a long *, according to the argument fint.  */
                    349: extern int _uuconf_iint P((struct sglobal *qglobal, const char *zval,
                    350:                           pointer p, boolean fint));
                    351: 
                    352: /* Turn a cmdtab_offset table into a uuconf_cmdtab table.  */
                    353: extern void _uuconf_ucmdtab_base P((const struct cmdtab_offset *qoff,
                    354:                                    size_t celes, char *pbase,
                    355:                                    struct uuconf_cmdtab *qset));
                    356: 
                    357: /* Merge two memory blocks into one.  This cannot fail.  */
                    358: extern pointer _uuconf_pmalloc_block_merge P((pointer, pointer));
                    359: 
                    360: /* A wrapper for getline that continues lines if they end in a
                    361:    backslash.  It needs qglobal so that it can increment ilineno
                    362:    correctly.  */
                    363: extern int _uuconf_getline P((struct sglobal *qglobal,
                    364:                              char **, size_t *, FILE *));
                    365: 
                    366: /* Split a string into tokens.  */
                    367: extern int _uuconf_istrsplit P((char *zline, int bsep,
                    368:                                char ***ppzsplit, size_t *csplit));

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.