Annotation of coherent/g/usr/lib/uucp/tay104/util.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

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