|
|
1.1 ! root 1: /* util.c ! 2: A couple of UUCP utility functions. ! 3: ! 4: Copyright (C) 1991, 1992 Ian Lance Taylor ! 5: ! 6: This file is part of the Taylor UUCP package. ! 7: ! 8: This program is free software; you can redistribute it and/or ! 9: modify it under the terms of the GNU General Public License as ! 10: published by the Free Software Foundation; either version 2 of the ! 11: License, or (at your option) any later version. ! 12: ! 13: This program is distributed in the hope that it will be useful, but ! 14: WITHOUT ANY WARRANTY; without even the implied warranty of ! 15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ! 16: General Public License for more details. ! 17: ! 18: You should have received a copy of the GNU General Public License ! 19: along with this program; if not, write to the Free Software ! 20: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ! 21: ! 22: The author of the program may be contacted at [email protected] or ! 23: c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254. ! 24: */ ! 25: ! 26: #include "uucp.h" ! 27: ! 28: #if USE_RCS_ID ! 29: const char util_rcsid[] = "$Id: util.c,v 1.1 93/07/30 07:54:30 bin Exp Locker: bin $"; ! 30: #endif ! 31: ! 32: #include <ctype.h> ! 33: ! 34: #include "uudefs.h" ! 35: #include "uuconf.h" ! 36: #include "system.h" ! 37: ! 38: /* Get information for an unknown system. This will leave the name ! 39: allocated on the heap. We could fix this by breaking the ! 40: abstraction and adding the name to qsys->palloc. It makes sure the ! 41: name is not too long, but takes no other useful action. */ ! 42: ! 43: boolean ! 44: funknown_system (puuconf, zsystem, qsys) ! 45: pointer puuconf; ! 46: const char *zsystem; ! 47: struct uuconf_system *qsys; ! 48: { ! 49: char *z; ! 50: int iuuconf; ! 51: ! 52: if (strlen (zsystem) <= cSysdep_max_name_len) ! 53: z = zbufcpy (zsystem); ! 54: else ! 55: { ! 56: char **pznames, **pz; ! 57: boolean ffound; ! 58: ! 59: z = zbufalc (cSysdep_max_name_len + 1); ! 60: memcpy (z, zsystem, cSysdep_max_name_len); ! 61: z[cSysdep_max_name_len] = '\0'; ! 62: ! 63: iuuconf = uuconf_system_names (puuconf, &pznames, TRUE); ! 64: if (iuuconf != UUCONF_SUCCESS) ! 65: ulog_uuconf (LOG_FATAL, puuconf, iuuconf); ! 66: ! 67: ffound = FALSE; ! 68: for (pz = pznames; *pz != NULL; pz++) ! 69: { ! 70: if (strcmp (*pz, z) == 0) ! 71: ffound = TRUE; ! 72: xfree ((pointer) *pz); ! 73: } ! 74: xfree ((pointer) pznames); ! 75: ! 76: if (ffound) ! 77: { ! 78: ubuffree (z); ! 79: return FALSE; ! 80: } ! 81: } ! 82: ! 83: iuuconf = uuconf_system_unknown (puuconf, qsys); ! 84: if (iuuconf == UUCONF_NOT_FOUND) ! 85: { ! 86: ubuffree (z); ! 87: return FALSE; ! 88: } ! 89: else if (iuuconf != UUCONF_SUCCESS) ! 90: ulog_uuconf (LOG_FATAL, puuconf, iuuconf); ! 91: ! 92: for (; qsys != NULL; qsys = qsys->uuconf_qalternate) ! 93: qsys->uuconf_zname = z; ! 94: ! 95: return TRUE; ! 96: } ! 97: ! 98: /* See whether a file is in a directory list, and make sure the user ! 99: has appropriate access. */ ! 100: ! 101: boolean ! 102: fin_directory_list (zfile, pzdirs, zpubdir, fcheck, freadable, zuser) ! 103: const char *zfile; ! 104: char **pzdirs; ! 105: const char *zpubdir; ! 106: boolean fcheck; ! 107: boolean freadable; ! 108: const char *zuser; ! 109: { ! 110: boolean fmatch; ! 111: char **pz; ! 112: ! 113: fmatch = FALSE; ! 114: ! 115: for (pz = pzdirs; *pz != NULL; pz++) ! 116: { ! 117: char *zuse; ! 118: ! 119: if (pz[0][0] == '!') ! 120: { ! 121: zuse = zsysdep_local_file (*pz + 1, zpubdir); ! 122: if (zuse == NULL) ! 123: return FALSE; ! 124: ! 125: if (fsysdep_in_directory (zfile, zuse, FALSE, ! 126: FALSE, (const char *) NULL)) ! 127: fmatch = FALSE; ! 128: } ! 129: else ! 130: { ! 131: zuse = zsysdep_local_file (*pz, zpubdir); ! 132: if (zuse == NULL) ! 133: return FALSE; ! 134: ! 135: if (fsysdep_in_directory (zfile, zuse, fcheck, ! 136: freadable, zuser)) ! 137: fmatch = TRUE; ! 138: } ! 139: ! 140: ubuffree (zuse); ! 141: } ! 142: ! 143: return fmatch; ! 144: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.