diff options
Diffstat (limited to 'gnu/libexec/uucp/common_sources')
-rw-r--r-- | gnu/libexec/uucp/common_sources/chat.c | 1466 | ||||
-rw-r--r-- | gnu/libexec/uucp/common_sources/config.h | 481 | ||||
-rw-r--r-- | gnu/libexec/uucp/common_sources/conn.c | 587 | ||||
-rw-r--r-- | gnu/libexec/uucp/common_sources/conn.h | 319 | ||||
-rw-r--r-- | gnu/libexec/uucp/common_sources/copy.c | 236 | ||||
-rw-r--r-- | gnu/libexec/uucp/common_sources/cu.h | 80 | ||||
-rw-r--r-- | gnu/libexec/uucp/common_sources/getopt.h | 133 | ||||
-rw-r--r-- | gnu/libexec/uucp/common_sources/log.c | 775 | ||||
-rw-r--r-- | gnu/libexec/uucp/common_sources/policy.h | 703 | ||||
-rw-r--r-- | gnu/libexec/uucp/common_sources/prot.c | 241 | ||||
-rw-r--r-- | gnu/libexec/uucp/common_sources/prot.h | 270 | ||||
-rw-r--r-- | gnu/libexec/uucp/common_sources/sysdep.h | 563 | ||||
-rw-r--r-- | gnu/libexec/uucp/common_sources/system.h | 994 | ||||
-rw-r--r-- | gnu/libexec/uucp/common_sources/uuconf.h | 1561 | ||||
-rw-r--r-- | gnu/libexec/uucp/common_sources/uucp.h | 398 | ||||
-rw-r--r-- | gnu/libexec/uucp/common_sources/uudefs.h | 453 |
16 files changed, 0 insertions, 9260 deletions
diff --git a/gnu/libexec/uucp/common_sources/chat.c b/gnu/libexec/uucp/common_sources/chat.c deleted file mode 100644 index 589cc7d..0000000 --- a/gnu/libexec/uucp/common_sources/chat.c +++ /dev/null @@ -1,1466 +0,0 @@ -/* chat.c - Chat routine for the UUCP package. - - Copyright (C) 1991, 1992, 1993, 1995 Ian Lance Taylor - - This file is part of the Taylor UUCP package. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - This program 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 - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - The author of the program may be contacted at ian@airs.com or - c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144. - */ - -#include "uucp.h" - -#if USE_RCS_ID -const char chat_rcsid[] = "$FreeBSD$"; -#endif - -#include <ctype.h> -#include <errno.h> - -#include "uudefs.h" -#include "uuconf.h" -#include "conn.h" -#include "prot.h" -#include "system.h" - -/* Local functions. */ - -static int icexpect P((struct sconnection *qconn, int cstrings, - char **azstrings, size_t *aclens, - int ctimeout, boolean fstrip)); -static boolean fcsend P((struct sconnection *qconn, pointer puuconf, - const char *zsend, - const struct uuconf_system *qsys, - const struct uuconf_dialer *qdial, - const char *zphone, - boolean ftranslate, boolean fstrip)); -static boolean fcecho_send_strip P((struct sconnection *qconn, - const char *z, size_t clen)); -static boolean fcecho_send_nostrip P((struct sconnection *qconn, - const char *z, size_t clen)); -static boolean fcecho_send P((struct sconnection *qconn, const char *z, - size_t clen, boolean fstrip)); -static boolean fcphone P((struct sconnection *qconn, - pointer puuconf, - const struct uuconf_dialer *qdial, - const char *zphone, - boolean (*pfwrite) P((struct sconnection *qc, - const char *zwrite, - size_t cwrite)), - boolean ftranslate, boolean *pfquote)); -static boolean fctranslate P((pointer puuconf, const char *zphone, - const char **pzprefix, - const char **pzsuffix)); -static boolean fcprogram P((struct sconnection *qconn, pointer puuconf, - char **pzprogram, - const struct uuconf_system *qsys, - const struct uuconf_dialer *qdial, - const char *zphone, const char *zport, - long ibaud)); - -/* Run a chat script with the other system. The chat script is a - series of expect send pairs. We wait for the expect string to show - up, and then we send the send string. The chat string for a system - holds the expect and send strings separated by a single space. */ - -boolean -fchat (qconn, puuconf, qchat, qsys, qdial, zphone, ftranslate, zport, ibaud) - struct sconnection *qconn; - pointer puuconf; - const struct uuconf_chat *qchat; - const struct uuconf_system *qsys; - const struct uuconf_dialer *qdial; - const char *zphone; - boolean ftranslate; - const char *zport; - long ibaud; -{ - int cstrings; - char **azstrings; - size_t *aclens; - char **pzchat; - char *zbuf; - size_t cbuflen; - boolean fret; - int i; - - /* First run the program, if any. */ - if (qchat->uuconf_pzprogram != NULL) - { - if (! fcprogram (qconn, puuconf, qchat->uuconf_pzprogram, qsys, qdial, - zphone, zport, ibaud)) - return FALSE; - } - - /* If there's no chat script, we're done. */ - if (qchat->uuconf_pzchat == NULL) - return TRUE; - - if (qchat->uuconf_pzfail == NULL) - { - cstrings = 1; - azstrings = (char **) xmalloc (sizeof (char *)); - aclens = (size_t *) xmalloc (sizeof (size_t)); - } - else - { - char **pz; - - /* We leave string number 0 for the chat script. */ - cstrings = 1; - for (pz = qchat->uuconf_pzfail; *pz != NULL; pz++) - ++cstrings; - - azstrings = (char **) xmalloc (cstrings * sizeof (char *)); - aclens = (size_t *) xmalloc (cstrings * sizeof (size_t)); - - /* Get the strings into the array, and handle all the escape - characters. */ - for (cstrings = 1, pz = qchat->uuconf_pzfail; - *pz != NULL; - cstrings++, pz++) - { - azstrings[cstrings] = zbufcpy (*pz); - aclens[cstrings] = cescape (azstrings[cstrings]); - } - } - - cbuflen = 0; - zbuf = NULL; - fret = TRUE; - - pzchat = qchat->uuconf_pzchat; - - while (*pzchat != NULL) - { - size_t clen; - - /* Loop over subexpects and subsends. */ - while (TRUE) - { - char *ztimeout; - int ctimeout; - - /* Copy the expect string into the buffer so that we can - modify it in cescape. */ - clen = strlen (*pzchat); - if (clen >= cbuflen) - { - ubuffree (zbuf); - zbuf = zbufalc (clen + 1); - cbuflen = clen; - } - memcpy (zbuf, *pzchat, clen + 1); - - azstrings[0] = zbuf; - if (azstrings[0][0] == '-') - ++azstrings[0]; - - /* \Wnum at the end of the string is a timeout. */ - ctimeout = qchat->uuconf_ctimeout; - ztimeout = strrchr (azstrings[0], '\\'); - if (ztimeout != NULL && ztimeout[1] == 'W') - { - char *zend; - int cval; - - cval = (int) strtol (ztimeout + 2, &zend, 10); - if (zend != ztimeout + 2 && *zend == '\0') - { - ctimeout = cval; - *ztimeout = '\0'; - } - } - - aclens[0] = cescape (azstrings[0]); - - if (aclens[0] == 0 - || (aclens[0] == 2 - && strcmp (azstrings[0], "\"\"") == 0)) - { - /* There is no subexpect sequence. If there is a - subsend sequence we move on to it. Otherwise we let - this expect succeed. This is somewhat inconsistent, - but it seems to be the traditional approach. */ - if (pzchat[1] == NULL || pzchat[1][0] != '-') - break; - } - else - { - int istr; - - istr = icexpect (qconn, cstrings, azstrings, aclens, - ctimeout, qchat->uuconf_fstrip); - - /* If we found the string, break out of the - subexpect/subsend loop. */ - if (istr == 0) - break; - - /* If we got an error, return FALSE. */ - if (istr < -1) - { - fret = FALSE; - break; - } - - /* If we found a failure string, log it and get out. */ - if (istr > 0) - { - ulog (LOG_ERROR, "Chat script failed: Got \"%s\"", - qchat->uuconf_pzfail[istr - 1]); - fret = FALSE; - break; - } - - /* We timed out; look for a send subsequence. If none, - the chat script has failed. */ - if (pzchat[1] == NULL || pzchat[1][0] != '-') - { - ulog (LOG_ERROR, "Timed out in chat script"); - fret = FALSE; - break; - } - } - - /* Send the send subsequence without the leading '-'. A - \"\" will send nothing. An empty string will send a - carriage return. */ - ++pzchat; - if (! fcsend (qconn, puuconf, *pzchat + 1, qsys, qdial, zphone, - ftranslate, qchat->uuconf_fstrip)) - { - fret = FALSE; - break; - } - - /* If there is no expect subsequence, we are done. */ - if (pzchat[1] == NULL || pzchat[1][0] != '-') - break; - - /* Move on to next expect subsequence. */ - ++pzchat; - } - - if (! fret) - break; - - /* Move on to the send string. If there is none, we have - succeeded. */ - do - { - ++pzchat; - } - while (*pzchat != NULL && (*pzchat)[0] == '-'); - - if (*pzchat == NULL) - break; - - if (**pzchat != '\0') - { - if (! fcsend (qconn, puuconf, *pzchat, qsys, qdial, zphone, - ftranslate, qchat->uuconf_fstrip)) - { - fret = FALSE; - break; - } - } - - ++pzchat; - } - - ubuffree (zbuf); - for (i = 1; i < cstrings; i++) - ubuffree (azstrings[i]); - xfree ((pointer) azstrings); - xfree ((pointer) aclens); - - return fret; -} - -/* Read characters and wait for one of a set of memory strings to come - in. This returns the index into the array of the string that - arrives, or -1 on timeout, or -2 on error. */ - -static int -icexpect (qconn, cstrings, azstrings, aclens, ctimeout, fstrip) - struct sconnection *qconn; - int cstrings; - char **azstrings; - size_t *aclens; - int ctimeout; - boolean fstrip; -{ - int i; - size_t cmax; - char *zhave; - size_t chave; - long iendtime; -#if DEBUG > 1 - int cchars; - int iolddebug; -#endif - - cmax = aclens[0]; - for (i = 1; i < cstrings; i++) - if (cmax < aclens[i]) - cmax = aclens[i]; - - zhave = zbufalc (cmax); - chave = 0; - - iendtime = ixsysdep_time ((long *) NULL) + ctimeout; - -#if DEBUG > 1 - cchars = 0; - iolddebug = iDebug; - if (FDEBUGGING (DEBUG_CHAT)) - { - udebug_buffer ("icexpect: Looking for", azstrings[0], - aclens[0]); - ulog (LOG_DEBUG_START, "icexpect: Got \""); - iDebug &=~ (DEBUG_INCOMING | DEBUG_PORT); - } -#endif - - while (TRUE) - { - int bchar; - - /* If we have no more time, get out. */ - if (ctimeout <= 0) - { -#if DEBUG > 1 - if (FDEBUGGING (DEBUG_CHAT)) - { - ulog (LOG_DEBUG_END, "\" (timed out)"); - iDebug = iolddebug; - } -#endif - ubuffree (zhave); - return -1; - } - - /* Read one character at a time. We could use a more complex - algorithm to read in larger batches, but it's probably not - worth it. If the buffer is full, shift it left; we already - know that no string matches, and the buffer holds the largest - string, so this can't lose a match. */ - if (chave >= cmax) - { - size_t imove; - - for (imove = 0; imove < cmax - 1; imove++) - zhave[imove] = zhave[imove + 1]; - --chave; - } - - /* The timeout/error return values from breceive_char are the - same as for this function. */ - bchar = breceive_char (qconn, ctimeout, TRUE); - if (bchar < 0) - { -#if DEBUG > 1 - if (FDEBUGGING (DEBUG_CHAT)) - { - /* If there was an error, it will probably be logged in - the middle of our string, but this is only debugging - so it's not a big deal. */ - ulog (LOG_DEBUG_END, "\" (%s)", - bchar == -1 ? "timed out" : "error"); - iDebug = iolddebug; - } -#endif - ubuffree (zhave); - return bchar; - } - - /* Strip the parity bit if desired. */ - if (fstrip) - bchar &= 0x7f; - - zhave[chave] = (char) bchar; - ++chave; - -#if DEBUG > 1 - if (FDEBUGGING (DEBUG_CHAT)) - { - char ab[5]; - - ++cchars; - if (cchars > 60) - { - ulog (LOG_DEBUG_END, "\""); - ulog (LOG_DEBUG_START, "icexpect: Got \""); - cchars = 0; - } - (void) cdebug_char (ab, bchar); - ulog (LOG_DEBUG_CONTINUE, "%s", ab); - } -#endif - - /* See if any of the strings can be found in the buffer. Since - we read one character at a time, the string can only be found - at the end of the buffer. */ - for (i = 0; i < cstrings; i++) - { - if (aclens[i] <= chave - && memcmp (zhave + chave - aclens[i], azstrings[i], - aclens[i]) == 0) - { -#if DEBUG > 1 - if (FDEBUGGING (DEBUG_CHAT)) - { - if (i == 0) - ulog (LOG_DEBUG_END, "\" (found it)"); - else - { - ulog (LOG_DEBUG_END, "\""); - udebug_buffer ("icexpect: Found", azstrings[i], - aclens[i]); - } - iDebug = iolddebug; - } -#endif - ubuffree (zhave); - return i; - } - } - - ctimeout = (int) (iendtime - ixsysdep_time ((long *) NULL)); - } -} - -#if DEBUG > 1 - -/* Debugging function for fcsend. This takes the fquote variable, the - length of the string (0 if this an informational string which can - be printed directly) and the string itself. It returns the new - value for fquote. The fquote variable is TRUE if the debugging - output is in the middle of a quoted string. */ - -static size_t cCsend_chars; -static int iColddebug; - -static boolean fcsend_debug P((boolean, size_t, const char *)); - -static boolean -fcsend_debug (fquote, clen, zbuf) - boolean fquote; - size_t clen; - const char *zbuf; -{ - size_t cwas; - - if (! FDEBUGGING (DEBUG_CHAT)) - return TRUE; - - cwas = cCsend_chars; - if (clen > 0) - cCsend_chars += clen; - else - cCsend_chars += strlen (zbuf); - if (cCsend_chars > 60 && cwas > 10) - { - ulog (LOG_DEBUG_END, "%s", fquote ? "\"" : ""); - fquote = FALSE; - ulog (LOG_DEBUG_START, "fcsend: Writing"); - cCsend_chars = 0; - } - - if (clen == 0) - { - ulog (LOG_DEBUG_CONTINUE, "%s %s", fquote ? "\"" : "", zbuf); - return FALSE; - } - else - { - int i; - - if (! fquote) - ulog (LOG_DEBUG_CONTINUE, " \""); - for (i = 0; i < clen; i++) - { - char ab[5]; - - (void) cdebug_char (ab, zbuf[i]); - ulog (LOG_DEBUG_CONTINUE, "%s", ab); - } - - return TRUE; - } -} - -/* Finish up the debugging information for fcsend. */ - -static void ucsend_debug_end P((boolean, boolean)); - -static void -ucsend_debug_end (fquote, ferr) - boolean fquote; - boolean ferr; -{ - if (! FDEBUGGING (DEBUG_CHAT)) - return; - - if (fquote) - ulog (LOG_DEBUG_CONTINUE, "\""); - - if (ferr) - ulog (LOG_DEBUG_CONTINUE, " (error)"); - - ulog (LOG_DEBUG_END, "%s", ""); - - iDebug = iColddebug; -} - -#else /* DEBUG <= 1 */ - -/* Use macro definitions to make fcsend look neater. */ - -#define fcsend_debug(fquote, clen, zbuf) TRUE - -#define ucsend_debug_end(fquote, ferror) - -#endif /* DEBUG <= 1 */ - -/* Send a string out. This has to parse escape sequences as it goes. - Note that it handles the dialer escape sequences (\e, \E, \D, \T) - although they make no sense for chatting with a system. */ - -static boolean -fcsend (qconn, puuconf, z, qsys, qdial, zphone, ftranslate, fstrip) - struct sconnection *qconn; - pointer puuconf; - const char *z; - const struct uuconf_system *qsys; - const struct uuconf_dialer *qdial; - const char *zphone; - boolean ftranslate; - boolean fstrip; -{ - boolean fnocr; - boolean (*pfwrite) P((struct sconnection *, const char *, size_t)); - char *zcallout_login; - char *zcallout_pass; - boolean fquote; - - if (strcmp (z, "\"\"") == 0) - return TRUE; - - fnocr = FALSE; - pfwrite = fconn_write; - zcallout_login = NULL; - zcallout_pass = NULL; - -#if DEBUG > 1 - if (FDEBUGGING (DEBUG_CHAT)) - { - ulog (LOG_DEBUG_START, "fcsend: Writing"); - fquote = FALSE; - cCsend_chars = 0; - iColddebug = iDebug; - iDebug &=~ (DEBUG_OUTGOING | DEBUG_PORT); - } -#endif - - while (*z != '\0') - { - const char *zlook; - boolean fsend; - char bsend; - - zlook = z + strcspn ((char *) z, "\\BE"); - - if (zlook > z) - { - size_t c; - - c = zlook - z; - fquote = fcsend_debug (fquote, c, z); - if (! (*pfwrite) (qconn, z, c)) - { - ucsend_debug_end (fquote, TRUE); - return FALSE; - } - } - - if (*zlook == '\0') - break; - - z = zlook; - - fsend = FALSE; - switch (*z) - { - case 'B': - if (strncmp (z, "BREAK", 5) == 0) - { - fquote = fcsend_debug (fquote, (size_t) 0, "break"); - if (! fconn_break (qconn)) - { - ucsend_debug_end (fquote, TRUE); - return FALSE; - } - fnocr = TRUE; - z += 5; - } - else - { - fsend = TRUE; - bsend = 'B'; - ++z; - } - break; - case 'E': - if (strncmp (z, "EOT", 3) == 0) - { - fsend = TRUE; - bsend = '\004'; - fnocr = TRUE; - z += 3; - } - else - { - fsend = TRUE; - bsend = 'E'; - ++z; - } - break; - case '\\': - ++z; - switch (*z) - { - case '-': - fsend = TRUE; - bsend = '-'; - break; - case 'b': - fsend = TRUE; - bsend = '\b'; - break; - case 'c': - fnocr = TRUE; - break; - case 'd': - fquote = fcsend_debug (fquote, (size_t) 0, "sleep"); - usysdep_sleep (1); - break; - case 'e': - fquote = fcsend_debug (fquote, (size_t) 0, "echo-check-off"); - pfwrite = fconn_write; - break; - case 'E': - fquote = fcsend_debug (fquote, (size_t) 0, "echo-check-on"); - if (fstrip) - pfwrite = fcecho_send_strip; - else - pfwrite = fcecho_send_nostrip; - break; - case 'K': - fquote = fcsend_debug (fquote, (size_t) 0, "break"); - if (! fconn_break (qconn)) - { - ucsend_debug_end (fquote, TRUE); - return FALSE; - } - break; - case 'n': - fsend = TRUE; - bsend = '\n'; - break; - case 'N': - fsend = TRUE; - bsend = '\0'; - break; - case 'p': - fquote = fcsend_debug (fquote, (size_t) 0, "pause"); - usysdep_pause (); - break; - case 'r': - fsend = TRUE; - bsend = '\r'; - break; - case 's': - fsend = TRUE; - bsend = ' '; - break; - case 't': - fsend = TRUE; - bsend = '\t'; - break; - case '\0': - --z; - /* Fall through. */ - case '\\': - fsend = TRUE; - bsend = '\\'; - break; - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - fsend = TRUE; - bsend = *z - '0'; - if (z[1] >= '0' && z[1] <= '7') - bsend = (char) (8 * bsend + *++z - '0'); - if (z[1] >= '0' && z[1] <= '7') - bsend = (char) (8 * bsend + *++z - '0'); - break; - case 'x': - fsend = TRUE; - bsend = 0; - while (isxdigit (BUCHAR (z[1]))) - { - if (isdigit (BUCHAR (z[1]))) - bsend = (char) (16 * bsend + *++z - '0'); - else if (isupper (BUCHAR (z[1]))) - bsend = (char) (16 * bsend + *++z - 'A' + 10); - else - bsend = (char) (16 * bsend + *++z - 'a' + 10); - } - break; - case 'L': - { - const char *zlog; - char *zcopy; - size_t clen; - - if (qsys == NULL) - { - ucsend_debug_end (fquote, TRUE); - ulog (LOG_ERROR, "Illegal use of \\L"); - return FALSE; - } - zlog = qsys->uuconf_zcall_login; - if (zlog == NULL) - { - ucsend_debug_end (fquote, TRUE); - ulog (LOG_ERROR, "No login defined"); - return FALSE; - } - if (zlog[0] == '*' && zlog[1] == '\0') - { - if (zcallout_login == NULL) - { - int iuuconf; - - iuuconf = uuconf_callout (puuconf, qsys, - &zcallout_login, - &zcallout_pass); - if (iuuconf == UUCONF_NOT_FOUND - || zcallout_login == NULL) - { - ucsend_debug_end (fquote, TRUE); - ulog (LOG_ERROR, "No login defined"); - return FALSE; - } - else if (iuuconf != UUCONF_SUCCESS) - { - ucsend_debug_end (fquote, TRUE); - ulog_uuconf (LOG_ERROR, puuconf, iuuconf); - return FALSE; - } - } - zlog = zcallout_login; - } - zcopy = zbufcpy (zlog); - clen = cescape (zcopy); - fquote = fcsend_debug (fquote, (size_t) 0, "login"); - fquote = fcsend_debug (fquote, clen, zcopy); - if (! (*pfwrite) (qconn, zcopy, clen)) - { - ubuffree (zcopy); - ucsend_debug_end (fquote, TRUE); - return FALSE; - } - ubuffree (zcopy); - } - break; - case 'P': - { - const char *zpass; - char *zcopy; - size_t clen; - - if (qsys == NULL) - { - ucsend_debug_end (fquote, TRUE); - ulog (LOG_ERROR, "Illegal use of \\P"); - return FALSE; - } - zpass = qsys->uuconf_zcall_password; - if (zpass == NULL) - { - ucsend_debug_end (fquote, TRUE); - ulog (LOG_ERROR, "No password defined"); - return FALSE; - } - if (zpass[0] == '*' && zpass[1] == '\0') - { - if (zcallout_pass == NULL) - { - int iuuconf; - - iuuconf = uuconf_callout (puuconf, qsys, - &zcallout_login, - &zcallout_pass); - if (iuuconf == UUCONF_NOT_FOUND - || zcallout_pass == NULL) - { - ucsend_debug_end (fquote, TRUE); - ulog (LOG_ERROR, "No password defined"); - return FALSE; - } - else if (iuuconf != UUCONF_SUCCESS) - { - ucsend_debug_end (fquote, TRUE); - ulog_uuconf (LOG_ERROR, puuconf, iuuconf); - return FALSE; - } - } - zpass = zcallout_pass; - } - zcopy = zbufcpy (zpass); - clen = cescape (zcopy); - fquote = fcsend_debug (fquote, (size_t) 0, "password"); - fquote = fcsend_debug (fquote, clen, zcopy); - if (! (*pfwrite) (qconn, zcopy, clen)) - { - ubuffree (zcopy); - ucsend_debug_end (fquote, TRUE); - return FALSE; - } - ubuffree (zcopy); - } - break; - case 'D': - if (qdial == NULL || zphone == NULL) - { - ucsend_debug_end (fquote, TRUE); - ulog (LOG_ERROR, "Illegal use of \\D"); - return FALSE; - } - fquote = fcsend_debug (fquote, (size_t) 0, "\\D"); - if (! fcphone (qconn, puuconf, qdial, zphone, pfwrite, - ftranslate, &fquote)) - { - ucsend_debug_end (fquote, TRUE); - return FALSE; - } - break; - case 'T': - if (qdial == NULL || zphone == NULL) - { - ucsend_debug_end (fquote, TRUE); - ulog (LOG_ERROR, "Illegal use of \\T"); - return FALSE; - } - fquote = fcsend_debug (fquote, (size_t) 0, "\\T"); - if (! fcphone (qconn, puuconf, qdial, zphone, pfwrite, TRUE, - &fquote)) - { - ucsend_debug_end (fquote, TRUE); - return FALSE; - } - break; - case 'M': - if (qdial == NULL) - { - ucsend_debug_end (fquote, TRUE); - ulog (LOG_ERROR, "Illegal use of \\M"); - return FALSE; - } - fquote = fcsend_debug (fquote, (size_t) 0, "ignore-carrier"); - if (! fconn_carrier (qconn, FALSE)) - { - ucsend_debug_end (fquote, TRUE); - return FALSE; - } - break; - case 'm': - if (qdial == NULL) - { - ucsend_debug_end (fquote, TRUE); - ulog (LOG_ERROR, "Illegal use of \\m"); - return FALSE; - } - if (qdial->uuconf_fcarrier) - { - fquote = fcsend_debug (fquote, (size_t) 0, "need-carrier"); - if (! fconn_carrier (qconn, TRUE)) - { - ucsend_debug_end (fquote, TRUE); - return FALSE; - } - } - break; - default: - /* This error message will screw up any debugging - information, but it's easily avoidable. */ - ulog (LOG_ERROR, - "Unrecognized escape sequence \\%c in send string", - *z); - fsend = TRUE; - bsend = *z; - break; - } - ++z; - break; -#if DEBUG > 0 - default: - ulog (LOG_FATAL, "fcsend: Can't happen"); - break; -#endif - } - - if (fsend) - { - fquote = fcsend_debug (fquote, (size_t) 1, &bsend); - if (! (*pfwrite) (qconn, &bsend, (size_t) 1)) - { - ucsend_debug_end (fquote, TRUE); - return FALSE; - } - } - } - - xfree ((pointer) zcallout_login); - xfree ((pointer) zcallout_pass); - - /* Output a final carriage return, unless there was a \c. Don't - bother to check for an echo. */ - if (! fnocr) - { - char b; - - b = '\r'; - fquote = fcsend_debug (fquote, (size_t) 1, &b); - if (! fconn_write (qconn, &b, (size_t) 1)) - { - ucsend_debug_end (fquote, TRUE); - return FALSE; - } - } - - ucsend_debug_end (fquote, FALSE); - - return TRUE; -} - -/* Write out a phone number with optional dialcode translation. The - pfquote argument is only used for debugging. */ - -static boolean -fcphone (qconn, puuconf, qdial, zphone, pfwrite, ftranslate, pfquote) - struct sconnection *qconn; - pointer puuconf; - const struct uuconf_dialer *qdial; - const char *zphone; - boolean (*pfwrite) P((struct sconnection *qc, const char *zwrite, - size_t cwrite)); - boolean ftranslate; - boolean *pfquote; -{ - const char *zprefix, *zsuffix; - - if (ftranslate) - { - if (! fctranslate (puuconf, zphone, &zprefix, &zsuffix)) - return FALSE; - } - else - { - zprefix = zphone; - zsuffix = NULL; - } - - while (zprefix != NULL) - { - while (TRUE) - { - const char *z; - const char *zstr; - - z = zprefix + strcspn ((char *) zprefix, "=-"); - if (z > zprefix) - { - size_t clen; - - clen = z - zprefix; - *pfquote = fcsend_debug (*pfquote, clen, zprefix); - if (! (*pfwrite) (qconn, zprefix, clen)) - return FALSE; - } - - if (*z == '=') - zstr = qdial->uuconf_zdialtone; - else if (*z == '-') - zstr = qdial->uuconf_zpause; - else /* *z == '\0' */ - break; - - if (zstr != NULL) - { - *pfquote = fcsend_debug (*pfquote, strlen (zstr), zstr); - if (! (*pfwrite) (qconn, zstr, strlen (zstr))) - return FALSE; - } - - zprefix = z + 1; - } - - zprefix = zsuffix; - zsuffix = NULL; - } - - return TRUE; -} - -/* Given a phone number, run it through dial code translation - returning two strings. */ - -static boolean -fctranslate (puuconf, zphone, pzprefix, pzsuffix) - pointer puuconf; - const char *zphone; - const char **pzprefix; - const char **pzsuffix; -{ - int iuuconf; - char *zdialcode, *zto; - const char *zfrom; - char *ztrans; - - *pzprefix = zphone; - *pzsuffix = NULL; - - zdialcode = zbufalc (strlen (zphone) + 1); - zfrom = zphone; - zto = zdialcode; - while (*zfrom != '\0' && isalpha (BUCHAR (*zfrom))) - *zto++ = *zfrom++; - *zto = '\0'; - - if (*zdialcode == '\0') - { - ubuffree (zdialcode); - return TRUE; - } - - iuuconf = uuconf_dialcode (puuconf, zdialcode, &ztrans); - - ubuffree (zdialcode); - - if (iuuconf == UUCONF_NOT_FOUND) - return TRUE; - else if (iuuconf != UUCONF_SUCCESS) - { - ulog_uuconf (LOG_ERROR, puuconf, iuuconf); - return FALSE; - } - else - { - /* We really should figure out a way to free up ztrans here. */ - *pzprefix = ztrans; - *pzsuffix = zfrom; - return TRUE; - } -} - -/* Write out a string making sure the each character is echoed back. - There are two versions of this function, one which strips the - parity bit from the characters and one which does not. This is so - that I can use a single function pointer in fcsend, and to avoid - using any static variables so that I can put chat scripts in a - library some day. */ - -static boolean -fcecho_send_strip (qconn, zwrite, cwrite) - struct sconnection *qconn; - const char *zwrite; - size_t cwrite; -{ - return fcecho_send (qconn, zwrite, cwrite, TRUE); -} - -static boolean -fcecho_send_nostrip (qconn, zwrite, cwrite) - struct sconnection *qconn; - const char *zwrite; - size_t cwrite; -{ - return fcecho_send (qconn, zwrite, cwrite, FALSE); -} - -static boolean -fcecho_send (qconn, zwrite, cwrite, fstrip) - struct sconnection *qconn; - const char *zwrite; - size_t cwrite; - boolean fstrip; -{ - const char *zend; - - zend = zwrite + cwrite; - - for (; zwrite < zend; zwrite++) - { - int b; - char bwrite; - - bwrite = *zwrite; - if (! fconn_write (qconn, &bwrite, (size_t) 1)) - return FALSE; - if (fstrip) - bwrite &= 0x7f; - do - { - /* We arbitrarily wait five seconds for the echo. */ - b = breceive_char (qconn, 5, TRUE); - /* Now b == -1 on timeout, -2 on error. */ - if (b < 0) - { - if (b == -1) - ulog (LOG_ERROR, "Character not echoed"); - return FALSE; - } - if (fstrip) - b &= 0x7f; - } - while (b != BUCHAR (bwrite)); - } - - return TRUE; -} - -/* Run a chat program. Expand any escape sequences and call a system - dependent program to run it. */ - -static boolean -fcprogram (qconn, puuconf, pzprogram, qsys, qdial, zphone, zport, ibaud) - struct sconnection *qconn; - pointer puuconf; - char **pzprogram; - const struct uuconf_system *qsys; - const struct uuconf_dialer *qdial; - const char *zphone; - const char *zport; - long ibaud; -{ - size_t cargs; - char **pzpass, **pzarg; - char **pz; - char *zcallout_login; - char *zcallout_pass; - boolean fret; - - cargs = 1; - for (pz = pzprogram; *pz != NULL; pz++) - ++cargs; - - pzpass = (char **) xmalloc (cargs * sizeof (char *)); - - zcallout_login = NULL; - zcallout_pass = NULL; - fret = TRUE; - - /* Copy the string into memory expanding escape sequences. */ - for (pz = pzprogram, pzarg = pzpass; *pz != NULL; pz++, pzarg++) - { - const char *zfrom; - size_t calc, clen; - char *zto; - - if (strchr (*pz, '\\') == NULL) - { - *pzarg = zbufcpy (*pz); - continue; - } - - *pzarg = NULL; - zto = NULL; - calc = 0; - clen = 0; - - for (zfrom = *pz; *zfrom != '\0'; zfrom++) - { - const char *zadd = NULL; - char *zfree = NULL; - size_t cadd; - char abadd[15]; - - if (*zfrom != '\\') - { - if (clen + 2 > calc) - { - char *znew; - - calc = clen + 50; - znew = zbufalc (calc); - memcpy (znew, *pzarg, clen); - ubuffree (*pzarg); - *pzarg = znew; - zto = znew + clen; - } - *zto++ = *zfrom; - ++clen; - continue; - } - - ++zfrom; - switch (*zfrom) - { - case '\0': - --zfrom; - /* Fall through. */ - case '\\': - zadd = "\\"; - break; - case 'L': - { - const char *zlog; - - if (qsys == NULL) - { - ulog (LOG_ERROR, "chat-program: Illegal use of \\L"); - fret = FALSE; - break; - } - zlog = qsys->uuconf_zcall_login; - if (zlog == NULL) - { - ulog (LOG_ERROR, "chat-program: No login defined"); - fret = FALSE; - break; - } - if (zlog[0] == '*' && zlog[1] == '\0') - { - if (zcallout_login == NULL) - { - int iuuconf; - - iuuconf = uuconf_callout (puuconf, qsys, - &zcallout_login, - &zcallout_pass); - if (iuuconf == UUCONF_NOT_FOUND - || zcallout_login == NULL) - { - ulog (LOG_ERROR, - "chat-program: No login defined"); - fret = FALSE; - break; - } - else if (iuuconf != UUCONF_SUCCESS) - { - ulog_uuconf (LOG_ERROR, puuconf, iuuconf); - fret = FALSE; - break; - } - } - zlog = zcallout_login; - } - zfree = zbufcpy (zlog); - (void) cescape (zfree); - zadd = zfree; - } - break; - case 'P': - { - const char *zpass; - - if (qsys == NULL) - { - ulog (LOG_ERROR, "chat-program: Illegal use of \\P"); - fret = FALSE; - break; - } - zpass = qsys->uuconf_zcall_password; - if (zpass == NULL) - { - ulog (LOG_ERROR, "chat-program: No password defined"); - fret = FALSE; - break; - } - if (zpass[0] == '*' && zpass[1] == '\0') - { - if (zcallout_pass == NULL) - { - int iuuconf; - - iuuconf = uuconf_callout (puuconf, qsys, - &zcallout_login, - &zcallout_pass); - if (iuuconf == UUCONF_NOT_FOUND - || zcallout_pass == NULL) - { - ulog (LOG_ERROR, - "chat-program: No password defined"); - fret = FALSE; - break; - } - else if (iuuconf != UUCONF_SUCCESS) - { - ulog_uuconf (LOG_ERROR, puuconf, iuuconf); - fret = FALSE; - break; - } - } - zpass = zcallout_pass; - } - zfree = zbufcpy (zpass); - (void) cescape (zfree); - zadd = zfree; - } - break; - case 'D': - if (qdial == NULL || zphone == NULL) - { - ulog (LOG_ERROR, "chat-program: Illegal use of \\D"); - fret = FALSE; - break; - } - zadd = zphone; - break; - case 'T': - { - const char *zprefix, *zsuffix; - - if (qdial == NULL || zphone == NULL) - { - ulog (LOG_ERROR, "chat-program: Illegal use of \\T"); - fret = FALSE; - break; - } - - if (! fctranslate (puuconf, zphone, &zprefix, &zsuffix)) - { - fret = FALSE; - break; - } - - if (zsuffix == NULL) - zadd = zprefix; - else - { - size_t cprefix; - - cprefix = strlen (zprefix); - if (clen + cprefix + 1 > calc) - { - char *znew; - - calc = clen + cprefix + 20; - znew = zbufalc (calc); - memcpy (znew, *pzarg, clen); - ubuffree (*pzarg); - *pzarg = znew; - zto = znew + clen; - } - memcpy (zto, zprefix, cprefix); - zto += cprefix; - clen += cprefix; - zadd = zsuffix; - } - } - break; - case 'Y': - if (zLdevice == NULL && zport == NULL) - { - ulog (LOG_ERROR, "chat-program: Illegal use of \\Y"); - fret = FALSE; - break; - } - /* zLdevice will generally make more sense than zport, but - it might not be set yet. */ - zadd = zLdevice; - if (zadd == NULL) - zadd = zport; - break; - case 'Z': - if (qsys == NULL) - { - ulog (LOG_ERROR, "chat-program: Illegal use of \\Z"); - fret = FALSE; - break; - } - zadd = qsys->uuconf_zname; - break; - case 'S': - { - if (ibaud == 0) - { - ulog (LOG_ERROR, "chat-program: Illegal use of \\S"); - fret = FALSE; - break; - } - sprintf (abadd, "%ld", ibaud); - zadd = abadd; - } - break; - default: - { - ulog (LOG_ERROR, - "chat-program: Unrecognized escape sequence \\%c", - *zfrom); - abadd[0] = *zfrom; - abadd[1] = '\0'; - zadd = abadd; - } - break; - } - - if (! fret) - break; - - cadd = strlen (zadd); - if (clen + cadd + 1 > calc) - { - char *znew; - - calc = clen + cadd + 20; - znew = zbufalc (calc); - memcpy (znew, *pzarg, clen); - ubuffree (*pzarg); - *pzarg = znew; - zto = znew + clen; - } - memcpy (zto, zadd, cadd + 1); - zto += cadd; - clen += cadd; - ubuffree (zfree); - } - - if (! fret) - break; - - *zto++ = '\0'; - ++clen; - } - - *pzarg = NULL; - - if (fret) - fret = fconn_run_chat (qconn, pzpass); - - for (pz = pzpass; *pz != NULL; pz++) - ubuffree (*pz); - xfree ((pointer) pzpass); - xfree ((pointer) zcallout_login); - xfree ((pointer) zcallout_pass); - - return fret; -} diff --git a/gnu/libexec/uucp/common_sources/config.h b/gnu/libexec/uucp/common_sources/config.h deleted file mode 100644 index 504d011..0000000 --- a/gnu/libexec/uucp/common_sources/config.h +++ /dev/null @@ -1,481 +0,0 @@ -/* config.h. Generated automatically by configure. */ -/* Configuration header file for Taylor UUCP. -*- C -*- */ - -/* $FreeBSD$ */ - -/* If your compiler does not use const correctly, then undefine it - here. This #undef is commented out by the configure script if it - determines that const is supported. */ -/* #undef const */ - -/* If your compiler supports prototypes, set HAVE_PROTOTYPES to 1. */ -#define HAVE_PROTOTYPES 1 - -/* Set ECHO_PROGRAM to a program which echoes its arguments; if echo - is a shell builtin you can just use "echo". */ -#define ECHO_PROGRAM "echo" - -/* The following macros indicate what header files you have. Set the - macro to 1 if you have the corresponding header file, or 0 if you - do not. */ -#define HAVE_STDDEF_H 1 /* <stddef.h> */ -#define HAVE_STDARG_H 1 /* <stdarg.h> */ -#define HAVE_STRING_H 1 /* <string.h> */ -#define HAVE_STRINGS_H 1 /* <strings.h> */ -#define HAVE_UNISTD_H 1 /* <unistd.h> */ -#define HAVE_STDLIB_H 1 /* <stdlib.h> */ -#define HAVE_LIMITS_H 1 /* <limits.h> */ -#define HAVE_TIME_H 1 /* <time.h> */ -#define HAVE_SYS_WAIT_H 1 /* <sys/wait.h> */ -#define HAVE_SYS_IOCTL_H 1 /* <sys/ioctl.h> */ -#define HAVE_DIRENT_H 1 /* <dirent.h> */ -#define HAVE_MEMORY_H 1 /* <memory.h> */ -#define HAVE_TERMIOS_H 1 /* <termios.h> */ -#define HAVE_SYS_PARAM_H 1 /* <sys/param.h> */ -#define HAVE_UTIME_H 1 /* <utime.h> */ -#define HAVE_FCNTL_H 1 /* <fcntl.h> */ -#define HAVE_SYS_FILE_H 1 /* <sys/file.h> */ -#define HAVE_SYS_TIME_H 1 /* <sys/time.h> */ -#define HAVE_SYS_TIMES_H 1 /* <sys/times.h> */ -#define HAVE_LIBC_H 0 /* <libc.h> */ -#define HAVE_SYSEXITS_H 1 /* <sysexits.h> */ -#define HAVE_POLL_H 0 /* <poll.h> */ -#define HAVE_TIUSER_H 0 /* <tiuser.h> */ -#define HAVE_XTI_H 0 /* <xti.h> */ -#define HAVE_SYS_TLI_H 0 /* <sys/tli.h> */ -#define HAVE_STROPTS_H 0 /* <stropts.h> */ -#define HAVE_FTW_H 0 /* <ftw.h> */ -#define HAVE_GLOB_H 1 /* <glob.h> */ -#define HAVE_SYS_SELECT_H 0 /* <sys/select.h> */ -#define HAVE_SYS_TYPES_TCP_H 0 /* <sys/types.tcp.h> */ -#define HAVE_SYS_MOUNT_H 1 /* <sys/mount.h> */ -#define HAVE_SYS_VFS_H 0 /* <sys/vfs.h> */ -#define HAVE_SYS_FILSYS_H 0 /* <sys/filsys.h> */ -#define HAVE_SYS_STATFS_H 0 /* <sys/statfs.h> */ -#define HAVE_SYS_DUSTAT_H 0 /* <sys/dustat.h> */ -#define HAVE_SYS_FS_TYPES_H 0 /* <sys/fs_types.h> */ -#define HAVE_USTAT_H 0 /* <ustat.h> */ -#define HAVE_SYS_STATVFS_H 0 /* <sys/statvfs.h> */ - -/* If major and minor are not defined in <sys/types.h>, but are in - <sys/mkdev.h>, set MAJOR_IN_MKDEV to 1. If they are in - <sys/sysmacros.h>, set MAJOR_IN_SYSMACROS to 1. */ -#define MAJOR_IN_MKDEV 0 -#define MAJOR_IN_SYSMACROS 0 - -/* If the macro offsetof is not defined in <stddef.h>, you may give it - a definition here. If you do not, the code will use a definition - (in uucp.h) that should be fairly portable. */ -/* #define offsetof */ - -/* Set RETSIGTYPE to the return type of a signal handler. On newer - systems this will be void; some older systems use int. */ -#define RETSIGTYPE void - -/* If the macro S_ISDIR is defined in <sys/stat.h>, but is incorrect, - define STAT_MACROS_BROKEN to be 1. This is said to be the case on - Tektronix UTekV, Amdahl UTS and Motorola System V/88. */ -#define STAT_MACROS_BROKEN 0 - -/* Set TIME_WITH_SYS_TIME to 1 if <time.h> and <sys/time.h> can both - be included in a single source file; if you don't have either or - both of them, it doesn't matter what you set this to. */ -#define TIME_WITH_SYS_TIME 1 - -/* Set TM_IN_SYS_TIME to 1 if struct tm is defined in <sys/time.h> - rather than in <time.h>. */ -#define TM_IN_SYS_TIME 0 - -/* Set HAVE_TERMIOS_AND_SYS_IOCTL_H to 1 if <termios.h> and <sys/ioctl.h> - can both be included in a single source file; if you don't have either - or both of them, it doesn't matter what you set this to. */ -#define HAVE_TERMIOS_AND_SYS_IOCTL_H 1 - -/* If you are configuring by hand, you should set one of the terminal - driver options in policy.h. If you are autoconfiguring, the script - will check whether your system defines CBREAK, which is a terminal - setting; if your system supports CBREAK, and you don't set a terminal - driver in policy.h, the code will assume that you have a BSD style - terminal driver. */ -#define HAVE_CBREAK 1 - -/* The package needs several standard types. If you are using the - configure script, it will look in standard places for these types, - and give default definitions for them here if it doesn't find them. - The default definitions should work on most systems, but you may - want to check them. If you are configuring by hand, you will have - to figure out whether the types are defined on your system, and - what they should be defined to. - - Any type that is not defined on your system should get a macro - definition. The definition should be of the name of the type in - all capital letters. For example, #define PID_T int. If the type - is defined in a standard header file, the macro name should not be - defined. */ - -/* The type pid_t is used to hold a process ID number. It is normally - defined in <sys/types.h>. This is the type returned by the - functions fork or getpid. Usually int will work fine. */ -/* #undef PID_T */ - -/* The type uid_t is used to hold a user ID number. It is normally - defined in <sys/types.h>. This is the type returned by the getuid - function. Usually int will work fine. */ -/* #undef UID_T */ - -/* The type gid_t is used to hold a group ID number. It is sometimes - defined in <sys/types.h>. This is the type returned by the getgid - function. Usually int will work fine. */ -/* #undef GID_T */ - -/* The type off_t is used to hold an offset in a file. It is sometimes - defined in <sys/types.h>. This is the type of the second argument to - the lseek function. Usually long will work fine. */ -/* #undef OFF_T */ - -/* Set HAVE_SIG_ATOMIC_T_IN_SIGNAL_H if the type sig_atomic_t is defined - in <signal.h> as required by ANSI C. */ -#define HAVE_SIG_ATOMIC_T_IN_SIGNAL_H 1 - -/* Set HAVE_SIG_ATOMIC_T_IN_TYPES_H if the type sig_atomic_t is defined - in <sys/types.h>. This is ignored if HAVE_SIG_ATOMIC_T_IN_SIGNAL_H is - set to 1. */ -#define HAVE_SIG_ATOMIC_T_IN_TYPES_H 0 - -/* The type sig_atomic_t is used to hold a value which may be - referenced in a single atomic operation. If it is not defined in - either <signal.h> or <sys/types.h>, you may want to give it a - definition here. If you don't, the code will use char. If your - compiler does not support sig_atomic_t, there is no type which is - really correct; fortunately, for this package it does not really - matter very much. */ -/* #undef SIG_ATOMIC_T */ - -/* Set HAVE_SIZE_T_IN_STDDEF_H to 1 if the type size_t is defined in - <stddef.h> as required by ANSI C. */ -#define HAVE_SIZE_T_IN_STDDEF_H 1 - -/* Set HAVE_SIZE_T_IN_TYPES_H to 1 if the type size_t is defined in - <sys/types.h>. This is ignored if HAVE_SIZE_T_IN_STDDEF_H is set - to 1. */ -#define HAVE_SIZE_T_IN_TYPES_H 1 - -/* The type size_t is used to hold the size of an object. In - particular, an argument of this type is passed as the size argument - to the malloc and realloc functions. If size_t is not defined in - either <stddef.h> or <sys/types.h>, you may want to give it a - definition here. If you don't, the code will use unsigned. */ -/* #undef SIZE_T */ - -/* Set HAVE_TIME_T_IN_TIME_H to 1 if the type time_t is defined in - <time.h>, as required by the ANSI C standard. */ -#define HAVE_TIME_T_IN_TIME_H 1 - -/* Set HAVE_TIME_T_IN_TYPES_H to 1 if the type time_t is defined in - <sys/types.h>. This is ignored if HAVE_TIME_T_IN_TIME_H is set to - 1. */ -#define HAVE_TIME_T_IN_TYPES_H 1 - -/* When Taylor UUCP is talking to another instance of itself, it will - tell the other side the size of a file before it is transferred. - If the package can determine how much disk space is available, it - will use this information to avoid filling up the disk. Define one - of the following macros to tell the code how to determine the - amount of available disk space. It is possible that none of these - are appropriate; it will do no harm to use none of them, but, of - course, nothing will then prevent the package from filling up the - disk. Note that this space check is only useful when talking to - another instance of Taylor UUCP. - - STAT_STATVFS statvfs function - STAT_STATFS3_OSF1 three argument statfs function (OSF/1) - STAT_STATFS2_BSIZE two argument statfs function with f_bsize field - STAT_STATFS2_FSIZE two argument statfs function with f_fsize field - STAT_STATFS2_FS_DATA two argument statfs function with fd_req field - STAT_STATFS4 four argument statfs function - STAT_DISK_SPACE disk_space function (QNX) - STAT_USTAT the ustat function with 512 byte blocks. */ -#define STAT_STATVFS 0 -#define STAT_STATFS3_OSF1 0 -#define STAT_STATFS2_BSIZE 1 -#define STAT_STATFS2_FSIZE 0 -#define STAT_STATFS2_FS_DATA 0 -#define STAT_STATFS4 0 -#define STAT_DISK_SPACE 0 -#define STAT_USTAT 0 - -/* Set HAVE_VOID to 1 if the compiler supports declaring functions with - a return type of void and casting values to void. */ -#define HAVE_VOID 1 - -/* Set HAVE_UNSIGNED_CHAR to 1 if the compiler supports the type unsigned - char. */ -#define HAVE_UNSIGNED_CHAR 1 - -/* Set HAVE_ERRNO_DECLARATION to 1 if errno is declared in <errno.h>. */ -#define HAVE_ERRNO_DECLARATION 1 - -/* Set HAVE_TXADDCD to 1 if TXADDCD is defined in <sys/ioctl.h>, as it - is on AIX. */ -#define HAVE_TXADDCD 0 - -/* Set HAVE_SOCKADDR_SA_LEN to 1 if struct sockaddr has sa_len member. */ -#define HAVE_SOCKADDR_SA_LEN 1 - -/* There are now a number of functions to check for. For each of - these, the macro HAVE_FUNC should be set to 1 if your system has - FUNC. For example, HAVE_VFPRINTF should be set to 1 if your system - has vfprintf, 0 otherwise. */ - -/* Taylor UUCP will take advantage of the following functions if they - are available, but knows how to deal with their absence. */ -#define HAVE_VFPRINTF 1 -#define HAVE_FTRUNCATE 1 -#define HAVE_LTRUNC 0 -#define HAVE_WAITPID 1 -#define HAVE_WAIT4 1 -#define HAVE_GLOB 1 -#define HAVE_SETREUID 1 -#define HAVE_SETEUID 1 - -/* There are several functions which are replaced in the subdirectory - lib. If they are missing, the configure script will automatically - add them to lib/Makefile to force them to be recompiled. If you - are configuring by hand, you will have to do this yourself. The - string @LIBOBJS@ in lib/Makefile.in should be replaced by a list of - object files in lib/Makefile. The following comments tell you - which object file names to add (they are generally fairly obvious, - given that the file names have no more than six characters before - the period). */ - -/* For each of these functions, if it does not exist, the indicated - object file should be added to lib/Makefile. */ -#define HAVE_BSEARCH 1 /* bsrch.o */ -#define HAVE_GETLINE 0 /* getlin.o */ -#define HAVE_MEMCHR 1 /* memchr.o */ -#define HAVE_STRDUP 1 /* strdup.o */ -#define HAVE_STRSTR 1 /* strstr.o */ -#define HAVE_STRTOL 1 /* strtol.o */ -#define HAVE_STRTOUL 1 /* strtou.o */ - -/* If neither of these functions exists, you should add bzero.o to - lib/Makefile. */ -#define HAVE_BZERO 1 -#define HAVE_MEMSET 1 - -/* If neither of these functions exists, you should add memcmp.o to - lib/Makefile. */ -#define HAVE_MEMCMP 1 -#define HAVE_BCMP 1 - -/* If neither of these functions exists, you should add memcpy.o to - lib/Makefile. */ -#define HAVE_MEMCPY 1 -#define HAVE_BCOPY 1 - -/* If neither of these functions exists, you should add strcas.o to - lib/Makefile. */ -#define HAVE_STRCASECMP 1 -#define HAVE_STRICMP 0 - -/* If neither of these functions exists, you should add strncs.o to - lib/Makefile. */ -#define HAVE_STRNCASECMP 1 -#define HAVE_STRNICMP 0 - -/* If neither of these functions exists, you should add strchr.o to - lib/Makefile. */ -#define HAVE_STRCHR 1 -#define HAVE_INDEX 1 - -/* If neither of these functions exists, you should add strrch.o to - lib/Makefile. */ -#define HAVE_STRRCHR 1 -#define HAVE_RINDEX 1 - -/* If neither of these functions exists, you should add getaddrinfo.o to - lib/Makefile. */ -#define HAVE_GETADDRINFO 1 - -/* There are also Unix specific functions which are replaced in the - subdirectory unix. If they are missing, the configure script will - automatically add them to unix/Makefile to force them to be - recompiled. If you are configuring by hand, you will have to do - this yourself. The string @UNIXOBJS@ in unix/Makefile.in should be - replaced by a list of object files in unix/Makefile. The following - comments tell you which object file names to add. */ - -/* For each of these functions, if it does not exist, the indicated - object file should be added to unix/Makefile. */ -#define HAVE_OPENDIR 1 /* dirent.o */ -#define HAVE_DUP2 1 /* dup2.o */ -#define HAVE_FTW 0 /* ftw.o */ -#define HAVE_REMOVE 1 /* remove.o */ -#define HAVE_RENAME 1 /* rename.o */ -#define HAVE_STRERROR 1 /* strerr.o */ - -/* The code needs to know how to create directories. If you have the - mkdir function, set HAVE_MKDIR to 1 and replace @UUDIR@ in - Makefile.in with '# ' (the configure script will set @UUDIR@ - according to the variable UUDIR). Otherwise, set HAVE_MKDIR to 0, - remove @UUDIR@ from Makefile.in, set MKDIR_PROGRAM to the name of - the program which will create a directory named on the command line - (e.g., "/bin/mkdir"), and add mkdir.o to the @UNIXOBJS@ string in - unix/Makefile.in. */ -#define HAVE_MKDIR 1 -#define MKDIR_PROGRAM unused - -/* The code also needs to know how to remove directories. If you have - the rmdir function, set HAVE_RMDIR to 1. Otherwise, set - RMDIR_PROGRAM to the name of the program which will remove a - directory named on the command line (e.g., "/bin/rmdir") and add - rmdir.o to the @UNIXOBJS@ string in unix/Makefile.in. */ -#define HAVE_RMDIR 1 -#define RMDIR_PROGRAM unused - -/* The code needs to know to how to get the name of the current - directory. If getcwd is available it will be used, otherwise if - getwd is available it will be used. Otherwise, set PWD_PROGRAM to - the name of the program which will print the name of the current - working directory (e.g., "/bin/pwd") and add getcwd.o to the - @UNIXOBJS@ string in unix/Makefile.in. */ -#define HAVE_GETCWD 1 -#define HAVE_GETWD 1 -#define PWD_PROGRAM unused - -/* If you have either sigsetjmp or setret, it will be used instead of - setjmp. These functions will only be used if your system restarts - system calls after interrupts (see HAVE_RESTARTABLE_SYSCALLS, - below). */ -#define HAVE_SIGSETJMP 1 -#define HAVE_SETRET 0 - -/* The code needs to know what function to use to set a signal - handler. If will try to use each of the following functions in - turn. If none are available, it will use signal, which is assumed - to always exist. */ -#define HAVE_SIGACTION 1 -#define HAVE_SIGVEC 1 -#define HAVE_SIGSET 0 - -/* If the code is going to use sigvec (HAVE_SIGACTION is 0 and - HAVE_SIGVEC is 1), then HAVE_SIGVEC_SV_FLAGS must be set to 1 if - the sigvec structure contains the sv_flags field, or 0 if the - sigvec structure contains the sv_onstack field. If the code is not - going to use sigvec, it doesn't matter what this is set to. */ -#define HAVE_SIGVEC_SV_FLAGS 1 - -/* The code will try to use each of the following functions in turn - when blocking signals from delivery. If none are available, a - relatively unimportant race condition will exist. */ -#define HAVE_SIGPROCMASK 1 -#define HAVE_SIGBLOCK 1 -#define HAVE_SIGHOLD 0 - -/* If you have either of the following functions, it will be used to - determine the number of file descriptors which may be open. - Otherwise, the code will use OPEN_MAX if defined, then NOFILE if - defined, then 20. */ -#define HAVE_GETDTABLESIZE 1 -#define HAVE_SYSCONF 1 - -/* The code will use one of the following functions when detaching - from a terminal. One of these must exist. */ -#define HAVE_SETPGRP 1 -#define HAVE_SETSID 1 - -/* If you do not specify the local node name in the main configuration - file, Taylor UUCP will try to use each of the following functions - in turn. If neither is available, you must specify the local node - name in the configuration file. */ -#define HAVE_GETHOSTNAME 1 -#define HAVE_UNAME 1 - -/* The code will try to use each of the following functions in turn to - determine the current time. If none are available, it will use - time, which is assumed to always exist. */ -#define HAVE_GETTIMEOFDAY 1 -#define HAVE_FTIME 0 - -/* If neither gettimeofday nor ftime is available, the code will use - times (if available) to measure a span of time. See also the - discussion of TIMES_TICK in policy.h. */ -#define HAVE_TIMES 1 - -/* When a chat script requests a pause of less than a second with \p, - Taylor UUCP will try to use each of the following functions in - turn. If none are available, it will sleep for a full second. - Also, the (non-portable) tstuu program requires either select or - poll. */ -#define HAVE_NAPMS 0 -#define HAVE_NAP 0 -#define HAVE_USLEEP 1 -#define HAVE_POLL 0 -#define HAVE_SELECT 1 - -/* If the getgrent function is available, it will be used to determine - all the groups a user belongs to when checking file access - permissions. */ -#define HAVE_GETGRENT 1 - -/* If the socket function is available, TCP support code will be - compiled in. */ -#define HAVE_SOCKET 1 - -/* If the t_open function is available, TLI support code will be - compiled in. This may require adding a library, such as -lnsl or - -lxti, to the Makefile variables LIBS. */ -#define HAVE_T_OPEN 0 - -/* If the dev_info function is available (QNX only), it will be used - to determine if any other process has the serial port open, and - that will cause uucico and cu to presume the port is locked. */ -#define HAVE_DEV_INFO 0 - -/* That's the end of the list of the functions. Now there are a few - last miscellaneous items. */ - -/* On some systems the following functions are declared in such a way - that the code cannot make a simple extern. On other systems, these - functions are not declared at all, and the extern is required. If - a declaration of the function, as shown, compiles on your system, - set the value to 1. Not all functions declared externally are - listed here, only the ones with which I have had trouble. */ -/* extern long times (); */ -#define TIMES_DECLARATION_OK 0 -/* extern struct passwd *getpwnam (); */ -#define GETPWNAM_DECLARATION_OK 1 -/* extern struct passwd *getpwuid (); */ -#define GETPWUID_DECLARATION_OK 1 -/* extern struct group *getgrent (); */ -#define GETGRENT_DECLARATION_OK 1 - -/* Set HAVE_BSD_PGRP to 1 if your getpgrp call takes 1 argument and - your setpgrp calls takes 2 arguments (on System V they generally - take no arguments). You can safely set this to 1 on System V, - provided the call will compile without any errors. */ -#define HAVE_BSD_PGRP 0 - -/* Set HAVE_UNION_WAIT to 1 if union wait is defined in the header - file <sys/wait.h>. */ -#define HAVE_UNION_WAIT 1 - -/* Set HAVE_LONG_FILE_NAMES to 1 if the system supports file names - longer than 14 characters. */ -#define HAVE_LONG_FILE_NAMES 1 - -/* If slow system calls are restarted after interrupts, set - HAVE_RESTARTABLE_SYSCALLS to 1. This is ignored if HAVE_SIGACTION - is 1 or if HAVE_SIGVEC is 1 and HAVE_SIGVEC_SV_FLAGS is 1 and - SV_INTERRUPT is defined in <signal.h>. In both of these cases - system calls can be prevented from restarting. */ -#define HAVE_RESTARTABLE_SYSCALLS 1 - -/* Some systems supposedly need the following macros to be defined. - These are handled by the configure script. If you are configuring - by hand, you may add appropriate definitions here, or just add them - to CFLAGS when running make. */ -/* #undef _ALL_SOURCE */ -/* #undef _POSIX_SOURCE */ -/* #undef _MINIX */ -/* #undef _POSIX_1_SOURCE */ diff --git a/gnu/libexec/uucp/common_sources/conn.c b/gnu/libexec/uucp/common_sources/conn.c deleted file mode 100644 index 0ba0202..0000000 --- a/gnu/libexec/uucp/common_sources/conn.c +++ /dev/null @@ -1,587 +0,0 @@ -/* conn.c - Connection routines for the Taylor UUCP package. - - Copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor - - This file is part of the Taylor UUCP package. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - This program 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 - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - The author of the program may be contacted at ian@airs.com or - c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144. - */ - -#include "uucp.h" - -#if USE_RCS_ID -const char conn_rcsid[] = "$FreeBSD$"; -#endif - -#include <ctype.h> - -#include "uudefs.h" -#include "uuconf.h" -#include "conn.h" - -/* Create a new connection. This relies on system dependent functions - to set the qcmds and psysdep fields. If qport is NULL, it opens a - standard input port, in which case ttype is the type of port to - use. */ - -boolean -fconn_init (qport, qconn, ttype) - struct uuconf_port *qport; - struct sconnection *qconn; - enum uuconf_porttype ttype; -{ - qconn->qport = qport; - switch (qport == NULL ? ttype : qport->uuconf_ttype) - { - case UUCONF_PORTTYPE_STDIN: - return fsysdep_stdin_init (qconn); - case UUCONF_PORTTYPE_MODEM: - return fsysdep_modem_init (qconn); - case UUCONF_PORTTYPE_DIRECT: - return fsysdep_direct_init (qconn); -#if HAVE_TCP - case UUCONF_PORTTYPE_TCP: - return fsysdep_tcp_init (qconn); -#endif -#if HAVE_TLI - case UUCONF_PORTTYPE_TLI: - return fsysdep_tli_init (qconn); -#endif - case UUCONF_PORTTYPE_PIPE: - return fsysdep_pipe_init (qconn); - default: - ulog (LOG_ERROR, "Unknown or unsupported port type"); - return FALSE; - } -} - -/* Connection dispatch routines. */ - -/* Free a connection. */ - -void -uconn_free (qconn) - struct sconnection *qconn; -{ - (*qconn->qcmds->pufree) (qconn); -} - -/* Lock a connection. */ - -boolean -fconn_lock (qconn, fin) - struct sconnection *qconn; - boolean fin; -{ - boolean (*pflock) P((struct sconnection *, boolean)); - - pflock = qconn->qcmds->pflock; - if (pflock == NULL) - return TRUE; - return (*pflock) (qconn, fin); -} - -/* Unlock a connection. */ - -boolean -fconn_unlock (qconn) - struct sconnection *qconn; -{ - boolean (*pfunlock) P((struct sconnection *)); - - pfunlock = qconn->qcmds->pfunlock; - if (pfunlock == NULL) - return TRUE; - return (*pfunlock) (qconn); -} - -/* Open a connection. */ - -boolean -fconn_open (qconn, ibaud, ihighbaud, fwait) - struct sconnection *qconn; - long ibaud; - long ihighbaud; - boolean fwait; -{ - boolean fret; - -#if DEBUG > 1 - if (FDEBUGGING (DEBUG_PORT)) - { - char abspeed[20]; - - if (ibaud == (long) 0) - strcpy (abspeed, "default speed"); - else - sprintf (abspeed, "speed %ld", ibaud); - - if (qconn->qport == NULL) - ulog (LOG_DEBUG, "fconn_open: Opening stdin port (%s)", - abspeed); - else if (qconn->qport->uuconf_zname == NULL) - ulog (LOG_DEBUG, "fconn_open: Opening unnamed port (%s)", - abspeed); - else - ulog (LOG_DEBUG, "fconn_open: Opening port %s (%s)", - qconn->qport->uuconf_zname, abspeed); - } -#endif - - /* If the system provides a range of baud rates, we select the - highest baud rate supported by the port. */ - if (ihighbaud != 0 && qconn->qport != NULL) - { - struct uuconf_port *qport; - - qport = qconn->qport; - ibaud = ihighbaud; - if (qport->uuconf_ttype == UUCONF_PORTTYPE_MODEM) - { - if (qport->uuconf_u.uuconf_smodem.uuconf_ilowbaud != 0) - { - if (qport->uuconf_u.uuconf_smodem.uuconf_ihighbaud < ibaud) - ibaud = qport->uuconf_u.uuconf_smodem.uuconf_ihighbaud; - } - else if (qport->uuconf_u.uuconf_smodem.uuconf_ibaud != 0) - ibaud = qport->uuconf_u.uuconf_smodem.uuconf_ibaud; - } - else if (qport->uuconf_ttype == UUCONF_PORTTYPE_DIRECT) - { - if (qport->uuconf_u.uuconf_sdirect.uuconf_ibaud != 0) - ibaud = qport->uuconf_u.uuconf_sdirect.uuconf_ibaud; - } - } - - /* This will normally be overridden by the port specific open - routine. */ - if (qconn->qport == NULL) - ulog_device ("stdin"); - else - ulog_device (qconn->qport->uuconf_zname); - - fret = (*qconn->qcmds->pfopen) (qconn, ibaud, fwait); - - if (! fret) - ulog_device ((const char *) NULL); - - return fret; -} - -/* Close a connection. */ - -boolean -fconn_close (qconn, puuconf, qdialer, fsuccess) - struct sconnection *qconn; - pointer puuconf; - struct uuconf_dialer *qdialer; - boolean fsuccess; -{ - boolean fret; - - DEBUG_MESSAGE0 (DEBUG_PORT, "fconn_close: Closing connection"); - - /* Don't report hangup signals while we're closing. */ - fLog_sighup = FALSE; - - fret = (*qconn->qcmds->pfclose) (qconn, puuconf, qdialer, fsuccess); - - /* Ignore any SIGHUP we may have gotten, and make sure any signal - reporting has been done before we reset fLog_sighup. */ - afSignal[INDEXSIG_SIGHUP] = FALSE; - ulog (LOG_ERROR, (const char *) NULL); - fLog_sighup = TRUE; - - ulog_device ((const char *) NULL); - - return fret; -} - -/* Dial out on the connection. */ - -boolean -fconn_dial (qconn, puuconf, qsys, zphone, qdialer, ptdialerfound) - struct sconnection *qconn; - pointer puuconf; - const struct uuconf_system *qsys; - const char *zphone; - struct uuconf_dialer *qdialer; - enum tdialerfound *ptdialerfound; -{ - struct uuconf_dialer sdialer; - enum tdialerfound tfound; - boolean (*pfdial) P((struct sconnection *, pointer, - const struct uuconf_system *, const char *, - struct uuconf_dialer *, enum tdialerfound *)); - - if (qdialer == NULL) - qdialer = &sdialer; - if (ptdialerfound == NULL) - ptdialerfound = &tfound; - - qdialer->uuconf_zname = NULL; - *ptdialerfound = DIALERFOUND_FALSE; - - pfdial = qconn->qcmds->pfdial; - if (pfdial == NULL) - return TRUE; - return (*pfdial) (qconn, puuconf, qsys, zphone, qdialer, ptdialerfound); -} - -/* Read data from the connection. */ - -boolean -fconn_read (qconn, zbuf, pclen, cmin, ctimeout, freport) - struct sconnection *qconn; - char *zbuf; - size_t *pclen; - size_t cmin; - int ctimeout; - boolean freport; -{ - boolean fret; - - fret = (*qconn->qcmds->pfread) (qconn, zbuf, pclen, cmin, ctimeout, - freport); - -#if DEBUG > 1 - if (FDEBUGGING (DEBUG_INCOMING)) - udebug_buffer ("fconn_read: Read", zbuf, *pclen); - else if (FDEBUGGING (DEBUG_PORT)) - ulog (LOG_DEBUG, "fconn_read: Read %lu", (unsigned long) *pclen); -#endif - - return fret; -} - -/* Write data to the connection. */ - -boolean -fconn_write (qconn, zbuf, clen) - struct sconnection *qconn; - const char *zbuf; - size_t clen; -{ -#if DEBUG > 1 - if (FDEBUGGING (DEBUG_OUTGOING)) - udebug_buffer ("fconn_write: Writing", zbuf, clen); - else if (FDEBUGGING (DEBUG_PORT)) - ulog (LOG_DEBUG, "fconn_write: Writing %lu", (unsigned long) clen); -#endif - - return (*qconn->qcmds->pfwrite) (qconn, zbuf, clen); -} - -/* Read and write data. */ - -boolean -fconn_io (qconn, zwrite, pcwrite, zread, pcread) - struct sconnection *qconn; - const char *zwrite; - size_t *pcwrite; - char *zread; - size_t *pcread; -{ - boolean fret; -#if DEBUG > 1 - size_t cwrite = *pcwrite; - size_t cread = *pcread; - - if (cread == 0 || cwrite == 0) - ulog (LOG_FATAL, "fconn_io: cread %lu; cwrite %lu", - (unsigned long) cread, (unsigned long) cwrite); -#endif - -#if DEBUG > 1 - if (FDEBUGGING (DEBUG_OUTGOING)) - udebug_buffer ("fconn_io: Writing", zwrite, cwrite); -#endif - - fret = (*qconn->qcmds->pfio) (qconn, zwrite, pcwrite, zread, pcread); - - DEBUG_MESSAGE4 (DEBUG_PORT, - "fconn_io: Wrote %lu of %lu, read %lu of %lu", - (unsigned long) *pcwrite, (unsigned long) cwrite, - (unsigned long) *pcread, (unsigned long) cread); - -#if DEBUG > 1 - if (*pcread > 0 && FDEBUGGING (DEBUG_INCOMING)) - udebug_buffer ("fconn_io: Read", zread, *pcread); -#endif - - return fret; -} - -/* Send a break character to a connection. Some port types may not - support break characters, in which case we just return TRUE. */ - -boolean -fconn_break (qconn) - struct sconnection *qconn; -{ - boolean (*pfbreak) P((struct sconnection *)); - - pfbreak = qconn->qcmds->pfbreak; - if (pfbreak == NULL) - return TRUE; - - DEBUG_MESSAGE0 (DEBUG_PORT, "fconn_break: Sending break character"); - - return (*pfbreak) (qconn); -} - -/* Change the setting of a connection. Some port types may not - support this, in which case we just return TRUE. */ - -boolean -fconn_set (qconn, tparity, tstrip, txonxoff) - struct sconnection *qconn; - enum tparitysetting tparity; - enum tstripsetting tstrip; - enum txonxoffsetting txonxoff; -{ - boolean (*pfset) P((struct sconnection *, enum tparitysetting, - enum tstripsetting, enum txonxoffsetting)); - - pfset = qconn->qcmds->pfset; - if (pfset == NULL) - return TRUE; - - DEBUG_MESSAGE3 (DEBUG_PORT, - "fconn_set: Changing setting to %d, %d, %d", - (int) tparity, (int) tstrip, (int) txonxoff); - - return (*pfset) (qconn, tparity, tstrip, txonxoff); -} - -/* Require or ignore carrier on a connection. */ - -boolean -fconn_carrier (qconn, fcarrier) - struct sconnection *qconn; - boolean fcarrier; -{ - boolean (*pfcarrier) P((struct sconnection *, boolean)); - - pfcarrier = qconn->qcmds->pfcarrier; - if (pfcarrier == NULL) - return TRUE; - return (*pfcarrier) (qconn, fcarrier); -} - -/* Run a chat program on a connection. */ - -boolean -fconn_run_chat (qconn, pzprog) - struct sconnection *qconn; - char **pzprog; -{ - return (*qconn->qcmds->pfchat) (qconn, pzprog); -} - -/* Get the baud rate of a connection. */ - -long -iconn_baud (qconn) - struct sconnection *qconn; -{ - long (*pibaud) P((struct sconnection *)); - - pibaud = qconn->qcmds->pibaud; - if (pibaud == NULL) - return 0; - return (*pibaud) (qconn); -} - -/* Run through a dialer sequence. The pzdialer argument is a list of - strings, which are considered in dialer/token pairs. The dialer - string names a dialer to use. The token string is what \D and \T - in the chat script expand to. If there is no token for the last - dialer, the zphone argument is used. The qdialer argument is - filled in with information for the first dialer, and *ptdialerfound - is set to whether the information should be freed or not. However, - if *ptdialerfound is not DIALERFOUND_FALSE when this function is - called, then the information for the first dialer is already in - qdialer. */ - -boolean -fconn_dial_sequence (qconn, puuconf, pzdialer, qsys, zphone, qdialer, - ptdialerfound) - struct sconnection *qconn; - pointer puuconf; - char **pzdialer; - const struct uuconf_system *qsys; - const char *zphone; - struct uuconf_dialer *qdialer; - enum tdialerfound *ptdialerfound; -{ - const char *zname; - boolean ffirst, ffreefirst; - - if (qconn->qport == NULL) - zname = NULL; - else - zname = qconn->qport->uuconf_zname; - ffirst = TRUE; - ffreefirst = FALSE; - while (*pzdialer != NULL) - { - struct uuconf_dialer *q; - struct uuconf_dialer s; - const char *ztoken; - boolean ftranslate; - - if (! ffirst) - q = &s; - else - q = qdialer; - - if (! ffirst || *ptdialerfound == DIALERFOUND_FALSE) - { - int iuuconf; - - iuuconf = uuconf_dialer_info (puuconf, *pzdialer, q); - if (iuuconf == UUCONF_NOT_FOUND) - { - ulog (LOG_ERROR, "%s: Dialer not found", *pzdialer); - if (ffreefirst) - (void) uuconf_dialer_free (puuconf, qdialer); - return FALSE; - } - else if (iuuconf != UUCONF_SUCCESS) - { - ulog_uuconf (LOG_ERROR, puuconf, iuuconf); - if (ffreefirst) - (void) uuconf_dialer_free (puuconf, qdialer); - return FALSE; - } - - if (ffirst) - { - *ptdialerfound = DIALERFOUND_FREE; - ffreefirst = TRUE; - } - } - - ++pzdialer; - ztoken = *pzdialer; - - ftranslate = FALSE; - if (ztoken == NULL - || strcmp (ztoken, "\\D") == 0) - ztoken = zphone; - else if (strcmp (ztoken, "\\T") == 0) - { - ztoken = zphone; - ftranslate = TRUE; - } - - if (! fchat (qconn, puuconf, &q->uuconf_schat, qsys, q, ztoken, - ftranslate, zname, iconn_baud (qconn))) - { - if (q == &s) - (void) uuconf_dialer_free (puuconf, q); - if (ffreefirst) - (void) uuconf_dialer_free (puuconf, qdialer); - return FALSE; - } - - if (ffirst) - ffirst = FALSE; - else - (void) uuconf_dialer_free (puuconf, q); - - if (*pzdialer != NULL) - ++pzdialer; - } - - return TRUE; -} - -/* Modem dialing routine. */ - -/*ARGSUSED*/ -boolean -fmodem_dial (qconn, puuconf, qsys, zphone, qdialer, ptdialerfound) - struct sconnection *qconn; - pointer puuconf; - const struct uuconf_system *qsys; - const char *zphone; - struct uuconf_dialer *qdialer; - enum tdialerfound *ptdialerfound; -{ - char **pzdialer; - - *ptdialerfound = DIALERFOUND_FALSE; - - pzdialer = qconn->qport->uuconf_u.uuconf_smodem.uuconf_pzdialer; - if (pzdialer != NULL && *pzdialer != NULL) - { - int iuuconf; - boolean fret; - - iuuconf = uuconf_dialer_info (puuconf, *pzdialer, qdialer); - if (iuuconf == UUCONF_NOT_FOUND) - { - ulog (LOG_ERROR, "%s: Dialer not found", *pzdialer); - return FALSE; - } - else if (iuuconf != UUCONF_SUCCESS) - { - ulog_uuconf (LOG_ERROR, puuconf, iuuconf); - return FALSE; - } - - *ptdialerfound = DIALERFOUND_FREE; - - fret = (fsysdep_modem_begin_dial (qconn, qdialer) - && fconn_dial_sequence (qconn, puuconf, pzdialer, qsys, zphone, - qdialer, ptdialerfound) - && fsysdep_modem_end_dial (qconn, qdialer)); - - if (! fret) - (void) uuconf_dialer_free (puuconf, qdialer); - - return fret; - } - else if (qconn->qport->uuconf_u.uuconf_smodem.uuconf_qdialer != NULL) - { - struct uuconf_dialer *q; - const char *zname; - - q = qconn->qport->uuconf_u.uuconf_smodem.uuconf_qdialer; - *qdialer = *q; - *ptdialerfound = DIALERFOUND_TRUE; - - if (qconn->qport == NULL) - zname = NULL; - else - zname = qconn->qport->uuconf_zname; - - return (fsysdep_modem_begin_dial (qconn, q) - && fchat (qconn, puuconf, &q->uuconf_schat, qsys, q, - zphone, FALSE, zname, iconn_baud (qconn)) - && fsysdep_modem_end_dial (qconn, q)); - } - else - { - ulog (LOG_ERROR, "No dialer information"); - return FALSE; - } -} diff --git a/gnu/libexec/uucp/common_sources/conn.h b/gnu/libexec/uucp/common_sources/conn.h deleted file mode 100644 index 09235ea..0000000 --- a/gnu/libexec/uucp/common_sources/conn.h +++ /dev/null @@ -1,319 +0,0 @@ -/* conn.h - Header file for routines which manipulate connections. - - Copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor - - This file is part of the Taylor UUCP package. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - This program 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 - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - The author of the program may be contacted at ian@airs.com or - c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144. - */ - -#ifndef CONN_H - -#define CONN_H - -#if ANSI_C -/* These structures are used in prototypes but are not defined in this - header file. */ -struct uuconf_system; -struct uuconf_dialer; -struct uuconf_chat; -#endif - -/* This structure represents a connection. */ - -struct sconnection -{ - /* Pointer to command table for this type of connection. */ - const struct sconncmds *qcmds; - /* Pointer to system dependent information. */ - pointer psysdep; - /* Pointer to system independent information. */ - struct uuconf_port *qport; -}; - -/* Whether fconn_dial got a dialer. */ - -enum tdialerfound -{ - /* Did not find a dialer. */ - DIALERFOUND_FALSE, - /* Found a dialer which does not need to be freed. */ - DIALERFOUND_TRUE, - /* Found a dialer which does need to be freed. */ - DIALERFOUND_FREE -}; - -/* Parity settings to pass to fconn_set. */ - -enum tparitysetting -{ - /* Do not change output parity generation. */ - PARITYSETTING_DEFAULT, - /* No parity (all eight output bits used). */ - PARITYSETTING_NONE, - /* Even parity. */ - PARITYSETTING_EVEN, - /* Odd parity. */ - PARITYSETTING_ODD, - /* Mark parity. */ - PARITYSETTING_MARK, - /* Space parity. */ - PARITYSETTING_SPACE -}; - -/* Type of strip control argument to fconn_set. */ - -enum tstripsetting -{ - /* Do not change the stripping of input characters. */ - STRIPSETTING_DEFAULT, - /* Do not strip input characters to seven bits. */ - STRIPSETTING_EIGHTBITS, - /* Strip input characters to seven bits. */ - STRIPSETTING_SEVENBITS -}; - -/* Type of XON/XOFF control argument to fconn_set. */ - -enum txonxoffsetting -{ - /* Do not change XON/XOFF handshake setting. */ - XONXOFF_DEFAULT, - /* Do not do XON/XOFF handshaking. */ - XONXOFF_OFF, - /* Do XON/XOFF handshaking. */ - XONXOFF_ON -}; - -/* A command table holds the functions which implement actions for - each different kind of connection. */ - -struct sconncmds -{ - /* Free up a connection. */ - void (*pufree) P((struct sconnection *qconn)); - /* Lock the connection. The fin argument is TRUE if the connection - is to be used for an incoming call. May be NULL. */ - boolean (*pflock) P((struct sconnection *qconn, boolean fin)); - /* Unlock the connection. May be NULL. */ - boolean (*pfunlock) P((struct sconnection *qconn)); - /* Open the connection. */ - boolean (*pfopen) P((struct sconnection *qconn, long ibaud, - boolean fwait)); - /* Close the connection. */ - boolean (*pfclose) P((struct sconnection *qconn, - pointer puuconf, - struct uuconf_dialer *qdialer, - boolean fsuccess)); - /* Dial a number on a connection. This set *qdialer to the dialer - used, if any, and sets *ptdialerfound appropriately. The qsys - and zphone arguments are for the chat script. This field may be - NULL. */ - boolean (*pfdial) P((struct sconnection *qconn, pointer puuconf, - const struct uuconf_system *qsys, - const char *zphone, - struct uuconf_dialer *qdialer, - enum tdialerfound *ptdialerfound)); - /* Read data from a connection, with a timeout in seconds. When - called *pclen is the length of the buffer; on successful return - *pclen is the number of bytes read into the buffer. The cmin - argument is the minimum number of bytes to read before returning - ahead of a timeout. */ - boolean (*pfread) P((struct sconnection *qconn, char *zbuf, size_t *pclen, - size_t cmin, int ctimeout, boolean freport)); - /* Write data to the connection. */ - boolean (*pfwrite) P((struct sconnection *qconn, const char *zbuf, - size_t clen)); - /* Read and write data to the connection. This reads and writes - data until either all passed in data has been written or the read - buffer has been filled. When called *pcread is the size of the - read buffer and *pcwrite is the number of bytes to write; on - successful return *pcread is the number of bytes read and - *pcwrite is the number of bytes written. */ - boolean (*pfio) P((struct sconnection *qconn, const char *zwrite, - size_t *pcwrite, char *zread, size_t *pcread)); - /* Send a break character. This field may be NULL. */ - boolean (*pfbreak) P((struct sconnection *qconn)); - /* Change the connection setting. This field may be NULL. */ - boolean (*pfset) P((struct sconnection *qconn, - enum tparitysetting tparity, - enum tstripsetting tstrip, - enum txonxoffsetting txonxoff)); - /* Require or ignore carrer. This field may be NULL. */ - boolean (*pfcarrier) P((struct sconnection *qconn, - boolean fcarrier)); - /* Run a chat program on a connection. */ - boolean (*pfchat) P((struct sconnection *qconn, char **pzprog)); - /* Get the baud rate of a connection. This field may be NULL. */ - long (*pibaud) P((struct sconnection *qconn)); -}; - -/* Connection functions. */ - -/* Initialize a connection. This must be called before any of the - other connection functions are called. It initializes the fields - of qconn. If qport is NULL, this opens standard input as a port - using type ttype. This function returns FALSE on error. */ -extern boolean fconn_init P((struct uuconf_port *qport, - struct sconnection *qconn, - enum uuconf_porttype ttype)); - -/* Free up connection data. */ -extern void uconn_free P((struct sconnection *qconn)); - -/* Lock a connection. The fin argument is TRUE if the port is to be - used for an incoming call; certains type of Unix locking need this - information because they need to open the port. */ -extern boolean fconn_lock P((struct sconnection *qconn, boolean fin)); - -/* Unlock a connection. */ -extern boolean fconn_unlock P((struct sconnection *qconn)); - -/* Open a connection. If ibaud is 0, the natural baud rate of the - port is used. If ihighbaud is not 0, fconn_open chooses the - highest supported baud rate between ibaud and ihighbaud. If fwait - is TRUE, this should wait for an incoming call. */ -extern boolean fconn_open P((struct sconnection *qconn, long ibaud, - long ihighbaud, boolean fwait)); - -/* Close a connection. The fsuccess argument is TRUE if the - conversation completed normally, FALSE if it is being aborted. */ -extern boolean fconn_close P((struct sconnection *qconn, - pointer puuconf, - struct uuconf_dialer *qdialer, - boolean fsuccess)); - -/* Dial out on a connection. The qsys and zphone arguments are for - the chat scripts; zphone is the phone number to dial. If qdialer - is not NULL, *qdialer will be set to the dialer information used if - any; *ptdialerfound will be set appropriately. */ -extern boolean fconn_dial P((struct sconnection *q, pointer puuconf, - const struct uuconf_system *qsys, - const char *zphone, - struct uuconf_dialer *qdialer, - enum tdialerfound *ptdialerfound)); - -/* Read from a connection. - zbuf -- buffer to read bytes into - *pclen on call -- length of zbuf - *pclen on successful return -- number of bytes read - cmin -- minimum number of bytes to read before returning ahead of timeout - ctimeout -- timeout in seconds, 0 if none - freport -- whether to report errors. */ -extern boolean fconn_read P((struct sconnection *qconn, char *zbuf, - size_t *pclen, size_t cmin, - int ctimeout, boolean freport)); - -/* Write to a connection. */ -extern boolean fconn_write P((struct sconnection *qconn, const char *zbuf, - size_t cbytes)); - -/* Read and write to a connection. This reads and writes data until - either all passed-in data has been written or the read buffer is - full. - zwrite -- buffer to write bytes from - *pcwrite on call -- number of bytes to write - *pcwrite on successful return -- number of bytes written - zread -- buffer to read bytes into - *pcread on call -- size of read buffer - *pcread on successful return -- number of bytes read. */ -extern boolean fconn_io P((struct sconnection *qconn, const char *zwrite, - size_t *pcwrite, char *zread, size_t *pcread)); - -/* Send a break character to a connection. */ -extern boolean fconn_break P((struct sconnection *qconn)); - -/* Change the settings of a connection. This allows independent - control over the parity of output characters, whether to strip - input characters, and whether to do XON/XOFF handshaking. There is - no explicit control over parity checking of input characters. This - function returns FALSE on error. Attempts to set values not - supported by the hardware are silently ignored. */ -extern boolean fconn_set P((struct sconnection *qconn, - enum tparitysetting tparity, - enum tstripsetting tstrip, - enum txonxoffsetting txonxoff)); - -/* Get the baud rate of a connection. */ -extern long iconn_baud P((struct sconnection *qconn)); - -/* Do a chat script with a system. */ -extern boolean fchat P((struct sconnection *qconn, pointer puuconf, - const struct uuconf_chat *qchat, - const struct uuconf_system *qsys, - const struct uuconf_dialer *qdialer, - const char *zphone, boolean ftranslate, - const char *zport, long ibaud)); - -/* Tell the connection to either require or ignore carrier as fcarrier - is TRUE or FALSE respectively. This is called with fcarrier TRUE - when \m is encountered in a chat script, and with fcarrier FALSE - when \M is encountered. */ -extern boolean fconn_carrier P((struct sconnection *qconn, - boolean fcarrier)); - -/* Run a chat program on a connection. */ -extern boolean fconn_run_chat P((struct sconnection *qconn, - char **pzprog)); - -/* Run through a dialer sequence. This is a support routine for the - port type specific dialing routines. */ -extern boolean fconn_dial_sequence P((struct sconnection *qconn, - pointer puuconf, char **pzdialer, - const struct uuconf_system *qsys, - const char *zphone, - struct uuconf_dialer *qdialer, - enum tdialerfound *ptdialerfound)); - -/* Dialing out on a modem is partially system independent. This is - the modem dialing routine. */ -extern boolean fmodem_dial P((struct sconnection *qconn, pointer puuconf, - const struct uuconf_system *qsys, - const char *zphone, - struct uuconf_dialer *qdialer, - enum tdialerfound *ptdialerfound)); - -/* Begin dialing out. This should open the dialer device if there is - one, toggle DTR if requested and possible, and tell the port to - ignore carrier. It should return FALSE on error. */ -extern boolean fsysdep_modem_begin_dial P((struct sconnection *qconn, - struct uuconf_dialer *qdial)); - -/* Finish dialing out on a modem. This should close the dialer device - if there is one. If the dialer and the port both support carrier, - the connection should be told to pay attention to carrier. If it - is possible to wait for carrier to come on, and the dialer and the - port both the port support carrier, it should wait until carrier - comes on. */ -extern boolean fsysdep_modem_end_dial P((struct sconnection *qconn, - struct uuconf_dialer *qdial)); - -/* System dependent initialization routines. */ -extern boolean fsysdep_stdin_init P((struct sconnection *qconn)); -extern boolean fsysdep_modem_init P((struct sconnection *qconn)); -extern boolean fsysdep_direct_init P((struct sconnection *qconn)); -#if HAVE_TCP -extern boolean fsysdep_tcp_init P((struct sconnection *qconn)); -#endif -#if HAVE_TLI -extern boolean fsysdep_tli_init P((struct sconnection *qconn)); -#endif -extern boolean fsysdep_pipe_init P((struct sconnection *qconn)); - -#endif /* ! defined (CONN_H) */ diff --git a/gnu/libexec/uucp/common_sources/copy.c b/gnu/libexec/uucp/common_sources/copy.c deleted file mode 100644 index a40276a..0000000 --- a/gnu/libexec/uucp/common_sources/copy.c +++ /dev/null @@ -1,236 +0,0 @@ -/* copy.c - Copy one file to another for the UUCP package. - - Copyright (C) 1991, 1992, 1995 Ian Lance Taylor - - This file is part of the Taylor UUCP package. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - This program 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 - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - The author of the program may be contacted at ian@airs.com or - c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144. - */ - -#include "uucp.h" - -#if USE_RCS_ID -const char copy_rcsid[] = "$FreeBSD$"; -#endif - -#include "uudefs.h" -#include "system.h" -#include "sysdep.h" - -#include <stdio.h> -#include <errno.h> - -/* Copy one file to another. */ - -#if USE_STDIO - -boolean -fcopy_file (zfrom, zto, fpublic, fmkdirs, fsignals) - const char *zfrom; - const char *zto; - boolean fpublic; - boolean fmkdirs; - boolean fsignals; -{ - FILE *efrom; - boolean fret; - - efrom = fopen (zfrom, BINREAD); - if (efrom == NULL) - { - ulog (LOG_ERROR, "fopen (%s): %s", zfrom, strerror (errno)); - return FALSE; - } - - fret = fcopy_open_file (efrom, zto, fpublic, fmkdirs, fsignals); - (void) fclose (efrom); - return fret; -} - -boolean -fcopy_open_file (efrom, zto, fpublic, fmkdirs, fsignals) - FILE *efrom; - const char *zto; - boolean fpublic; - boolean fmkdirs; - boolean fsignals; -{ - FILE *eto; - char ab[8192]; - int c; - - eto = esysdep_fopen (zto, fpublic, FALSE, fmkdirs); - if (eto == NULL) - return FALSE; - - while ((c = fread (ab, sizeof (char), sizeof ab, efrom)) != 0) - { - if (fwrite (ab, sizeof (char), (size_t) c, eto) != c) - { - ulog (LOG_ERROR, "fwrite: %s", strerror (errno)); - (void) fclose (eto); - (void) remove (zto); - return FALSE; - } - if (fsignals && FGOT_SIGNAL ()) - { - /* Log the signal. */ - ulog (LOG_ERROR, (const char *) NULL); - (void) fclose (eto); - (void) remove (zto); - return FALSE; - } - } - - if (! fsysdep_sync (eto, zto)) - { - (void) fclose (eto); - (void) remove (zto); - return FALSE; - } - - if (fclose (eto) != 0) - { - ulog (LOG_ERROR, "fclose: %s", strerror (errno)); - (void) remove (zto); - return FALSE; - } - - return TRUE; -} - -#else /* ! USE_STDIO */ - -#if HAVE_FCNTL_H -#include <fcntl.h> -#else -#if HAVE_SYS_FILE_H -#include <sys/file.h> -#endif -#endif - -#ifndef O_RDONLY -#define O_RDONLY 0 -#define O_WRONLY 1 -#define O_RDWR 2 -#endif - -#ifndef O_NOCTTY -#define O_NOCTTY 0 -#endif - -boolean -fcopy_file (zfrom, zto, fpublic, fmkdirs, fsignals) - const char *zfrom; - const char *zto; - boolean fpublic; - boolean fmkdirs; - boolean fsignals; -{ - int ofrom; - boolean fret; - - ofrom = open (zfrom, O_RDONLY | O_NOCTTY, 0); - if (ofrom < 0) - { - ulog (LOG_ERROR, "open (%s): %s", zfrom, strerror (errno)); - return FALSE; - } - - fret = fcopy_open_file (ofrom, zto, fpublic, fmkdirs, fsignals); - (void) close (ofrom); - return fret; -} - -boolean -fcopy_open_file (ofrom, zto, fpublic, fmkdirs, fsignals) - int ofrom; - const char *zto; - boolean fpublic; - boolean fmkdirs; - boolean fsignals; -{ - int oto; - char ab[8192]; - int c; - - /* These file mode arguments are from the UNIX version of sysdep.h; - each system dependent header file will need their own - definitions. */ - oto = creat (zto, fpublic ? IPUBLIC_FILE_MODE : IPRIVATE_FILE_MODE); - if (oto < 0) - { - if (errno == ENOENT && fmkdirs) - { - if (! fsysdep_make_dirs (zto, fpublic)) - return FALSE; - oto = creat (zto, - fpublic ? IPUBLIC_FILE_MODE : IPRIVATE_FILE_MODE); - } - if (oto < 0) - { - ulog (LOG_ERROR, "open (%s): %s", zto, strerror (errno)); - return FALSE; - } - } - - while ((c = read (ofrom, ab, sizeof ab)) > 0) - { - if (write (oto, ab, (size_t) c) != c) - { - ulog (LOG_ERROR, "write: %s", strerror (errno)); - (void) close (oto); - (void) remove (zto); - return FALSE; - } - if (fsignals && FGOT_SIGNAL ()) - { - /* Log the signal. */ - ulog (LOG_ERROR, (const char *) NULL); - (void) fclose (eto); - (void) remove (zto); - return FALSE; - } - } - - if (! fsysdep_sync (oto, zto)) - { - (void) close (oto); - (void) remove (zto); - return FALSE; - } - - if (close (oto) < 0) - { - ulog (LOG_ERROR, "close: %s", strerror (errno)); - (void) remove (zto); - return FALSE; - } - - if (c < 0) - { - ulog (LOG_ERROR, "read: %s", strerror (errno)); - (void) remove (zto); - return FALSE; - } - - return TRUE; -} - -#endif /* ! USE_STDIO */ diff --git a/gnu/libexec/uucp/common_sources/cu.h b/gnu/libexec/uucp/common_sources/cu.h deleted file mode 100644 index 8c22670..0000000 --- a/gnu/libexec/uucp/common_sources/cu.h +++ /dev/null @@ -1,80 +0,0 @@ -/* cu.h - Header file for cu. - - Copyright (C) 1992 Ian Lance Taylor - - This file is part of the Taylor UUCP package. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - This program 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 - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - The author of the program may be contacted at ian@airs.com or - c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144. - */ - -/* The user settable variables supported by cu. */ - -/* The escape character used to introduce a special command. The - escape character is the first character of this string. */ -extern const char *zCuvar_escape; - -/* Whether to delay for a second before printing the host name after - seeing an escape character. */ -extern boolean fCuvar_delay; - -/* The input characters which finish a line. The escape character is - only recognized following one of these characters. */ -extern const char *zCuvar_eol; - -/* Whether to transfer binary data (nonprintable characters other than - newline and tab) when sending a file. If this is FALSE, then - newline is changed to carriage return. */ -extern boolean fCuvar_binary; - -/* A prefix string to use before sending a binary character from a - file; this is only used if fCuvar_binary is TRUE. */ -extern const char *zCuvar_binary_prefix; - -/* Whether to check for echoes of characters sent when sending a file. - This is ignored if fCuvar_binary is TRUE. */ -extern boolean fCuvar_echocheck; - -/* A character to look for after each newline is sent when sending a - file. The character is the first character in this string, except - that a '\0' means that no echo check is done. */ -extern const char *zCuvar_echonl; - -/* The timeout to use when looking for an character. */ -extern int cCuvar_timeout; - -/* The character to use to kill a line if an echo check fails. The - first character in this string is sent. */ -extern const char *zCuvar_kill; - -/* The number of times to try resending a line if the echo check keeps - failing. */ -extern int cCuvar_resend; - -/* The string to send at the end of a file sent with ~>. */ -extern const char *zCuvar_eofwrite; - -/* The string to look for to finish a file received with ~<. For tip - this is a collection of single characters, but I don't want to do - that because it means that there are characters which cannot be - received. */ -extern const char *zCuvar_eofread; - -/* Whether to provide verbose information when sending or receiving a - file. */ -extern boolean fCuvar_verbose; diff --git a/gnu/libexec/uucp/common_sources/getopt.h b/gnu/libexec/uucp/common_sources/getopt.h deleted file mode 100644 index 61e2954..0000000 --- a/gnu/libexec/uucp/common_sources/getopt.h +++ /dev/null @@ -1,133 +0,0 @@ -/* Declarations for getopt. - Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - This file was modified slightly by Ian Lance Taylor, November 1992, - for Taylor UUCP, and again in June, 1995. */ - -#ifndef _GETOPT_H -#define _GETOPT_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* Ian Lance Taylor <ian@airs.com> added the following defines for - Taylor UUCP. This avoids reported conflicts with system getopt - definitions. */ -#define getopt gnu_getopt -#define optarg gnu_optarg -#define optind gnu_optind -#define opterr gnu_opterr - -/* For communication from `getopt' to the caller. - When `getopt' finds an option that takes an argument, - the argument value is returned here. - Also, when `ordering' is RETURN_IN_ORDER, - each non-option ARGV-element is returned here. */ - -extern char *optarg; - -/* Index in ARGV of the next element to be scanned. - This is used for communication to and from the caller - and for communication between successive calls to `getopt'. - - On entry to `getopt', zero means this is the first call; initialize. - - When `getopt' returns EOF, this is the index of the first of the - non-option elements that the caller should itself scan. - - Otherwise, `optind' communicates from one call to the next - how much of ARGV has been scanned so far. */ - -extern int optind; - -/* Callers store zero here to inhibit the error message `getopt' prints - for unrecognized options. */ - -extern int opterr; - -/* Describe the long-named options requested by the application. - The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector - of `struct option' terminated by an element containing a name which is - zero. - - The field `has_arg' is: - no_argument (or 0) if the option does not take an argument, - required_argument (or 1) if the option requires an argument, - optional_argument (or 2) if the option takes an optional argument. - - If the field `flag' is not NULL, it points to a variable that is set - to the value given in the field `val' when the option is found, but - left unchanged if the option is not found. - - To have a long-named option do something other than set an `int' to - a compiled-in constant, such as set a value from `optarg', set the - option's `flag' field to zero and its `val' field to a nonzero - value (the equivalent single-letter option character, if there is - one). For long options that have a zero `flag' field, `getopt' - returns the contents of the `val' field. */ - -struct option -{ - const char *name; - /* has_arg can't be an enum because some compilers complain about - type mismatches in all the code that assumes it is an int. */ - int has_arg; - int *flag; - int val; -}; - -/* Names for the values of the `has_arg' field of `struct option'. */ - -enum _argtype -{ - no_argument, - required_argument, - optional_argument -}; - -#ifndef P -/* On some systems, <stdio.h> includes getopt.h before P is defined by - uucp.h, and the -I arguments cause this version of getopt.h to be - included. Work around that here. */ -#define P(x) () -#define UNDEFINE_P -#endif - -extern int getopt P((int argc, char *const *argv, const char *shortopts)); -extern int getopt_long P((int argc, char *const *argv, const char *shortopts, - const struct option *longopts, int *longind)); -extern int getopt_long_only P((int argc, char *const *argv, - const char *shortopts, - const struct option *longopts, int *longind)); - -/* Internal only. Users should not call this directly. */ -extern int _getopt_internal P((int argc, char *const *argv, - const char *shortopts, - const struct option *longopts, int *longind, - int long_only)); - -#ifdef UNDEFINE_P -#undef P -#undef UNDEFINE_P -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* _GETOPT_H */ diff --git a/gnu/libexec/uucp/common_sources/log.c b/gnu/libexec/uucp/common_sources/log.c deleted file mode 100644 index 6661b3c..0000000 --- a/gnu/libexec/uucp/common_sources/log.c +++ /dev/null @@ -1,775 +0,0 @@ -/* log.c - Routines to add entries to the log files. - - Copyright (C) 1991, 1992, 1993, 1994, 1995 Ian Lance Taylor - - This file is part of the Taylor UUCP package. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - This program 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 - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - The author of the program may be contacted at ian@airs.com or - c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144. - */ - -#include "uucp.h" - -#if USE_RCS_ID -const char log_rcsid[] = "$FreeBSD$"; -#endif - -#include <ctype.h> -#include <errno.h> - -#if HAVE_STDARG_H -#include <stdarg.h> -#endif - -#if TM_IN_SYS_TIME -#include <sys/time.h> -#else -#include <time.h> -#endif - -#include "uudefs.h" -#include "uuconf.h" -#include "system.h" - -/* Local functions. */ - -__inline__ static char *zstpcpy P((char *zto, const char *zfrom)); -static const char *zldate_and_time P((void)); - -/* Program name. Set by main function. */ -const char *zProgram; - -/* Log file name. */ -static const char *zLogfile; - -/* The function to call when a LOG_FATAL error occurs. */ -static void (*pfLfatal) P((void)); - -/* Whether to go to a file. */ -static boolean fLfile; - -/* ID number. */ -static int iLid; - -/* The current user name. */ -static char *zLuser; - -/* The current system name. */ -static char *zLsystem; - -/* The current device name. */ -char *zLdevice; - -/* The open log file. */ -static FILE *eLlog; - -/* Whether we have tried to open the log file. We need this because - we don't want to keep trying to open the log file if we failed the - first time. It can't be static because under HAVE_HDB_LOGGING we - may have to write to various different log files. */ -static boolean fLlog_tried; - -#if DEBUG > 1 -/* Debugging file name. */ -static const char *zLdebugfile; - -/* The open debugging file. */ -static FILE *eLdebug; - -/* Whether we've tried to open the debugging file. */ -static boolean fLdebug_tried; -#endif - -/* Statistics file name. */ -static const char *zLstatsfile; - -/* The open statistics file. */ -static FILE *eLstats; - -/* Whether we've tried to open the statistics file. */ -static boolean fLstats_tried; - -/* The array of signals. The elements are only set to TRUE by the - default signal handler. They are only set to FALSE if we don't - care whether we got the signal or not. */ -volatile sig_atomic_t afSignal[INDEXSIG_COUNT]; - -/* The array of signals to log. The elements are only set to TRUE by - the default signal handler. They are set to FALSE when the signal - is logged in ulog. This means that if a signal comes in at just - the right time we won't log it (or, rather, we'll log it once - instead of twice), but that is not a catatrophe. */ -volatile sig_atomic_t afLog_signal[INDEXSIG_COUNT]; - -/* Flag that indicates SIGHUP is worth logging. */ -boolean fLog_sighup = TRUE; - -/* Signal names to use when logging signals. */ -static const char * const azSignal_names[INDEXSIG_COUNT] = INDEXSIG_NAMES; - -/* If not NULL, ulog calls this function before outputting anything. - This is used to support cu. */ -void (*pfLstart) P((void)); - -/* If not NULL, ulog calls this function after outputting everything. - This is used to support cu. */ -void (*pfLend) P((void)); - -/* Set the function to call on a LOG_FATAL error. */ - -void -ulog_fatal_fn (pfn) - void (*pfn) P((void)); -{ - pfLfatal = pfn; -} - -/* Decide whether to send log message to the file or not. */ - -void -ulog_to_file (puuconf, ffile) - pointer puuconf; - boolean ffile; -{ - int iuuconf; - - iuuconf = uuconf_logfile (puuconf, &zLogfile); - if (iuuconf != UUCONF_SUCCESS) - ulog_uuconf (LOG_FATAL, puuconf, iuuconf); - -#if DEBUG > 1 - iuuconf = uuconf_debugfile (puuconf, &zLdebugfile); - if (iuuconf != UUCONF_SUCCESS) - ulog_uuconf (LOG_FATAL, puuconf, iuuconf); -#endif - - iuuconf = uuconf_statsfile (puuconf, &zLstatsfile); - if (iuuconf != UUCONF_SUCCESS) - ulog_uuconf (LOG_FATAL, puuconf, iuuconf); - - fLfile = ffile; -} - -/* Set the ID number. This will be called by the usysdep_initialize - if there is something sensible to set it to. */ - -void -ulog_id (i) - int i; -{ - iLid = i; -} - -/* Set the user we are making log entries for. The arguments will be - copied into memory. */ - -void -ulog_user (zuser) - const char *zuser; -{ - ubuffree (zLuser); - zLuser = zbufcpy (zuser); -} - -/* Set the system name we are making log entries for. The name is copied - into memory. */ - -void -ulog_system (zsystem) - const char *zsystem; -{ - if (zsystem == NULL - || zLsystem == NULL - || strcmp (zsystem, zLsystem) != 0) - { - ubuffree (zLsystem); - zLsystem = zbufcpy (zsystem); -#if HAVE_HDB_LOGGING - /* Under HDB logging we now must write to a different log file. */ - ulog_close (); -#endif /* HAVE_HDB_LOGGING */ - } -} - -/* Set the device name. This is copied into memory. */ - -void -ulog_device (zdevice) - const char *zdevice; -{ - ubuffree (zLdevice); - zLdevice = zbufcpy (zdevice); -} - -/* A helper function for ulog. */ - -__inline__ static char * -zstpcpy (zto, zfrom) - char *zto; - const char *zfrom; -{ - while ((*zto++ = *zfrom++) != '\0') - ; - return zto - 1; -} - -/* Make a log entry. We make a token concession to non ANSI_C systems, - but it clearly won't always work. */ - -#if ! HAVE_PROTOTYPES || ! HAVE_STDARG_H -#undef HAVE_VFPRINTF -#define HAVE_VFPRINTF 0 -#endif - -/*VARARGS2*/ -#if HAVE_VFPRINTF -void -ulog (enum tlog ttype, const char *zmsg, ...) -#else -void -ulog (ttype, zmsg, a, b, c, d, f, g, h, i, j) - enum tlog ttype; - const char *zmsg; -#endif -{ -#if HAVE_VFPRINTF - va_list parg; -#endif - FILE *e, *edebug; - boolean fstart, fend; - const char *zhdr; - char *zprefix; - register char *zset; - char *zformat; - char *zfrom; - - /* Log any received signal. We do it this way to avoid calling ulog - from the signal handler. A few routines call ulog to get this - message out with zmsg == NULL. */ - { - static boolean fdoing_sigs; - - if (! fdoing_sigs) - { - int isig; - - fdoing_sigs = TRUE; - for (isig = 0; isig < INDEXSIG_COUNT; isig++) - { - if (afLog_signal[isig]) - { - afLog_signal[isig] = FALSE; - - /* Apparently SunOS sends SIGINT rather than SIGHUP - when hanging up, so we don't log either signal if - fLog_sighup is FALSE. */ - if ((isig != INDEXSIG_SIGHUP && isig != INDEXSIG_SIGINT) - || fLog_sighup) - ulog (LOG_ERROR, "Got %s signal", azSignal_names[isig]); - } - } - fdoing_sigs = FALSE; - } - } - -#if DEBUG > 1 - /* If we've had a debugging file open in the past, then we want to - write all log file entries to the debugging file even if it's - currently closed. */ - if (fLfile - && eLdebug == NULL - && ! fLdebug_tried - && iDebug != 0) - { - fLdebug_tried = TRUE; - eLdebug = esysdep_fopen (zLdebugfile, FALSE, TRUE, TRUE); - } -#endif /* DEBUG > 1 */ - - if (! fLfile) - e = stderr; -#if DEBUG > 1 - else if ((int) ttype >= (int) LOG_DEBUG) - { - e = eLdebug; - - /* If we can't open the debugging file, don't output any - debugging messages. */ - if (e == NULL) - return; - } -#endif /* DEBUG > 1 */ - else - { - if (eLlog == NULL && ! fLlog_tried) - { - const char *zprint = NULL; - - fLlog_tried = TRUE; -#if ! HAVE_HDB_LOGGING - eLlog = esysdep_fopen (zLogfile, TRUE, TRUE, TRUE); - zprint = zLogfile; -#else /* HAVE_HDB_LOGGING */ - { - const char *zsys; - char *zbase; - char *zlower; - char *zfile; - - /* We want to write to .Log/program/system, e.g. - .Log/uucico/uunet. The system name may not be set. */ - if (zLsystem == NULL) - zsys = "ANY"; - else - zsys = zLsystem; - - zbase = zsysdep_base_name (zProgram); - if (zbase == NULL) - zbase = zbufcpy (zProgram); - - /* On some systems the native uusched will invoke uucico - with an upper case argv[0]. We work around that by - forcing the filename to lower case here. */ - for (zlower = zbase; *zlower != '\0'; zlower++) - if (isupper (*zlower)) - *zlower = tolower (*zlower); - - zfile = zbufalc (strlen (zLogfile) - + strlen (zbase) - + strlen (zsys) - + 1); - sprintf (zfile, zLogfile, zbase, zsys); - ubuffree (zbase); - eLlog = esysdep_fopen (zfile, TRUE, TRUE, TRUE); - if (eLlog != NULL) - ubuffree (zfile); - else - zprint = zfile; - } -#endif /* HAVE_HDB_LOGGING */ - - if (eLlog == NULL) - { - /* We can't open the log file. We report the problem to - stderr. This is not ideal, since if this is uucico - running on an inbound call stderr is actually - connected to a remote system, but is better than - doing nothing. */ - fprintf (stderr, "%s: %s: can not open log file: %s\n", - zProgram, zprint, strerror (errno)); - if (pfLfatal != NULL) - (*pfLfatal) (); - usysdep_exit (FALSE); - } - } - - e = eLlog; - - /* eLlog might be NULL here because we might try to open the log - file recursively via esysdep_fopen. */ - if (e == NULL) - return; - } - - if (zmsg == NULL) - return; - - if (pfLstart != NULL) - (*pfLstart) (); - - edebug = NULL; -#if DEBUG > 1 - if ((int) ttype < (int) LOG_DEBUG) - edebug = eLdebug; -#endif - - fstart = TRUE; - fend = TRUE; - - switch (ttype) - { - case LOG_NORMAL: - zhdr = ""; - break; - case LOG_ERROR: - zhdr = "ERROR: "; - break; - case LOG_FATAL: - zhdr = "FATAL: "; - break; -#if DEBUG > 1 - case LOG_DEBUG: - zhdr = "DEBUG: "; - break; - case LOG_DEBUG_START: - zhdr = "DEBUG: "; - fend = FALSE; - break; - case LOG_DEBUG_CONTINUE: - zhdr = NULL; - fstart = FALSE; - fend = FALSE; - break; - case LOG_DEBUG_END: - zhdr = NULL; - fstart = FALSE; - break; -#endif - default: - zhdr = "???: "; - break; - } - - if (! fstart) - zprefix = zbufcpy (""); - else - { - if (! fLfile) - { - zprefix = zbufalc (strlen (zProgram) + 3); - sprintf (zprefix, "%s: ", zProgram); - } - else - { - zprefix = zbufalc (strlen (zProgram) - + (zLsystem == NULL ? 1 : strlen (zLsystem)) - + (zLuser == NULL ? 4 : strlen (zLuser)) - + sizeof "1991-12-31 12:00:00.00" - + strlen (zhdr) - + 100); - zset = zprefix; -#if HAVE_TAYLOR_LOGGING - { - char *zbase; - - zbase = zsysdep_base_name (zProgram); - if (zbase == NULL) - zbase = zbufcpy (zProgram); - zset = zstpcpy (zset, zbase); - *zset++ = ' '; - ubuffree (zbase); - } -#else /* ! HAVE_TAYLOR_LOGGING */ - zset = zstpcpy (zset, zLuser == NULL ? "uucp" : zLuser); - *zset++ = ' '; -#endif /* HAVE_TAYLOR_LOGGING */ - - zset = zstpcpy (zset, zLsystem == NULL ? "-" : zLsystem); - *zset++ = ' '; - -#if HAVE_TAYLOR_LOGGING - zset = zstpcpy (zset, zLuser == NULL ? "-" : zLuser); - *zset++ = ' '; -#endif /* HAVE_TAYLOR_LOGGING */ - - *zset++ = '('; - zset = zstpcpy (zset, zldate_and_time ()); - - if (iLid != 0) - { -#if ! HAVE_HDB_LOGGING -#if HAVE_TAYLOR_LOGGING - sprintf (zset, " %d", iLid); -#else /* ! HAVE_TAYLOR_LOGGING */ - sprintf (zset, "-%d", iLid); -#endif /* ! HAVE_TAYLOR_LOGGING */ -#else /* HAVE_HDB_LOGGING */ - /* I assume that the second number here is meant to be - some sort of file sequence number, and that it should - correspond to the sequence number in the statistics - file. I don't have any really convenient way to do - this, so I won't unless somebody thinks it's very - important. */ - sprintf (zset, ",%d,%d", iLid, 0); -#endif /* HAVE_HDB_LOGGING */ - - zset += strlen (zset); - } - -#if QNX_LOG_NODE_ID - sprintf (zset, " %ld", (long) getnid ()); - zset += strlen (zset); -#endif - - *zset++ = ')'; - *zset++ = ' '; - - strcpy (zset, zhdr); - } - } - - zformat = zbufalc (2 * strlen (zprefix) + strlen (zmsg) + 2); - - zset = zformat; - zfrom = zprefix; - while (*zfrom != '\0') - { - if (*zfrom == '%') - *zset++ = '%'; - *zset++ = *zfrom++; - } - - ubuffree (zprefix); - - zset = zstpcpy (zset, zmsg); - - if (fend) - { - *zset++ = '\n'; - *zset = '\0'; - } - -#if HAVE_VFPRINTF - va_start (parg, zmsg); - vfprintf (e, zformat, parg); - va_end (parg); - if (edebug != NULL) - { - va_start (parg, zmsg); - vfprintf (edebug, zformat, parg); - va_end (parg); - } -#else /* ! HAVE_VFPRINTF */ - fprintf (e, zformat, a, b, c, d, f, g, h, i, j); - if (edebug != NULL) - fprintf (edebug, zformat, a, b, c, d, f, g, h, i, j); -#endif /* ! HAVE_VFPRINTF */ - - ubuffree (zformat); - - (void) fflush (e); - if (edebug != NULL) - (void) fflush (edebug); - - if (pfLend != NULL) - (*pfLend) (); - - if (ttype == LOG_FATAL) - { - if (pfLfatal != NULL) - (*pfLfatal) (); - usysdep_exit (FALSE); - } - -#if CLOSE_LOGFILES - ulog_close (); -#endif -} - -/* Log a uuconf error. */ - -void -ulog_uuconf (ttype, puuconf, iuuconf) - enum tlog ttype; - pointer puuconf; - int iuuconf; -{ - char ab[512]; - - (void) uuconf_error_string (puuconf, iuuconf, ab, sizeof ab); - ulog (ttype, "%s", ab); -} - -/* Close the log file. There's nothing useful we can do with errors, - so we don't check for them. */ - -void -ulog_close () -{ - /* Make sure we logged any signal we received. */ - ulog (LOG_ERROR, (const char *) NULL); - - if (eLlog != NULL) - { - (void) fclose (eLlog); - eLlog = NULL; - fLlog_tried = FALSE; - } - -#if DEBUG > 1 - if (eLdebug != NULL) - { - (void) fclose (eLdebug); - eLdebug = NULL; - fLdebug_tried = FALSE; - } -#endif -} - -/* Add an entry to the statistics file. We may eventually want to put - failed file transfers in here, but we currently do not. */ - -/*ARGSUSED*/ -void -ustats (fsucceeded, zuser, zsystem, fsent, cbytes, csecs, cmicros, fcaller) - boolean fsucceeded; - const char *zuser; - const char *zsystem; - boolean fsent; - long cbytes; - long csecs; - long cmicros; - boolean fcaller; -{ - long cbps; - - /* The seconds and microseconds are now counted independently, so - they may be out of synch. */ - if (cmicros < 0) - { - csecs -= ((- cmicros) / 1000000L) + 1; - cmicros = 1000000L - ((- cmicros) % 1000000L); - } - if (cmicros >= 1000000L) - { - csecs += cmicros / 10000000L; - cmicros = cmicros % 1000000L; - } - - /* On a system which can determine microseconds we might very well - have both csecs == 0 and cmicros == 0. */ - if (csecs == 0 && cmicros < 1000) - cbps = 0; - else - { - long cmillis, cdiv, crem; - - /* Compute ((csecs * 1000) / cmillis) using integer division. - Where DIV is integer division, we know - a = (a DIV b) * b + a % b - so - a / b = (a DIV b) + (a % b) / b - We compute the latter with a as csecs and b as cmillis, - mixing the multiplication by 1000. */ - cmillis = csecs * 1000 + cmicros / 1000; - cdiv = (cbytes / cmillis) * 1000; - crem = (cbytes % cmillis) * 1000; - cbps = cdiv + (crem / cmillis); - if (cmillis < 0 || cdiv < 0 || crem < 0 || cbps < 0) - { - /* We overflowed using milliseconds, so use seconds. */ - cbps = cbytes / (csecs + ((cmicros > 500000L) ? 1 : 0)); - } - } - - if (eLstats == NULL) - { - if (fLstats_tried) - return; - fLstats_tried = TRUE; - eLstats = esysdep_fopen (zLstatsfile, TRUE, TRUE, TRUE); - if (eLstats == NULL) - return; - } - -#if HAVE_TAYLOR_LOGGING - fprintf (eLstats, - "%s %s (%s) %s%s %ld bytes in %ld.%03ld seconds (%ld bytes/sec) on port %s\n", - zuser, zsystem, zldate_and_time (), - fsucceeded ? "" : "failed after ", - fsent ? "sent" : "received", - cbytes, csecs, cmicros / 1000, cbps, - zLdevice == NULL ? "unknown" : zLdevice); -#endif /* HAVE_TAYLOR_LOGGING */ -#if HAVE_V2_LOGGING - fprintf (eLstats, - "%s %s (%s) (%ld) %s %s %ld bytes %ld seconds\n", - zuser, zsystem, zldate_and_time (), - (long) time ((time_t *) NULL), - fsent ? "sent" : "received", - fsucceeded ? "data" : "failed after", - cbytes, csecs + cmicros / 500000); -#endif /* HAVE_V2_LOGGING */ -#if HAVE_HDB_LOGGING - { - static int iseq; - - /* I don't know what the 'C' means. The sequence number should - probably correspond to the sequence number in the log file, but - that is currently always 0; using this fake sequence number - will still at least reveal which transfers are from different - calls. */ - ++iseq; - fprintf (eLstats, - "%s!%s %c (%s) (C,%d,%d) [%s] %s %ld / %ld.%03ld secs, %ld%s%s\n", - zsystem, zuser, fcaller ? 'M' : 'S', zldate_and_time (), - iLid, iseq, zLdevice == NULL ? "unknown" : zLdevice, - fsent ? "->" : "<-", - cbytes, csecs, cmicros / 1000, cbps, - " bytes/sec", - fsucceeded ? "" : " [PARTIAL FILE]"); - } -#endif /* HAVE_HDB_LOGGING */ - - (void) fflush (eLstats); - -#if CLOSE_LOGFILES - ustats_close (); -#endif -} - -/* Close the statistics file. */ - -void -ustats_close () -{ - if (eLstats != NULL) - { - if (fclose (eLstats) != 0) - ulog (LOG_ERROR, "fclose: %s", strerror (errno)); - eLstats = NULL; - fLstats_tried = FALSE; - } -} - -/* Return the date and time in a form used for a log entry. */ - -static const char * -zldate_and_time () -{ - long isecs, imicros; - struct tm s; -#if HAVE_TAYLOR_LOGGING - static char ab[sizeof "1991-12-31 12:00:00.00"]; -#endif -#if HAVE_V2_LOGGING - static char ab[sizeof "12/31-12:00"]; -#endif -#if HAVE_HDB_LOGGING - static char ab[sizeof "12/31-12:00:00"]; -#endif - - isecs = ixsysdep_time (&imicros); - usysdep_localtime (isecs, &s); - -#if HAVE_TAYLOR_LOGGING - sprintf (ab, "%04d-%02d-%02d %02d:%02d:%02d.%02d", - s.tm_year + 1900, s.tm_mon + 1, s.tm_mday, s.tm_hour, - s.tm_min, s.tm_sec, (int) (imicros / 10000)); -#endif -#if HAVE_V2_LOGGING - sprintf (ab, "%d/%d-%02d:%02d", s.tm_mon + 1, s.tm_mday, - s.tm_hour, s.tm_min); -#endif -#if HAVE_HDB_LOGGING - sprintf (ab, "%d/%d-%d:%02d:%02d", s.tm_mon + 1, s.tm_mday, - s.tm_hour, s.tm_min, s.tm_sec); -#endif - - return ab; -} diff --git a/gnu/libexec/uucp/common_sources/policy.h b/gnu/libexec/uucp/common_sources/policy.h deleted file mode 100644 index da118b6..0000000 --- a/gnu/libexec/uucp/common_sources/policy.h +++ /dev/null @@ -1,703 +0,0 @@ -/* policy.h - Configuration file for policy decisions. To be edited on site. - - Copyright (C) 1991, 1992, 1993, 1994, 1995 Ian Lance Taylor - - This file is part of the Taylor UUCP package. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - This program 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 - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - The author of the program may be contacted at ian@airs.com or - c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144. - */ - -/* This header file contains macro definitions which must be set by - each site before compilation. The first few are system - characteristics that can not be easily discovered by the - configuration script. Most are configuration decisions that must - be made by the local administrator. */ - -/* System characteristics. */ - -/* This code tries to use several ANSI C features, including - prototypes, stdarg.h, the const qualifier and the types void - (including void * pointers) and unsigned char. By default it will - use these features if the compiler defines __STDC__. If your - compiler supports these features but does not define __STDC__, you - should set ANSI_C to 1. If your compiler does not support these - features but defines __STDC__ (no compiler should do this, in my - opinion), you should set ANSI_C to 0. In most cases (or if you're - not sure) just leave the line below commented out. */ -/* #define ANSI_C 1 */ - -/* Set USE_STDIO to 1 if data files should be read using the stdio - routines (fopen, fread, etc.) rather than the UNIX unbuffered I/O - calls (open, read, etc.). Unless you know your stdio is really - rotten, you should leave this as 1. */ -#define USE_STDIO 1 - -/* Exactly one of the following macros must be set to 1. Many modern - systems support more than one of these choices through some form of - compilation environment, in which case the setting will depend on - the compilation environment you use. If you have a reasonable - choice between options, I suspect that TERMIO or TERMIOS will be - more efficient than TTY, but I have not done any head to head - comparisons. - - If you don't set any of these macros, the code below will guess. - It will doubtless be wrong on some systems. - - HAVE_BSD_TTY -- Use the 4.2BSD tty routines - HAVE_SYSV_TERMIO -- Use the System V termio routines - HAVE_POSIX_TERMIOS -- Use the POSIX termios routines - */ -#define HAVE_BSD_TTY 0 -#define HAVE_SYSV_TERMIO 0 -#define HAVE_POSIX_TERMIOS 1 - -/* This code tries to guess which terminal driver to use if you did - not make a choice above. It is in this file to make it easy to - figure out what's happening if something goes wrong. */ - -#if HAVE_BSD_TTY + HAVE_SYSV_TERMIO + HAVE_POSIX_TERMIOS == 0 -#if HAVE_TERMIOS_H -#undef HAVE_POSIX_TERMIOS -#define HAVE_POSIX_TERMIOS 1 -#else /* ! HAVE_TERMIOS_H */ -#if HAVE_CBREAK -#undef HAVE_BSD_TTY -#define HAVE_BSD_TTY 1 -#else /* ! HAVE_CBREAK */ -#undef HAVE_SYSV_TERMIO -#define HAVE_SYSV_TERMIO 1 -#endif /* ! HAVE_CBREAK */ -#endif /* ! HAVE_TERMIOS_H */ -#endif /* HAVE_BSD_TTY + HAVE_SYSV_TERMIO + HAVE_POSIX_TERMIOS == 0 */ - -/* On some systems a write to a serial port will block even if the - file descriptor has been set to not block. File transfer can be - more efficient if the package knows that a write to the serial port - will not block; however, if the write does block unexpectedly then - data loss is possible at high speeds. - - If writes to a serial port always block even when requested not to, - you should set HAVE_UNBLOCKED_WRITES to 0; otherwise you should set - it to 1. In general on System V releases without STREAMS-based - ttys (e.g., before SVR4) HAVE_UNBLOCKED_WRITES should be 0 and on - BSD or SVR4 it should be 1. - - If HAVE_UNBLOCKED_WRITES is set to 1 when it should be 0 you may - see an unexpectedly large number of transmission errors, or, if you - have hardware handshaking, transfer times may be lower than - expected (but then, they always are). If HAVE_UNBLOCKED_WRITES is - set to 0 when it should be 1, file transfer will use more CPU time - than necessary. If you are unsure, setting HAVE_UNBLOCKED_WRITES - to 0 should always be safe. */ -#define HAVE_UNBLOCKED_WRITES 1 - -/* When the code does do a blocking write, it wants to write the - largest amount of data which the kernel will accept as a single - unit. On BSD this is typically the value of OBUFSIZ in - <sys/tty.h>, usually 100. On System V before SVR4 this is - typically the size of a clist, CLSIZE in <sys/tty.h>, which is - usually 64. On SVR4, which uses STREAMS-based ttys, 2048 is - reasonable. Define SINGLE_WRITE to the correct value for your - system. If SINGLE_WRITE is too large, data loss may occur. If - SINGLE_WRITE is too small, file transfer will use more CPU time - than necessary. If you have no idea, 64 should work on most modern - systems. */ -#define SINGLE_WRITE 100 - -/* Some tty drivers, such as those from SCO and AT&T's Unix PC, have a - bug in the implementation of ioctl() that causes CLOCAL to be - ineffective until the port is opened a second time. If - HAVE_CLOCAL_BUG is set to 1, code will be added to do this second - open on the port. Set this if you are getting messages that say - "Line disconnected" while in the dial chat script after only - writing the first few characters to the port. This bug causes the - resetting of CLOCAL to have no effect, so the "\m" (require - carrier) escape sequence won't function properly in dialer chat - scripts. */ -#define HAVE_CLOCAL_BUG 0 - -/* On some systems, such as SCO Xenix, resetting DTR on a port - apparently prevents getty from working on the port, and thus - prevents anybody from dialing in. If HAVE_RESET_BUG is set to 1, - DTR will not be reset when a serial port is closed. */ -#define HAVE_RESET_BUG 0 - -/* The Sony NEWS reportedly handles no parity by clearing both the odd - and even parity bits in the sgtty structure, unlike most BSD based - systems in which no parity is indicated by setting both the odd and - even parity bits. Setting HAVE_PARITY_BUG to 1 will handle this - correctly. */ -#define HAVE_PARITY_BUG 0 - -#if HAVE_BSD_TTY -#ifdef sony -#undef HAVE_PARITY_BUG -#define HAVE_PARITY_BUG 1 -#endif -#endif - -/* On Ultrix 4.0, at least, setting CBREAK causes input characters to - be stripped, regardless of the setting of LPASS8 and LLITOUT. This - can be worked around by using the termio call to reset ISTRIP. - This probably does not apply to any other operating system. - Setting HAVE_STRIP_BUG to 1 will use this workaround. */ -#define HAVE_STRIP_BUG 0 - -#if HAVE_BSD_TTY -#ifdef __ultrix__ -#ifndef ultrix -#define ultrix -#endif -#endif -#ifdef ultrix -#undef HAVE_STRIP_BUG -#define HAVE_STRIP_BUG 1 -#endif -#endif - -/* If your system implements full duplex pipes, set - HAVE_FULLDUPLEX_PIPES to 1. Everything should work fine if you - leave it set to 0, but setting it to 1 can be slightly more - efficient. */ -#define HAVE_FULLDUPLEX_PIPES 0 - -/* TIMES_TICK is the fraction of a second which times(2) returns (for - example, if times returns 100ths of a second TIMES_TICK should be - set to 100). On a true POSIX system (one which has the sysconf - function and also has _SC_CLK_TCK defined in <unistd.h>) TIMES_TICK - may simply be left as 0. On some systems the environment variable - HZ is what you want for TIMES_TICK, but on some other systems HZ - has the wrong value; check the man page. If you leave this set to - 0, the code will try to guess; it will doubtless be wrong on some - non-POSIX systems. If TIMES_TICK is wrong the code may report - incorrect file transfer times in the statistics file, but on many - systems times(2) will actually not be used and this value will not - matter at all. */ -#define TIMES_TICK 0 - -/* If your system does not support saved set user ID, set - HAVE_SAVED_SETUID to 0. However, this is ignored if your system - has the setreuid function. Most modern Unixes have one or the - other. If your system has the setreuid function, don't worry about - this define, or about the following discussion. - - If you set HAVE_SAVED_SETUID to 0, you will not be able to use uucp - to transfer files that the uucp user can not read. Basically, you - will only be able to use uucp on world-readable files. If you set - HAVE_SAVED_SETUID to 1, but your system does not have saved set - user ID, uucp will fail with an error message whenever anybody - other than the uucp user uses it. */ -#define HAVE_SAVED_SETUID 0 - -/* On some systems, such as 4.4BSD-Lite, NetBSD, the DG Aviion and, - possibly, the RS/6000, the setreuid function is broken. It should - be possible to use setreuid to swap the real and effective user - ID's, but on some systems it will not change the real user ID (I - believe this is due to a misreading of the POSIX standard). On - such a system you must set HAVE_BROKEN_SETREUID to 1; if you do - not, you will get error messages from setreuid. Systems on which - setreuid exists but is broken pretty much always have saved setuid. */ -#define HAVE_BROKEN_SETREUID 0 - -/* On a few systems, such as NextStep 3.3, the POSIX macro F_SETLKW is - defined, but does not work. On such systems, you must set - HAVE_BROKEN_SETLKW to 1. If you do not, uux will hang, or log - peculiar error messages, every time it is run. */ -#define HAVE_BROKEN_SETLKW 0 - -/* On the 3B2, and possibly other systems, nap takes an argument in - hundredths of a second rather than milliseconds. I don't know of - any way to test for this. Set HAVE_HUNDREDTHS_NAP to 1 if this is - true on your system. This does not matter if your system does not - have the nap function. */ -#define HAVE_HUNDREDTHS_NAP 0 - -/* Set MAIL_PROGRAM to a program which can be used to send mail. It - will be used for mail to both local and remote users. Set - MAIL_PROGRAM_TO_BODY to 1 if the recipient should be specified as a - To: line in the body of the message; otherwise, the recipient will - be provided as an argument to MAIL_PROGRAM. Set - MAIL_PROGRAM_SUBJECT_BODY if the subject should be specified as a - Subject: line in the body of the message; otherwise, the subject - will be provided using the -s option to MAIL_PROGRAM (if your mail - program does not support the -s option, you must set - MAIL_PROGRAM_SUBJECT_BODY to 1). If your system uses sendmail, use - the sendmail choice below. Otherwise, select one of the other - choices as appropriate. */ -#if 1 -#define MAIL_PROGRAM "/usr/sbin/sendmail -t" -#define MAIL_PROGRAM_TO_BODY 1 -#define MAIL_PROGRAM_SUBJECT_BODY 1 -#endif -#if 0 -#define MAIL_PROGRAM "/usr/ucb/mail" -#define MAIL_PROGRAM_TO_BODY 0 -#define MAIL_PROGRAM_SUBJECT_BODY 0 -#endif -#if 0 -#define MAIL_PROGRAM "/bin/mail" -#define MAIL_PROGRAM_TO_BODY 0 -#define MAIL_PROGRAM_SUBJECT_BODY 1 -#endif - -/* Set PS_PROGRAM to the program to run to get a process status, - including the arguments to pass it. This is used by ``uustat -p''. - Set HAVE_PS_MULTIPLE to 1 if a comma separated list of process - numbers may be appended (e.g. ``ps -flp1,10,100''). Otherwise ps - will be invoked several times, with a single process number append - each time. The default definitions should work on most systems, - although some (such as the NeXT) will complain about the 'p' - option; for those, use the second set of definitions. The third - set of definitions are appropriate for System V. To use the second - or third set of definitions, change the ``#if 1'' to ``#if 0'' and - change the appropriate ``#if 0'' to ``#if 1''. */ -#if 1 -#define PS_PROGRAM "/bin/ps -lp" -#define HAVE_PS_MULTIPLE 0 -#endif -#if 0 -#define PS_PROGRAM "/bin/ps -l" -#define HAVE_PS_MULTIPLE 0 -#endif -#if 0 -#define PS_PROGRAM "/bin/ps -flp" -#define HAVE_PS_MULTIPLE 1 -#endif -#ifdef __QNX__ -/* Use this for QNX, along with HAVE_QNX_LOCKFILES. */ -#undef PS_PROGRAM -#undef HAVE_PS_MULTIPLE -#define PS_PROGRAM "/bin/ps -l -n -p" -#define HAVE_PS_MULTIPLE 0 -#endif - -/* If you use other programs that also lock devices, such as cu or - uugetty, the other programs and UUCP must agree on whether a device - is locked. This is typically done by creating a lock file in a - specific directory; the lock files are generally named - LCK..something or LK.something. If the LOCKDIR macro is defined, - these lock files will be placed in the named directory; otherwise - they will be placed in the default spool directory. On some HDB - systems the lock files are placed in /etc/locks. On some they are - placed in /usr/spool/locks. On the NeXT they are placed in - /usr/spool/uucp/LCK. */ -/* #define LOCKDIR "/usr/spool/uucp" */ -/* #define LOCKDIR "/etc/locks" */ -/* #define LOCKDIR "/usr/spool/locks" */ -/* #define LOCKDIR "/usr/spool/uucp/LCK" */ -#define LOCKDIR "/var/spool/lock" - -/* You must also specify the format of the lock files by setting - exactly one of the following macros to 1. Check an existing lock - file to decide which of these choices is more appropriate. - - The HDB style is to write the locking process ID in ASCII, passed - to ten characters, followed by a newline. - - The V2 style is to write the locking process ID as four binary - bytes in the host byte order. Many BSD derived systems use this - type of lock file, including the NeXT. - - SCO lock files are similar to HDB lock files, but always lock the - lowercase version of the tty (i.e., LCK..tty2a is created if you - are locking tty2A). They are appropriate if you are using Taylor - UUCP on an SCO Unix, SCO Xenix, or SCO Open Desktop system. - - SVR4 lock files are also similar to HDB lock files, but they use a - different naming convention. The filenames are LK.xxx.yyy.zzz, - where xxx is the major device number of the device holding the - special device file, yyy is the major device number of the port - device itself, and zzz is the minor device number of the port - device. - - Sequent DYNIX/ptx (but perhaps not Dynix 3.x) uses yet another - naming convention. The lock file for /dev/ttyXA/XAAP is named - LCK..ttyXAAP. - - Coherent use a completely different method of terminal locking. - See unix/cohtty for details. For locks other than for terminals, - HDB type lock files are used. - - QNX lock files are similar to HDB lock files except that the node - ID must be stored in addition to the process ID and for serial - devices the node ID must be included in the lock file name. QNX - boxes are generally used in bunches, and all of them behave like - one big machine to some extent. Thus, processes on different - machines will be sharing the files in the spool directory. To - detect if a process has died and a lock is thus stale, you need the - node ID of the process as well as the process ID. The process ID - is stored as a number written using ASCII digits padded to 10 - characters, followed by a space, followed by the node ID written - using ASCII digits padded to 10 characters, followed by a newline. - The format for QNX lock files was made up just for Taylor UUCP. - QNX doesn't come with a version of UUCP. */ -#define HAVE_V2_LOCKFILES 0 -#define HAVE_HDB_LOCKFILES 1 -#define HAVE_SCO_LOCKFILES 0 -#define HAVE_SVR4_LOCKFILES 0 -#define HAVE_SEQUENT_LOCKFILES 0 -#define HAVE_COHERENT_LOCKFILES 0 -#define HAVE_QNX_LOCKFILES 0 - -/* This tries to pick a default based on preprocessor definitions. - Ignore it if you have explicitly set one of the above values. */ -#if HAVE_V2_LOCKFILES + HAVE_HDB_LOCKFILES + HAVE_SCO_LOCKFILES + HAVE_SVR4_LOCKFILES + HAVE_SEQUENT_LOCKFILES + HAVE_COHERENT_LOCKFILES + HAVE_QNX_LOCKFILES == 0 -#ifdef __QNX__ -#undef HAVE_QNX_LOCKFILES -#define HAVE_QNX_LOCKFILES 1 -#else /* ! defined (__QNX__) */ -#ifdef __COHERENT__ -#undef HAVE_COHERENT_LOCKFILES -#define HAVE_COHERENT_LOCKFILES 1 -#else /* ! defined (__COHERENT__) */ -#ifdef _SEQUENT_ -#undef HAVE_SEQUENT_LOCKFILES -#define HAVE_SEQUENT_LOCKFILES 1 -#else /* ! defined (_SEQUENT) */ -#ifdef sco -#undef HAVE_SCO_LOCKFILES -#define HAVE_SCO_LOCKFILES 1 -#else /* ! defined (sco) */ -#ifdef __svr4__ -#undef HAVE_SVR4_LOCKFILES -#define HAVE_SVR4_LOCKFILES 1 -#else /* ! defined (__svr4__) */ -/* Final default is HDB. There's no way to tell V2 from HDB. */ -#undef HAVE_HDB_LOCKFILES -#define HAVE_HDB_LOCKFILES 1 -#endif /* ! defined (__svr4__) */ -#endif /* ! defined (sco) */ -#endif /* ! defined (_SEQUENT) */ -#endif /* ! defined (__COHERENT__) */ -#endif /* ! defined (__QNX__) */ -#endif /* no LOCKFILES define */ - -/* If your system supports Internet mail addresses (which look like - user@host.domain rather than system!user), HAVE_INTERNET_MAIL - should be set to 1. This is checked by uuxqt and uustat when - sending notifications to the person who submitted the job. - - If your system does not understand addresses of the form user@host, - you must set HAVE_INTERNET_MAIL to 0. - - If your system does not understand addresses of the form host!user, - which is unlikely, you must set HAVE_INTERNET_MAIL to 1. - - If your system sends mail addressed to "A!B@C" to host C (i.e., it - parses the address as "(A!B)@C"), you must set HAVE_INTERNET_MAIL - to 1. - - If your system sends mail addressed to "A!B@C" to host A (i.e., it - parses the address as "A!(B@C)"), you must set HAVE_INTERNET_MAIL - to 0. - - Note that in general it is best to avoid addresses of the form - "A!B@C" because of this ambiguity of precedence. UUCP will not - intentionally generate addresses of this form, but it can occur in - certain rather complex cases. */ -#define HAVE_INTERNET_MAIL 1 - -/* Adminstrative decisions. */ - -/* Set USE_RCS_ID to 1 if you want the RCS ID strings compiled into - the executable. Leaving them out will decrease the executable - size. Leaving them in will make it easier to determine which - version you are running. */ -#define USE_RCS_ID 1 - -/* DEBUG controls how much debugging information is compiled into the - code. If DEBUG is defined as 0, no sanity checks will be done and - no debugging messages will be compiled in. If DEBUG is defined as - 1 sanity checks will be done but there will still be no debugging - messages. If DEBUG is 2 than debugging messages will be compiled - in. When initially testing, DEBUG should be 2, and you should - probably leave it at 2 unless a small reduction in the executable - file size will be very helpful. */ -#define DEBUG 2 - -/* Set HAVE_ENCRYPTED_PASSWORDS to 1 if you want login passwords to be - encrypted before comparing them against the values in the file. - This only applies when uucico is run with the -l or -e switches and - is doing its own login prompting. Note that the passwords used are - from the UUCP password file, not the system /etc/passwd file. See - the documentation for further details. If you set this, you are - responsible for encrypting the passwords in the UUCP password file. - The function crypt will be used to do comparisons. */ -#define HAVE_ENCRYPTED_PASSWORDS 0 - -/* Set the default grade to use for a uucp command if the -g option is - not used. The grades, from highest to lowest, are 0 to 9, A to Z, - a to z. */ -#define BDEFAULT_UUCP_GRADE ('N') - -/* Set the default grade to use for a uux command if the -g option is - not used. */ -#define BDEFAULT_UUX_GRADE ('N') - -/* To compile in use of the new style of configuration files described - in the documentation, set HAVE_TAYLOR_CONFIG to 1. */ -#define HAVE_TAYLOR_CONFIG 1 - -/* To compile in use of V2 style configuration files (L.sys, L-devices - and so on), set HAVE_V2_CONFIG to 1. To compile in use of HDB - style configuration files (Systems, Devices and so on) set - HAVE_HDB_CONFIG to 1. The files will be looked up in the - oldconfigdir directory as defined in the Makefile. - - You may set any or all of HAVE_TAYLOR_CONFIG, HAVE_V2_CONFIG and - HAVE_HDB_CONFIG to 1 (you must set at least one of the macros). - When looking something up (a system, a port, etc.) the new style - configuration files will be read first, followed by the V2 - configuration files, followed by the HDB configuration files. */ -#define HAVE_V2_CONFIG 0 -#define HAVE_HDB_CONFIG 1 - -/* Exactly one of the following macros must be set to 1. The exact - format of the spool directories is explained in unix/spool.c. - - SPOOLDIR_V2 -- Use a Version 2 (original UUCP) style spool directory - SPOOLDIR_BSD42 -- Use a BSD 4.2 style spool directory - SPOOLDIR_BSD43 -- Use a BSD 4.3 style spool directory - SPOOLDIR_HDB -- Use a HDB (BNU) style spool directory - SPOOLDIR_ULTRIX -- Use an Ultrix style spool directory - SPOOLDIR_SVR4 -- Use a System V Release 4 spool directory - SPOOLDIR_TAYLOR -- Use a new style spool directory - - If you are not worried about compatibility with a currently running - UUCP, use SPOOLDIR_TAYLOR. */ -#define SPOOLDIR_V2 0 -#define SPOOLDIR_BSD42 0 -#define SPOOLDIR_BSD43 0 -#define SPOOLDIR_HDB 0 -#define SPOOLDIR_ULTRIX 0 -#define SPOOLDIR_SVR4 0 -#define SPOOLDIR_TAYLOR 1 - -/* The status file generated by UUCP can use either the traditional - HDB upper case comments or new easier to read lower case comments. - This affects the display of uustat -m or uustat -q. Some - third-party programs read these status files and expect them to be - in a certain format. The default is to use the traditional - comments when using an HDB or SVR4 spool directory, and to use - lower case comments otherwise. */ -#define USE_TRADITIONAL_STATUS (SPOOLDIR_HDB || SPOOLDIR_SVR4) - -/* You must select which type of logging you want by setting exactly - one of the following to 1. These control output to the log file - and to the statistics file. - - If you define HAVE_TAYLOR_LOGGING, each line in the log file will - look something like this: - - uucico uunet uucp (1991-12-10 09:04:34.45 16390) Receiving uunet/D./D.uunetSwJ72 - - and each line in the statistics file will look something like this: - - uucp uunet (1991-12-10 09:04:40.20) received 2371 bytes in 5 seconds (474 bytes/sec) - - If you define HAVE_V2_LOGGING, each line in the log file will look - something like this: - - uucico uunet uucp (12/10-09:04 16390) Receiving uunet/D./D.uunetSwJ72 - - and each line in the statistics file will look something like this: - - uucp uunet (12/10-09:04 16390) (692373862) received data 2371 bytes 5 seconds - - If you define HAVE_HDB_LOGGING, each program will by default use a - separate log file. For uucico talking to uunet, for example, it - will be /usr/spool/uucp/.Log/uucico/uunet. Each line will look - something like this: - - uucp uunet (12/10-09:04:22,16390,1) Receiving uunet/D./D.uunetSwJ72 - - and each line in the statistics file will look something like this: - - uunet!uucp M (12/10-09:04:22) (C,16390,1) [ttyXX] <- 2371 / 5.000 secs, 474 bytes/sec - - The main reason to prefer one format over another is that you may - have shell scripts which expect the files to have a particular - format. If you have none, choose whichever format you find more - appealing. */ -#define HAVE_TAYLOR_LOGGING 1 -#define HAVE_V2_LOGGING 0 -#define HAVE_HDB_LOGGING 0 - -/* If QNX_LOG_NODE_ID is set to 1, log messages will include the QNX - node ID just after the process ID. This is a policy decision - because it changes the log file entry format, which can break other - programs (e.g., some of the ones in the contrib directory) which - expect to read the standard log file format. */ -#ifdef __QNX__ -#define QNX_LOG_NODE_ID 1 -#else -#define QNX_LOG_NODE_ID 0 -#endif - -/* If LOG_DEVICE_PREFIX is 1, log messages will give the full - pathname of a device rather than just the final component. This is - important because on QNX //2/dev/ser2 refers to a different device - than //4/dev/ser2. */ -#ifdef __QNX__ -#define LOG_DEVICE_PREFIX 1 -#else -#define LOG_DEVICE_PREFIX 0 -#endif - -/* If you would like the log, debugging and statistics files to be - closed after each message, set CLOSE_LOGFILES to 1. This will - permit the log files to be easily moved. If a log file does not - exist when a new message is written out, it will be created. - Setting CLOSE_LOGFILES to 1 will obviously require slightly more - processing time. */ -#define CLOSE_LOGFILES 0 - -/* The name of the default spool directory. If HAVE_TAYLOR_CONFIG is - set to 1, this may be overridden by the ``spool'' command in the - configuration file. */ -/* #define SPOOLDIR "/usr/spool/uucp" */ -#define SPOOLDIR "/var/spool/uucp" - -/* The name of the default public directory. If HAVE_TAYLOR_CONFIG is - set to 1, this may be overridden by the ``pubdir'' command in the - configuration file. Also, a particular system may be given a - specific public directory by using the ``pubdir'' command in the - system file. */ -/* #define PUBDIR "/usr/spool/uucppublic" */ -#define PUBDIR "/var/spool/uucppublic" - -/* The default command path. This is a space separated list of - directories. Remote command executions requested by uux are looked - up using this path. If you are using HAVE_TAYLOR_CONFIG, the - command path may be overridden for a particular system. For most - systems, you should just make sure that the programs rmail and - rnews can be found using this path. */ -#define CMDPATH "/bin /usr/bin /usr/local/bin" - -/* The default amount of free space to require for systems that do not - specify an amount with the ``free-space'' command. This is only - used when talking to another instance of Taylor UUCP; if accepting - a file would not leave at least this many bytes free on the disk, - it will be refused. */ -#define DEFAULT_FREE_SPACE (50000) - -/* While a file is being received, Taylor UUCP will periodically check - to see if there is enough free space remaining on the disk. If - there is not enough space available on the disk (as determined by - DEFAULT_FREE_SPACE, above, or the ``free-space'' command for the - system) the communication will be aborted. The disk will be - checked each time FREE_SPACE_DELTA bytes are received. Lower - values of FREE_SPACE_DELTA are less likely to fill up the disk, but - will also waste more time checking the amount of free space. To - avoid checking the disk while the file is being received, set - FREE_SPACE_DELTA to 0. */ -#define FREE_SPACE_DELTA (10240) - -/* It is possible for an execute job to request to be executed using - sh(1), rather than execve(2). This is such a security risk, it is - being disabled by default; to allow such jobs, set the following - macro to 1. */ -#define ALLOW_SH_EXECUTION 0 - -/* If a command executed on behalf of a remote system takes a filename - as an argument, a security breach may be possible (note that on my - system neither of the default commands, rmail and rnews, take - filename arguments). If you set ALLOW_FILENAME_ARGUMENTS to 0, all - arguments to a command will be checked; if any argument - 1) starts with ../ - 2) contains the string /../ - 3) begins with a / but does not name a file that may be sent or - received (according to the specified ``remote-send'' and - ``remote-receive'') - the command will be rejected. By default, any argument is - permitted. */ -#define ALLOW_FILENAME_ARGUMENTS 1 - -/* If you set FSYNC_ON_CLOSE to 1, all output files will be forced out - to disk using the fsync system call when they are closed. This can - be useful if you can not afford to lose people's mail if the system - crashes. However, not all systems have the fsync call, and it is - always less efficient to use it. Note that some versions of SCO - Unix, and possibly other systems, make fsync a synonym for sync, - which is extremely inefficient. */ -#define FSYNC_ON_CLOSE 0 - -#if HAVE_TAYLOR_LOGGING - -/* The default log file when using HAVE_TAYLOR_LOGGING. When using - HAVE_TAYLOR_CONFIG, this may be overridden by the ``logfile'' - command in the configuration file. */ -/* #define LOGFILE "/usr/spool/uucp/Log" */ -#define LOGFILE "/var/spool/uucp/Log" - -/* The default statistics file when using HAVE_TAYLOR_LOGGING. When - using HAVE_TAYLOR_CONFIG, this may be overridden by the - ``statfile'' command in the configuration file. */ -/* #define STATFILE "/usr/spool/uucp/Stats" */ -#define STATFILE "/var/spool/uucp/Stats" - -/* The default debugging file when using HAVE_TAYLOR_LOGGING. When - using HAVE_TAYLOR_CONFIG, this may be overridden by the - ``debugfile'' command in the configuration file. */ -/* #define DEBUGFILE "/usr/spool/uucp/Debug" */ -#define DEBUGFILE "/var/spool/uucp/Debug" - -#endif /* HAVE_TAYLOR_LOGGING */ - -#if HAVE_V2_LOGGING - -/* The default log file when using HAVE_V2_LOGGING. When using - HAVE_TAYLOR_CONFIG, this may be overridden by the ``logfile'' - command in the configuration file. */ -#define LOGFILE "/usr/spool/uucp/LOGFILE" - -/* The default statistics file when using HAVE_V2_LOGGING. When using - HAVE_TAYLOR_CONFIG, this may be overridden by the ``statfile'' - command in the configuration file. */ -#define STATFILE "/usr/spool/uucp/SYSLOG" - -/* The default debugging file when using HAVE_V2_LOGGING. When using - HAVE_TAYLOR_CONFIG, this may be overridden by the ``debugfile'' - command in the configuration file. */ -#define DEBUGFILE "/usr/spool/uucp/DEBUG" - -#endif /* HAVE_V2_LOGGING */ - -#if HAVE_HDB_LOGGING - -/* The default log file when using HAVE_HDB_LOGGING. When using - HAVE_TAYLOR_CONFIG, this may be overridden by the ``logfile'' - command in the configuration file. The first %s in the string will - be replaced by the program name (e.g. uucico); the second %s will - be replaced by the system name (if there is no appropriate system, - "ANY" will be used). No other '%' character may appear in the - string. */ -#define LOGFILE "/usr/spool/uucp/.Log/%s/%s" - -/* The default statistics file when using HAVE_HDB_LOGGING. When using - HAVE_TAYLOR_CONFIG, this may be overridden by the ``statfile'' - command in the configuration file. */ -#define STATFILE "/usr/spool/uucp/.Admin/xferstats" - -/* The default debugging file when using HAVE_HDB_LOGGING. When using - HAVE_TAYLOR_CONFIG, this may be overridden by the ``debugfile'' - command in the configuration file. */ -#define DEBUGFILE "/usr/spool/uucp/.Admin/audit.local" - -#endif /* HAVE_HDB_LOGGING */ diff --git a/gnu/libexec/uucp/common_sources/prot.c b/gnu/libexec/uucp/common_sources/prot.c deleted file mode 100644 index 6661c1f..0000000 --- a/gnu/libexec/uucp/common_sources/prot.c +++ /dev/null @@ -1,241 +0,0 @@ -/* prot.c - Protocol support routines to move commands and data around. - - Copyright (C) 1991, 1992, 1994 Ian Lance Taylor - - This file is part of the Taylor UUCP package. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - This program 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 - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - The author of the program may be contacted at ian@airs.com or - c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144. - */ - -#include "uucp.h" - -#if USE_RCS_ID -const char prot_rcsid[] = "$FreeBSD$"; -#endif - -#include <errno.h> - -#include "uudefs.h" -#include "uuconf.h" -#include "system.h" -#include "conn.h" -#include "prot.h" - -/* Variables visible to the protocol-specific routines. */ - -/* Buffer to hold received data. */ -char abPrecbuf[CRECBUFLEN]; - -/* Index of start of data in abPrecbuf. */ -int iPrecstart; - -/* Index of end of data (first byte not included in data) in abPrecbuf. */ -int iPrecend; - -/* We want to output and input at the same time, if supported on this - machine. If we have something to send, we send it all while - accepting a large amount of data. Once we have sent everything we - look at whatever we have received. If data comes in faster than we - can send it, we may run out of buffer space. */ - -boolean -fsend_data (qconn, zsend, csend, fdoread) - struct sconnection *qconn; - const char *zsend; - size_t csend; - boolean fdoread; -{ - if (! fdoread) - return fconn_write (qconn, zsend, csend); - - while (csend > 0) - { - size_t crec, csent; - - if (iPrecend < iPrecstart) - crec = iPrecstart - iPrecend - 1; - else - { - crec = CRECBUFLEN - iPrecend; - if (iPrecstart == 0) - --crec; - } - - if (crec == 0) - return fconn_write (qconn, zsend, csend); - - csent = csend; - - if (! fconn_io (qconn, zsend, &csent, abPrecbuf + iPrecend, &crec)) - return FALSE; - - csend -= csent; - zsend += csent; - - iPrecend = (iPrecend + crec) % CRECBUFLEN; - } - - return TRUE; -} - -/* Read data from the other system when we have nothing to send. The - argument cneed is the amount of data the caller wants, and ctimeout - is the timeout in seconds. The function sets *pcrec to the amount - of data which was actually received, which may be less than cneed - if there isn't enough room in the receive buffer. If no data is - received before the timeout expires, *pcrec will be returned as 0. - If an error occurs, the function returns FALSE. If the freport - argument is FALSE, no error should be reported. */ - -boolean -freceive_data (qconn, cneed, pcrec, ctimeout, freport) - struct sconnection *qconn; - size_t cneed; - size_t *pcrec; - int ctimeout; - boolean freport; -{ - /* Set *pcrec to the maximum amount of data we can read. fconn_read - expects *pcrec to be the buffer size, and sets it to the amount - actually received. */ - if (iPrecend < iPrecstart) - *pcrec = iPrecstart - iPrecend - 1; - else - { - *pcrec = CRECBUFLEN - iPrecend; - if (iPrecstart == 0) - --(*pcrec); - } - -#if DEBUG > 0 - /* If we have no room in the buffer, we're in trouble. The - protocols must be written to ensure that this can't happen. */ - if (*pcrec == 0) - ulog (LOG_FATAL, "freceive_data: No room in buffer"); -#endif - - /* If we don't have room for all the data the caller wants, we - simply have to expect less. We'll get the rest later. */ - if (*pcrec < cneed) - cneed = *pcrec; - - if (! fconn_read (qconn, abPrecbuf + iPrecend, pcrec, cneed, ctimeout, - freport)) - return FALSE; - - iPrecend = (iPrecend + *pcrec) % CRECBUFLEN; - - return TRUE; -} - -/* Read a single character. Get it out of the receive buffer if it's - there, otherwise ask freceive_data for at least one character. - This is used because as a protocol is shutting down freceive_data - may read ahead and eat characters that should be read outside the - protocol routines. We call freceive_data rather than fconn_read - with an argument of 1 so that we can get all the available data in - a single system call. The ctimeout argument is the timeout in - seconds; the freport argument is FALSE if no error should be - reported. This returns a character, or -1 on timeout or -2 on - error. */ - -int -breceive_char (qconn, ctimeout, freport) - struct sconnection *qconn; - int ctimeout; - boolean freport; -{ - char b; - - if (iPrecstart == iPrecend) - { - size_t crec; - - if (! freceive_data (qconn, sizeof (char), &crec, ctimeout, freport)) - return -2; - if (crec == 0) - return -1; - } - - b = abPrecbuf[iPrecstart]; - iPrecstart = (iPrecstart + 1) % CRECBUFLEN; - return BUCHAR (b); -} - -/* Send mail about a file transfer. We send to the given mailing - address if there is one, otherwise to the user. */ - -boolean -fmail_transfer (fsuccess, zuser, zmail, zwhy, zfromfile, zfromsys, - ztofile, ztosys, zsaved) - boolean fsuccess; - const char *zuser; - const char *zmail; - const char *zwhy; - const char *zfromfile; - const char *zfromsys; - const char *ztofile; - const char *ztosys; - const char *zsaved; -{ - const char *zsendto; - const char *az[20]; - int i; - - if (zmail != NULL && *zmail != '\0') - zsendto = zmail; - else - zsendto = zuser; - - i = 0; - az[i++] = "The file\n\t"; - if (zfromsys != NULL) - { - az[i++] = zfromsys; - az[i++] = "!"; - } - az[i++] = zfromfile; - if (fsuccess) - az[i++] = "\nwas successfully transferred to\n\t"; - else - az[i++] = "\ncould not be transferred to\n\t"; - if (ztosys != NULL) - { - az[i++] = ztosys; - az[i++] = "!"; - } - az[i++] = ztofile; - az[i++] = "\nas requested by\n\t"; - az[i++] = zuser; - if (! fsuccess) - { - az[i++] = "\nfor the following reason:\n\t"; - az[i++] = zwhy; - az[i++] = "\n"; - } - if (zsaved != NULL) - { - az[i++] = zsaved; - az[i++] = "\n"; - } - - return fsysdep_mail (zsendto, - fsuccess ? "UUCP succeeded" : "UUCP failed", - i, az); -} diff --git a/gnu/libexec/uucp/common_sources/prot.h b/gnu/libexec/uucp/common_sources/prot.h deleted file mode 100644 index 11c3941..0000000 --- a/gnu/libexec/uucp/common_sources/prot.h +++ /dev/null @@ -1,270 +0,0 @@ -/* prot.h - Protocol header file. - - Copyright (C) 1991, 1992, 1993, 1994, 1995 Ian Lance Taylor - - This file is part of the Taylor UUCP package. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - This program 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 - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - The author of the program may be contacted at ian@airs.com or - c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144. - */ - -/* We need the definition of uuconf_cmdtab to declare the protocol - parameter arrays. */ -#ifndef UUCONF_H -#include "uuconf.h" -#endif - -#if ANSI_C -/* These structures are used in prototypes but are not defined in this - header file. */ -struct sdaemon; -struct sconnection; -struct stransfer; -#endif - -/* The sprotocol structure holds information and functions for a specific - protocol (e.g. the 'g' protocol). */ - -struct sprotocol -{ - /* The name of the protocol (e.g. 'g'). */ - char bname; - /* Reliability requirements, an or of UUCONF_RELIABLE_xxx defines - from uuconf.h. */ - int ireliable; - /* The maximum number of channels this protocol can support. */ - int cchans; - /* Whether files may be reliably restarted using this protocol. */ - boolean frestart; - /* Protocol parameter commands. */ - struct uuconf_cmdtab *qcmds; - /* A routine to start the protocol. If *pzlog is set to be - non-NULL, it is an informative message to be logged; it should - then be passed to ubuffree. */ - boolean (*pfstart) P((struct sdaemon *qdaemon, char **pzlog)); - /* Shutdown the protocol. */ - boolean (*pfshutdown) P((struct sdaemon *qdaemon)); - /* Send a command to the other side. */ - boolean (*pfsendcmd) P((struct sdaemon *qdaemon, const char *z, - int ilocal, int iremote)); - /* Get buffer to space to fill with data. This should set *pcdata - to the amount of data desired. */ - char *(*pzgetspace) P((struct sdaemon *qdaemon, size_t *pcdata)); - /* Send data to the other side. The argument z must be a return - value of pzgetspace. The ipos argument is the file position, and - is ignored by most protocols. */ - boolean (*pfsenddata) P((struct sdaemon *qdaemon, char *z, size_t c, - int ilocal, int iremote, long ipos)); - /* Wait for data to come in and call fgot_data with it until - fgot_data sets *pfexit. */ - boolean (*pfwait) P((struct sdaemon *qdaemon)); - /* Handle any file level actions that need to be taken. If a file - transfer is starting rather than ending, fstart is TRUE. If the - file is being sent rather than received, fsend is TRUE. If - fstart and fsend are both TRUE, cbytes holds the size of the - file. If *pfhandled is set to TRUE, then the protocol routine - has taken care of queueing up qtrans for the next action. */ - boolean (*pffile) P((struct sdaemon *qdaemon, struct stransfer *qtrans, - boolean fstart, boolean fsend, long cbytes, - boolean *pfhandled)); -}; - -/* Send data to the other system. If the fread argument is TRUE, this - will also receive data into the receive buffer abPrecbuf; fread is - passed as TRUE if the protocol expects data to be coming back, to - make sure the input buffer does not fill up. Returns FALSE on - error. */ -extern boolean fsend_data P((struct sconnection *qconn, - const char *zsend, size_t csend, - boolean fdoread)); - -/* Receive data from the other system when there is no data to send. - The cneed argument is the amount of data desired and the ctimeout - argument is the timeout in seconds. This will set *pcrec to the - amount of data received. It will return FALSE on error. If a - timeout occurs, it will return TRUE with *pcrec set to zero. */ -extern boolean freceive_data P((struct sconnection *qconn, size_t cneed, - size_t *pcrec, int ctimeout, - boolean freport)); - -/* Get one character from the remote system, going through the - procotol buffering. The ctimeout argument is the timeout in - seconds, and the freport argument is TRUE if errors should be - reported (when closing a connection it is pointless to report - errors). This returns a character or -1 on a timeout or -2 on an - error. */ -extern int breceive_char P((struct sconnection *qconn, - int ctimeout, boolean freport)); - -/* Compute a 32 bit CRC of a data buffer, given an initial CRC. */ -extern unsigned long icrc P((const char *z, size_t c, unsigned long ick)); - -/* The initial CRC value to use for a new buffer. */ -#if ANSI_C -#define ICRCINIT (0xffffffffUL) -#else -#define ICRCINIT ((unsigned long) 0xffffffffL) -#endif - -/* The size of the receive buffer. */ -#define CRECBUFLEN (16384) - -/* Buffer to hold received data. */ -extern char abPrecbuf[CRECBUFLEN]; - -/* Index of start of data in abPrecbuf. */ -extern int iPrecstart; - -/* Index of end of data (first byte not included in data) in abPrecbuf. */ -extern int iPrecend; - -/* There are a couple of variables and functions that are shared by - the 'i' and 'j' protocols (the 'j' protocol is just a wrapper - around the 'i' protocol). These belong in a separate header file, - protij.h, but I don't want to create one for just a couple of - things. */ - -/* An escape sequence of characters for the 'j' protocol to avoid - (protocol parameter ``avoid''). */ -extern const char *zJavoid_parameter; - -/* Timeout to use when sending the 'i' protocol SYNC packet (protocol - parameter ``sync-timeout''). */ -extern int cIsync_timeout; - -/* Shared startup routine for the 'i' and 'j' protocols. */ -extern boolean fijstart P((struct sdaemon *qdaemon, char **pzlog, - int imaxpacksize, - boolean (*pfsend) P((struct sconnection *qconn, - const char *zsend, - size_t csend, - boolean fdoread)), - boolean (*pfreceive) P((struct sconnection *qconn, - size_t cneed, - size_t *pcrec, - int ctimeout, - boolean freport)))); - -/* Prototypes for 'g' protocol functions. */ - -extern struct uuconf_cmdtab asGproto_params[]; -extern boolean fgstart P((struct sdaemon *qdaemon, char **pzlog)); -extern boolean fbiggstart P((struct sdaemon *qdaemon, char **pzlog)); -extern boolean fvstart P((struct sdaemon *qdaemon, char **pzlog)); -extern boolean fgshutdown P((struct sdaemon *qdaemon)); -extern boolean fgsendcmd P((struct sdaemon *qdaemon, const char *z, - int ilocal, int iremote)); -extern char *zggetspace P((struct sdaemon *qdaemon, size_t *pcdata)); -extern boolean fgsenddata P((struct sdaemon *qdaemon, char *z, size_t c, - int ilocal, int iremote, long ipos)); -extern boolean fgwait P((struct sdaemon *qdaemon)); - -/* Prototypes for 'f' protocol functions. */ - -extern struct uuconf_cmdtab asFproto_params[]; -extern boolean ffstart P((struct sdaemon *qdaemon, char **pzlog)); -extern boolean ffshutdown P((struct sdaemon *qdaemon)); -extern boolean ffsendcmd P((struct sdaemon *qdaemon, const char *z, - int ilocal, int iremote)); -extern char *zfgetspace P((struct sdaemon *qdaemon, size_t *pcdata)); -extern boolean ffsenddata P((struct sdaemon *qdaemon, char *z, size_t c, - int ilocal, int iremote, long ipos)); -extern boolean ffwait P((struct sdaemon *qdaemon)); -extern boolean fffile P((struct sdaemon *qdaemon, struct stransfer *qtrans, - boolean fstart, boolean fsend, long cbytes, - boolean *pfhandled)); - -/* Prototypes for 't' protocol functions. */ - -extern struct uuconf_cmdtab asTproto_params[]; -extern boolean ftstart P((struct sdaemon *qdaemon, char **pzlog)); -extern boolean ftshutdown P((struct sdaemon *qdaemon)); -extern boolean ftsendcmd P((struct sdaemon *qdaemon, const char *z, - int ilocal, int iremote)); -extern char *ztgetspace P((struct sdaemon *qdaemon, size_t *pcdata)); -extern boolean ftsenddata P((struct sdaemon *qdaemon, char *z, size_t c, - int ilocal, int iremote, long ipos)); -extern boolean ftwait P((struct sdaemon *qdaemon)); -extern boolean ftfile P((struct sdaemon *qdaemon, struct stransfer *qtrans, - boolean fstart, boolean fsend, long cbytes, - boolean *pfhandled)); - -/* Prototypes for 'e' protocol functions. */ - -extern struct uuconf_cmdtab asEproto_params[]; -extern boolean festart P((struct sdaemon *qdaemon, char **pzlog)); -extern boolean feshutdown P((struct sdaemon *qdaemon)); -extern boolean fesendcmd P((struct sdaemon *qdaemon, const char *z, - int ilocal, int iremote)); -extern char *zegetspace P((struct sdaemon *qdaemon, size_t *pcdata)); -extern boolean fesenddata P((struct sdaemon *qdaemon, char *z, size_t c, - int ilocal, int iremote, long ipos)); -extern boolean fewait P((struct sdaemon *qdaemon)); -extern boolean fefile P((struct sdaemon *qdaemon, struct stransfer *qtrans, - boolean fstart, boolean fsend, long cbytes, - boolean *pfhandled)); - -/* Prototypes for 'i' protocol functions. */ - -extern struct uuconf_cmdtab asIproto_params[]; -extern boolean fistart P((struct sdaemon *qdaemon, char **pzlog)); -extern boolean fishutdown P((struct sdaemon *qdaemon)); -extern boolean fisendcmd P((struct sdaemon *qdaemon, const char *z, - int ilocal, int iremote)); -extern char *zigetspace P((struct sdaemon *qdaemon, size_t *pcdata)); -extern boolean fisenddata P((struct sdaemon *qdaemon, char *z, size_t c, - int ilocal, int iremote, long ipos)); -extern boolean fiwait P((struct sdaemon *qdaemon)); - -/* Prototypes for 'j' protocol functions. The 'j' protocol mostly - uses the 'i' protocol functions, but it has a couple of functions - of its own. */ - -extern boolean fjstart P((struct sdaemon *qdaemon, char **pzlog)); -extern boolean fjshutdown P((struct sdaemon *qdaemon)); - -/* Prototypes for 'a' protocol functions (these use 'z' as the second - character because 'a' is a modified Zmodem protocol). */ - -extern struct uuconf_cmdtab asZproto_params[]; -extern boolean fzstart P((struct sdaemon *qdaemon, char **pzlog)); -extern boolean fzshutdown P((struct sdaemon *qdaemon)); -extern boolean fzsendcmd P((struct sdaemon *qdaemon, const char *z, - int ilocal, int iremote)); -extern char *zzgetspace P((struct sdaemon *qdaemon, size_t *pcdata)); -extern boolean fzsenddata P((struct sdaemon *qdaemon, char *z, size_t c, - int ilocal, int iremote, long ipos)); -extern boolean fzwait P((struct sdaemon *qdaemon)); -extern boolean fzfile P((struct sdaemon *qdaemon, struct stransfer *qtrans, - boolean fstart, boolean fsend, long cbytes, - boolean *pfhandled)); - -/* Prototypes for 'y' protocol functions. */ - -extern struct uuconf_cmdtab asYproto_params[]; -extern boolean fystart P((struct sdaemon *qdaemon, char **pzlog)); -extern boolean fyshutdown P((struct sdaemon *qdaemon)); -extern boolean fysendcmd P((struct sdaemon *qdaemon, const char *z, - int ilocal, int iremote)); -extern char *zygetspace P((struct sdaemon *qdaemon, size_t *pcdata)); -extern boolean fysenddata P((struct sdaemon *qdaemon, char *z, size_t c, - int ilocal, int iremote, long ipos)); -extern boolean fywait P((struct sdaemon *qdaemon)); -extern boolean fyfile P((struct sdaemon *qdaemon, struct stransfer *qtrans, - boolean fstart, boolean fsend, long cbytes, - boolean *pfhandled)); diff --git a/gnu/libexec/uucp/common_sources/sysdep.h b/gnu/libexec/uucp/common_sources/sysdep.h deleted file mode 100644 index 8b7e279..0000000 --- a/gnu/libexec/uucp/common_sources/sysdep.h +++ /dev/null @@ -1,563 +0,0 @@ -/* sysh.unx -*- C -*- - The header file for the UNIX system dependent routines. - - Copyright (C) 1991, 1992, 1993, 1995 Ian Lance Taylor - - This file is part of the Taylor UUCP package. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - This program 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 - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - The author of the program may be contacted at ian@airs.com or - c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144. - */ - -#ifndef SYSH_UNX_H - -#define SYSH_UNX_H - -#if ANSI_C -/* These structures are used in prototypes but are not defined in this - header file. */ -struct uuconf_system; -struct sconnection; -#endif - -/* SCO, SVR4 and Sequent lockfiles are basically just like HDB - lockfiles. */ -#if HAVE_SCO_LOCKFILES || HAVE_SVR4_LOCKFILES || HAVE_SEQUENT_LOCKFILES -#undef HAVE_HDB_LOCKFILES -#define HAVE_HDB_LOCKFILES 1 -#endif - -#if HAVE_BSD_TTY + HAVE_SYSV_TERMIO + HAVE_POSIX_TERMIOS != 1 - #error Terminal driver define not set or duplicated -#endif - -#if SPOOLDIR_V2 + SPOOLDIR_BSD42 + SPOOLDIR_BSD43 + SPOOLDIR_HDB + SPOOLDIR_ULTRIX + SPOOLDIR_SVR4 + SPOOLDIR_TAYLOR != 1 - #error Spool directory define not set or duplicated -#endif - -/* If setreuid is broken, don't use it. */ -#if HAVE_BROKEN_SETREUID -#undef HAVE_SETREUID -#define HAVE_SETREUID 0 -#endif - -/* Get some standard types from the configuration header file. */ -#ifdef PID_T -typedef PID_T pid_t; -#endif - -#ifdef UID_T -typedef UID_T uid_t; -#endif - -#ifdef GID_T -typedef GID_T gid_t; -#endif - -#ifdef OFF_T -typedef OFF_T off_t; -#endif - -/* On Unix, binary files are the same as text files. */ -#define BINREAD "r" -#define BINWRITE "w" - -/* If we have sigaction, we can force system calls to not be - restarted. */ -#if HAVE_SIGACTION -#undef HAVE_RESTARTABLE_SYSCALLS -#define HAVE_RESTARTABLE_SYSCALLS 0 -#endif - -/* If we have sigvec, and we have HAVE_SIGVEC_SV_FLAGS, and - SV_INTERRUPT is defined, we can force system calls to not be - restarted (signal.h is included by uucp.h before this point, so - SV_INTERRUPT will be defined by now if it it ever is). */ -#if HAVE_SIGVEC && HAVE_SIGVEC_SV_FLAGS -#ifdef SV_INTERRUPT -#undef HAVE_RESTARTABLE_SYSCALLS -#define HAVE_RESTARTABLE_SYSCALLS 0 -#endif -#endif - -/* If we were cross-configured, we will have a value of -1 for - HAVE_RESTARTABLE_SYSCALLS. In this case, we try to guess what the - correct value should be. Yuck. If we have sigvec, but neither of - the above cases applied (which we know because they would have - changed HAVE_RESTARTABLE_SYSCALLS) then we are probably on 4.2BSD - and system calls are automatically restarted. Otherwise, assume - that they are not. */ -#if HAVE_RESTARTABLE_SYSCALLS == -1 -#undef HAVE_RESTARTABLE_SYSCALLS -#if HAVE_SIGVEC -#define HAVE_RESTARTABLE_SYSCALLS 1 -#else -#define HAVE_RESTARTABLE_SYSCALLS 0 -#endif -#endif /* HAVE_RESTARTABLE_SYSCALLS == -1 */ - -/* We don't handle sigset in combination with restartable system - calls, so we check for it although this combination will never - happen. */ -#if ! HAVE_SIGACTION && ! HAVE_SIGVEC && HAVE_SIGSET -#if HAVE_RESTARTABLE_SYSCALLS -#undef HAVE_SIGSET -#define HAVE_SIGSET 0 -#endif -#endif - -/* If we don't have restartable system calls, we can ignore - fsysdep_catch, usysdep_start_catch and usysdep_end_catch. - Otherwise fsysdep_catch has to do a setjmp. */ - -#if ! HAVE_RESTARTABLE_SYSCALLS - -#define fsysdep_catch() (TRUE) -#define usysdep_start_catch() -#define usysdep_end_catch() -#define CATCH_PROTECT - -#else /* HAVE_RESTARTABLE_SYSCALLS */ - -#if HAVE_SETRET && ! HAVE_SIGSETJMP -#include <setret.h> -#define setjmp setret -#define longjmp longret -#define jmp_buf ret_buf -#else /* ! HAVE_SETRET || HAVE_SIGSETJMP */ -#include <setjmp.h> -#if HAVE_SIGSETJMP -#undef setjmp -#undef longjmp -#undef jmp_buf -#define setjmp(s) sigsetjmp ((s), TRUE) -#define longjmp siglongjmp -#define jmp_buf sigjmp_buf -#endif /* HAVE_SIGSETJMP */ -#endif /* ! HAVE_SETRET || HAVE_SIGSETJMP */ - -extern volatile sig_atomic_t fSjmp; -extern volatile jmp_buf sSjmp_buf; - -#define fsysdep_catch() (setjmp (sSjmp_buf) == 0) - -#define usysdep_start_catch() (fSjmp = TRUE) - -#define usysdep_end_catch() (fSjmp = FALSE) - -#define CATCH_PROTECT volatile - -#endif /* HAVE_RESTARTABLE_SYSCALLS */ - -/* Get definitions for the terminal driver. */ - -#if HAVE_BSD_TTY -#include <sgtty.h> -struct sbsd_terminal -{ - struct sgttyb stty; - struct tchars stchars; - struct ltchars sltchars; -}; -typedef struct sbsd_terminal sterminal; -#define fgetterminfo(o, q) \ - (ioctl ((o), TIOCGETP, &(q)->stty) == 0 \ - && ioctl ((o), TIOCGETC, &(q)->stchars) == 0 \ - && ioctl ((o), TIOCGLTC, &(q)->sltchars) == 0) -#define fsetterminfo(o, q) \ - (ioctl ((o), TIOCSETN, &(q)->stty) == 0 \ - && ioctl ((o), TIOCSETC, &(q)->stchars) == 0 \ - && ioctl ((o), TIOCSLTC, &(q)->sltchars) == 0) -#define fsetterminfodrain(o, q) \ - (ioctl ((o), TIOCSETP, &(q)->stty) == 0 \ - && ioctl ((o), TIOCSETC, &(q)->stchars) == 0 \ - && ioctl ((o), TIOCSLTC, &(q)->sltchars) == 0) -#endif /* HAVE_BSD_TTY */ - -#if HAVE_SYSV_TERMIO -#include <termio.h> -typedef struct termio sterminal; -#define fgetterminfo(o, q) (ioctl ((o), TCGETA, (q)) == 0) -#define fsetterminfo(o, q) (ioctl ((o), TCSETA, (q)) == 0) -#define fsetterminfodrain(o, q) (ioctl ((o), TCSETAW, (q)) == 0) -#endif /* HAVE_SYSV_TERMIO */ - -#if HAVE_POSIX_TERMIOS -#include <termios.h> -typedef struct termios sterminal; -#define fgetterminfo(o, q) (tcgetattr ((o), (q)) == 0) -#define fsetterminfo(o, q) (tcsetattr ((o), TCSANOW, (q)) == 0) -#define fsetterminfodrain(o, q) (tcsetattr ((o), TCSADRAIN, (q)) == 0) - -/* On some systems it is not possible to include both <sys/ioctl.h> - and <termios.h> in the same source files; I don't really know why. - On such systems, we pretend that we don't have <sys/ioctl.h>. */ -#if ! HAVE_TERMIOS_AND_SYS_IOCTL_H -#undef HAVE_SYS_IOCTL_H -#define HAVE_SYS_IOCTL_H 0 -#endif - -#endif /* HAVE_POSIX_TERMIOS */ - -/* The root directory (this is needed by the system independent stuff - as the default for local-send). */ -#define ZROOTDIR "/" - -/* The name of the execution directory within the spool directory - (this is need by the system independent uuxqt.c). */ -#define XQTDIR ".Xqtdir" - -/* The name of the directory in which we preserve file transfers that - failed. */ -#define PRESERVEDIR ".Preserve" - -/* The name of the directory to which we move corrupt files. */ -#define CORRUPTDIR ".Corrupt" - -/* The name of the directory to which we move failed execution files. */ -#define FAILEDDIR ".Failed" - -/* The length of the sequence number used in a file name. */ -#define CSEQLEN (4) - -/* Get some standard definitions. Avoid including the files more than - once--some might have been included by uucp.h. */ -#if USE_STDIO && HAVE_UNISTD_H -#include <unistd.h> -#endif -#if ! USE_TYPES_H -#include <sys/types.h> -#endif -#include <sys/stat.h> - -/* Get definitions for the file permission bits. */ - -#ifndef S_IRWXU -#define S_IRWXU 0700 -#endif -#ifndef S_IRUSR -#define S_IRUSR 0400 -#endif -#ifndef S_IWUSR -#define S_IWUSR 0200 -#endif -#ifndef S_IXUSR -#define S_IXUSR 0100 -#endif - -#ifndef S_IRWXG -#define S_IRWXG 0070 -#endif -#ifndef S_IRGRP -#define S_IRGRP 0040 -#endif -#ifndef S_IWGRP -#define S_IWGRP 0020 -#endif -#ifndef S_IXGRP -#define S_IXGRP 0010 -#endif - -#ifndef S_IRWXO -#define S_IRWXO 0007 -#endif -#ifndef S_IROTH -#define S_IROTH 0004 -#endif -#ifndef S_IWOTH -#define S_IWOTH 0002 -#endif -#ifndef S_IXOTH -#define S_IXOTH 0001 -#endif - -#if STAT_MACROS_BROKEN -#undef S_ISDIR -#endif - -#ifndef S_ISDIR -#ifdef S_IFDIR -#define S_ISDIR(i) (((i) & S_IFMT) == S_IFDIR) -#else /* ! defined (S_IFDIR) */ -#define S_ISDIR(i) (((i) & 0170000) == 040000) -#endif /* ! defined (S_IFDIR) */ -#endif /* ! defined (S_ISDIR) */ - -/* We need the access macros. */ -#ifndef R_OK -#define R_OK 4 -#define W_OK 2 -#define X_OK 1 -#define F_OK 0 -#endif /* ! defined (R_OK) */ - -/* We create files with these modes (should this be configurable?). */ -#define IPRIVATE_FILE_MODE (S_IRUSR | S_IWUSR) -#define IPUBLIC_FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) - -/* We create directories with this mode (should this be configurable?). */ -#define IDIRECTORY_MODE (S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) -#define IPUBLIC_DIRECTORY_MODE (S_IRWXU | S_IRWXG | S_IRWXO) - -#if ! HAVE_OPENDIR - -/* Define some structures to use if we don't have opendir, etc. These - will only work if we have the old Unix filesystem, with a 2 byte - inode and a 14 byte filename. */ - -#include <sys/dir.h> - -struct dirent -{ - char d_name[DIRSIZ + 1]; -}; - -typedef struct -{ - int o; - struct dirent s; -} DIR; - -extern DIR *opendir P((const char *zdir)); -extern struct dirent *readdir P((DIR *)); -extern int closedir P((DIR *)); - -#endif /* ! HAVE_OPENDIR */ - -#if ! HAVE_FTW_H - -/* If there is no <ftw.h>, define the ftw constants. */ - -#define FTW_F (0) -#define FTW_D (1) -#define FTW_DNR (2) -#define FTW_NS (3) - -#endif /* ! HAVE_FTW_H */ - -/* This structure holds the system dependent information we keep for a - connection. This is used by the TCP and TLI code. */ - -struct ssysdep_conn -{ - /* File descriptor. */ - int o; - /* File descriptor to read from (used by stdin and pipe port types). */ - int ord; - /* File descriptor to write to (used by stdin and pipe port types). */ - int owr; - /* Device name. */ - char *zdevice; - /* File status flags. */ - int iflags; - /* File status flags for write descriptor (-1 if not used). */ - int iwr_flags; - /* Hold the real descriptor when using a dialer device. */ - int ohold; - /* TRUE if this is a terminal and the remaining fields are valid. */ - boolean fterminal; - /* TRUE if this is a TLI descriptor. */ - boolean ftli; - /* Baud rate. */ - long ibaud; - /* Original terminal settings. */ - sterminal sorig; - /* Current terminal settings. */ - sterminal snew; - /* Process ID of currently executing pipe command, or parent process - of forked TCP or TLI server, or -1. */ - pid_t ipid; -#if HAVE_COHERENT_LOCKFILES - /* On Coherent we need to hold on to the real port name which will - be used to enable the port. Ick. */ - char *zenable; -#endif -}; - -/* These functions do I/O and chat scripts to a port. They are called - by the TCP and TLI routines. */ -extern boolean fsysdep_conn_read P((struct sconnection *qconn, - char *zbuf, size_t *pclen, - size_t cmin, int ctimeout, - boolean freport)); -extern boolean fsysdep_conn_write P((struct sconnection *qconn, - const char *zbuf, size_t clen)); -extern boolean fsysdep_conn_io P((struct sconnection *qconn, - const char *zwrite, size_t *pcwrite, - char *zread, size_t *pcread)); -extern boolean fsysdep_conn_chat P((struct sconnection *qconn, - char **pzprog)); - -/* Set a signal handler. */ -extern void usset_signal P((int isig, RETSIGTYPE (*pfn) P((int)), - boolean fforce, boolean *pfignored)); - -/* Default signal handler. This sets the appropriate element of the - afSignal array. If system calls are automatically restarted, it - may do a longjmp to an fsysdep_catch. */ -extern RETSIGTYPE ussignal P((int isig)); - -/* Try to fork, repeating several times. */ -extern pid_t ixsfork P((void)); - -/* Spawn a job. Returns the process ID of the spawned job or -1 on - error. The following macros may be passed in aidescs. */ - -/* Set descriptor to /dev/null. */ -#define SPAWN_NULL (-1) -/* Set element of aidescs to a pipe for caller to read from. */ -#define SPAWN_READ_PIPE (-2) -/* Set element of aidescs to a pipe for caller to write to. */ -#define SPAWN_WRITE_PIPE (-3) - -extern pid_t ixsspawn P((const char **pazargs, int *aidescs, - boolean fkeepuid, boolean fkeepenv, - const char *zchdir, boolean fnosigs, - boolean fshell, const char *zpath, - const char *zuu_machine, - const char *zuu_user)); - -/* Do a form of popen using ixsspawn. */ -extern FILE *espopen P((const char **pazargs, boolean frd, - pid_t *pipid)); - -/* Wait for a particular process to finish, returning the exit status. - The process ID should be pid_t, but we can't put that in a - prototype. */ -extern int ixswait P((unsigned long ipid, const char *zreport)); - -/* Read from a connection using two file descriptors. */ -extern boolean fsdouble_read P((struct sconnection *qconn, char *zbuf, - size_t *pclen, size_t cmin, int ctimeout, - boolean freport)); - -/* Write to a connection using two file descriptors. */ -extern boolean fsdouble_write P((struct sconnection *qconn, - const char *zbuf, size_t clen)); - -/* Run a chat program on a connection using two file descriptors. */ -extern boolean fsdouble_chat P((struct sconnection *qconn, - char **pzprog)); - -/* Find a spool file in the spool directory. For a local file, the - bgrade argument is the grade of the file. This is needed for - SPOOLDIR_SVR4. */ -extern char *zsfind_file P((const char *zsimple, const char *zsystem, - int bgrade)); - -/* Return the grade given a sequence number. */ -extern int bsgrade P((pointer pseq)); - -/* Lock a string. */ -extern boolean fsdo_lock P((const char *, boolean fspooldir, - boolean *pferr)); - -/* Unlock a string. */ -extern boolean fsdo_unlock P((const char *, boolean fspooldir)); - -/* Check access for a particular user name, or NULL to check access - for any user. */ -extern boolean fsuser_access P((const struct stat *, int imode, - const char *zuser)); - -/* Switch to the permissions of the invoking user. This sets the - argument to a value to pass to fsuucp_perms. */ -extern boolean fsuser_perms P((uid_t *)); - -/* Switch back to the permissions of the UUCP user ID. This should be - passed the value returned by fsuser_perms in its argument. */ -extern boolean fsuucp_perms P((long)); - -/* Stick two directories and a file name together. */ -extern char *zsappend3 P((const char *zdir1, const char *zdir2, - const char *zfile)); - -/* Stick three directories and a file name together. */ -extern char *zsappend4 P((const char *zdir1, const char *zdir2, - const char *zdir3, const char *zfile)); - -/* Get a temporary file name. */ -extern char *zstemp_file P((const struct uuconf_system *qsys)); - -/* Get a command file name. */ -extern char *zscmd_file P((const struct uuconf_system *qsys, int bgrade)); - -/* Get a jobid from a system, a file name, and a grade. */ -extern char *zsfile_to_jobid P((const struct uuconf_system *qsys, - const char *zfile, - int bgrade)); - -/* Get a file name from a jobid. This also returns the associated system - in *pzsystem and the grade in *pbgrade. */ -extern char *zsjobid_to_file P((const char *zid, char **pzsystem, - char *pbgrade)); - -/* See whether there is a spool directory for a system when using - SPOOLDIR_ULTRIX. */ -extern boolean fsultrix_has_spool P((const char *zsystem)); - -#if HAVE_COHERENT_LOCKFILES -/* Lock a coherent tty. */ -extern boolean lockttyexist P((const char *z)); -extern boolean fscoherent_disable_tty P((const char *zdevice, - char **pzenable)); -#endif - -/* Some replacements for standard Unix functions. */ - -#if ! HAVE_DUP2 -extern int dup2 P((int oold, int onew)); -#endif - -#if ! HAVE_FTW -extern int ftw P((const char *zdir, - int (*pfn) P((const char *zfile, - struct stat *qstat, - int iflag)), - int cdescriptors)); -#endif - -#if ! HAVE_GETCWD && ! HAVE_GETWD -extern char *getcwd P((char *zbuf, size_t cbuf)); -#endif - -#if ! HAVE_MKDIR -extern int mkdir P((const char *zdir, int imode)); -#endif - -#if ! HAVE_RENAME -extern int rename P((const char *zold, const char *znew)); -#endif - -#if ! HAVE_RMDIR -extern int rmdir P((const char *zdir)); -#endif - -/* The working directory from which the program was run (this is set - by usysdep_initialize if called with INIT_GETCWD). */ -extern char *zScwd; - -/* The spool directory name. */ -extern const char *zSspooldir; - -/* The lock directory name. */ -extern const char *zSlockdir; - -/* The local UUCP name (needed for some spool directory stuff). */ -extern const char *zSlocalname; - -#endif /* ! defined (SYSH_UNX_H) */ diff --git a/gnu/libexec/uucp/common_sources/system.h b/gnu/libexec/uucp/common_sources/system.h deleted file mode 100644 index 5fcc525..0000000 --- a/gnu/libexec/uucp/common_sources/system.h +++ /dev/null @@ -1,994 +0,0 @@ -/* system.h - Header file for system dependent stuff in the Taylor UUCP package. - This file is not itself system dependent. - - Copyright (C) 1991, 1992, 1993, 1994, 1995 Ian Lance Taylor - - This file is part of the Taylor UUCP package. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - This program 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 - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - The author of the program may be contacted at ian@airs.com or - c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144. - */ - -#ifndef SYSTEM_H - -#define SYSTEM_H - -#if ANSI_C -/* These structures are used in prototypes but are not defined in this - header file. */ -struct tm; -struct uuconf_system; -struct uuconf_port; -struct sconnection; -struct sstatus; -struct scmd; -#endif - -/* Any function which returns an error should also report an error - message, unless otherwise indicated. - - Any function that returns a char *, rather than a const char *, is - returning a pointer to a buffer allocated by zbufalc which must be - freed using ubuffree, unless otherwise indicated. */ - -/* The maximum length of a remote system name. */ -extern size_t cSysdep_max_name_len; - -/* Initialize. If something goes wrong, this routine should just - exit. The flag argument is 0, or a combination of any of the - following flags. */ - -/* This program needs to know the current working directory. This is - used because on Unix it can be expensive to determine the current - working directory (some versions of getcwd fork a process), but in - most cases we don't need to know it. However, we are going to - chdir to the spool directory (unless INIT_CHDIR is set), so we have - to get the cwd now if we are ever going to get it. Both uucp and - uux use the function fsysdep_needs_cwd to determine whether they - will need the current working directory, and pass the argument to - usysdep_initialize appropriately. There's probably a cleaner way - to handle this, but this will suffice for now. */ -#define INIT_GETCWD (01) - -/* This program should not chdir to the spool directory. This may - only make sense on Unix. It is set by cu. */ -#define INIT_NOCHDIR (02) - -/* This program needs special access to the spool directories. That - means, on Unix, this program is normally installed setuid. */ -#define INIT_SUID (04) - -/* Do not close all open descriptors. This is not used by the UUCP - code, but it is used by other programs which share some of the - system dependent libraries. */ -#define INIT_NOCLOSE (010) - -extern void usysdep_initialize P((pointer puuconf, int iflags)); - -/* Exit the program. The fsuccess argument indicates whether to - return an indication of success or failure to the outer - environment. This routine should not return. */ -extern void usysdep_exit P((boolean fsuccess)); - -/* Called when a non-standard configuration file is being used, to - avoid handing out privileged access. If it returns FALSE, default - configuration file will be used. This is called before the - usysdep_initialize function is called. */ -extern boolean fsysdep_other_config P((const char *)); - -/* Detach from the controlling terminal. This probably only makes - sense on Unix. It is called by uucico to try to get the modem port - as a controlling terminal. It is also called by uucico before it - starts up uuxqt, so that uuxqt will be a complete daemon. */ -extern void usysdep_detach P((void)); - -/* Get the local node name if it is not specified in the configuration - files. Returns NULL on error; otherwise the return value should - point to a static buffer. */ -extern const char *zsysdep_localname P((void)); - -/* Get the login name. This is used when uucico is started up with no - arguments in slave mode, which causes it to assume that somebody - has logged in. It also used by uucp and uux for recording the user - name. This may not return NULL. The return value should point to - a static buffer. */ -extern const char *zsysdep_login_name P((void)); - -/* Set a signal handler for a signal. If the signal occurs, the - appropriate element of afSignal should be set to the signal number - (see the declaration of afSignal in uucp.h). This routine might be - able to just use signal, but Unix requires more complex handling. - This is called before usysdep_initialize. */ -extern void usysdep_signal P((int isig)); - -/* Catch a signal. This is actually defined as a macro in the system - dependent header file, and the prototype here just indicates how it - should be called. It is called before a routine which must exit if - a signal occurs, and is expected to set do a setjmp (which is why - it must be a macro). It is actually only called in one place in - the system independent code, before the call to read stdin in uux. - This is needed to handle 4.2 BSD restartable system calls, which - require a longjmp. On systems which don't need to do - setjmp/longjmp around system calls, this can be redefined in - sysdep.h to TRUE. It should return TRUE if the routine should - proceed, or FALSE if a signal occurred. After having this return - TRUE, usysdep_start_catch should be used to start catching the - signal; this basically tells the signal handler that it's OK to do - the longjmp, if fsysdep_catch did not already do so. */ -#ifndef fsysdep_catch -extern boolean fsysdep_catch P((void)); -#endif - -/* Start catching a signal. This is called after fsysdep_catch to - tell the signal handler to go ahead and do the longjmp. This may - be implemented as a macro in sysdep.h. */ -#ifndef usysdep_start_catch -extern void usysdep_start_catch P((void)); -#endif - -/* Stop catching a signal. This is called when it is no longer - necessary for fsysdep_catch to handle signals. This may be - implemented as a macro in sysdep.h. */ -#ifndef usysdep_end_catch -extern void usysdep_end_catch P((void)); -#endif - -/* Link two files. On Unix this should attempt the link. If it - succeeds it should return TRUE with *pfworked set to TRUE. If the - link fails because it must go across a device, it should return - TRUE with *pfworked set to FALSE. If the link fails for some other - reason, it should log an error message and return FALSE. On a - system which does not support links to files, this should just - return TRUE with *pfworked set to FALSE. */ -extern boolean fsysdep_link P((const char *zfrom, const char *zto, - boolean *pfworked)); - -/* Get the port name. This is used when uucico is started up in slave - mode to figure out which port was used to call in so that it can - determine any appropriate protocol parameters. This may return - NULL if the port cannot be determined, which will just mean that no - protocol parameters are applied. The name returned should be the - sort of name that would appear in the port file. This should set - *pftcp_port to TRUE if it can determine that the port is a TCP - connection rather than a normal serial port. The return value (if - not NULL) should point to a static buffer. */ -extern const char *zsysdep_port_name P((boolean *pftcp_port)); - -/* Expand a file name on the local system. On Unix, if the zfile - argument begins with ~user/ it goes in that users home directory, - and if it begins with ~/ it goes in the public directory (the - public directory is passed to this routine, since each system may - have its own public directory). Similar conventions may be - desirable on other systems. This should always return an absolute - path name, probably in the public directory. It should return NULL - on error; otherwise the return value should be allocated using - zbufcpy or zbufalc. If pfbadname is not NULL, then if the function - returns NULL *pfbadname should be set to TRUE if the error is just - that the file name is badly specified; *pfbadname should be set to - FALSE for some sort of internal error. */ -extern char *zsysdep_local_file P((const char *zname, - const char *zpubdir, - boolean *pfbadname)); - -/* Return whether a file name is in a directory, and check for read or - write access. This should check whether zfile is within zdir (or - is zdir itself). If it is not, it should return FALSE. If zfile - is in zdir, then fcheck indicates whether further checking should - be done. If fcheck is FALSE, no further checking is done. - Otherwise, if freadable is TRUE the user zuser should have search - access to all directories from zdir down to zfile and should have - read access on zfile itself (if zfile does not exist, or is not a - regular file, this function may return FALSE but does not have to). - If freadable is FALSE, the user zuser should have search access to - all directories from zdir down to zfile and should have write - access on zfile (which may be a directory, or may not actually - exist, which is acceptable). The zuser argument may be NULL, in - which case the check should be made for any user, not just zuser. - There is no way for this function to return error. */ -extern boolean fsysdep_in_directory P((const char *zfile, - const char *zdir, - boolean fcheck, - boolean freadable, - const char *zuser)); - -/* Return TRUE if a file exists, FALSE otherwise. There is no way to - return error. */ -extern boolean fsysdep_file_exists P((const char *zfile)); - -/* Start up a program. If the ffork argument is true, this should - spawn a new process and return. If the ffork argument is false, - this may either return or not. The three string arguments may be - catenated together to form the program to execute; I did it this - way to make it easy to call execl(2), and because I never needed - more than two arguments. The program will always be "uucico" or - "uuxqt". The return value should be TRUE on success, FALSE on - error. */ -extern boolean fsysdep_run P((boolean ffork, const char *zprogram, - const char *zarg1, const char *zarg2)); - -/* Send a mail message. This function will be passed an array of - strings. All necessary newlines are already included; the strings - should simply be concatenated together to form the mail message. - It should return FALSE on error, although the return value is often - ignored. */ -extern boolean fsysdep_mail P((const char *zto, const char *zsubject, - int cstrs, const char **paz)); - -/* Get the time in seconds since some epoch. The actual epoch is - unimportant, so long as the time values are consistent across - program executions and the value is never negative. If the - pimicros argument is not NULL, it should be set to the number of - microseconds (if this is not available, *pimicros should be set to - zero). */ -extern long ixsysdep_time P((long *pimicros)); - -/* Get the time in seconds and microseconds (millionths of a second) - since some epoch. The actual epoch is not important, and it may - change in between program invocations; this is provided because on - Unix the times function may be used. If microseconds can not be - determined, *pimicros can just be set to zero. */ -extern long ixsysdep_process_time P((long *pimicros)); - -/* Parse the value returned by ixsysdep_time into a struct tm. I - assume that this structure is defined in <time.h>. This is - basically just localtime, except that the ANSI function takes a - time_t which may not be what is returned by ixsysdep_time. */ -extern void usysdep_localtime P((long itime, struct tm *q)); - -/* Sleep for a number of seconds. */ -extern void usysdep_sleep P((int cseconds)); - -/* Pause for half a second, or 1 second if subsecond sleeps are not - possible. */ -extern void usysdep_pause P((void)); - -/* Lock a remote system. This should return FALSE if the system is - already locked (no error should be reported). */ -extern boolean fsysdep_lock_system P((const struct uuconf_system *qsys)); - -/* Unlock a remote system. This should return FALSE on error - (although the return value is generally ignored). */ -extern boolean fsysdep_unlock_system P((const struct uuconf_system *qsys)); - -/* Get the conversation sequence number for a remote system, and - increment it for next time. This should return -1 on error. */ -extern long ixsysdep_get_sequence P((const struct uuconf_system *qsys)); - -/* Get the status of a remote system. This should return FALSE on - error. Otherwise it should set *qret to the status. If no status - information is available, this should set *qret to sensible values - and return TRUE. If pfnone is not NULL, then it should be set to - TRUE if no status information was available or FALSE otherwise. */ -extern boolean fsysdep_get_status P((const struct uuconf_system *qsys, - struct sstatus *qret, - boolean *pfnone)); - -/* Set the status of a remote system. This should return FALSE on - error. The system will be locked before this call is made. */ -extern boolean fsysdep_set_status P((const struct uuconf_system *qsys, - const struct sstatus *qset)); - -/* See whether a remote system is permitted to log in. This is just - to support the remote.unknown shell script for HDB. The zscript - argument is the script name, as return by uuconf_remote_unknown. - The zsystem argument is the name given by the remote system. If - the system is not permitted to log in, this function should log an - error and return FALSE. */ -extern boolean fsysdep_unknown_caller P((const char *zscript, - const char *zsystem)); - -/* Check whether there is work for a remote system. It should return - TRUE if there is work, FALSE otherwise; there is no way to indicate - an error. */ -extern boolean fsysdep_has_work P((const struct uuconf_system *qsys)); - -/* Initialize the work scan. This will be called before - fsysdep_get_work. The bgrade argument is the minimum grade of - execution files that should be considered (e.g. a bgrade of 'd' - will allow all grades from 'A' to 'Z' and 'a' to 'd'). This - function should return FALSE on error. */ -extern boolean fsysdep_get_work_init P((const struct uuconf_system *qsys, - int bgrade)); - -/* Get the next command to be executed for a remote system. The - bgrade argument will be the same as for fsysdep_get_work_init; - probably only one of these functions will use it, namely the - function for which it is more convenient. This should return FALSE - on error. The structure pointed to by qcmd should be filled in. - The strings may point into a static buffer; they will be copied out - if necessary. If there is no more work, this should set qcmd->bcmd - to 'H' and return TRUE. This should set qcmd->pseq to something - which can be passed to fsysdep_did_work to remove the job from the - queue when it has been completed. This may set qcmd->bcmd to 'P' - to represent a poll file; the main code will just pass the pseq - element of such a structure to fsysdep_did_work if the system is - called. */ -extern boolean fsysdep_get_work P((const struct uuconf_system *qsys, - int bgrade, struct scmd *qcmd)); - -/* Remove a job from the work queue. This must also remove the - temporary file used for a send command, if there is one. It should - return FALSE on error. */ -extern boolean fsysdep_did_work P((pointer pseq)); - -/* Save the temporary file for a send command. This function should - return a string that will be put into a mail message. On success - this string should say something like ``The file has been saved as - ...''. On failure it could say something like ``The file could not - be saved because ...''. If there is no temporary file, or for some - reason it's not appropriate to include a message, this function - should just return NULL. This function is used when a file send - fails for some reason, to make sure that we don't completely lost - the file. */ -extern const char *zsysdep_save_temp_file P((pointer pseq)); - -/* Save a file in a location used to hold corrupt files. This is - called if a bad execution file is found by uuxqt. This should - return the new name of the file (allocated by zbufalc), or NULL if - the move failed (in which the original file should remain). */ -extern char *zsysdep_save_corrupt_file P((const char *zfile)); - -/* Save a file in a location used to hold failed execution files. - This is called if a uuxqt execution fails. This should return the - new name of the file (allocated by zbufalc), or NULL if the move - failed (in which case the original file should remain). */ -extern char *zsysdep_save_failed_file P((const char *zfile)); - -/* Cleanup anything left over by fsysdep_get_work_init and - fsysdep_get_work. This may be called even though - fsysdep_get_work_init has not been. */ -extern void usysdep_get_work_free P((const struct uuconf_system *qsys)); - -/* Add a base name to a file if it is a directory. If zfile names a - directory, then return a string naming a file within the directory - with the base file name of zname. This should return NULL on - error. */ -extern char *zsysdep_add_base P((const char *zfile, - const char *zname)); - -/* Get a file name from the spool directory. This should return NULL - on error. The pseq argument is TRUE if the file was found from - searching the work directory; this is, unfortunately, needed to - support SVR4 spool directories. */ -extern char *zsysdep_spool_file_name P((const struct uuconf_system *qsys, - const char *zfile, - pointer pseq)); - -/* Make necessary directories. This should create all non-existent - directories for a file. If the fpublic argument is TRUE, anybody - should be permitted to create and remove files in the directory; - otherwise anybody can list the directory, but only the UUCP system - can create and remove files. It should return FALSE on error. */ -extern boolean fsysdep_make_dirs P((const char *zfile, boolean fpublic)); - -/* Create a stdio file, setting appropriate protection. If the - fpublic argument is TRUE, the file is made publically accessible; - otherwise it is treated as a private data file. If the fappend - argument is TRUE, the file is opened in append mode; otherwise any - previously existing file of the same name is removed. If the - fmkdirs argument is TRUE, then any necessary directories should - also be created. On a system in which file protections are - unimportant and the necessary directories exist, this may be - implemented as - - fopen (zfile, fappend ? "a" : "w"); - - */ -extern FILE *esysdep_fopen P((const char *zfile, boolean fpublic, - boolean fappend, boolean fmkdirs)); - -/* Open a file, using the access permission of the user who invoked - the program. The frd argument is TRUE if the file should be opened - for reading, and the fbinary argument is TRUE if the file should be - opened as a binary file (this is ignored on Unix, since there all - files are binary files). This returns an openfile_t, not a FILE *. - This is supposed to be able to open a file even if it can not be - read by the uucp user. This is not possible on some older Unix - systems. */ -extern openfile_t esysdep_user_fopen P((const char *zfile, - boolean frd, boolean fbinary)); - -/* Open a file to send to another system; the qsys argument is the - system the file is being sent to. If fcheck is TRUE, it should - make sure that the file is readable by zuser (if zuser is NULL the - file must be readable by anybody). This is to eliminate a window - between fsysdep_in_directory and esysdep_open_send. If an error - occurs, it should return EFILECLOSED. */ -extern openfile_t esysdep_open_send P((const struct uuconf_system *qsys, - const char *zname, - boolean fcheck, - const char *zuser)); - -/* Return a temporary file name to receive into. This file will be - opened by esysdep_open_receive. The qsys argument is the system - the file is coming from, the zto argument is the name the file will - have after it has been fully received, the ztemp argument, if it is - not NULL, is from the command sent by the remote system, and the - frestart argument is TRUE if the protocol and remote system permit - file transfers to be restarted. The return value must be freed - using ubuffree. The function should return NULL on error. */ -extern char *zsysdep_receive_temp P((const struct uuconf_system *qsys, - const char *zfile, - const char *ztemp, - boolean frestart)); - -/* Open a file to receive from another system. The zreceive argument - is the return value of zsysdep_receive_temp with the same qsys, - zfile and ztemp arguments. If the function can determine that this - file has already been partially received, it should set *pcrestart - to the number of bytes that have been received. If the file has - not been partially received, *pcrestart should be set to -1. - pcrestart will be passed in as NULL if file restart is not - supported by the protocol or the remote system. The function - should return EFILECLOSED on error. After the file is written, - fsysdep_move_file will be called to move the file to its final - destination, and to set the correct file mode. */ -extern openfile_t esysdep_open_receive P((const struct uuconf_system *qsys, - const char *zto, - const char *ztemp, - const char *zreceive, - long *pcrestart)); - -/* Move a file. This is used to move a received file to its final - location. The zto argument is the file to create. The zorig - argument is the name of the file to move. If fmkdirs is TRUE, then - any necessary directories are created; fpublic indicates whether - they should be publically writeable or not. If fcheck is TRUE, - this should make sure the directory is writeable by the user zuser - (if zuser is NULL, then it must be writeable by any user); this is - to avoid a window of vulnerability between fsysdep_in_directory and - fsysdep_move_file. This function should return FALSE on error, in - which case the zorig file should still exist. */ -extern boolean fsysdep_move_file P((const char *zorig, const char *zto, - boolean fmkdirs, boolean fpublic, - boolean fcheck, const char *zuser)); - -/* Change the mode of a file. The imode argument is a Unix mode. - This should return FALSE on error. */ -extern boolean fsysdep_change_mode P((const char *zfile, - unsigned int imode)); - -/* Truncate a file which we are receiving into. This may be done by - closing the original file, removing it and reopening it. This - should return FALSE on error. */ -extern openfile_t esysdep_truncate P((openfile_t e, const char *zname)); - -/* Sync a file to disk. If this fails it should log an error using - the zmsg parameter, and return FALSE. This is controlled by the - FSYNC_ON_CLOSE macro in policy.h. */ -extern boolean fsysdep_sync P((openfile_t e, const char *zmsg)); - -/* It is possible for the acknowledgement of a received file to be - lost. The sending system will then now know that the file was - correctly received, and will send it again. This can be a problem - particularly with protocols which support channels, since they may - send several small files in a single window, all of which may be - received correctly although the sending system never sees the - acknowledgement. If these files involve an execution, the - execution will happen twice, which will be bad. - - This function is called when a file is completely received. It is - supposed to try and remember the reception, in case the connection - is lost. It is passed the system, the file name to receive to, and - the temporary file name from the sending system. It should return - FALSE on error. */ -extern boolean fsysdep_remember_reception P((const struct uuconf_system *qsys, - const char *zto, - const char *ztemp)); - -/* This function is called to see if a file has already been received - successfully. It gets the same arguments as - fsysdep_remember_reception. It should return TRUE if the file was - already received, FALSE otherwise. There is no way to report - error. */ -extern boolean fsysdep_already_received P((const struct uuconf_system *qsys, - const char *zto, - const char *ztemp)); - -/* This function is called when it is no longer necessary to remember - that a file has been received. This will be called when the - protocol knows that the receive message has been acknowledged. It - gets the same arguments as fsysdep_remember_reception. it should - return FALSE on error. */ -extern boolean fsysdep_forget_reception P((const struct uuconf_system *qsys, - const char *zto, - const char *ztemp)); - -/* Start expanding a wildcarded file name. This should return FALSE - on error; otherwise subsequent calls to zsysdep_wildcard should - return file names. */ -extern boolean fsysdep_wildcard_start P((const char *zfile)); - -/* Get the next wildcard name. This should return NULL when there are - no more names to return. The return value should be freed using - ubuffree. The argument should be the same as that to - fsysdep_wildcard_start. There is no way to return error. */ -extern char *zsysdep_wildcard P((const char *zfile)); - -/* Finish getting wildcard names. This may be called before or after - zsysdep_wildcard has returned NULL. It should return FALSE on - error. */ -extern boolean fsysdep_wildcard_end P((void)); - -/* Prepare to execute a bunch of file transfer requests. This should - make an entry in the spool directory so that the next time uucico - is started up it will transfer these files. The bgrade argument - specifies the grade of the commands. The commands themselves are - in the pascmds array, which has ccmds entries. The function should - return NULL on error, or the jobid on success. The jobid is a - string that may be printed or passed to fsysdep_kill_job and - related functions, but is otherwise uninterpreted. */ -extern char *zsysdep_spool_commands P((const struct uuconf_system *qsys, - int bgrade, int ccmds, - const struct scmd *pascmds)); - -/* Get a file name to use for a data file to be copied to another - system. The ztname, zdname and zxname arguments will all either be - NULL or point to an array of CFILE_NAME_LEN characters in length. - The ztname array should be set to a temporary file name that could - be passed to zsysdep_spool_file_name to retrieve the return value - of this function; this will be appropriate for the temporary name - in a send request. The zdname array should be set to a data file - name that is appropriate for the spool directory of the other - system; this will be appropriate for the name of the destination - file in a send request of a data file for an execution of some - sort. The zxname array should be set to an execute file name that - is appropriate for the other system. The zlocalname argument is - the name of the local system as seen by the remote system, the - bgrade argument is the grade, and fxqt is TRUE if this file is - going to become an execution file. This should return NULL on - error. */ -#define CFILE_NAME_LEN (15) - -extern char *zsysdep_data_file_name P((const struct uuconf_system *qsys, - const char *zlocalname, - int bgrade, boolean fxqt, - char *ztname, char *zdname, - char *zxname)); - -/* Get a name for a local execute file. This is used by uux for a - local command with remote files. Returns NULL on error. */ -extern char *zsysdep_xqt_file_name P((void)); - -/* Beginning getting execute files. To get a list of execute files, - first fsysdep_get_xqt_init is called, then zsysdep_get_xqt is - called several times until it returns NULL, then finally - usysdep_get_xqt_free is called. If the zsystem argument is not - NULL, it is the name of a system for which execution files are - desired. */ -extern boolean fsysdep_get_xqt_init P((const char *zsystem)); - -/* Get the next execute file. This should return NULL when finished - (with *pferr set to FALSE). The zsystem argument should be the - same string as that passed to fsysdep_get_xqt_init. On an error - this should return NULL with *pferr set to TRUE. This should set - *pzsystem to the name of the system for which the execute file was - created; this is not guaranteed to match the zsystem argument--that - must be double checked by the caller. Both the return value and - *pzsystem should be freed using ubuffree. */ -extern char *zsysdep_get_xqt P((const char *zsystem, char **pzsystem, - boolean *pferr)); - -/* Clean up after getting execute files. The zsystem argument should - be the same string as that passed to fsysdep_get_xqt_init. */ -extern void usysdep_get_xqt_free P((const char *zsystem)); - -/* Get the absolute pathname of a command to execute. This is given - the legal list of commands (which may be the special case "ALL") - and the path. It must return an absolute pathname to the command. - If it gets an error it should set *pferr to TRUE and return NULL; - if the command is not found it should set *pferr to FALSE and - return NULL. */ -extern char *zsysdep_find_command P((const char *zcmd, char **pzcmds, - char **pzpath, boolean *pferr)); - -/* Expand file names for uuxqt. This exists because uuxqt on Unix has - to expand file names which begin with a ~. It does not want to - expand any other type of file name, and it turns a double ~ into a - single one without expanding. If this returns NULL, the file does - not need to be changed; otherwise it returns a zbufalc'ed string. - There is no way to report error. */ -extern char *zsysdep_xqt_local_file P((const struct uuconf_system *qsys, - const char *zfile)); - -#if ! ALLOW_FILENAME_ARGUMENTS -/* Check an argument to an execution command to make sure that it - doesn't refer to a file name that may not be accessed. This should - check the argument to see if it is a filename. If it is, it should - either reject it out of hand or it should call fin_directory_list - on the file with both qsys->zremote_receive and qsys->zremote_send. - If the file is rejected, it should log an error and return FALSE. - Otherwise it should return TRUE. */ -extern boolean fsysdep_xqt_check_file P((const struct uuconf_system *qsys, - const char *zfile)); -#endif /* ! ALLOW_FILENAME_ARGUMENTS */ - -/* Run an execute file. The arguments are: - - qsys -- system for which execute file was created - zuser -- user who requested execution - pazargs -- list of arguments to command (element 0 is command) - zfullcmd -- command and arguments stuck together in one string - zinput -- file name for standard input (may be NULL) - zoutput -- file name for standard output (may be NULL) - fshell -- if TRUE, use /bin/sh to execute file - ilock -- return value of ixsysdep_lock_uuxqt - pzerror -- set to name of standard error file - pftemp -- set to TRUE if error is temporary, FALSE otherwise - - If fshell is TRUE, the command should be executed with /bin/sh - (obviously, this can only really be done on Unix systems). If an - error occurs this should return FALSE and set *pftemp - appropriately. *pzerror should be freed using ubuffree. */ -extern boolean fsysdep_execute P((const struct uuconf_system *qsys, - const char *zuser, - const char **pazargs, - const char *zfullcmd, - const char *zinput, - const char *zoutput, - boolean fshell, - int ilock, - char **pzerror, - boolean *pftemp)); - -/* Lock for uuxqt execution. If the cmaxuuxqts argument is not zero, - this should make sure that no more than cmaxuuxqts uuxqt processes - are running at once. Also, only one uuxqt may execute a particular - command (specified by the -c option) at a time. If zcmd is not - NULL, it is a command that must be locked. This should return a - nonnegative number which will be passed to other routines, - including fsysdep_unlock_uuxqt, or -1 on error. */ -extern int ixsysdep_lock_uuxqt P((const char *zcmd, - int cmaxuuxqts)); - -/* Unlock a uuxqt process. This is passed the return value of - ixsysdep_lock_uuxqt, as well as the arguments passed to - ixsysdep_lock_uuxqt. It may return FALSE on error, but at present - the return value is ignored. */ -extern boolean fsysdep_unlock_uuxqt P((int iseq, const char *zcmd, - int cmaxuuxqts)); - -/* See whether a particular uuxqt command is locked. This should - return TRUE if the command is locked (because ixsysdep_lock_uuxqt - was called with it as an argument), FALSE otherwise. There is no - way to return error. */ -extern boolean fsysdep_uuxqt_locked P((const char *zcmd)); - -/* Lock an execute file in order to execute it. This should return - FALSE if the execute file is already locked. There is no way to - return error. */ -extern boolean fsysdep_lock_uuxqt_file P((const char *zfile)); - -/* Unlock an execute file. This should return FALSE on error. */ -extern boolean fsysdep_unlock_uuxqt_file P((const char *zfile)); - -/* Lock the execution directory. The ilock argument is the return - value of ixsysdep_lock_uuxqt. This should return FALSE if the - directory is already locked. There is no way to return error. */ -extern boolean fsysdep_lock_uuxqt_dir P((int ilock)); - -/* Remove all files in the execution directory, and unlock it. This - should return FALSE on error. */ -extern boolean fsysdep_unlock_uuxqt_dir P((int ilock)); - -/* Move files into or out of the execution directory. The code will - already have checked that all the files exist. The elements in the - pzfrom array will be complete filenames, and the elements in the - pzto array will be either NULL (in which case the file should not - be moved) or simple base names. If fto is TRUE, the files in - pzfrom should be moved to pzto; otherwise, the files in pzto should - be moved to pzfrom (this is used if a temporary failure occurs, in - which case the execution will be retried later). If pzinput and - *pzinput are not NULL, then it is the name of the standard input - file; if it is the same as any element of pzfrom, then *pzinput - should be set to the zbufcpy of the corresponding pzto value, if - any. */ -extern boolean fsysdep_move_uuxqt_files P((int cfiles, - const char *const *pzfrom, - const char *const *pzto, - boolean fto, int ilock, - char **pzinput)); - -/* Expand a file name on the local system, defaulting to the current - directory. This is just like zsysdep_local_file, except that - relative files are placed in the working directory the program - started in rather than in the public directory. This should return - NULL on error. */ -extern char *zsysdep_local_file_cwd P((const char *zname, - const char *zpubdir, - boolean *pfbadname)); - -/* Add the working directory to a file name. The named file is - actually on a remote system. If the file already has a directory, - it should not be changed. This should return NULL on error. */ -extern char *zsysdep_add_cwd P((const char *zfile)); - -/* See whether a file name will need the current working directory - when zsysdep_local_file_cwd or zsysdep_add_cwd is called on it. - This will be called before usysdep_initialize. It should just - check whether the argument is an absolute path. See the comment - above usysdep_initialize in this file for an explanation of why - things are done this way. */ -extern boolean fsysdep_needs_cwd P((const char *zfile)); - -/* Get the base name of a file. The file will be a local file name, - and this function should return the base file name, ideally in a - form which will make sense on most systems; it will be used if the - destination of a uucp is a directory. */ -extern char *zsysdep_base_name P((const char *zfile)); - -/* Return a filename within a directory. */ -extern char *zsysdep_in_dir P((const char *zdir, const char *zfile)); - -/* Get the mode of a file. This should return a Unix style file mode. - It should return 0 on error. */ -extern unsigned int ixsysdep_file_mode P((const char *zfile)); - -/* See whether the user has access to a file. This is called by uucp - and uux to prevent copying of a file which uucp can read but the - user cannot. If access is denied, this should log an error message - and return FALSE. */ -extern boolean fsysdep_access P((const char *zfile)); - -/* See whether the daemon has access to a file. This is called by - uucp and uux when a file is queued up for transfer without being - copied into the spool directory. It is merely an early error - check, as the daemon would of course discover the error itself when - it tried the transfer. If access would be denied, this should log - an error message and return FALSE. */ -extern boolean fsysdep_daemon_access P((const char *zfile)); - -/* Translate a destination from system!user to a place in the public - directory where uupick will get the file. On Unix this produces - system!~/receive/user/localname, and that's probably what it has to - produce on any other system as well. Returns NULL on a usage - error, or otherwise returns string allocated by zbufcpy. */ -extern char *zsysdep_uuto P((const char *zdest, - const char *zlocalname)); - -/* Return TRUE if a pathname exists and is a directory. */ -extern boolean fsysdep_directory P((const char *zpath)); - -/* Walk a directory tree. The zdir argument is the directory to walk. - The pufn argument is a function to call on each regular file in the - tree. The first argument to pufn should be the full filename; the - second argument to pufn should be the filename relative to zdir; - the third argument to pufn should be the pinfo argument to - usysdep_walk_tree. The usysdep_walk_tree function should return - FALSE on error. */ -extern boolean usysdep_walk_tree P((const char *zdir, - void (*pufn) P((const char *zfull, - const char *zrelative, - pointer pinfo)), - pointer pinfo)); - -/* Return the jobid of a work file, given the sequence value. On - error this should log an error and return NULL. The jobid is a - string which may be printed out and read in and passed to - fsysdep_kill_job, etc., but is not otherwise interpreted. */ -extern char *zsysdep_jobid P((const struct uuconf_system *qsys, - pointer pseq)); - -/* See whether the current user is privileged. Privileged users are - permitted to kill jobs submitted by another user, and they are - permitted to use the -u argument to uucico; other uses of this call - may be added later. This should return TRUE if permission is - granted, FALSE otherwise. */ -extern boolean fsysdep_privileged P((void)); - -/* Kill a job, given the jobid. This should remove all associated - files and in general eliminate the job completely. On error it - should log an error message and return FALSE. */ -extern boolean fsysdep_kill_job P((pointer puuconf, - const char *zjobid)); - -/* Rejuvenate a job, given the jobid. If possible, this should update - the time associated with the job such that it will not be - eliminated by uustat -K or similar programs that check the creation - time. This should affect the return value of ixsysdep_work_time. - On error it should log an error message and return FALSE. */ -extern boolean fsysdep_rejuvenate_job P((pointer puuconf, - const char *zjobid)); - -/* Get the time a job was queued, given the sequence number. There is - no way to indicate error. The return value must use the same epoch - as ixsysdep_time. */ -extern long ixsysdep_work_time P((const struct uuconf_system *qsys, - pointer pseq)); - -/* Get the time a file was created. This is called by uustat on - execution files. There is no way to indicate error. The return - value must use the same epoch as ixsysdep_time. */ -extern long ixsysdep_file_time P((const char *zfile)); - -/* Touch a file to make it appear as though it was created at the - current time. This is called by uustat on execution files. On - error this should log an error message and return FALSE. */ -extern boolean fsysdep_touch_file P((const char *zfile)); - -/* Get the size in bytes of a file. If this file does not exist, this - should not give an error message, but should return -1. If some - other error occurs, this should return -2. */ -extern long csysdep_size P((const char *zfile)); - -/* Return the amount of free space on the containing the given file - name (the file may or may not exist). If the amount of free space - cannot be determined, the function should return -1. */ -extern long csysdep_bytes_free P((const char *zfile)); - -/* Start getting status information for all systems with available - status information. There may be status information for unknown - systems, which is why this series of functions is used. The phold - argument is used to pass information around, to possibly avoid the - use of static variables. On error this should log an error and - return FALSE. */ -extern boolean fsysdep_all_status_init P((pointer *phold)); - -/* Get status information for the next system. This should return the - system name and fill in the qstat argument. The phold argument - will be that set by fsysdep_all_status_init. On error this should - log an error, set *pferr to TRUE, and return NULL. */ -extern char *zsysdep_all_status P((pointer phold, boolean *pferr, - struct sstatus *qstat)); - -/* Free up anything allocated by fsysdep_all_status_init and - zsysdep_all_status. The phold argument is that set by - fsysdep_all_status_init. */ -extern void usysdep_all_status_free P((pointer phold)); - -/* Display the process status of all processes holding lock files. - This is uustat -p. The return value is passed to usysdep_exit. */ -extern boolean fsysdep_lock_status P((void)); - -/* Return TRUE if the user has legitimate access to the port. This is - used by cu to control whether the user can open a port directly, - rather than merely being able to dial out on it. Opening a port - directly allows the modem to be reprogrammed. */ -extern boolean fsysdep_port_access P((struct uuconf_port *qport)); - -/* Return whether the given port could be named by the given line. On - Unix, the line argument would be something like "ttyd0", and this - function should return TRUE if the named port is "/dev/ttyd0". */ -extern boolean fsysdep_port_is_line P((struct uuconf_port *qport, - const char *zline)); - -/* Set the terminal into raw mode. In this mode no input characters - should be treated specially, and characters should be made - available as they are typed. The original terminal mode should be - saved, so that it can be restored by fsysdep_terminal_restore. If - flocalecho is TRUE, then local echoing should still be done; - otherwise echoing should be disabled. This function returns FALSE - on error. */ -extern boolean fsysdep_terminal_raw P((boolean flocalecho)); - -/* Restore the terminal back to the original setting, before - fsysdep_terminal_raw was called. Returns FALSE on error. */ -extern boolean fsysdep_terminal_restore P((void)); - -/* Read a line from the terminal. The fsysdep_terminal_raw function - will have been called. This should print the zprompt argument - (unless it is NULL) and return the line, allocated by zbufcpy, or - NULL on error. */ -extern char *zsysdep_terminal_line P((const char *zprompt)); - -/* Write a line to the terminal, ending with a newline. This is - basically just puts (zline, stdout), except that the terminal will - be in raw mode, so on ASCII Unix systems the line needs to end with - \r\n. */ -extern boolean fsysdep_terminal_puts P((const char *zline)); - -/* If faccept is TRUE, permit the user to generate signals from the - terminal. If faccept is FALSE, turn signals off again. After - fsysdep_terminal_raw is called, signals should be off. Return - FALSE on error. */ -extern boolean fsysdep_terminal_signals P((boolean faccept)); - -/* The cu program expects the system dependent code to handle the - details of copying data from the communications port to the - terminal. This should be set up by fsysdep_cu_init, and done while - fsysdep_cu is called. It is permissible to do it on a continual - basis (on Unix a subprocess handles it) so long as the copying can - be stopped by the fsysdep_cu_copy function. - - The fsysdep_cu_init function does any system dependent - initialization needed for this. */ -extern boolean fsysdep_cu_init P((struct sconnection *qconn)); - -/* Copy all data from the communications port to the terminal, and all - data from the terminal to the communications port. Keep this up - until the escape character *zCuvar_escape is seen. Set *pbcmd to - the character following the escape character; after the escape - character, zlocalname should be printed, possibly after a delay. - If two escape characters are entered in sequence, this function - should send a single escape character to the port, and not return. - Returns FALSE on error. */ -extern boolean fsysdep_cu P((struct sconnection *qconn, - char *pbcmd, - const char *zlocalname)); - -/* If fcopy is TRUE, start copying data from the communications port - to the terminal. If fcopy is FALSE, stop copying data. This - function may be called several times during a cu session. It - should return FALSE on error. */ -extern boolean fsysdep_cu_copy P((boolean fcopy)); - -/* Stop copying data from the communications port to the terminal, and - generally clean up after fsysdep_cu_init and fsysdep_cu. Returns - FALSE on error. */ -extern boolean fsysdep_cu_finish P((void)); - -/* Run a shell command. If zcmd is NULL, or *zcmd == '\0', just - start up a shell. The second argument is one of the following - values. This should return FALSE on error. */ -enum tshell_cmd -{ - /* Attach stdin and stdout to the terminal. */ - SHELL_NORMAL, - /* Attach stdout to the communications port, stdin to the terminal. */ - SHELL_STDOUT_TO_PORT, - /* Attach stdin to the communications port, stdout to the terminal. */ - SHELL_STDIN_FROM_PORT, - /* Attach both stdin and stdout to the communications port. */ - SHELL_STDIO_ON_PORT -}; - -extern boolean fsysdep_shell P((struct sconnection *qconn, - const char *zcmd, - enum tshell_cmd tcmd)); - -/* Change directory. If zdir is NULL, or *zdir == '\0', change to the - user's home directory. Return FALSE on error. */ -extern boolean fsysdep_chdir P((const char *zdir)); - -/* Suspend the current process. This is only expected to work on Unix - versions that support SIGTSTP. In general, people can just shell - out. */ -extern boolean fsysdep_suspend P((void)); - -/* Start getting files for uupick. The zsystem argument may be NULL - to get files from all systems, or it may specify a particular - system. The zpubdir argument is the public directory to use. This - returns FALSE on error. */ -extern boolean fsysdep_uupick_init P((const char *zsystem, - const char *zpubdir)); - -/* Get the next file for uupick. This returns the basic file name. - It sets *pzfull to the full name, and *pzfrom to the name of the - system which sent this file over; both should be freed using - ubuffree. *pzfull should be passed to ubuffree after it is no - longer needed. The zsystem and zpubdir arguments should be the - same as the arguments to fsysdep_uupick_init. This returns NULL - when all files been returned. */ -extern char *zsysdep_uupick P((const char *zsystem, const char *zpubdir, - char **pzfrom, char **pzfull)); - -/* Clean up after getting files for uupick. */ -extern boolean fsysdep_uupick_free P((const char *zsystem, - const char *zpubdir)); - -/* Translate a local file name for uupick. On Unix this is just like - zsysdep_local_file_cwd except that a file beginning with ~/ is - placed in the user's home directory rather than in the public - directory. */ -extern char *zsysdep_uupick_local_file P((const char *zfile, - boolean *pfbadname)); - -/* Remove a directory and all the files in it. */ -extern boolean fsysdep_rmdir P((const char *zdir)); - -#endif /* ! defined (SYSTEM_H) */ diff --git a/gnu/libexec/uucp/common_sources/uuconf.h b/gnu/libexec/uucp/common_sources/uuconf.h deleted file mode 100644 index 32f653d..0000000 --- a/gnu/libexec/uucp/common_sources/uuconf.h +++ /dev/null @@ -1,1561 +0,0 @@ -/* uuconf.h - Header file for UUCP configuration routines. - - Copyright (C) 1992, 1993, 1994, 1995 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 Cygnus Support, 48 Grove Street, Somerville, MA 02144. - */ - -/* $FreeBSD$ */ - -#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 times at which to allow a particular grade of work to be - transferred to the system, when it calls in. The ival field of - each uuconf_timespan structure is the lowest grade which should - be transferred at that time. May be NULL, in which case there - are no grade restrictions. */ - struct uuconf_timespan *uuconf_qcalledtimegrade; - /* 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, - /* A pipe port. Not supported on all systems. */ - UUCONF_PORTTYPE_PIPE -}; - -/* 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; - /* Non-zero if the port supports hardware flow control. */ - int uuconf_fhardflow; - /* 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; - /* Non-zero if the port uses carrier detect. */ - int uuconf_fcarrier; - /* Non-zero if the port supports hardware flow control. */ - int uuconf_fhardflow; -}; - -/* 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; - /* Address family to use for a TCP connection. */ - int uuconf_zfamily; - /* A NULL terminated sequence of dialer/token pairs (element 0 is a - dialer name, element 1 is a token, etc.) May be NULL. */ - char **uuconf_pzdialer; -}; - -/* 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; -}; - -/* Additional information for a pipe port. */ - -struct uuconf_pipe_port -{ - /* The command and its arguments. */ - char **uuconf_pzcmd; -}; - -/* 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; - struct uuconf_pipe_port uuconf_spipe; - } 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 (BUCHAR (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))) - -/* Definitions for bits returned by uuconf_strip. */ -#define UUCONF_STRIP_LOGIN (01) -#define UUCONF_STRIP_PROTO (02) - -/* uuconf_runuuxqt returns either a positive number (the number of - execution files to receive between uuxqt invocations) or one of - these constant values. */ -#define UUCONF_RUNUUXQT_NEVER (0) -#define UUCONF_RUNUUXQT_ONCE (-1) -#define UUCONF_RUNUUXQT_PERCALL (-2) - -/* 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 a combination of UUCONF_STRIP bits indicating what types of - global information should be stripped on input. */ -extern int uuconf_strip (void *uuconf_pglobal, - int *uuconf_pistrip); - -/* 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); - -/* Get the frequency with which to spawn a uuxqt process. This - returns an integer. A positive number is the number of execution - files that should be received between spawns. Other values are one - of the UUCONF_RUNUUXQT constants listed above. */ -extern int uuconf_runuuxqt (void *uuconf_pglobal, - int *uuconf_pirunuuxqt); - -/* 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. All comparisons are done via a - callback function. The first argument to the function will be zero - when comparing login names, non-zero when comparing passwords. The - second argument to the function will be the pinfo argument passed - to uuconf_callin. The third argument will be the login name or - password from the UUCP password file. The comparison function - should return non-zero for a match, or zero for a non-match. If - the login name is found and the password compares correctly, - uuconf_callin will return UUCONF_SUCCESS. If the login is not - found, or the password does not compare correctly, uuconf_callin - will return UUCONF_NOT_FOUND. Other errors are also possible. */ -extern int uuconf_callin (void *uuconf_pglobal, - int (*uuconf_cmp) (int, void *, const char *), - void *uuconf_pinfo); - -/* 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_runuuxqt (); -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 set, the comment character (#) is treated as a normal character, - rather than as starting a comment. */ -#define UUCONF_CMDTABFLAG_NOCOMMENTS (0x4) - -#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) */ diff --git a/gnu/libexec/uucp/common_sources/uucp.h b/gnu/libexec/uucp/common_sources/uucp.h deleted file mode 100644 index 4636910..0000000 --- a/gnu/libexec/uucp/common_sources/uucp.h +++ /dev/null @@ -1,398 +0,0 @@ -/* uucp.h - Header file for the UUCP package. - - Copyright (C) 1991, 1992, 1993, 1994, 1995 Ian Lance Taylor - - This file is part of the Taylor UUCP package. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - This program 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 - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - The author of the program may be contacted at ian@airs.com or - c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144. - */ - -/* Get the system configuration parameters. */ -#include "config.h" -#include "policy.h" - -/* Get a definition for ANSI_C if we weren't given one. */ -#ifndef ANSI_C -#ifdef __STDC__ -#define ANSI_C 1 -#else /* ! defined (__STDC__) */ -#define ANSI_C 0 -#endif /* ! defined (__STDC__) */ -#endif /* ! defined (ANSI_C) */ - -/* Pass this definition into uuconf.h. */ -#define UUCONF_ANSI_C ANSI_C - -/* We always include some standard header files. We need <signal.h> - to define sig_atomic_t. */ -#include <stdio.h> -#include <signal.h> -#if HAVE_STDDEF_H -#include <stddef.h> -#endif - -/* On some systems we need <sys/types.h> to get sig_atomic_t or - size_t or time_t. */ -#if ! HAVE_SIG_ATOMIC_T_IN_SIGNAL_H && HAVE_SIG_ATOMIC_T_IN_TYPES_H -#define USE_TYPES_H 1 -#else -#if ! HAVE_SIZE_T_IN_STDDEF_H && HAVE_SIZE_T_IN_TYPES_H -#define USE_TYPES_H 1 -#else -#if ! HAVE_TIME_T_IN_TIME_H && HAVE_TIME_T_IN_TYPES_H -#define USE_TYPES_H 1 -#endif -#endif -#endif - -#ifndef USE_TYPES_H -#define USE_TYPES_H 0 -#endif - -#if USE_TYPES_H -#include <sys/types.h> -#endif - -/* Make sure we have sig_atomic_t. */ -#if ! HAVE_SIG_ATOMIC_T_IN_SIGNAL_H && ! HAVE_SIG_ATOMIC_T_IN_TYPES_H -#ifndef SIG_ATOMIC_T -/* There is no portable definition for sig_atomic_t. */ -#define SIG_ATOMIC_T char -#endif /* ! defined (SIG_ATOMIC_T) */ -typedef SIG_ATOMIC_T sig_atomic_t; -#endif /* ! HAVE_SIG_ATOMIC_T_IN_SIGNAL_H && ! HAVE_SIG_ATOMIC_T_IN_TYPES_H */ - -/* Make sure we have size_t. */ -#if ! HAVE_SIZE_T_IN_STDDEF_H && ! HAVE_SIZE_T_IN_TYPES_H -#ifndef SIZE_T -#define SIZE_T unsigned -#endif /* ! defined (SIZE_T) */ -typedef SIZE_T size_t; -#endif /* ! HAVE_SIZE_T_IN_STDDEF_H && ! HAVE_SIZE_T_IN_TYPES_H */ - -/* Make sure we have time_t. We use long as the default. We don't - bother to let conf.h override this, since on a system which doesn't - define time_t long must be correct. */ -#if ! HAVE_TIME_T_IN_TIME_H && ! HAVE_TIME_T_IN_TYPES_H -typedef long time_t; -#endif - -/* Set up some definitions for both ANSI C and Classic C. - - P() -- for function prototypes (e.g. extern int foo P((int)) ). - pointer -- for a generic pointer (i.e. void *). - constpointer -- for a generic pointer to constant data. - BUCHAR -- to convert a character to unsigned. */ -#if ANSI_C -#if ! HAVE_VOID || ! HAVE_UNSIGNED_CHAR || ! HAVE_PROTOTYPES - #error ANSI C compiler without void or unsigned char or prototypes -#endif -#define P(x) x -typedef void *pointer; -typedef const void *constpointer; -#define BUCHAR(b) ((unsigned char) (b)) -#else /* ! ANSI_C */ -/* Handle uses of volatile and void in Classic C. */ -#define volatile -#if ! HAVE_VOID -#define void int -#endif -#if HAVE_PROTOTYPES -#define P(x) x -#else -#define P(x) () -#endif -typedef char *pointer; -typedef const char *constpointer; -#if HAVE_UNSIGNED_CHAR -#define BUCHAR(b) ((unsigned char) (b)) -#else /* ! HAVE_UNSIGNED_CHAR */ -/* This should work on most systems, but not necessarily all. */ -#define BUCHAR(b) ((b) & 0xff) -#endif /* ! HAVE_UNSIGNED_CHAR */ -#endif /* ! ANSI_C */ - -/* Make sure we have a definition for offsetof. */ -#ifndef offsetof -#define offsetof(type, field) \ - ((size_t) ((char *) &(((type *) 0)->field) - (char *) (type *) 0)) -#endif - -/* Only use inline with gcc. */ -#ifndef __GNUC__ -#define __inline__ -#endif - -/* Get the string functions, which are used throughout the code. */ -#if HAVE_MEMORY_H -#include <memory.h> -#else -/* We really need a definition for memchr, and this should not - conflict with anything in <string.h>. I hope. */ -extern pointer memchr (); -#endif - -#if HAVE_STRING_H -#include <string.h> -#else /* ! HAVE_STRING_H */ -#if HAVE_STRINGS_H -#include <strings.h> -#else /* ! HAVE_STRINGS_H */ -extern char *strcpy (), *strncpy (), *strchr (), *strrchr (), *strtok (); -extern char *strcat (), *strerror (), *strstr (); -extern size_t strlen (), strspn (), strcspn (); -#if ! HAVE_MEMORY_H -extern pointer memcpy (), memchr (); -#endif /* ! HAVE_MEMORY_H */ -#endif /* ! HAVE_STRINGS_H */ -#endif /* ! HAVE_STRING_H */ - -/* Get what we need from <stdlib.h>. */ -#if HAVE_STDLIB_H -#include <stdlib.h> -#else /* ! HAVE_STDLIB_H */ -extern pointer malloc (), realloc (), bsearch (); -extern long strtol (); -extern unsigned long strtoul (); -extern char *getenv (); -#endif /* ! HAVE_STDLIB_H */ - -/* NeXT uses <libc.h> to declare a bunch of functions. */ -#if HAVE_LIBC_H -#include <libc.h> -#endif - -/* Make sure we have the EXIT_ macros. */ -#ifndef EXIT_SUCCESS -#define EXIT_SUCCESS (0) -#endif -#ifndef EXIT_FAILURE -#define EXIT_FAILURE (1) -#endif - -/* If we need to declare errno, do so. I don't want to always do - this, because some system might theoretically have a different - declaration for errno. On a POSIX system this is sure to work. */ -#if ! HAVE_ERRNO_DECLARATION -extern int errno; -#endif - -/* If the system has the socket call, guess that we can compile the - TCP code. */ -#define HAVE_TCP HAVE_SOCKET - -/* If the system has the t_open call, guess that we can compile the - TLI code. */ -#define HAVE_TLI HAVE_T_OPEN - -/* The boolean type holds boolean values. */ -typedef int boolean; -#undef TRUE -#undef FALSE -#define TRUE (1) -#define FALSE (0) - -/* The openfile_t type holds an open file. This depends on whether we - are using stdio or not. */ -#if USE_STDIO - -typedef FILE *openfile_t; -#define EFILECLOSED ((FILE *) NULL) -#define ffileisopen(e) ((e) != NULL) -#define ffileeof(e) feof (e) -#define cfileread(e, z, c) fread ((z), 1, (c), (e)) -#define cfilewrite(e, z, c) fwrite ((z), 1, (c), (e)) -#define ffileioerror(e, c) ferror (e) -#ifdef SEEK_SET -#define ffileseek(e, i) (fseek ((e), (long) (i), SEEK_SET) == 0) -#define ffilerewind(e) (fseek ((e), (long) 0, SEEK_SET) == 0) -#else -#define ffileseek(e, i) (fseek ((e), (long) (i), 0) == 0) -#define ffilerewind(e) (fseek ((e), (long) 0, 0) == 0) -#endif -#ifdef SEEK_END -#define ffileseekend(e) (fseek ((e), (long) 0, SEEK_END) == 0) -#else -#define ffileseekend(e) (fseek ((e), (long) 0, 2) == 0) -#endif -#define ffileclose(e) (fclose (e) == 0) - -#define fstdiosync(e, z) (fsysdep_sync (e, z)) - -#else /* ! USE_STDIO */ - -#if ! USE_TYPES_H -#undef USE_TYPES_H -#define USE_TYPES_H 1 -#include <sys/types.h> -#endif - -#if HAVE_UNISTD_H -#include <unistd.h> -#endif - -#ifdef OFF_T -typedef OFF_T off_t; -#undef OFF_T -#endif - -typedef int openfile_t; -#define EFILECLOSED (-1) -#define ffileisopen(e) ((e) >= 0) -#define ffileeof(e) (FALSE) -#define cfileread(e, z, c) read ((e), (z), (c)) -#define cfilewrite(e, z, c) write ((e), (z), (c)) -#define ffileioerror(e, c) ((c) < 0) -#ifdef SEEK_SET -#define ffileseek(e, i) (lseek ((e), (off_t) i, SEEK_SET) >= 0) -#define ffilerewind(e) (lseek ((e), (off_t) 0, SEEK_SET) >= 0) -#else -#define ffileseek(e, i) (lseek ((e), (off_t) i, 0) >= 0) -#define ffilerewind(e) (lseek ((e), (off_t) 0, 0) >= 0) -#endif -#ifdef SEEK_END -#define ffileseekend(e) (lseek ((e), (off_t) 0, SEEK_END) >= 0) -#else -#define ffileseekend(e) (lseek ((e), (off_t) 0, 2) >= 0) -#endif -#define ffileclose(e) (close (e) >= 0) - -#define fstdiosync(e, z) (fsysdep_sync (fileno (e), z)) - -#endif /* ! USE_STDIO */ - -/* A prototype for main to avoid warnings from gcc 2.0 - -Wmissing-prototype option. */ -extern int main P((int argc, char **argv)); - -/* Some standard routines which we only define if they are not present - on the system we are compiling on. */ - -#if ! HAVE_GETLINE -/* Read a line from a file. */ -extern int getline P((char **pz, size_t *pc, FILE *e)); -#endif - -#if ! HAVE_REMOVE -/* Erase a file. */ -#undef remove -extern int remove P((const char *zfile)); -#endif - -#if ! HAVE_STRDUP -/* Copy a string into memory. */ -extern char *strdup P((const char *z)); -#endif - -#if ! HAVE_STRSTR -/* Look for one string within another. */ -extern char *strstr P((const char *zouter, const char *zinner)); -#endif - -#if ! HAVE_STRCASECMP -#if HAVE_STRICMP -#define strcasecmp stricmp -#else /* ! HAVE_STRICMP */ -/* Rename strcasecmp to avoid ANSI C name space. */ -#define strcasecmp xstrcasecmp -extern int strcasecmp P((const char *z1, const char *z2)); -#endif /* ! HAVE_STRICMP */ -#endif /* ! HAVE_STRCASECMP */ - -#if ! HAVE_STRNCASECMP -#if HAVE_STRNICMP -#define strncasecmp strnicmp -#else /* ! HAVE_STRNICMP */ -/* Rename strncasecmp to avoid ANSI C name space. */ -#define strncasecmp xstrncasecmp -extern int strncasecmp P((const char *z1, const char *z2, size_t clen)); -#endif /* ! HAVE_STRNICMP */ -#endif /* ! HAVE_STRNCASECMP */ - -#if ! HAVE_STRERROR -/* Get a string corresponding to an error message. */ -#undef strerror -extern char *strerror P((int ierr)); -#endif - -/* Get the appropriate definitions for memcmp, memcpy, memchr and - bzero. */ -#if ! HAVE_MEMCMP -#if HAVE_BCMP -#define memcmp(p1, p2, c) bcmp ((p1), (p2), (c)) -#else /* ! HAVE_BCMP */ -extern int memcmp P((constpointer p1, constpointer p2, size_t c)); -#endif /* ! HAVE_BCMP */ -#endif /* ! HAVE_MEMCMP */ - -#if ! HAVE_MEMCPY -#if HAVE_BCOPY -#define memcpy(pto, pfrom, c) bcopy ((pfrom), (pto), (c)) -#else /* ! HAVE_BCOPY */ -extern pointer memcpy P((pointer pto, constpointer pfrom, size_t c)); -#endif /* ! HAVE_BCOPY */ -#endif /* ! HAVE_MEMCPY */ - -#if ! HAVE_MEMCHR -extern pointer memchr P((constpointer p, int b, size_t c)); -#endif - -#if ! HAVE_BZERO -#if HAVE_MEMSET -#define bzero(p, c) memset ((p), 0, (c)) -#else /* ! HAVE_MEMSET */ -extern void bzero P((pointer p, int c)); -#endif /* ! HAVE_MEMSET */ -#endif /* ! HAVE_BZERO */ - -/* Look up a character in a string. */ -#if ! HAVE_STRCHR -#if HAVE_INDEX -#define strchr index -extern char *index (); -#else /* ! HAVE_INDEX */ -extern char *strchr P((const char *z, int b)); -#endif /* ! HAVE_INDEX */ -#endif /* ! HAVE_STRCHR */ - -#if ! HAVE_STRRCHR -#if HAVE_RINDEX -#define strrchr rindex -extern char *rindex (); -#else /* ! HAVE_RINDEX */ -extern char *strrchr P((const char *z, int b)); -#endif /* ! HAVE_RINDEX */ -#endif /* ! HAVE_STRRCHR */ - -/* Turn a string into a long integer. */ -#if ! HAVE_STRTOL -extern long strtol P((const char *, char **, int)); -#endif - -/* Turn a string into a long unsigned integer. */ -#if ! HAVE_STRTOUL -extern unsigned long strtoul P((const char *, char **, int)); -#endif - -/* Lookup a key in a sorted array. */ -#if ! HAVE_BSEARCH -extern pointer bsearch P((constpointer pkey, constpointer parray, - size_t celes, size_t cbytes, - int (*pficmp) P((constpointer, constpointer)))); -#endif diff --git a/gnu/libexec/uucp/common_sources/uudefs.h b/gnu/libexec/uucp/common_sources/uudefs.h deleted file mode 100644 index bf3d9f4..0000000 --- a/gnu/libexec/uucp/common_sources/uudefs.h +++ /dev/null @@ -1,453 +0,0 @@ -/* uudefs.h - Miscellaneous definitions for the UUCP package. - - Copyright (C) 1991, 1992, 1993, 1995 Ian Lance Taylor - - This file is part of the Taylor UUCP package. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - This program 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 - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - - The author of the program may be contacted at ian@airs.com or - c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144. - */ - -#if ANSI_C -/* These structures are used in prototypes but are not defined in this - header file. */ -struct uuconf_system; -struct uuconf_timespan; -#endif - -/* The tlog enumeration holds the different types of logging. */ -enum tlog -{ - /* Normal log entry. */ - LOG_NORMAL, - /* Error log entry. */ - LOG_ERROR, - /* Fatal log entry. */ - LOG_FATAL -#if DEBUG > 1 - , - /* Debugging log entry. */ - LOG_DEBUG, - /* Start debugging log entry. */ - LOG_DEBUG_START, - /* Continue debugging log entry. */ - LOG_DEBUG_CONTINUE, - /* End debugging log entry. */ - LOG_DEBUG_END -#endif -}; - -/* The tstatus_type enumeration holds the kinds of status information - we put in the status file. The order of entries here corresponds - to the order of entries in the azStatus array. */ -enum tstatus_type -{ - /* Conversation complete. */ - STATUS_COMPLETE, - /* Port unavailable. */ - STATUS_PORT_FAILED, - /* Dial failed. */ - STATUS_DIAL_FAILED, - /* Login failed. */ - STATUS_LOGIN_FAILED, - /* Handshake failed. */ - STATUS_HANDSHAKE_FAILED, - /* Failed after logging in. */ - STATUS_FAILED, - /* Talking to remote system. */ - STATUS_TALKING, - /* Wrong time to call. */ - STATUS_WRONG_TIME, - /* Number of status values. */ - STATUS_VALUES -}; - -/* An array to convert status entries to strings. If more status entries - are added, this array must be extended. */ -extern const char *azStatus[]; - -/* The sstatus structure holds the contents of a system status file. */ -struct sstatus -{ - /* Current status of conversation. */ - enum tstatus_type ttype; - /* Number of failed retries. */ - int cretries; - /* Time of last call in seconds since epoch (determined by - ixsysdep_time). */ - long ilast; - /* Number of seconds until a retry is permitted. */ - int cwait; - /* String in status file. Only used when reading status file, not - when writing. May be NULL. Should be freed with ubuffree. */ - char *zstring; -}; - -/* How long we have to wait for the next call, given the number of retries - we have already made. This should probably be configurable. */ -#define CRETRY_WAIT(c) ((c) * 10 * 60) - -/* The scmd structure holds a complete UUCP command. */ -struct scmd -{ - /* Command ('S' for send, 'R' for receive, 'X' for execute, 'E' for - simple execution, 'H' for hangup, 'Y' for hangup confirm, 'N' for - hangup deny). */ - char bcmd; - /* Grade of the command ('\0' if from remote system). */ - char bgrade; - /* Sequence handle for fsysdep_did_work. */ - pointer pseq; - /* File name to transfer from. */ - const char *zfrom; - /* File name to transfer to. */ - const char *zto; - /* User who requested transfer. */ - const char *zuser; - /* Options. */ - const char *zoptions; - /* Temporary file name ('S' and 'E'). */ - const char *ztemp; - /* Mode to give newly created file ('S' and 'E'). */ - unsigned int imode; - /* User to notify on remote system (optional; 'S' and 'E'). */ - const char *znotify; - /* File size (-1 if not supplied) ('S', 'E' and 'R'). */ - long cbytes; - /* Command to execute ('E'). */ - const char *zcmd; - /* Position to restart from ('R'). */ - long ipos; -}; - -#if DEBUG > 1 - -/* We allow independent control over several different types of - debugging output, using a bit string with individual bits dedicated - to particular debugging types. */ - -/* The bit string is stored in iDebug. */ -extern int iDebug; - -/* Debug abnormal events. */ -#define DEBUG_ABNORMAL (01) -/* Debug chat scripts. */ -#define DEBUG_CHAT (02) -/* Debug initial handshake. */ -#define DEBUG_HANDSHAKE (04) -/* Debug UUCP protocol. */ -#define DEBUG_UUCP_PROTO (010) -/* Debug protocols. */ -#define DEBUG_PROTO (020) -/* Debug port actions. */ -#define DEBUG_PORT (040) -/* Debug configuration files. */ -#define DEBUG_CONFIG (0100) -/* Debug spool directory actions. */ -#define DEBUG_SPOOLDIR (0200) -/* Debug executions. */ -#define DEBUG_EXECUTE (0400) -/* Debug incoming data. */ -#define DEBUG_INCOMING (01000) -/* Debug outgoing data. */ -#define DEBUG_OUTGOING (02000) - -/* Maximum possible value for iDebug. */ -#define DEBUG_MAX (03777) - -/* Intializer for array of debug names. The index of the name in the - array is the corresponding bit position in iDebug. We only check - for prefixes, so these names only need to be long enough to - distinguish each name from every other. The last entry must be - NULL. The string "all" is also recognized to turn on all - debugging. */ -#define DEBUG_NAMES \ - { "a", "ch", "h", "u", "pr", "po", "co", "s", "e", "i", "o", NULL } - -/* The prefix to use to turn off all debugging. */ -#define DEBUG_NONE "n" - -/* Check whether a particular type of debugging is being done. */ -#define FDEBUGGING(i) ((iDebug & (i)) != 0) - -/* These macros are used to output debugging information. I use - several different macros depending on the number of arguments - because no macro can take a variable number of arguments and I - don't want to use double parentheses. */ -#define DEBUG_MESSAGE0(i, z) \ - do { if (FDEBUGGING (i)) ulog (LOG_DEBUG, (z)); } while (0) -#define DEBUG_MESSAGE1(i, z, a1) \ - do { if (FDEBUGGING (i)) ulog (LOG_DEBUG, (z), (a1)); } while (0) -#define DEBUG_MESSAGE2(i, z, a1, a2) \ - do { if (FDEBUGGING (i)) ulog (LOG_DEBUG, (z), (a1), (a2)); } while (0) -#define DEBUG_MESSAGE3(i, z, a1, a2, a3) \ - do \ - { \ - if (FDEBUGGING (i)) \ - ulog (LOG_DEBUG, (z), (a1), (a2), (a3)); \ - } \ - while (0) -#define DEBUG_MESSAGE4(i, z, a1, a2, a3, a4) \ - do \ - { \ - if (FDEBUGGING (i)) \ - ulog (LOG_DEBUG, (z), (a1), (a2), (a3), (a4)); \ - } \ - while (0) - -#else /* DEBUG <= 1 */ - -/* If debugging information is not being compiled, provide versions of - the debugging macros which just disappear. */ -#define DEBUG_MESSAGE0(i, z) -#define DEBUG_MESSAGE1(i, z, a1) -#define DEBUG_MESSAGE2(i, z, a1, a2) -#define DEBUG_MESSAGE3(i, z, a1, a2, a3) -#define DEBUG_MESSAGE4(i, z, a1, a2, a3, a4) - -#endif /* DEBUG <= 1 */ - -/* Functions. */ - -/* Given an unknown system name, return information for an unknown - system. If unknown systems are not permitted, this returns FALSE. - Otherwise, it translates the name as necessary for the spool - directory, and fills in *qsys. */ -extern boolean funknown_system P((pointer puuconf, const char *zsystem, - struct uuconf_system *qsys)); - -/* See whether a file belongs in the spool directory. */ -extern boolean fspool_file P((const char *zfile)); - -/* See if the current time matches a time span. If not, return FALSE. - Otherwise, return TRUE and set *pival and *pcretry to the values - from the matching element of the span. */ -extern boolean ftimespan_match P((const struct uuconf_timespan *qspan, - long *pival, int *pcretry)); - -/* Remove all occurrences of the local system name followed by an - exclamation point from the start of the argument. Return the - possibly shortened argument. */ -extern char *zremove_local_sys P((struct uuconf_system *qlocalsys, - char *z)); - -/* Determine the maximum size that may ever be transferred, given a - timesize span. If there are any time gaps larger than 1 hour not - described by the timesize span, this returns -1. Otherwise it - returns the largest size that may be transferred at some time. */ -extern long cmax_size_ever P((const struct uuconf_timespan *qtimesize)); - -/* Send mail about a file transfer. */ -extern boolean fmail_transfer P((boolean fok, const char *zuser, - const char *zmail, const char *zwhy, - const char *zfrom, const char *zfromsys, - const char *zto, const char *ztosys, - const char *zsaved)); - -/* See whether a file is in one of a list of directories. The zpubdir - argument is used to pass the directory names to zsysdep_local_file. - If fcheck is FALSE, this does not check accessibility. Otherwise, - if freadable is TRUE, the user zuser must have read access to the - file and all appropriate directories; if freadable is FALSE zuser - must have write access to the appropriate directories. The zuser - argument may be NULL, in which case all users must have the - appropriate access (this is used for a remote request). */ -extern boolean fin_directory_list P((const char *zfile, - char **pzdirs, - const char *zpubdir, - boolean fcheck, - boolean freadable, - const char *zuser)); - -/* Parse a command string. */ -extern boolean fparse_cmd P((char *zcmd, struct scmd *qcmd)); - -/* Make a log entry. */ -#ifdef __GNUC__ -#define GNUC_VERSION __GNUC__ -#else -#define GNUC_VERSION 0 -#endif - -#if ANSI_C && HAVE_VFPRINTF -extern void ulog P((enum tlog ttype, const char *zfmt, ...)) -#if GNUC_VERSION > 1 -#ifdef __printf0like - __printf0like (2, 3) -#else - __attribute__ ((format (printf, 2, 3))) -#endif -#endif - ; -#else -extern void ulog (); -#endif - -#undef GNUC_VERSION - -/* Report an error returned by one of the uuconf routines. */ -extern void ulog_uuconf P((enum tlog ttype, pointer puuconf, - int iuuconf)); - -/* Set the function to call if a fatal error occurs. */ -extern void ulog_fatal_fn P((void (*pfn) P((void)))); - -/* If ffile is TRUE, send log entries to the log file rather than to - stderr. */ -extern void ulog_to_file P((pointer puuconf, boolean ffile)); - -/* Set the ID number used by the logging functions. */ -extern void ulog_id P((int iid)); - -/* Set the system name used by the logging functions. */ -extern void ulog_system P((const char *zsystem)); - -/* Set the system and user name used by the logging functions. */ -extern void ulog_user P((const char *zuser)); - -/* Set the device name used by the logging functions. */ -extern void ulog_device P((const char *zdevice)); - -/* Close the log file. */ -extern void ulog_close P((void)); - -/* Make an entry in the statistics file. */ -extern void ustats P((boolean fsucceeded, const char *zuser, - const char *zsystem, boolean fsent, - long cbytes, long csecs, long cmicros, - boolean fcaller)); - -/* Close the statistics file. */ -extern void ustats_close P((void)); - -#if DEBUG > 1 -/* A debugging routine to output a buffer. This outputs zhdr, the - buffer length clen, and the contents of the buffer in quotation - marks. */ -extern void udebug_buffer P((const char *zhdr, const char *zbuf, - size_t clen)); - -/* A debugging routine to make a readable version of a character. - This takes a buffer at least 5 bytes long, and returns the length - of the string it put into it (not counting the null byte). */ -extern size_t cdebug_char P((char *z, int ichar)); - -/* Parse a debugging option string. This can either be a number or a - comma separated list of debugging names. This returns a value for - iDebug. */ -extern int idebug_parse P((const char *)); - -#endif /* DEBUG <= 1 */ - -/* Copy one file to another. */ -extern boolean fcopy_file P((const char *zfrom, const char *zto, - boolean fpublic, boolean fmkdirs, - boolean fsignals)); - -/* Copy an open file to another. */ -extern boolean fcopy_open_file P((openfile_t efrom, const char *zto, - boolean fpublic, boolean fmkdirs, - boolean fsignals)); - -/* Translate escape sequences in a buffer, leaving the result in the - same buffer and returning the length. */ -extern size_t cescape P((char *zbuf)); - -/* Get a buffer to hold a string of a given size. The buffer should - be freed with ubuffree. */ -extern char *zbufalc P((size_t csize)); - -/* Call zbufalc to allocate a buffer and copy a string into it. */ -extern char *zbufcpy P((const char *z)); - -/* Free up a buffer returned by zbufalc or zbufcpy. */ -extern void ubuffree P((char *z)); - -/* Allocate memory without fail. */ -extern pointer xmalloc P((size_t)); - -/* Realloc memory without fail. */ -extern pointer xrealloc P((pointer, size_t)); - -/* Free memory (accepts NULL pointers, which some libraries erroneously - do not). */ -extern void xfree P((pointer)); - -/* Global variables. */ - -/* The name of the program being run. Set from argv[0]. */ -extern const char *zProgram; - -/* When a signal occurs, the signal handlers sets the appropriate - element of the arrays afSignal and afLog_signal to TRUE. The - afSignal array is used to check whether a signal occurred. The - afLog_signal array tells ulog to log the signal; ulog will clear - the element after logging it, which means that if a signal comes in - at just the right moment it will not be logged. It will always be - recorded in afSignal, though. At the moment we handle 5 signals: - SIGHUP, SIGINT, SIGQUIT, SIGTERM and SIGPIPE (the Unix code also - handles SIGALRM). If we want to handle more, the afSignal array - must be extended; I see little point to handling any of the other - ANSI C or POSIX signals, as they are either unlikely to occur - (SIGABRT, SIGUSR1) or nearly impossible to handle cleanly (SIGILL, - SIGSEGV). SIGHUP is only logged if fLog_sighup is TRUE. */ -#define INDEXSIG_SIGHUP (0) -#define INDEXSIG_SIGINT (1) -#define INDEXSIG_SIGQUIT (2) -#define INDEXSIG_SIGTERM (3) -#define INDEXSIG_SIGPIPE (4) -#define INDEXSIG_COUNT (5) - -extern volatile sig_atomic_t afSignal[INDEXSIG_COUNT]; -extern volatile sig_atomic_t afLog_signal[INDEXSIG_COUNT]; -extern boolean fLog_sighup; - -/* The names of the signals to use in error messages, as an - initializer for an array. */ -#define INDEXSIG_NAMES \ - { "hangup", "interrupt", "quit", "termination", "SIGPIPE" } - -/* Check to see whether we've received a signal. It would be nice if - we could use a single variable for this, but we sometimes want to - clear our knowledge of a signal and that would cause race - conditions (clearing a single element of the array is not a race - assuming that we don't care about a particular signal, even if it - occurs after we've examined the array). */ -#define FGOT_SIGNAL() \ - (afSignal[INDEXSIG_SIGHUP] || afSignal[INDEXSIG_SIGINT] \ - || afSignal[INDEXSIG_SIGQUIT] || afSignal[INDEXSIG_SIGTERM] \ - || afSignal[INDEXSIG_SIGPIPE]) - -/* If we get a SIGINT in uucico, we continue the current communication - session but don't start any new ones. This macros checks for any - signal other than SIGINT, which means we should get out - immediately. */ -#define FGOT_QUIT_SIGNAL() \ - (afSignal[INDEXSIG_SIGHUP] || afSignal[INDEXSIG_SIGQUIT] \ - || afSignal[INDEXSIG_SIGTERM] || afSignal[INDEXSIG_SIGPIPE]) - -/* Device name to log. This is set by fconn_open. It may be NULL. */ -extern char *zLdevice; - -/* If not NULL, ulog calls this function before outputting anything. - This is used to support cu. */ -extern void (*pfLstart) P((void)); - -/* If not NULL, ulog calls this function after outputting everything. - This is used to support cu. */ -extern void (*pfLend) P((void)); |