aboutsummaryrefslogtreecommitdiff
path: root/gnu/libexec/uucp/libuuconf/uucnfi.h
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/libexec/uucp/libuuconf/uucnfi.h')
-rw-r--r--gnu/libexec/uucp/libuuconf/uucnfi.h368
1 files changed, 368 insertions, 0 deletions
diff --git a/gnu/libexec/uucp/libuuconf/uucnfi.h b/gnu/libexec/uucp/libuuconf/uucnfi.h
new file mode 100644
index 000000000000..9ce6a62dc763
--- /dev/null
+++ b/gnu/libexec/uucp/libuuconf/uucnfi.h
@@ -0,0 +1,368 @@
+/* uucnfi.h
+ Internal header file for the uuconf package.
+
+ Copyright (C) 1992 Ian Lance Taylor
+
+ This file is part of the Taylor UUCP uuconf library.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License
+ as published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ The author of the program may be contacted at ian@airs.com or
+ c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
+ */
+
+/* This is the internal header file for the uuconf package. It should
+ not be included by anything other than the uuconf code itself. */
+
+/* Get all the general definitions. */
+#include "uucp.h"
+
+/* Get the uuconf header file itself. */
+#include "uuconf.h"
+
+/* We need the system dependent header file. */
+#include "syshdr.h"
+
+/* This is the generic information structure. This holds all the
+ per-thread global information needed by the uuconf code. The
+ per-process global information is held in an sprocess structure,
+ which this structure points to. This permits the code to not have
+ any global variables at all. */
+
+struct sglobal
+{
+ /* A pointer to the per-process global information. */
+ struct sprocess *qprocess;
+ /* A memory block in which all the memory for these fields is
+ allocated. */
+ pointer pblock;
+ /* The value of errno after an error. */
+ int ierrno;
+ /* The filename for which an error occurred. */
+ const char *zfilename;
+ /* The line number at which an error occurred. */
+ int ilineno;
+};
+
+/* This is the per-process information structure. This essentially
+ holds all the global variables used by uuconf. */
+
+struct sprocess
+{
+ /* The name of the local machine. This will be NULL if it is not
+ specified in a configuration file. */
+ const char *zlocalname;
+ /* The spool directory. */
+ const char *zspooldir;
+ /* The default public directory. */
+ const char *zpubdir;
+ /* The lock directory. */
+ const char *zlockdir;
+ /* The log file. */
+ const char *zlogfile;
+ /* The statistics file. */
+ const char *zstatsfile;
+ /* The debugging file. */
+ const char *zdebugfile;
+ /* The default debugging level. */
+ const char *zdebug;
+ /* The maximum number of simultaneously executing uuxqts. */
+ int cmaxuuxqts;
+ /* Whether we are reading the V2 configuration files. */
+ boolean fv2;
+ /* Whether we are reading the HDB configuration files. */
+ boolean fhdb;
+ /* The names of the dialcode files. */
+ char **pzdialcodefiles;
+ /* Timetables. These are in pairs. The first element is the name,
+ the second is the time string. */
+ char **pztimetables;
+
+ /* Taylor UUCP config file name. */
+ char *zconfigfile;
+ /* Taylor UUCP sys file names. */
+ char **pzsysfiles;
+ /* Taylor UUCP port file names. */
+ char **pzportfiles;
+ /* Taylor UUCP dial file names. */
+ char **pzdialfiles;
+ /* Taylor UUCP passwd file names. */
+ char **pzpwdfiles;
+ /* Taylor UUCP call file names. */
+ char **pzcallfiles;
+ /* List of "unknown" commands from config file. */
+ struct sunknown *qunknown;
+ /* Whether the Taylor UUCP system information locations have been
+ read. */
+ boolean fread_syslocs;
+ /* Taylor UUCP system information locations. */
+ struct stsysloc *qsyslocs;
+ /* Taylor UUCP validation restrictions. */
+ struct svalidate *qvalidate;
+ /* Whether the "myname" command is used in a Taylor UUCP file. */
+ boolean fuses_myname;
+
+ /* V2 system file name (L.sys). */
+ char *zv2systems;
+ /* V2 device file name (L-devices). */
+ char *zv2devices;
+ /* V2 user permissions file name (USERFILE). */
+ char *zv2userfile;
+ /* V2 user permitted commands file (L.cmds). */
+ char *zv2cmds;
+
+ /* HDB system file names (Systems). */
+ char **pzhdb_systems;
+ /* HDB device file names (Devices). */
+ char **pzhdb_devices;
+ /* HDB dialer file names (Dialers). */
+ char **pzhdb_dialers;
+ /* Whether the HDB Permissions file has been read. */
+ boolean fhdb_read_permissions;
+ /* The HDB Permissions file entries. */
+ struct shpermissions *qhdb_permissions;
+};
+
+/* This structure is used to hold the "unknown" commands from the
+ Taylor UUCP config file before they have been parsed. */
+
+struct sunknown
+{
+ /* Next element in linked list. */
+ struct sunknown *qnext;
+ /* Line number in config file. */
+ int ilineno;
+ /* Number of arguments. */
+ int cargs;
+ /* Arguments. */
+ char **pzargs;
+};
+
+/* This structure is used to hold the locations of systems within the
+ Taylor UUCP sys files. */
+
+struct stsysloc
+{
+ /* Next element in linked list. */
+ struct stsysloc *qnext;
+ /* System name. */
+ const char *zname;
+ /* Whether system is an alias or a real system. If this is an
+ alias, the real system is the next entry in the linked list which
+ is not an alias. */
+ boolean falias;
+ /* File name (one of the sys files). */
+ const char *zfile;
+ /* Open file. */
+ FILE *e;
+ /* Location within file (from ftell). */
+ long iloc;
+ /* Line number within file. */
+ int ilineno;
+};
+
+/* This structure is used to hold validation restrictions. This is a
+ list of machines which are permitted to use a particular login
+ name. If a machine logs in, and there is no called login entry for
+ it, the login name and machine name must be passed to
+ uuconf_validate to confirm that either there is no entry for this
+ login name or that the machine name appears on the entry. */
+
+struct svalidate
+{
+ /* Next element in linked list. */
+ struct svalidate *qnext;
+ /* Login name. */
+ const char *zlogname;
+ /* NULL terminated list of machine names. */
+ char **pzmachines;
+};
+
+/* This structure is used to hold a linked list of HDB Permissions
+ file entries. */
+
+struct shpermissions
+{
+ /* Next entry in linked list. */
+ struct shpermissions *qnext;
+ /* NULL terminated array of LOGNAME values. */
+ char **pzlogname;
+ /* NULL terminated array of MACHINE values. */
+ char **pzmachine;
+ /* Boolean REQUEST value. */
+ int frequest;
+ /* Boolean SENDFILES value ("call" is taken as "no"). */
+ int fsendfiles;
+ /* NULL terminated array of READ values. */
+ char **pzread;
+ /* NULL terminated array of WRITE values. */
+ char **pzwrite;
+ /* Boolean CALLBACK value. */
+ int fcallback;
+ /* NULL terminated array of COMMANDS values. */
+ char **pzcommands;
+ /* NULL terminated array of VALIDATE values. */
+ char **pzvalidate;
+ /* String MYNAME value. */
+ char *zmyname;
+ /* String PUBDIR value. */
+ const char *zpubdir;
+ /* NULL terminated array of ALIAS values. */
+ char **pzalias;
+};
+
+/* This structure is used to build reentrant uuconf_cmdtab tables.
+ The ioff field is either (size_t) -1 or an offsetof macro. The
+ table is then copied into a uuconf_cmdtab, except that offsets of
+ (size_t) -1 are converted to pvar elements of NULL, and other
+ offsets are converted to an offset off some base address. */
+
+struct cmdtab_offset
+{
+ const char *zcmd;
+ int itype;
+ size_t ioff;
+ uuconf_cmdtabfn pifn;
+};
+
+/* A value in a uuconf_system structure which holds the address of
+ this special variable is known to be uninitialized. */
+extern char *_uuconf_unset;
+
+/* Internal function to read a system from the Taylor UUCP
+ configuration files. This does not apply the basic defaults. */
+extern int _uuconf_itaylor_system_internal P((struct sglobal *qglobal,
+ const char *zsystem,
+ struct uuconf_system *qsys));
+
+/* Read the system locations and validation information from the
+ Taylor UUCP configuration files. This sets the qsyslocs,
+ qvalidate, and fread_syslocs elements of the global structure. */
+extern int _uuconf_iread_locations P((struct sglobal *qglobal));
+
+/* Process a command for a port from a Taylor UUCP file. */
+extern int _uuconf_iport_cmd P((struct sglobal *qglobal, int argc,
+ char **argv, struct uuconf_port *qport));
+
+/* Process a command for a dialer from a Taylor UUCP file. */
+extern int _uuconf_idialer_cmd P((struct sglobal *qglobal, int argc,
+ char **argv,
+ struct uuconf_dialer *qdialer));
+
+/* Process a command for a chat script from a Taylor UUCP file; this
+ is also called for HDB or V2 files, with a made up command. */
+extern int _uuconf_ichat_cmd P((struct sglobal *qglobal, int argc,
+ char **argv, struct uuconf_chat *qchat,
+ pointer pblock));
+
+/* Process a protocol-parameter command from a Taylor UUCP file. */
+extern int _uuconf_iadd_proto_param P((struct sglobal *qglobal,
+ int argc, char **argv,
+ struct uuconf_proto_param **pq,
+ pointer pblock));
+
+/* Handle a "seven-bit", "reliable", or "half-duplex" command from a
+ Taylor UUCP port or dialer file. The pvar field should point to
+ the ireliable element of the structure. */
+extern int _uuconf_iseven_bit P((pointer pglobal, int argc, char **argv,
+ pointer pvar, pointer pinfo));
+extern int _uuconf_ireliable P((pointer pglobal, int argc, char **argv,
+ pointer pvar, pointer pinfo));
+extern int _uuconf_ihalf_duplex P((pointer pglobal, int argc, char **argv,
+ pointer pvar, pointer pinfo));
+
+/* Internal function to read a system from the V2 configuration files.
+ This does not apply the basic defaults. */
+extern int _uuconf_iv2_system_internal P((struct sglobal *qglobal,
+ const char *zsystem,
+ struct uuconf_system *qsys));
+
+/* Internal function to read a system from the HDB configuration
+ files. This does not apply the basic defaults. */
+extern int _uuconf_ihdb_system_internal P((struct sglobal *qglobal,
+ const char *zsystem,
+ struct uuconf_system *qsys));
+
+/* Read the HDB Permissions file. */
+extern int _uuconf_ihread_permissions P((struct sglobal *qglobal));
+
+/* Initialize the global information structure. */
+extern int _uuconf_iinit_global P((struct sglobal **pqglobal));
+
+/* Clear system information. */
+extern void _uuconf_uclear_system P((struct uuconf_system *qsys));
+
+/* Default unset aspects of one system to the contents of another. */
+extern int _uuconf_isystem_default P((struct sglobal *qglobal,
+ struct uuconf_system *q,
+ struct uuconf_system *qdefault,
+ boolean faddalternates));
+
+/* Put in the basic system defaults. */
+extern int _uuconf_isystem_basic_default P((struct sglobal *qglobal,
+ struct uuconf_system *qsys));
+
+/* Clear port information. */
+extern void _uuconf_uclear_port P((struct uuconf_port *qport));
+
+/* Clear dialer information. */
+extern void _uuconf_uclear_dialer P((struct uuconf_dialer *qdialer));
+
+/* Add a timetable. */
+extern int _uuconf_itimetable P((pointer pglobal, int argc, char **argv,
+ pointer pvar, pointer pinfo));
+
+/* Parse a time string. */
+extern int _uuconf_itime_parse P((struct sglobal *qglobal, char *ztime,
+ long ival, int cretry,
+ int (*picmp) P((long, long)),
+ struct uuconf_timespan **pqspan,
+ pointer pblock));
+
+/* A grade comparison function to pass to _uuconf_itime_parse. */
+extern int _uuconf_itime_grade_cmp P((long, long));
+
+/* Add a string to a NULL terminated list of strings. */
+extern int _uuconf_iadd_string P((struct sglobal *qglobal,
+ char *zadd, boolean fcopy,
+ boolean fdupcheck, char ***ppzstrings,
+ pointer pblock));
+
+/* Parse a string into a boolean value. */
+extern int _uuconf_iboolean P((struct sglobal *qglobal, const char *zval,
+ int *pi));
+
+/* Parse a string into an integer value. The argument p is either an
+ int * or a long *, according to the argument fint. */
+extern int _uuconf_iint P((struct sglobal *qglobal, const char *zval,
+ pointer p, boolean fint));
+
+/* Turn a cmdtab_offset table into a uuconf_cmdtab table. */
+extern void _uuconf_ucmdtab_base P((const struct cmdtab_offset *qoff,
+ size_t celes, char *pbase,
+ struct uuconf_cmdtab *qset));
+
+/* Merge two memory blocks into one. This cannot fail. */
+extern pointer _uuconf_pmalloc_block_merge P((pointer, pointer));
+
+/* A wrapper for getline that continues lines if they end in a
+ backslash. It needs qglobal so that it can increment ilineno
+ correctly. */
+extern int _uuconf_getline P((struct sglobal *qglobal,
+ char **, size_t *, FILE *));
+
+/* Split a string into tokens. */
+extern int _uuconf_istrsplit P((char *zline, int bsep,
+ char ***ppzsplit, size_t *csplit));