mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-14 10:09:48 +00:00
1497 lines
62 KiB
C
1497 lines
62 KiB
C
/* uuconf.h
|
||
Header file for UUCP configuration routines.
|
||
|
||
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 use of an object file which uses material from this header
|
||
file, and from no other portion of the uuconf library, is
|
||
unrestricted, as described in paragraph 4 of section 5 of version 2
|
||
of the GNU Library General Public License (this sentence is merely
|
||
informative, and does not modify the License in any way).
|
||
|
||
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.
|
||
*/
|
||
|
||
#ifndef UUCONF_H
|
||
|
||
#define UUCONF_H
|
||
|
||
#include <stdio.h>
|
||
|
||
/* The macro UUCONF_ANSI_C may be used to override __STDC__. */
|
||
#ifndef UUCONF_ANSI_C
|
||
#ifdef __STDC__
|
||
#define UUCONF_ANSI_C 1
|
||
#else /* ! defined (__STDC__) */
|
||
#define UUCONF_ANSI_C 0
|
||
#endif /* ! defined (__STDC__) */
|
||
#endif /* ! defined (UUCONF_ANSI_C) */
|
||
|
||
#if UUCONF_ANSI_C
|
||
#define UUCONF_CONST const
|
||
typedef void *UUCONF_POINTER;
|
||
#include <stddef.h>
|
||
typedef size_t UUCONF_SIZE_T;
|
||
#else
|
||
#define UUCONF_CONST
|
||
typedef char *UUCONF_POINTER;
|
||
typedef unsigned int UUCONF_SIZE_T;
|
||
#endif
|
||
|
||
/* The field names of each of the following structures begin with
|
||
"uuconf_". This is to avoid any conflicts with user defined
|
||
macros. The first character following the "uuconf_" string
|
||
indicates the type of the field.
|
||
|
||
z -- a string (char *)
|
||
c -- a count (normally int)
|
||
i -- an integer value (normally int)
|
||
f -- a boolean value (normally int)
|
||
b -- a single character value (char or int)
|
||
t -- an enum (enum XX)
|
||
s -- a structure (struct XX)
|
||
u -- a union (union XX)
|
||
q -- a pointer to a structure (struct XX *)
|
||
p -- a pointer to something other than a string
|
||
*/
|
||
|
||
/* The information which is kept for a chat script. */
|
||
|
||
struct uuconf_chat
|
||
{
|
||
/* The script itself. This is a NULL terminated list of expect/send
|
||
pairs. The first string is an expect string. A string starting
|
||
with a '-' indicates subsend string; the following strings which
|
||
start with '-' are subexpect/subsend strings. This field may be
|
||
NULL, in which case there is no chat script (but pzprogram may
|
||
hold a program to run). */
|
||
char **uuconf_pzchat;
|
||
/* The chat program to run. This is a NULL terminated list of
|
||
arguments; element 0 if the program. May be NULL, in which case
|
||
there is no program. */
|
||
char **uuconf_pzprogram;
|
||
/* The timeout in seconds to use for expect strings in the chat
|
||
script. */
|
||
int uuconf_ctimeout;
|
||
/* The NULL terminated list of failure strings. If any of these
|
||
strings appear, the chat script is aborted. May be NULL, in
|
||
which case there are no failure strings. */
|
||
char **uuconf_pzfail;
|
||
/* Non-zero if incoming characters should be stripped to seven bits
|
||
(by anding with 0x7f). */
|
||
int uuconf_fstrip;
|
||
};
|
||
|
||
/* The information which is kept for a time specification. This is a
|
||
linked list of structures. Each element of the list represents a
|
||
span of time, giving a starting time and an ending time. The time
|
||
only depends on the day of the week, not on the day of the month or
|
||
of the year. The time is only specified down to the minute, not
|
||
down to the second or below. The list is sorted by starting time.
|
||
|
||
The starting and ending time are expressed in minutes since the
|
||
beginning of the week, which is considered to be 12 midnight on
|
||
Sunday. Thus 60 is 1 am on Sunday, 1440 (== 60 * 24) is 12
|
||
midnight on Monday, and the largest possible value is 10080 (== 60
|
||
* 24 * 7) which is 12 midnight on the following Sunday.
|
||
|
||
Each span of time has a value associated with it. This is the
|
||
lowest grade or the largest file size that may be transferred
|
||
during that time, depending on the source of the time span. When
|
||
time specifications overlap, the value used for the overlap is the
|
||
higher grade or the smaller file size. Thus specifying
|
||
``call-timegrade z Any'' and ``call-timegrade Z Mo'' means that
|
||
only grade Z or higher may be sent on Monday, since Z is the higer
|
||
grade of the overlapping spans. The final array wil have no
|
||
overlaps.
|
||
|
||
Each span also has a retry time associated with it. This permits
|
||
different retry times to be used at different times of day. The
|
||
retry time is only relevant if the span came from a ``time'' or
|
||
``timegrade'' command for a system. */
|
||
|
||
struct uuconf_timespan
|
||
{
|
||
/* Next element in list. */
|
||
struct uuconf_timespan *uuconf_qnext;
|
||
/* Starting minute (-1 at the end of the array). */
|
||
int uuconf_istart;
|
||
/* Ending minute. */
|
||
int uuconf_iend;
|
||
/* Value for this span (lowest grade or largest file that may be
|
||
transferred at this time). */
|
||
long uuconf_ival;
|
||
/* Retry time. */
|
||
int uuconf_cretry;
|
||
};
|
||
|
||
/* The information which is kept for protocol parameters. Protocol
|
||
parameter information is stored as an array of the following
|
||
structures. */
|
||
|
||
struct uuconf_proto_param
|
||
{
|
||
/* The name of the protocol to which this entry applies. This is
|
||
'\0' for the last element of the array. */
|
||
int uuconf_bproto;
|
||
/* Specific entries for this protocol. This points to an array
|
||
ending in an element with a uuconf_cargs field of 0. */
|
||
struct uuconf_proto_param_entry *uuconf_qentries;
|
||
};
|
||
|
||
/* Each particular protocol parameter entry is one of the following
|
||
structures. */
|
||
|
||
struct uuconf_proto_param_entry
|
||
{
|
||
/* The number of arguments to the ``protocol-parameter'' command
|
||
(not counting ``protocol-parameter'' itself). This is 0 for the
|
||
last element of the array. */
|
||
int uuconf_cargs;
|
||
/* The actual arguments to the ``protocol-parameter'' command; this
|
||
is an array with cargs entries. */
|
||
char **uuconf_pzargs;
|
||
};
|
||
|
||
/* The information which is kept for a system. The zname and zalias
|
||
fields will be the same for all alternates. Every other fields is
|
||
specific to the particular alternate in which it appears (although
|
||
most will be the same for all alternates). */
|
||
|
||
struct uuconf_system
|
||
{
|
||
/* The name of the system. */
|
||
char *uuconf_zname;
|
||
/* A list of aliases for the system. This is a NULL terminated list
|
||
of strings. May be NULL, in which case there are no aliases. */
|
||
char **uuconf_pzalias;
|
||
/* A linked list of alternate call in or call out information. Each
|
||
alternative way to call this system occupies an element of this
|
||
list. May be NULL, in which case there are no alternates. */
|
||
struct uuconf_system *uuconf_qalternate;
|
||
/* The name for this particular alternate. May be NULL, in which
|
||
case this alternate does not have a name. */
|
||
char *uuconf_zalternate;
|
||
/* If non-zero, this alternate may be used for calling out. */
|
||
int uuconf_fcall;
|
||
/* If non-zero, this alternate may be used for accepting a call. */
|
||
int uuconf_fcalled;
|
||
/* The times at which this system may be called. The ival field of
|
||
each uuconf_timespan structure is the lowest grade which may be
|
||
transferred at that time. The cretry field is the number of
|
||
minutes to wait before retrying the call, or 0 if it was not
|
||
specified. May be NULL, in which case the system may never be
|
||
called. */
|
||
struct uuconf_timespan *uuconf_qtimegrade;
|
||
/* The times at which to request a particular grade of the system
|
||
when calling it, and the grades to request. The ival field of
|
||
each uuconf_timespan structure is the lowest grade which the
|
||
other system should transfer at that time. May be NULL, in which
|
||
case there are no grade restrictions. */
|
||
struct uuconf_timespan *uuconf_qcalltimegrade;
|
||
/* The maximum number of times to retry calling this system. If
|
||
this is 0, there is no limit. */
|
||
int uuconf_cmax_retries;
|
||
/* The number of minutes to wait between successful calls to a
|
||
system. */
|
||
int uuconf_csuccess_wait;
|
||
/* The size restrictions by time for local requests during a locally
|
||
placed call. The ival field of each uuconf_timespan structure is
|
||
the size in bytes of the largest file which may be transferred at
|
||
that time. May be NULL, in which case there are no size
|
||
restrictions. */
|
||
struct uuconf_timespan *uuconf_qcall_local_size;
|
||
/* The size restrictions by time for remote requests during a
|
||
locally placed call. May be NULL. */
|
||
struct uuconf_timespan *uuconf_qcall_remote_size;
|
||
/* The size restrictions by time for local requests during a
|
||
remotely placed call. May be NULL. */
|
||
struct uuconf_timespan *uuconf_qcalled_local_size;
|
||
/* The size restrictions by time for remote requests during a
|
||
remotely placed call. May be NULL. */
|
||
struct uuconf_timespan *uuconf_qcalled_remote_size;
|
||
/* Baud rate, or speed. Zero means any baud rate. If ihighbaud is
|
||
non-zero, this is the low baud rate of a range. */
|
||
long uuconf_ibaud;
|
||
/* If non-zero, ibaud is the low baud rate of a range and ihighbaud
|
||
is the high baud rate. */
|
||
long uuconf_ihighbaud;
|
||
/* Port name to use. May be NULL. If an HDB configuration file
|
||
contains a modem class (alphabetic characters preceeding the baud
|
||
rate), the class is appended to the port name. */
|
||
char *uuconf_zport;
|
||
/* Specific port information, if the system entry includes port
|
||
information. May be NULL. */
|
||
struct uuconf_port *uuconf_qport;
|
||
/* Phone number to call, or address to use for a TCP connection.
|
||
May be NULL, in which case a dialer script may not use \D or \T
|
||
for this system, and a TCP port will use the system name. */
|
||
char *uuconf_zphone;
|
||
/* Chat script to use when logging in to the system. */
|
||
struct uuconf_chat uuconf_schat;
|
||
/* Login name to use for \L in the login chat script. This should
|
||
normally be accessed via uuconf_callout. If it is "*",
|
||
uuconf_callout will look it up in the call out file. This may be
|
||
NULL, in which case the login script may not use \L. */
|
||
char *uuconf_zcall_login;
|
||
/* Password to use for \P in the login chat script. This should
|
||
normally be accessed via uuconf_callout. If it is "*",
|
||
uuconf_callout will look it up in the call out file. This may be
|
||
NULL, in which case the login script may not use \P. */
|
||
char *uuconf_zcall_password;
|
||
/* The login name this system must use when calling in. This may be
|
||
different for different alternates. This should only be examined
|
||
if uuconf_fcalled is TRUE. If this is NULL or "ANY" then
|
||
uuconf_validate must be called to make sure that whatever login
|
||
name was used is permitted for this machine. */
|
||
char *uuconf_zcalled_login;
|
||
/* If non-zero, then when this system calls in the call should not
|
||
be allowed to proceed and the system should be called back. */
|
||
int uuconf_fcallback;
|
||
/* If non-zero, then conversation sequence numbers should be used
|
||
with this system. */
|
||
int uuconf_fsequence;
|
||
/* A list of protocols to use with this system. Each protocol has a
|
||
single character name. May be NULL, in which case any known
|
||
protocol may be used. */
|
||
char *uuconf_zprotocols;
|
||
/* Array of protocol parameters. Ends in an entry with a
|
||
uuconf_bproto field of '\0'. May be NULL. */
|
||
struct uuconf_proto_param *uuconf_qproto_params;
|
||
/* Chat script to run when called by this system. */
|
||
struct uuconf_chat uuconf_scalled_chat;
|
||
/* Debugging level to set during a conversation. May be NULL. */
|
||
char *uuconf_zdebug;
|
||
/* Maximum remote debugging level this system may request. May be
|
||
NULL. */
|
||
char *uuconf_zmax_remote_debug;
|
||
/* Non-zero if the remote system may request us to send files from
|
||
the local system to the remote. */
|
||
int uuconf_fsend_request;
|
||
/* Non-zero if the remote system may request us to receive files
|
||
from the remote system to the local. */
|
||
int uuconf_frec_request;
|
||
/* Non-zero if local requests are permitted when calling this
|
||
system. */
|
||
int uuconf_fcall_transfer;
|
||
/* Non-zero if local requests are permitted when this system calls
|
||
in. */
|
||
int uuconf_fcalled_transfer;
|
||
/* NULL terminated list of directories from which files may be sent
|
||
by local request. */
|
||
char **uuconf_pzlocal_send;
|
||
/* NULL terminated list of directories from which files may be sent
|
||
by remote request. */
|
||
char **uuconf_pzremote_send;
|
||
/* NULL terminated list of directories into which files may be
|
||
received by local request. */
|
||
char **uuconf_pzlocal_receive;
|
||
/* NULL terminated list of directories into which files may be
|
||
received by remote request. */
|
||
char **uuconf_pzremote_receive;
|
||
/* Path to use for command execution. This is a NULL terminated
|
||
list of directories. */
|
||
char **uuconf_pzpath;
|
||
/* NULL terminated List of commands that may be executed. */
|
||
char **uuconf_pzcmds;
|
||
/* Amount of free space to leave when accepting a file from this
|
||
system, in bytes. */
|
||
long uuconf_cfree_space;
|
||
/* NULL terminated list of systems that this system may forward
|
||
from. May be NULL if there are no systems from which files may
|
||
be forwarded. The list may include "ANY". */
|
||
char **uuconf_pzforward_from;
|
||
/* NULL terminated list of systems that this system may forward to.
|
||
May be NULL if there are no systems to which files may be
|
||
forwarded. The list may include "ANY". */
|
||
char **uuconf_pzforward_to;
|
||
/* The public directory to use for this sytem. */
|
||
const char *uuconf_zpubdir;
|
||
/* The local name to use for this remote system. May be NULL if the
|
||
usual local name should be used. */
|
||
char *uuconf_zlocalname;
|
||
/* Memory allocation block for the system. */
|
||
UUCONF_POINTER uuconf_palloc;
|
||
};
|
||
|
||
/* Types of ports. */
|
||
|
||
enum uuconf_porttype
|
||
{
|
||
/* Unknown port type. A port of this type should never be returned
|
||
by the uuconf functions. */
|
||
UUCONF_PORTTYPE_UNKNOWN,
|
||
/* Read from standard input and write to standard output. Not
|
||
normally used. */
|
||
UUCONF_PORTTYPE_STDIN,
|
||
/* A modem port. */
|
||
UUCONF_PORTTYPE_MODEM,
|
||
/* A direct connect port. */
|
||
UUCONF_PORTTYPE_DIRECT,
|
||
/* A TCP port. Not supported on all systems. */
|
||
UUCONF_PORTTYPE_TCP,
|
||
/* A TLI port. Not supported on all systems. */
|
||
UUCONF_PORTTYPE_TLI
|
||
};
|
||
|
||
/* Additional information for a stdin port (there is none). */
|
||
|
||
struct uuconf_stdin_port
|
||
{
|
||
int uuconf_idummy;
|
||
};
|
||
|
||
/* Additional information for a modem port. */
|
||
|
||
struct uuconf_modem_port
|
||
{
|
||
/* The device name. May be NULL, in which case the port name is
|
||
used instead. */
|
||
char *uuconf_zdevice;
|
||
/* The device name to send the dialer chat script to. May be NULL,
|
||
in which case the chat script is sent to the usual device. */
|
||
char *uuconf_zdial_device;
|
||
/* The default baud rate (speed). If zero, there is no default. */
|
||
long uuconf_ibaud;
|
||
/* The low baud rate, if a range is used. If zero, a range is not
|
||
used and ihighbaud should be ignored. */
|
||
long uuconf_ilowbaud;
|
||
/* The high baud rate, if ilowbaud is non-zero. */
|
||
long uuconf_ihighbaud;
|
||
/* Non-zero if the port supports carrier detect. */
|
||
int uuconf_fcarrier;
|
||
/* A NULL terminated sequence of dialer/token pairs (element 0 is a
|
||
dialer name, element 1 is a token, etc.) May be NULL, in which
|
||
case qdialer should not be NULL. */
|
||
char **uuconf_pzdialer;
|
||
/* Specific dialer information. Only used if pzdialer is NULL. */
|
||
struct uuconf_dialer *uuconf_qdialer;
|
||
};
|
||
|
||
/* Additional information for a direct connect port. */
|
||
|
||
struct uuconf_direct_port
|
||
{
|
||
/* The device name. May be NULL, in which case the port name is
|
||
used instead. */
|
||
char *uuconf_zdevice;
|
||
/* The baud rate (speed). */
|
||
long uuconf_ibaud;
|
||
};
|
||
|
||
/* Additional information for a TCP port. */
|
||
|
||
struct uuconf_tcp_port
|
||
{
|
||
/* The TCP port number to use. May be a name or a number. May be
|
||
NULL, in which case "uucp" is looked up using getservbyname. */
|
||
char *uuconf_zport;
|
||
};
|
||
|
||
/* Additional information for a TLI port. */
|
||
|
||
struct uuconf_tli_port
|
||
{
|
||
/* Device name to open. May be NULL, in which case the port name is
|
||
used. */
|
||
char *uuconf_zdevice;
|
||
/* Whether this port should be turned into a stream, permitting the
|
||
read and write calls instead of the t_rcv and t_send calls. */
|
||
int uuconf_fstream;
|
||
/* A NULL terminated list of modules to push after making the
|
||
connection. May be NULL, in which case if fstream is non-zero,
|
||
then "tirdwr" is pushed onto the stream, and otherwise nothing is
|
||
pushed. */
|
||
char **uuconf_pzpush;
|
||
/* A NULL terminated sequence of dialer/token pairs (element 0 is a
|
||
dialer name, element 1 is a token, etc.) May be NULL. If
|
||
element 0 is TLI or TLIS, element 1 is used as the address to
|
||
connect to; otherwise uuconf_zphone from the system information
|
||
is used. */
|
||
char **uuconf_pzdialer;
|
||
/* Address to use when operating as a server. This may contain
|
||
escape sequences. */
|
||
char *uuconf_zservaddr;
|
||
};
|
||
|
||
/* Information kept for a port. */
|
||
|
||
struct uuconf_port
|
||
{
|
||
/* The name of the port. */
|
||
char *uuconf_zname;
|
||
/* The type of the port. */
|
||
enum uuconf_porttype uuconf_ttype;
|
||
/* The list of protocols supported by the port. The name of each
|
||
protocol is a single character. May be NULL, in which case any
|
||
protocol is permitted. */
|
||
char *uuconf_zprotocols;
|
||
/* Array of protocol parameters. Ends in an entry with a
|
||
uuconf_bproto field of '\0'. May be NULL. */
|
||
struct uuconf_proto_param *uuconf_qproto_params;
|
||
/* The set of reliability bits. */
|
||
int uuconf_ireliable;
|
||
/* The lock file name to use. */
|
||
char *uuconf_zlockname;
|
||
/* Memory allocation block for the port. */
|
||
UUCONF_POINTER uuconf_palloc;
|
||
/* The type specific information. */
|
||
union
|
||
{
|
||
struct uuconf_stdin_port uuconf_sstdin;
|
||
struct uuconf_modem_port uuconf_smodem;
|
||
struct uuconf_direct_port uuconf_sdirect;
|
||
struct uuconf_tcp_port uuconf_stcp;
|
||
struct uuconf_tli_port uuconf_stli;
|
||
} uuconf_u;
|
||
};
|
||
|
||
/* Information kept about a dialer. */
|
||
|
||
struct uuconf_dialer
|
||
{
|
||
/* The name of the dialer. */
|
||
char *uuconf_zname;
|
||
/* The chat script to use when dialing out. */
|
||
struct uuconf_chat uuconf_schat;
|
||
/* The string to send when a `=' appears in the phone number. */
|
||
char *uuconf_zdialtone;
|
||
/* The string to send when a `-' appears in the phone number. */
|
||
char *uuconf_zpause;
|
||
/* Non-zero if the dialer supports carrier detect. */
|
||
int uuconf_fcarrier;
|
||
/* The number of seconds to wait for carrier after the chat script
|
||
is complete. Only used if fcarrier is non-zero. Only supported
|
||
on some systems. */
|
||
int uuconf_ccarrier_wait;
|
||
/* If non-zero, DTR should be toggled before dialing. Only
|
||
supported on some systems. */
|
||
int uuconf_fdtr_toggle;
|
||
/* If non-zero, sleep for 1 second after toggling DTR. Ignored if
|
||
fdtr_toggle is zero. */
|
||
int uuconf_fdtr_toggle_wait;
|
||
/* The chat script to use when a call is complete. */
|
||
struct uuconf_chat uuconf_scomplete;
|
||
/* The chat script to use when a call is aborted. */
|
||
struct uuconf_chat uuconf_sabort;
|
||
/* Array of protocol parameters. Ends in an entry with a
|
||
uuconf_bproto field of '\0'. May be NULL. */
|
||
struct uuconf_proto_param *uuconf_qproto_params;
|
||
/* The set of reliability bits. */
|
||
int uuconf_ireliable;
|
||
/* Memory allocation block for the dialer. */
|
||
UUCONF_POINTER uuconf_palloc;
|
||
};
|
||
|
||
/* Reliability bits for the ireliable field of ports and dialers.
|
||
These bits are used to decide which protocol to run. A given
|
||
protocol will have a set of these bits, and each of them must be
|
||
turned on for the port before we will permit that protocol to be
|
||
used. This will be overridden by the zprotocols field. */
|
||
|
||
/* Whether a set of reliability bits is given. If this bit is not
|
||
set, then there is no reliability information. */
|
||
#define UUCONF_RELIABLE_SPECIFIED (01)
|
||
|
||
/* Set if the connection is eight bit transparent. */
|
||
#define UUCONF_RELIABLE_EIGHT (02)
|
||
|
||
/* Set if the connection is error-free. */
|
||
#define UUCONF_RELIABLE_RELIABLE (04)
|
||
|
||
/* Set if the connection is end-to-end reliable (e.g. TCP). */
|
||
#define UUCONF_RELIABLE_ENDTOEND (010)
|
||
|
||
/* Set if the connection is full-duplex; that is, no time consuming
|
||
line turnaround is required before sending data in the reverse
|
||
direction. If the connection is truly half-duplex, in the sense
|
||
that communication can only flow in one direction, UUCP can not be
|
||
used. */
|
||
#define UUCONF_RELIABLE_FULLDUPLEX (020)
|
||
|
||
/* UUCP grades range from 0 to 9, A to Z, a to z in order from highest
|
||
to lowest (work of higher grades is done before work of lower
|
||
grades). */
|
||
|
||
/* The highest grade. */
|
||
#define UUCONF_GRADE_HIGH ('0')
|
||
|
||
/* The lowest grade. */
|
||
#define UUCONF_GRADE_LOW ('z')
|
||
|
||
/* Whether a character is a legal grade (requires <ctype.h>). */
|
||
#define UUCONF_GRADE_LEGAL(b) (isalnum ((unsigned) (b)))
|
||
|
||
/* Return < 0 if the first grade should be done before the second
|
||
grade, == 0 if they are the same, or > 0 if the first grade should
|
||
be done after the second grade. On an ASCII system, this can just
|
||
be b1 - b2. */
|
||
#define UUCONF_GRADE_CMP(b1, b2) (uuconf_grade_cmp ((b1), (b2)))
|
||
|
||
/* Most of the uuconf functions returns an error code. A value of
|
||
zero (UUCONF_SUCCESS) indicates success. */
|
||
|
||
/* If this bit is set in the returned error code, then the
|
||
uuconf_errno function may be used to obtain the errno value as set
|
||
by the function which caused the failure. */
|
||
#define UUCONF_ERROR_ERRNO (0x100)
|
||
|
||
/* If this bit is set in the returned error code, then the
|
||
uuconf_filename function may be used to get the name of a file
|
||
associated with the error. */
|
||
#define UUCONF_ERROR_FILENAME (0x200)
|
||
|
||
/* If this bit is set in the returned error code, then the
|
||
uuconf_lineno function may be used to get a line number associated
|
||
with the error; normally if this is set UUCONF_ERROR_FILENAME will
|
||
also be set. */
|
||
#define UUCONF_ERROR_LINENO (0x400)
|
||
|
||
/* There are two UUCONF_CMDTABRET bits that may be set in the return
|
||
value of uuconf_cmd_line or uuconf_cmd_args, described below. They
|
||
do not indicate an error, but instead give instructions to the
|
||
calling function, often uuconf_cmd_file. They may also be set in
|
||
the return value of a user function listed in a uuconf_cmdtab
|
||
table, in which case they will be honored by uuconf_cmd_file. */
|
||
|
||
/* This bit means that the memory occupied by the arguments passed to
|
||
the function should be preserved, and not overwritten or freed. It
|
||
refers only to the contents of the arguments; the contents of the
|
||
argv array itself may always be destroyed. If this bit is set in
|
||
the return value of uuconf_cmd_line or uuconf_cmd_args, it must be
|
||
honored. It will be honored by uuconf_cmd_file. This may be
|
||
combined with an error code or with UUCONF_CMDTABRET_EXIT, although
|
||
neither uuconf_cmd_file or uuconf_cmd_line will do so. */
|
||
#define UUCONF_CMDTABRET_KEEP (0x800)
|
||
|
||
/* This bit means that uuconf_cmd_file should exit, rather than go on
|
||
to read and process the next line. If uuconf_cmd_line or
|
||
uuconf_cmd_args encounter an error, the return value will have this
|
||
bit set along with the error code. A user function may set this
|
||
bit with or without an error; the return value of the user function
|
||
will be returned by uuconf_cmd_file, except that the
|
||
UUCONF_CMDTABRET_KEEP and UUCONF_CMDTABRET_EXIT bits will be
|
||
cleared. */
|
||
#define UUCONF_CMDTABRET_EXIT (0x1000)
|
||
|
||
/* This macro may be used to extract the specific error value. */
|
||
#define UUCONF_ERROR_VALUE(i) ((i) & 0xff)
|
||
|
||
/* UUCONF_ERROR_VALUE will return one of the following values. */
|
||
|
||
/* Function succeeded. */
|
||
#define UUCONF_SUCCESS (0)
|
||
/* Named item not found. */
|
||
#define UUCONF_NOT_FOUND (1)
|
||
/* A call to fopen failed. */
|
||
#define UUCONF_FOPEN_FAILED (2)
|
||
/* A call to fseek failed. */
|
||
#define UUCONF_FSEEK_FAILED (3)
|
||
/* A call to malloc or realloc failed. */
|
||
#define UUCONF_MALLOC_FAILED (4)
|
||
/* Syntax error in file. */
|
||
#define UUCONF_SYNTAX_ERROR (5)
|
||
/* Unknown command. */
|
||
#define UUCONF_UNKNOWN_COMMAND (6)
|
||
|
||
#if UUCONF_ANSI_C
|
||
|
||
/* For each type of configuration file (Taylor, V2, HDB), there are
|
||
separate routines to read various sorts of information. There are
|
||
also generic routines, which call on the appropriate type specific
|
||
routines. The library can be compiled to read any desired
|
||
combination of the configuration file types. This affects only the
|
||
generic routines, as it determines which type specific routines
|
||
they call. Thus, on a system which, for example, does not have any
|
||
V2 configuration files, there is no need to include the overhead of
|
||
the code to parse the files and the time to look for them.
|
||
However, a program which specifically wants to be able to parse
|
||
them can call the V2 specific routines.
|
||
|
||
The uuconf functions all take as an argument a pointer to uuconf
|
||
global information. This must be initialized by any the
|
||
initialization routines (the generic one and the three file type
|
||
specific ones) before any of the other uuconf functions may be
|
||
called. */
|
||
|
||
/* Initialize the configuration file reading routines. The ppglobal
|
||
argument should point to a generic pointer (a void *, or, on older
|
||
compilers, a char *) which will be initialized and may then be
|
||
passed to the other uuconf routines. The zprogram argument is the
|
||
name of the program for which files should be read. A NULL is
|
||
taken as "uucp", and reads the standard UUCP configuration files.
|
||
The only other common argument is "cu", but any string is
|
||
permitted. The zname argument is the name of the Taylor UUCP
|
||
config file; if it is NULL, the default config file will be read.
|
||
If not reading Taylor UUCP configuration information, the argument
|
||
is ignored. This function must be called before any of the other
|
||
uuconf functions.
|
||
|
||
Note that if the zname argument is obtained from the user running
|
||
the program, the program should be careful to revoke any special
|
||
privileges it may have (e.g. on Unix call setuid (getuid ()) and
|
||
setgid (getgid ())). Otherwise various sorts of spoofing become
|
||
possible. */
|
||
extern int uuconf_init (void **uuconf_ppglobal,
|
||
const char *uuconf_zprogram,
|
||
const char *uuconf_zname);
|
||
|
||
/* Adjust the configuration file global pointer for a new thread. The
|
||
library is fully reentrant (with the exception of the function
|
||
uuconf_error_string, which calls strerror, which on some systems is
|
||
not reentrant), provided that each new thread that wishes to call
|
||
the library calls this function and uses the new global pointer
|
||
value. The ppglobal argument should be set to the address of the
|
||
global pointer set by any of the init functions; it will be
|
||
modified to become a new global pointer. */
|
||
extern int uuconf_init_thread (void **uuconf_ppglobal);
|
||
|
||
/* Get the names of all known systems. This sets sets *ppzsystems to
|
||
point to an array of system names. The list of names is NULL
|
||
terminated. The array is allocated using malloc, as is each
|
||
element of the array, and they may all be passed to free when they
|
||
are no longer needed. If the falias argument is 0, the list will
|
||
not include any aliases; otherwise, it will. */
|
||
extern int uuconf_system_names (void *uuconf_pglobal,
|
||
char ***uuconf_ppzsystems,
|
||
int uuconf_falias);
|
||
|
||
/* Get the information for the system zsystem. This sets the fields
|
||
in *qsys. This will work whether zsystem is the official name of
|
||
the system or merely an alias. */
|
||
extern int uuconf_system_info (void *uuconf_pglobal,
|
||
const char *uuconf_zsystem,
|
||
struct uuconf_system *uuconf_qsys);
|
||
|
||
/* Get information for an unknown (anonymous) system. The
|
||
uuconf_zname field of the returned system information will be NULL.
|
||
If no information is available for unknown systems, this will
|
||
return UUCONF_NOT_FOUND. This does not run the HDB remote.unknown
|
||
shell script. */
|
||
extern int uuconf_system_unknown (void *uuconf_pglobal,
|
||
struct uuconf_system *uuconf_qsys);
|
||
|
||
/* Get information for the local system. Normally the local system
|
||
name should first be looked up using uuconf_system_info. If that
|
||
returns UUCONF_NOT_FOUND, this function may be used to get an
|
||
appropriate set of defaults. The uuconf_zname field of the
|
||
returned system information may be NULL. */
|
||
extern int uuconf_system_local (void *uuconf_pglobal,
|
||
struct uuconf_system *uuconf_qsys);
|
||
|
||
/* Free the memory occupied by system information returned by
|
||
uuconf_system_info, uuconf_system_unknown, uuconf_system_local, or
|
||
any of the configuration file type specific routines described
|
||
below. After this is called, the contents of the structure shall
|
||
not be referred to. */
|
||
extern int uuconf_system_free (void *uuconf_pglobal,
|
||
struct uuconf_system *uuconf_qsys);
|
||
|
||
#ifdef __OPTIMIZE__
|
||
#define uuconf_system_free(qglob, q) \
|
||
(uuconf_free_block ((q)->uuconf_palloc), UUCONF_SUCCESS)
|
||
#endif
|
||
|
||
/* Find a matching port. This will consider each port in turn.
|
||
|
||
If the zname argument is not NULL, the port's uuconf_zname field
|
||
must match it.
|
||
|
||
If the ibaud argument is not zero and the ihighbaud argument is
|
||
zero, the port's baud rate, if defined, must be the same (if the
|
||
port has a range of baud rates, ibaud must be within the range).
|
||
If ibaud and ihighbaud are both not zero, the port's baud rate, if
|
||
defined, must be between ibaud and ihighbaud inclusive (if the port
|
||
has a range of baud rates, the ranges must intersect). If the port
|
||
has no baud rate, either because it is a type of port for which
|
||
baud rate is not defined (e.g. a TCP port) or because the
|
||
uuconf_ibaud field is 0, the ibaud and ihighbaud arguments are
|
||
ignored.
|
||
|
||
If the pifn argument is not NULL, the port is passed to pifn, along
|
||
with the pinfo argument (which is otherwise ignored). If pifn
|
||
returns UUCONF_SUCCESS, the port matches. If pifn returns
|
||
UUCONF_NOT_FOUND, a new port is sought. Otherwise the return value
|
||
of pifn is returned from uuconf_find_port. The pifn function may
|
||
be used to further restrict the port, such as by modem class or
|
||
device name. It may also be used to lock the port, if appropriate;
|
||
in this case, if the lock fails, pifn may return UUCONF_NOT_FOUND
|
||
to force uuconf_find_port to continue searching for a port.
|
||
|
||
If the port matches, the information is set into uuconf_qport, and
|
||
uuconf_find_port returns UUCONF_SUCCESS. */
|
||
extern int uuconf_find_port (void *uuconf_pglobal,
|
||
const char *uuconf_zname,
|
||
long uuconf_ibaud,
|
||
long uuconf_ihighbaud,
|
||
int (*uuconf_pifn) (struct uuconf_port *,
|
||
void *uuconf_pinfo),
|
||
void *uuconf_pinfo,
|
||
struct uuconf_port *uuconf_qport);
|
||
|
||
/* Free the memory occupied by system information returned by
|
||
uuconf_find_port (or any of the configuration file specific
|
||
routines described below). After this is called, the contents of
|
||
the structure shall not be referred to. */
|
||
extern int uuconf_port_free (void *uuconf_pglobal,
|
||
struct uuconf_port *uuconf_qport);
|
||
|
||
#ifdef __OPTIMIZE__
|
||
#define uuconf_port_free(qglob, q) \
|
||
(uuconf_free_block ((q)->uuconf_palloc), UUCONF_SUCCESS)
|
||
#endif
|
||
|
||
/* Get the names of all known dialers. This sets sets *ppzdialers to
|
||
point to an array of dialer names. The list of names is NULL
|
||
terminated. The array is allocated using malloc, as is each
|
||
element of the array, and they may all be passed to free when they
|
||
are no longer needed. */
|
||
extern int uuconf_dialer_names (void *uuconf_pglobal,
|
||
char ***uuconf_ppzdialers);
|
||
|
||
/* Get the information for the dialer zdialer. This sets the fields
|
||
in *qdialer. */
|
||
extern int uuconf_dialer_info (void *uuconf_pglobal,
|
||
const char *uuconf_zdialer,
|
||
struct uuconf_dialer *uuconf_qdialer);
|
||
|
||
/* Free the memory occupied by system information returned by
|
||
uuconf_dialer_info (or any of the configuration file specific
|
||
routines described below). After this is called, the contents of
|
||
the structure shall not be referred to. */
|
||
extern int uuconf_dialer_free (void *uuconf_pglobal,
|
||
struct uuconf_dialer *uuconf_qsys);
|
||
|
||
#ifdef __OPTIMIZE__
|
||
#define uuconf_dialer_free(qglob, q) \
|
||
(uuconf_free_block ((q)->uuconf_palloc), UUCONF_SUCCESS)
|
||
#endif
|
||
|
||
/* Get the local node name. If the node name is not specified
|
||
(because no ``nodename'' command appeared in the config file) this
|
||
will return UUCONF_NOT_FOUND, and some system dependent function
|
||
must be used to determine the node name. Otherwise it will return
|
||
a pointer to a constant string, which should not be freed. */
|
||
extern int uuconf_localname (void *uuconf_pglobal,
|
||
const char **pzname);
|
||
|
||
/* Get the local node name that should be used, given a login name.
|
||
This function will check for any special local name that may be
|
||
associated with the login name zlogin (as set by the ``myname''
|
||
command in a Taylor configuration file, or the MYNAME field in a
|
||
Permissions entry). This will set *pzname to the node name. If no
|
||
node name can be determined, *pzname will be set to NULL and the
|
||
function will return UUCONF_NOT_FOUND; in this case some system
|
||
dependent function must be used to determine the node name. If the
|
||
function returns UUCONF_SUCCESS, *pzname will be point to an
|
||
malloced buffer. */
|
||
extern int uuconf_login_localname (void *uuconf_pglobal,
|
||
const char *uuconf_zlogin,
|
||
char **pzname);
|
||
|
||
/* Get the name of the UUCP spool directory. This will set *pzspool
|
||
to a constant string, which should not be freed. */
|
||
extern int uuconf_spooldir (void *uuconf_pglobal,
|
||
const char **uuconf_pzspool);
|
||
|
||
/* Get the name of the default UUCP public directory. This will set
|
||
*pzpub to a constant string, which should not be freed. Note that
|
||
particular systems may use a different public directory. */
|
||
extern int uuconf_pubdir (void *uuconf_pglobal,
|
||
const char **uuconf_pzpub);
|
||
|
||
/* Get the name of the UUCP lock directory. This will set *pzlock to
|
||
a constant string, which should not be freed. */
|
||
extern int uuconf_lockdir (void *uuconf_pglobal,
|
||
const char **uuconf_pzlock);
|
||
|
||
/* Get the name of the UUCP log file. This will set *pzlog to a
|
||
constant string, which should not be freed. */
|
||
extern int uuconf_logfile (void *uuconf_pglobal,
|
||
const char **uuconf_pzlog);
|
||
|
||
/* Get the name of the UUCP statistics file. This will set *pzstats
|
||
to a constant string, which should not be freed. */
|
||
extern int uuconf_statsfile (void *uuconf_pglobal,
|
||
const char **uuconf_pzstats);
|
||
|
||
/* Get the name of the UUCP debugging file. This will set *pzdebug to
|
||
a constant string, which should not be freed. */
|
||
extern int uuconf_debugfile (void *uuconf_pglobal,
|
||
const char **uuconf_pzdebug);
|
||
|
||
/* Get the default debugging level to use. This basically gets the
|
||
argument of the ``debug'' command from the Taylor UUCP config file.
|
||
It will set *pzdebug to a constant string, which should not be
|
||
freed. */
|
||
extern int uuconf_debuglevel (void *uuconf_pglobal,
|
||
const char **uuconf_pzdebug);
|
||
|
||
/* Get the maximum number of simultaneous uuxqt executions. This will
|
||
set *pcmaxuuxqt to the number. Zero indicates no maximum. */
|
||
extern int uuconf_maxuuxqts (void *uuconf_pglobal,
|
||
int *uuconf_pcmaxuuxqt);
|
||
|
||
/* Check a login name and password. This checks the Taylor UUCP
|
||
password file (not /etc/passwd). It will work even if
|
||
uuconf_taylor_init was not called. If the login name exists and
|
||
the password is correct, this returns UUCONF_SUCCESS. If the login
|
||
does not exist, or the password is wrong, this returns
|
||
UUCONF_NOT_FOUND. Other errors are also possible. */
|
||
extern int uuconf_callin (void *uuconf_pglobal,
|
||
const char *uuconf_zlogin,
|
||
const char *uuconf_zpassword);
|
||
|
||
/* Get the callout login name and password for a system. This will
|
||
set both *pzlog and *pzpass to a string allocated by malloc, or to
|
||
NULL if the value is not found. If neither value is found, the
|
||
function will return UUCONF_NOT_FOUND. */
|
||
extern int uuconf_callout (void *uuconf_pglobal,
|
||
const struct uuconf_system *uuconf_qsys,
|
||
char **uuconf_pzlog,
|
||
char **uuconf_pzpass);
|
||
|
||
/* See if a login name is permitted for a system. This will return
|
||
UUCONF_SUCCESS if it is permitted or UUCONF_NOT_FOUND if it is
|
||
invalid. This simply calls uuconf_taylor_validate or returns
|
||
UUCONF_SUCCESS, depending on the value of HAVE_TAYLOR_CONFIG. */
|
||
extern int uuconf_validate (void *uuconf_pglobal,
|
||
const struct uuconf_system *uuconf_qsys,
|
||
const char *uuconf_zlogin);
|
||
|
||
/* Get the name of the HDB remote.unknown shell script, if using
|
||
HAVE_HDB_CONFIG. This does not actually run the shell script. If
|
||
the function returns UUCONF_SUCCESS, the name will be in *pzname,
|
||
which will point to an malloced buffer. If it returns
|
||
UUCONF_NOT_FOUND, then there is no script to run. */
|
||
extern int uuconf_remote_unknown (void *uuconf_pglobal,
|
||
char **pzname);
|
||
|
||
/* Translate a dial code. This sets *pznum to an malloced string.
|
||
This will look up the entire zdial string in the dialcode file, so
|
||
for normal use the alphabetic prefix should be separated. */
|
||
extern int uuconf_dialcode (void *uuconf_pglobal,
|
||
const char *uuconf_zdial,
|
||
char **uuconf_pznum);
|
||
|
||
/* Compare two grades, returning < 0 if b1 should be executed before
|
||
b2, == 0 if they are the same, or > 0 if b1 should be executed
|
||
after b2. This can not fail, and does not return a standard uuconf
|
||
error code; it is normally called via the macro UUCONF_GRADE_CMP,
|
||
defined above. */
|
||
extern int uuconf_grade_cmp (int uuconf_b1, int uuconf_b2);
|
||
|
||
#else /* ! UUCONF_ANSI_C */
|
||
|
||
extern int uuconf_init ();
|
||
extern int uuconf_init_thread ();
|
||
extern int uuconf_system_names ();
|
||
extern int uuconf_system_info ();
|
||
extern int uuconf_system_unknown ();
|
||
extern int uuconf_system_local ();
|
||
extern int uuconf_system_free ();
|
||
extern int uuconf_find_port ();
|
||
extern int uuconf_port_free ();
|
||
extern int uuconf_dialer_names ();
|
||
extern int uuconf_dialer_info ();
|
||
extern int uuconf_dialer_free ();
|
||
extern int uuconf_localname ();
|
||
extern int uuconf_login_localname ();
|
||
extern int uuconf_spooldir ();
|
||
extern int uuconf_lockdir ();
|
||
extern int uuconf_pubdir ();
|
||
extern int uuconf_logfile ();
|
||
extern int uuconf_statsfile ();
|
||
extern int uuconf_debugfile ();
|
||
extern int uuconf_debuglevel ();
|
||
extern int uuconf_maxuuxqts ();
|
||
extern int uuconf_callin ();
|
||
extern int uuconf_callout ();
|
||
extern int uuconf_remote_unknown ();
|
||
extern int uuconf_validate ();
|
||
extern int uuconf_grade_cmp ();
|
||
|
||
#ifdef __OPTIMIZE__
|
||
#define uuconf_system_free(qglob, q) \
|
||
(uuconf_free_block ((q)->uuconf_palloc), UUCONF_SUCCESS)
|
||
#define uuconf_port_free(qglob, q) \
|
||
(uuconf_free_block ((q)->uuconf_palloc), UUCONF_SUCCESS)
|
||
#define uuconf_dialer_free(qglob, q) \
|
||
(uuconf_free_block ((q)->uuconf_palloc), UUCONF_SUCCESS)
|
||
#endif
|
||
|
||
#endif /* ! UUCONF_ANSI_C */
|
||
|
||
#if UUCONF_ANSI_C
|
||
|
||
/* Initialize the Taylor UUCP configuration file reading routines.
|
||
This must be called before calling any of the Taylor UUCP
|
||
configuration file specific routines. The ppglobal argument should
|
||
point to a generic pointer. Moreover, before calling this function
|
||
the pointer either must be set to NULL, or must have been passed to
|
||
one of the other uuconf init routines. The zprogram argument is
|
||
the name of the program for which files should be read. If NULL,
|
||
it is taken as "uucp", which means to read the standard UUCP files.
|
||
The zname argument is the name of the config file. If it is NULL,
|
||
the default config file will be used.
|
||
|
||
Note that if the zname argument is obtained from the user running
|
||
the program, the program should be careful to revoke any special
|
||
privileges it may have (e.g. on Unix call setuid (getuid ()) and
|
||
setgid (getgid ())). Otherwise various sorts of spoofing become
|
||
possible. */
|
||
extern int uuconf_taylor_init (void **uuconf_pglobal,
|
||
const char *uuconf_zprogram,
|
||
const char *uuconf_zname);
|
||
|
||
/* Get the names of all systems listed in the Taylor UUCP
|
||
configuration files. This sets *ppzsystems to point to an array of
|
||
system names. The list of names is NULL terminated. The array is
|
||
allocated using malloc, as is each element of the array. If the
|
||
falias argument is 0, the list will not include any aliases;
|
||
otherwise, it will. */
|
||
extern int uuconf_taylor_system_names (void *uuconf_pglobal,
|
||
char ***uuconf_ppzsystems,
|
||
int uuconf_falias);
|
||
|
||
/* Get the information for system zsystem from the Taylor UUCP
|
||
configuration files. This will set *qsys. */
|
||
extern int uuconf_taylor_system_info (void *uuconf_pglobal,
|
||
const char *uuconf_zsystem,
|
||
struct uuconf_system *uuconf_qsys);
|
||
|
||
/* Get information for an unknown (anonymous) system. This returns
|
||
the values set by the ``unknown'' command in the main configuration
|
||
file. If the ``unknown'' command was not used, this will return
|
||
UUCONF_NOT_FOUND. */
|
||
extern int uuconf_taylor_system_unknown (void *uuconf_pglobal,
|
||
struct uuconf_system *uuconf_qsys);
|
||
|
||
/* Find a port from the Taylor UUCP configuration files. The
|
||
arguments and return values are identical to those of
|
||
uuconf_find_port. */
|
||
extern int uuconf_taylor_find_port (void *uuconf_pglobal,
|
||
const char *uuconf_zname,
|
||
long uuconf_ibaud,
|
||
long uuconf_ihighbaud,
|
||
int (*uuconf_pifn) (struct uuconf_port *,
|
||
void *uuconf_pinfo),
|
||
void *uuconf_pinfo,
|
||
struct uuconf_port *uuconf_qport);
|
||
|
||
/* Get the names of all dialers listed in the Taylor UUCP
|
||
configuration files. This sets *ppzdialers to point to an array of
|
||
dialer names. The list of names is NULL terminated. The array is
|
||
allocated using malloc, as is each element of the array. */
|
||
extern int uuconf_taylor_dialer_names (void *uuconf_pglobal,
|
||
char ***uuconf_ppzdialers);
|
||
|
||
/* Get the information for the dialer zdialer from the Taylor UUCP
|
||
configuration files. This sets the fields in *qdialer. */
|
||
extern int uuconf_taylor_dialer_info (void *uuconf_pglobal,
|
||
const char *uuconf_zdialer,
|
||
struct uuconf_dialer *uuconf_qdialer);
|
||
|
||
/* Get the local node name that should be used, given a login name,
|
||
considering only the ``myname'' command in the Taylor UUCP
|
||
configuration files. If the function returns UUCONF_SUCCESS,
|
||
*pzname will point to an malloced buffer. */
|
||
extern int uuconf_taylor_login_localname (void *uuconf_pglobal,
|
||
const char *uuconf_zlogin,
|
||
char **pzname);
|
||
|
||
/* Get the callout login name and password for a system from the
|
||
Taylor UUCP configuration files. This will set both *pzlog and
|
||
*pzpass to a string allocated by malloc, or to NULL if the value is
|
||
not found. If neither value is found, the function will return
|
||
UUCONF_NOT_FOUND. */
|
||
extern int uuconf_taylor_callout (void *uuconf_pglobal,
|
||
const struct uuconf_system *uuconf_qsys,
|
||
char **uuconf_pzlog,
|
||
char **uuconf_pzpass);
|
||
|
||
/* See if a login name is permitted for a system. This will return
|
||
UUCONF_SUCCESS if it is permitted or UUCONF_NOT_FOUND if it is
|
||
invalid. This checks whether the login name appears in a
|
||
called-login command with a list of system which does not include
|
||
the system qsys. */
|
||
extern int uuconf_taylor_validate (void *uuconf_pglobal,
|
||
const struct uuconf_system *uuconf_qsys,
|
||
const char *uuconf_zlogin);
|
||
|
||
#else /* ! UUCONF_ANSI_C */
|
||
|
||
extern int uuconf_taylor_init ();
|
||
extern int uuconf_taylor_system_names ();
|
||
extern int uuconf_taylor_system_info ();
|
||
extern int uuconf_taylor_system_unknown ();
|
||
extern int uuconf_taylor_find_port ();
|
||
extern int uuconf_taylor_dialer_names ();
|
||
extern int uuconf_taylor_dialer_info ();
|
||
extern int uuconf_taylor_login_localname ();
|
||
extern int uuconf_taylor_callout ();
|
||
extern int uuconf_taylor_validate ();
|
||
|
||
#endif /* ! UUCONF_ANSI_C */
|
||
|
||
#if UUCONF_ANSI_C
|
||
|
||
/* Initialize the V2 configuration file reading routines. This must
|
||
be called before any of the other V2 routines are called. The
|
||
ppglobal argument should point to a generic pointer. Moreover,
|
||
before calling this function the pointer either must be set to
|
||
NULL, or must have been passed to one of the other uuconf init
|
||
routines. */
|
||
extern int uuconf_v2_init (void **uuconf_ppglobal);
|
||
|
||
/* Get the names of all systems listed in the V2 configuration files.
|
||
This sets *ppzsystems to point to an array of system names. The
|
||
list of names is NULL terminated. The array is allocated using
|
||
malloc, as is each element of the array. If the falias argument is
|
||
0, the list will not include any aliases; otherwise, it will. */
|
||
extern int uuconf_v2_system_names (void *uuconf_pglobal,
|
||
char ***uuconf_ppzsystems,
|
||
int uuconf_falias);
|
||
|
||
/* Get the information for system zsystem from the V2 configuration
|
||
files. This will set *qsys. */
|
||
extern int uuconf_v2_system_info (void *uuconf_pglobal,
|
||
const char *uuconf_zsystem,
|
||
struct uuconf_system *uuconf_qsys);
|
||
|
||
/* Find a port from the V2 configuration files. The arguments and
|
||
return values are identical to those of uuconf_find_port. */
|
||
extern int uuconf_v2_find_port (void *uuconf_pglobal,
|
||
const char *uuconf_zname,
|
||
long uuconf_ibaud,
|
||
long uuconf_ihighbaud,
|
||
int (*uuconf_pifn) (struct uuconf_port *,
|
||
void *uuconf_pinfo),
|
||
void *uuconf_pinfo,
|
||
struct uuconf_port *uuconf_qport);
|
||
|
||
#else /* ! UUCONF_ANSI_C */
|
||
|
||
extern int uuconf_v2_init ();
|
||
extern int uuconf_v2_system_names ();
|
||
extern int uuconf_v2_system_info ();
|
||
extern int uuconf_v2_find_port ();
|
||
|
||
#endif /* ! UUCONF_ANSI_C */
|
||
|
||
#if UUCONF_ANSI_C
|
||
|
||
/* Initialize the HDB configuration file reading routines. This
|
||
should be called before any of the other HDB routines are called.
|
||
The ppglobal argument should point to a generic pointer. Moreover,
|
||
before calling this function the pointer either must be set to
|
||
NULL, or must have been passed to one of the other uuconf init
|
||
routines. The zprogram argument is used to match against a
|
||
"services" string in Sysfiles. A NULL or "uucp" argument is taken
|
||
as "uucico". */
|
||
extern int uuconf_hdb_init (void **uuconf_ppglobal,
|
||
const char *uuconf_zprogram);
|
||
|
||
/* Get the names of all systems listed in the HDB configuration files.
|
||
This sets *ppzsystems to point to an array of system names. The
|
||
list of names is NULL terminated. The array is allocated using
|
||
malloc, as is each element of the array. If the falias argument is
|
||
0, the list will not include any aliases; otherwise, it will (an
|
||
alias is created by using the ALIAS= keyword in the Permissions
|
||
file). */
|
||
extern int uuconf_hdb_system_names (void *uuconf_pglobal,
|
||
char ***uuconf_ppzsystems,
|
||
int uuconf_falias);
|
||
|
||
/* Get the information for system zsystem from the HDB configuration
|
||
files. This will set *qsys. */
|
||
extern int uuconf_hdb_system_info (void *uuconf_pglobal,
|
||
const char *uuconf_zsystem,
|
||
struct uuconf_system *uuconf_qsys);
|
||
|
||
|
||
/* Get information for an unknown (anonymous) system. If no
|
||
information is available for unknown systems, this will return
|
||
UUCONF_NOT_FOUND. This does not run the remote.unknown shell
|
||
script. */
|
||
extern int uuconf_hdb_system_unknown (void *uuconf_pglobal,
|
||
struct uuconf_system *uuconf_qsys);
|
||
|
||
/* Find a port from the HDB configuration files. The arguments and
|
||
return values are identical to those of uuconf_find_port. */
|
||
extern int uuconf_hdb_find_port (void *uuconf_pglobal,
|
||
const char *uuconf_zname,
|
||
long uuconf_ibaud,
|
||
long uuconf_ihighbaud,
|
||
int (*uuconf_pifn) (struct uuconf_port *,
|
||
void *uuconf_pinfo),
|
||
void *uuconf_pinfo,
|
||
struct uuconf_port *uuconf_qport);
|
||
|
||
/* Get the names of all dialers listed in the HDB configuration files.
|
||
This sets *ppzdialers to point to an array of dialer names. The
|
||
list of names is NULL terminated. The array is allocated using
|
||
malloc, as is each element of the array. */
|
||
extern int uuconf_hdb_dialer_names (void *uuconf_pglobal,
|
||
char ***uuconf_ppzdialers);
|
||
|
||
/* Get the information for the dialer zdialer from the HDB
|
||
configuration files. This sets the fields in *qdialer. */
|
||
extern int uuconf_hdb_dialer_info (void *uuconf_pglobal,
|
||
const char *uuconf_zdialer,
|
||
struct uuconf_dialer *uuconf_qdialer);
|
||
|
||
/* Get the local node name that should be used, given a login name,
|
||
considering only the MYNAME field in the HDB Permissions file. If
|
||
the function returns UUCONF_SUCCESS, *pzname will point to an
|
||
malloced buffer. */
|
||
extern int uuconf_hdb_login_localname (void *uuconf_pglobal,
|
||
const char *uuconf_zlogin,
|
||
char **pzname);
|
||
|
||
/* Get the name of the HDB remote.unknown shell script. This does not
|
||
actually run the shell script. If the function returns
|
||
UUCONF_SUCCESS, the name will be in *pzname, which will point to an
|
||
malloced buffer. */
|
||
extern int uuconf_hdb_remote_unknown (void *uuconf_pglobal,
|
||
char **pzname);
|
||
|
||
#else /* ! UUCONF_ANSI_C */
|
||
|
||
extern int uuconf_hdb_init ();
|
||
extern int uuconf_hdb_system_names ();
|
||
extern int uuconf_hdb_system_info ();
|
||
extern int uuconf_hdb_system_unknown ();
|
||
extern int uuconf_hdb_find_port ();
|
||
extern int uuconf_hdb_dialer_names ();
|
||
extern int uuconf_hdb_dialer_info ();
|
||
extern int uuconf_hdb_localname ();
|
||
extern int uuconf_hdb_remote_unknown ();
|
||
|
||
#endif /* ! UUCONF_ANSI_C */
|
||
|
||
#if UUCONF_ANSI_C
|
||
|
||
/* This function will set an appropriate error message into the buffer
|
||
zbuf, given a uuconf error code. The buffer will always be null
|
||
terminated, and will never be accessed beyond the length cbuf.
|
||
This function will return the number of characters needed for the
|
||
complete message, including the null byte. If this is less than
|
||
the cbytes argument, the buffer holds a truncated string. */
|
||
extern int uuconf_error_string (void *uuconf_pglobal, int ierror,
|
||
char *zbuf, UUCONF_SIZE_T cbuf);
|
||
|
||
/* If UUCONF_ERROR_ERRNO is set in a return value, this function may
|
||
be used to retrieve the errno value. This will be the value of
|
||
errno as set by the system function which failed. However, some
|
||
system functions, notably some stdio routines, may not set errno,
|
||
in which case the value will be meaningless. This function does
|
||
not return a uuconf error code, and it cannot fail. */
|
||
extern int uuconf_error_errno (void *uuconf_pglobal);
|
||
|
||
/* If UUCONF_ERROR_FILENAME is set in a return value, this function
|
||
may be used to retrieve the file name. This function does not
|
||
return a uuconf error code, and it cannot fail. The string that it
|
||
returns a pointer to is not guaranteed to remain allocated across
|
||
the next call to a uuconf function (other than one of the three
|
||
error retrieving functions). */
|
||
extern const char *uuconf_error_filename (void *uuconf_pglobal);
|
||
|
||
/* If UUCONF_ERROR_LINENO is set in a return value, this function may
|
||
be used to retrieve the line number. This function does not return
|
||
a uuconf error code, and it cannot fail. */
|
||
extern int uuconf_error_lineno (void *uuconf_pglobal);
|
||
|
||
#else /* ! UUCONF_ANSI_C */
|
||
|
||
extern int uuconf_error_string ();
|
||
extern int uuconf_error_errno ();
|
||
extern UUCONF_CONST char *uuconf_error_filename ();
|
||
extern int uuconf_error_lineno ();
|
||
|
||
#endif /* ! UUCONF_ANSI_C */
|
||
|
||
/* The uuconf package also provides a few functions which can accept
|
||
commands and parcel them out according to a table. These are
|
||
publically visible, partially in the hopes that they will be
|
||
useful, but mostly because the rest of the Taylor UUCP package uses
|
||
them. */
|
||
|
||
/* The types of entries allowed in a command table (struct
|
||
uuconf_cmdtab). Each type defines how a particular command is
|
||
interpreted. Each type will either assign a value to a variable or
|
||
call a function. In all cases, a line of input is parsed into
|
||
separate fields, separated by whitespace; comments beginning with
|
||
'#' are discarded, except that a '#' preceeded by a backslash is
|
||
retained. The first field is taken as the command to execute, and
|
||
the remaining fields are its arguments. */
|
||
|
||
/* A boolean value. Used for a command which accepts a single
|
||
argument, which must begin with 'y', 'Y', 't', or 'T' for true (1)
|
||
or 'n', 'N', 'f', or 'F' for false (0). The corresponding variable
|
||
must be an int. */
|
||
#define UUCONF_CMDTABTYPE_BOOLEAN (0x12)
|
||
|
||
/* An integer value. Used for a command which accepts a single
|
||
argument, which must be an integer. The corresponding variable
|
||
must be an int. */
|
||
#define UUCONF_CMDTABTYPE_INT (0x22)
|
||
|
||
/* A long value. Used for a command which accepts a single value,
|
||
which must be an integer. The corresponding variable must be a
|
||
long. */
|
||
#define UUCONF_CMDTABTYPE_LONG (0x32)
|
||
|
||
/* A string value. Used for a command which accepts a string
|
||
argument. If there is no argument, the variable will be set to
|
||
point to a zero byte. Otherwise the variable will be set to point
|
||
to the string. The corresponding variable must be a char *. The
|
||
memory pointed to by the variable after it is set must not be
|
||
modified. */
|
||
#define UUCONF_CMDTABTYPE_STRING (0x40)
|
||
|
||
/* A full string value. Used for a command which accepts a series of
|
||
string arguments separated by whitespace. The corresponding
|
||
variable must be a char **. It will be set to an NULL terminated
|
||
array of the arguments. The memory occupied by the array itself,
|
||
and by the strings within it, must not be modified. */
|
||
#define UUCONF_CMDTABTYPE_FULLSTRING (0x50)
|
||
|
||
/* A function. If this command is encountered, the command and its
|
||
arguments are passed to the corresponding function. They are
|
||
passed as an array of strings, in which the first string is the
|
||
command itself, along with a count of strings. This value may be
|
||
or'red with a specific number of required arguments;
|
||
UUCONF_CMDTABTYPE_FN | 1 accepts no additional arguments besides
|
||
the command itself, UUCONF_CMDTABTYPE_FN | 2 accepts 1 argument,
|
||
etc. UUCONF_CMDTABTYPE_FN | 0, accepts any number of additional
|
||
arguments. */
|
||
#define UUCONF_CMDTABTYPE_FN (0x60)
|
||
|
||
/* A prefix function. The string in the table is a prefix; if a
|
||
command is encountered with the same prefix, the corresponding
|
||
function will be called as for UUCONF_CMDTABTYPE_FN. The number of
|
||
arguments may be or'red in as with UUCONF_CMDTABTYPE_FN. */
|
||
#define UUCONF_CMDTABTYPE_PREFIX (0x70)
|
||
|
||
/* This macro will return the particular type of a CMDTABTYPE. */
|
||
#define UUCONF_TTYPE_CMDTABTYPE(i) ((i) & 0x70)
|
||
|
||
/* This macro will return the required number of arguments of a
|
||
CMDTABTYPE. If it is zero, there is no restriction. */
|
||
#define UUCONF_CARGS_CMDTABTYPE(i) ((i) & 0x0f)
|
||
|
||
/* When a function is called via UUCONF_CMDTABTYPE_FN or
|
||
UUCONF_CMDTABTYPE_PREFIX, it may return any uuconf error code (see
|
||
above). However, it will normally return one of the following:
|
||
|
||
UUCONF_CMDTABRET_CONTINUE: Take no special action. In particular,
|
||
the arguments passed to the function may be overwritten or freed.
|
||
|
||
UUCONF_CMDTABRET_KEEP: The memory occupied by the arguments passed
|
||
to the function must be preserved. Continue processing commands.
|
||
|
||
UUCONF_CMDTABRET_EXIT: If reading commands from a file, stop
|
||
processing. The arguments passed to the function may be
|
||
overwritten or freed.
|
||
|
||
UUCONF_CMDTABRET_KEEP_AND_EXIT: Stop processing any file. The
|
||
memory occupied by the arguments passed to the function must be
|
||
preserved.
|
||
|
||
These values are interpreted by uuconf_cmd_file. The
|
||
uuconf_cmd_line and uuconf_cmd_args functions may return
|
||
UUCONF_CMDTABRET_KEEP. It they get an error, they will return an
|
||
error code with UUCONF_CMDTABRET_EXIT set. Also, of course, they
|
||
may return any value that is returned by one of the user functions
|
||
in the uuconf_cmdtab table. */
|
||
|
||
/* UUCONF_CMDTABRET_KEEP and UUCONF_CMDTABRET_EXIT are defined above,
|
||
with the error codes. */
|
||
|
||
#define UUCONF_CMDTABRET_CONTINUE UUCONF_SUCCESS
|
||
#define UUCONF_CMDTABRET_KEEP_AND_EXIT \
|
||
(UUCONF_CMDTABRET_KEEP | UUCONF_CMDTABRET_EXIT)
|
||
|
||
/* When a function is called via CMDTABTYPE_FN or CMDTABTYPE_PREFIX,
|
||
it is passed five arguments. This is the type of a pointer to such
|
||
a function. The uuconf global information structure is passed in
|
||
for convenience in calling another uuconf function. The arguments
|
||
to the command are passed in (the command itself is the first
|
||
argument) along with a count and the value of the pvar field from
|
||
the uuconf_cmdtab structure in which the function pointer was
|
||
found. The pinfo argument to the function is taken from the
|
||
argument to uuconf_cmd_*. */
|
||
|
||
#if UUCONF_ANSI_C
|
||
typedef int (*uuconf_cmdtabfn) (void *uuconf_pglobal,
|
||
int uuconf_argc,
|
||
char **uuconf_argv,
|
||
void *uuconf_pvar,
|
||
void *uuconf_pinfo);
|
||
#else
|
||
typedef int (*uuconf_cmdtabfn) ();
|
||
#endif
|
||
|
||
/* A table of commands is an array of the following structures. The
|
||
final element of the table should have uuconf_zcmd == NULL. */
|
||
|
||
struct uuconf_cmdtab
|
||
{
|
||
/* Command name. */
|
||
UUCONF_CONST char *uuconf_zcmd;
|
||
/* Command type (one of CMDTABTYPE_*). */
|
||
int uuconf_itype;
|
||
/* If not CMDTABTYPE_FN or CMDTABTYPE_PREFIX, the address of the
|
||
associated variable. Otherwise, a pointer value to pass to the
|
||
function pifn. */
|
||
UUCONF_POINTER uuconf_pvar;
|
||
/* The function to call if CMDTABTYPE_FN or CMDTABTYPE_PREFIX. */
|
||
uuconf_cmdtabfn uuconf_pifn;
|
||
};
|
||
|
||
/* Bit flags to pass to uuconf_processcmds. */
|
||
|
||
/* If set, case is significant when checking commands. Normally case
|
||
is ignored. */
|
||
#define UUCONF_CMDTABFLAG_CASE (0x1)
|
||
|
||
/* If set, a backslash at the end of a line may be used to include the
|
||
next physical line in the logical line. */
|
||
#define UUCONF_CMDTABFLAG_BACKSLASH (0x2)
|
||
|
||
#if UUCONF_ANSI_C
|
||
|
||
/* Read commands from a file, look them up in a table, and take the
|
||
appropriate action. This continues reading lines from the file
|
||
until EOF, or until a function returns with UUCONF_CMDTABRET_EXIT
|
||
set, or until an error occurs. The qtab argument must point to a
|
||
table of struct uuconf_cmdtab; the last element in the table should
|
||
have uuconf_zcmd == NULL. When a UUCONF_CMDTABTYPE_FN or
|
||
UUCONF_CMDTABTYPE_PREFIX command is found, the pinfo argument will
|
||
be passed to the called function. If an a command is found that is
|
||
not in the table, then if pfiunknownfn is NULL the unknown command
|
||
is ignored; otherwise it is passed to pfiunknownfn, which should
|
||
return a uuconf return code which is handled as for any other
|
||
function (the pvar argument to pfiunknownfn will always be NULL).
|
||
The iflags argument is any combination of the above
|
||
UUCONF_CMDTABFLAG bits. The pblock argument may also be a memory
|
||
block, as returned by uuconf_malloc_block (described below), in
|
||
which case all memory preserved because of UUCONF_CMDTABRET_KEEP
|
||
will be added to the block so that it may be freed later; it may
|
||
also be NULL, in which case any such memory is permanently lost.
|
||
|
||
This function initially sets the internal line number to 0, and
|
||
then increments it as each line is read. It is permitted for any
|
||
called function to use the uuconf_lineno function to obtain it. If
|
||
this function is called when not at the start of a file, the value
|
||
returned by uuconf_lineno (which is, in any case, only valid if an
|
||
error code with UUCONF_ERROR_LINENO set is returned) must be
|
||
adjusted by the caller.
|
||
|
||
This returns a normal uuconf return value, as described above. */
|
||
extern int uuconf_cmd_file (void *uuconf_pglobal,
|
||
FILE *uuconf_e,
|
||
const struct uuconf_cmdtab *uuconf_qtab,
|
||
void *uuconf_pinfo,
|
||
uuconf_cmdtabfn uuconf_pfiunknownfn,
|
||
int uuconf_iflags,
|
||
void *pblock);
|
||
|
||
/* This utility function is just like uuconf_cmd_file, except that it
|
||
only operates on a single string. If a function is called via
|
||
qtab, its return value will be the return value of this function.
|
||
UUCONF_CMDTABFLAG_BACKSLASH is ignored in iflags. The string z is
|
||
modified in place. The return value may include the
|
||
UUCONF_CMDTABRET_KEEP and, on error, the UUCONF_CMDTABRET_EXIT
|
||
bits, which should be honored by the calling code. */
|
||
extern int uuconf_cmd_line (void *uuconf_pglobal,
|
||
char *uuconf_z,
|
||
const struct uuconf_cmdtab *uuconf_qtab,
|
||
void *uuconf_pinfo,
|
||
uuconf_cmdtabfn uuconf_pfiunknownfn,
|
||
int uuconf_iflags,
|
||
void *pblock);
|
||
|
||
/* This utility function is just like uuconf_cmd_line, except it is
|
||
given a list of already parsed arguments. */
|
||
extern int uuconf_cmd_args (void *uuconf_pglobal,
|
||
int uuconf_cargs,
|
||
char **uuconf_pzargs,
|
||
const struct uuconf_cmdtab *uuconf_qtab,
|
||
void *uuconf_pinfo,
|
||
uuconf_cmdtabfn uuconf_pfiunknownfn,
|
||
int uuconf_iflags,
|
||
void *pblock);
|
||
|
||
#else /* ! UUCONF_ANSI_C */
|
||
|
||
extern int uuconf_cmd_file ();
|
||
extern int uuconf_cmd_line ();
|
||
extern int uuconf_cmd_args ();
|
||
|
||
#endif /* ! UUCONF_ANSI_C */
|
||
|
||
#if UUCONF_ANSI_C
|
||
|
||
/* The uuconf_cmd_file function may allocate memory permanently, as
|
||
for setting a UUCONF_CMDTABTYPE_STRING value, in ways which are
|
||
difficult to free up. A memory block may be used to record all
|
||
allocated memory, so that it can all be freed up at once at some
|
||
later time. These functions do not take a uuconf global pointer,
|
||
and are independent of the rest of the uuconf library. */
|
||
|
||
/* Allocate a block of memory. If this returns NULL, then malloc
|
||
returned NULL, and errno is whatever malloc set it to. */
|
||
extern void *uuconf_malloc_block (void);
|
||
|
||
/* Allocate memory within a memory block. If this returns NULL, then
|
||
malloc returned NULL, and errno is whatever malloc set it to. */
|
||
extern void *uuconf_malloc (void *uuconf_pblock,
|
||
UUCONF_SIZE_T uuconf_cbytes);
|
||
|
||
/* Add a block returned by the generic malloc routine to a memory
|
||
block. This returns zero on success, non-zero on failure. If this
|
||
fails (returns non-zero), then malloc returned NULL, and errno is
|
||
whatever malloc set it to. */
|
||
extern int uuconf_add_block (void *uuconf_pblock, void *uuconf_padd);
|
||
|
||
/* Free a value returned by uuconf_malloc from a memory block. In the
|
||
current implementation, this will normally not do anything, but it
|
||
doesn't hurt. No errors can occur. */
|
||
extern void uuconf_free (void *uuconf_pblock, void *uuconf_pfree);
|
||
|
||
/* Free an entire memory block, including all values returned by
|
||
uuconf_malloc from it and all values added to it with
|
||
uuconf_add_block. No errors can occur. */
|
||
extern void uuconf_free_block (void *uuconf_pblock);
|
||
|
||
#else /* ! UUCONF_ANSI_C */
|
||
|
||
extern UUCONF_POINTER uuconf_malloc_block ();
|
||
extern UUCONF_POINTER uuconf_malloc ();
|
||
extern int uuconf_add_block ();
|
||
extern /* void */ uuconf_free ();
|
||
extern /* void */ uuconf_free_block ();
|
||
|
||
#endif /* ! UUCONF_ANSI_C */
|
||
|
||
#endif /* ! defined (UUCONF_H) */
|