Annotation of coherent/g/usr/lib/uucp/tay104/uuconf/hsinfo.c, revision 1.1

1.1     ! root        1: /* hsinfo.c
        !             2:    Get information about a system from the HDB configuration files.
        !             3: 
        !             4:    Copyright (C) 1992 Ian Lance Taylor
        !             5: 
        !             6:    This file is part of the Taylor UUCP uuconf library.
        !             7: 
        !             8:    This library is free software; you can redistribute it and/or
        !             9:    modify it under the terms of the GNU Library General Public License
        !            10:    as published by the Free Software Foundation; either version 2 of
        !            11:    the License, or (at your option) any later version.
        !            12: 
        !            13:    This library 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:    Library General Public License for more details.
        !            17: 
        !            18:    You should have received a copy of the GNU Library General Public
        !            19:    License along with this library; 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 "uucnfi.h"
        !            27: 
        !            28: #if USE_RCS_ID
        !            29: const char _uuconf_hsinfo_rcsid[] = "$Id: hsinfo.c,v 1.1 93/07/30 08:07:17 bin Exp Locker: bin $";
        !            30: #endif
        !            31: 
        !            32: #include <errno.h>
        !            33: #include <ctype.h>
        !            34: 
        !            35: static int ihadd_machine_perm P((struct sglobal *qglobal,
        !            36:                                 struct uuconf_system *qsys,
        !            37:                                 struct shpermissions *qperm));
        !            38: static int ihadd_logname_perm P((struct sglobal *qglobal,
        !            39:                                 struct uuconf_system *qsys,
        !            40:                                 struct shpermissions *qperm));
        !            41: 
        !            42: /* Get the information for a particular system from the HDB
        !            43:    configuration files.  This does not make sure that all the default
        !            44:    values are set.  */
        !            45: 
        !            46: int
        !            47: _uuconf_ihdb_system_internal (qglobal, zsystem, qsys)
        !            48:      struct sglobal *qglobal;
        !            49:      const char *zsystem;
        !            50:      struct uuconf_system *qsys;
        !            51: {
        !            52:   int iret;
        !            53:   struct shpermissions *qperm;
        !            54:   char *zline;
        !            55:   size_t cline;
        !            56:   char **pzsplit;
        !            57:   size_t csplit;
        !            58:   char **pzcomma;
        !            59:   size_t ccomma;
        !            60:   pointer pblock;
        !            61:   char **pz;
        !            62:   boolean ffound_machine, ffound_login;
        !            63:   struct shpermissions *qother_machine;
        !            64:   struct uuconf_system *qalt;
        !            65: 
        !            66:   if (! qglobal->qprocess->fhdb_read_permissions)
        !            67:     {
        !            68:       iret = _uuconf_ihread_permissions (qglobal);
        !            69:       if (iret != UUCONF_SUCCESS)
        !            70:        return iret;
        !            71:     }
        !            72: 
        !            73:   /* First look through the Permissions information to see if this is
        !            74:      an alias for some system.  I assume that an alias applies to the
        !            75:      first name in the corresponding MACHINE entry.  */
        !            76: 
        !            77:   for (qperm = qglobal->qprocess->qhdb_permissions;
        !            78:        qperm != NULL;
        !            79:        qperm = qperm->qnext)
        !            80:     {
        !            81:       if (qperm->pzalias == NULL
        !            82:          || qperm->pzmachine == NULL
        !            83:          || qperm->pzalias == (char **) &_uuconf_unset
        !            84:          || qperm->pzmachine == (char **) &_uuconf_unset)
        !            85:        continue;
        !            86: 
        !            87:       for (pz = qperm->pzalias; *pz != NULL; pz++)
        !            88:        {
        !            89:          if (strcmp (*pz, zsystem) == 0)
        !            90:            {
        !            91:              zsystem = qperm->pzmachine[0];
        !            92:              break;
        !            93:            }
        !            94:        }
        !            95:       if (*pz != NULL)
        !            96:        break;
        !            97:     }
        !            98: 
        !            99:   zline = NULL;
        !           100:   cline = 0;
        !           101:   pzsplit = NULL;
        !           102:   csplit = 0;
        !           103:   pzcomma = NULL;
        !           104:   ccomma = 0;
        !           105: 
        !           106:   pblock = NULL;
        !           107: 
        !           108:   iret = UUCONF_SUCCESS;
        !           109: 
        !           110:   for (pz = qglobal->qprocess->pzhdb_systems; *pz != NULL; pz++)
        !           111:     {
        !           112:       FILE *e;
        !           113:       int cchars;
        !           114: 
        !           115:       e = fopen (*pz, "r");
        !           116:       if (e == NULL)
        !           117:        {
        !           118:          if (FNO_SUCH_FILE ())
        !           119:            continue;
        !           120:          qglobal->ierrno = errno;
        !           121:          iret = UUCONF_FOPEN_FAILED | UUCONF_ERROR_ERRNO;
        !           122:          break;
        !           123:        }
        !           124: 
        !           125:       qglobal->ilineno = 0;
        !           126: 
        !           127:       while ((cchars = _uuconf_getline (qglobal, &zline, &cline, e)) > 0)
        !           128:        {
        !           129:          int ctoks, ctimes, i;
        !           130:          struct uuconf_system *qset;
        !           131:          char *z, *zretry;
        !           132:          int cretry;
        !           133: 
        !           134:          ++qglobal->ilineno;
        !           135: 
        !           136:          --cchars;
        !           137:          if (zline[cchars] == '\n')
        !           138:            zline[cchars] = '\0';
        !           139:          if (isspace (BUCHAR (zline[0])) || zline[0] == '#')
        !           140:            continue;
        !           141: 
        !           142:          ctoks = _uuconf_istrsplit (zline, '\0', &pzsplit, &csplit);
        !           143:          if (ctoks < 0)
        !           144:            {
        !           145:              qglobal->ierrno = errno;
        !           146:              iret = UUCONF_MALLOC_FAILED | UUCONF_ERROR_ERRNO;
        !           147:              break;
        !           148:            }
        !           149: 
        !           150:          /* If this isn't the system we're looking for, keep reading
        !           151:             the file.  */
        !           152:          if (ctoks < 1
        !           153:              || strcmp (zsystem, pzsplit[0]) != 0)
        !           154:            continue;
        !           155: 
        !           156:          /* If this is the first time we've found the system, we want
        !           157:             to set *qsys directly.  Otherwise, we allocate a new
        !           158:             alternate.  */
        !           159:          if (pblock == NULL)
        !           160:            {
        !           161:              pblock = uuconf_malloc_block ();
        !           162:              if (pblock == NULL)
        !           163:                {
        !           164:                  qglobal->ierrno = errno;
        !           165:                  iret = UUCONF_MALLOC_FAILED | UUCONF_ERROR_ERRNO;
        !           166:                  break;
        !           167:                }
        !           168:              _uuconf_uclear_system (qsys);
        !           169:              qsys->uuconf_palloc = pblock;
        !           170:              qset = qsys;
        !           171:            }
        !           172:          else
        !           173:            {
        !           174:              struct uuconf_system **pq;
        !           175: 
        !           176:              qset = ((struct uuconf_system *)
        !           177:                      uuconf_malloc (pblock, sizeof (struct uuconf_system)));
        !           178:              if (qset == NULL)
        !           179:                {
        !           180:                  qglobal->ierrno = errno;
        !           181:                  iret = UUCONF_MALLOC_FAILED | UUCONF_ERROR_ERRNO;
        !           182:                  break;
        !           183:                }
        !           184:              _uuconf_uclear_system (qset);
        !           185:              for (pq = &qsys->uuconf_qalternate;
        !           186:                   *pq != NULL;
        !           187:                   pq = &(*pq)->uuconf_qalternate)
        !           188:                ;
        !           189:              *pq = qset;
        !           190:            }
        !           191: 
        !           192:          /* Add this line to the memory block we are building for the
        !           193:             system.  */
        !           194:          if (uuconf_add_block (pblock, zline) != 0)
        !           195:            {
        !           196:              qglobal->ierrno = errno;
        !           197:              iret = UUCONF_MALLOC_FAILED | UUCONF_ERROR_ERRNO;
        !           198:              break;
        !           199:            }
        !           200: 
        !           201:          zline = NULL;
        !           202:          cline = 0;
        !           203: 
        !           204:          /* The format of a line in Systems is
        !           205:             system time device speed phone chat
        !           206:             For example,
        !           207:             airs Any ACU 9600 5551212 ogin: foo pass: bar
        !           208:             */
        !           209: 
        !           210:          /* Get the system name.  */
        !           211: 
        !           212:          qset->uuconf_zname = pzsplit[0];
        !           213:          qset->uuconf_fcall = TRUE;
        !           214:          qset->uuconf_fcalled = FALSE;
        !           215: 
        !           216:          if (ctoks < 2)
        !           217:            continue;
        !           218: 
        !           219:          /* A time string is "time/grade,time/grade;retry".  A
        !           220:             missing grade is taken as BGRADE_LOW.  */
        !           221:          zretry = strchr (pzsplit[1], ';');
        !           222:          if (zretry == NULL)
        !           223:            cretry = 0;
        !           224:          else
        !           225:            {
        !           226:              *zretry = '\0';
        !           227:              cretry = (int) strtol (zretry + 1, (char **) NULL, 10);
        !           228:            }
        !           229: 
        !           230:          ctimes = _uuconf_istrsplit (pzsplit[1], ',', &pzcomma, &ccomma);
        !           231:          if (ctimes < 0)
        !           232:            {
        !           233:              qglobal->ierrno = errno;
        !           234:              iret = UUCONF_MALLOC_FAILED | UUCONF_ERROR_ERRNO;
        !           235:              break;
        !           236:            }
        !           237: 
        !           238:          for (i = 0; i < ctimes; i++)
        !           239:            {
        !           240:              char *zslash;
        !           241:              char bgrade;
        !           242: 
        !           243:              z = pzcomma[i];
        !           244:              zslash = strchr (z, '/');
        !           245:              if (zslash == NULL)
        !           246:                bgrade = UUCONF_GRADE_LOW;
        !           247:              else
        !           248:                {
        !           249:                  *zslash = '\0';
        !           250:                  bgrade = zslash[1];
        !           251:                  if (! UUCONF_GRADE_LEGAL (bgrade))
        !           252:                    bgrade = UUCONF_GRADE_LOW;
        !           253:                }
        !           254: 
        !           255:              iret = _uuconf_itime_parse (qglobal, z, (long) bgrade,
        !           256:                                          cretry, _uuconf_itime_grade_cmp,
        !           257:                                          &qset->uuconf_qtimegrade,
        !           258:                                          pblock);
        !           259:              if (iret != UUCONF_SUCCESS)
        !           260:                break;
        !           261:            }
        !           262: 
        !           263:          if (iret != UUCONF_SUCCESS)
        !           264:            break;
        !           265: 
        !           266:          if (ctoks < 3)
        !           267:            continue;
        !           268: 
        !           269:          /* Pick up the device name.  It can be followed by a comma
        !           270:             and a list of protocols.  */
        !           271:          qset->uuconf_zport = pzsplit[2];
        !           272:          z = strchr (pzsplit[2], ',');
        !           273:          if (z != NULL)
        !           274:            {
        !           275:              qset->uuconf_zprotocols = z + 1;
        !           276:              *z = '\0';
        !           277:            }
        !           278: 
        !           279:          if (ctoks < 4)
        !           280:            continue;
        !           281: 
        !           282:          /* The speed entry can be a numeric speed, or a range of
        !           283:             speeds, or "Any", or "-".  If it starts with a letter,
        !           284:             the initial nonnumeric prefix is a modem class, which
        !           285:             gets appended to the port name.  */
        !           286:          z = pzsplit[3];
        !           287:          if (strcasecmp (z, "Any") != 0
        !           288:              && strcmp (z, "-") != 0)
        !           289:            {
        !           290:              char *zend;
        !           291: 
        !           292:              while (*z != '\0' && ! isdigit (BUCHAR (*z)))
        !           293:                ++z;
        !           294: 
        !           295:              qset->uuconf_ibaud = strtol (z, &zend, 10);
        !           296:              if (*zend == '-')
        !           297:                qset->uuconf_ihighbaud = strtol (zend + 1, (char **) NULL,
        !           298:                                                 10);
        !           299: 
        !           300:              if (z != pzsplit[3])
        !           301:                {
        !           302:                  size_t cport, cclass;
        !           303: 
        !           304:                  cport = strlen (pzsplit[2]);
        !           305:                  cclass = z - pzsplit[3];
        !           306:                  qset->uuconf_zport = uuconf_malloc (pblock,
        !           307:                                                      cport + cclass + 1);
        !           308:                  if (qset->uuconf_zport == NULL)
        !           309:                    {
        !           310:                      qglobal->ierrno = errno;
        !           311:                      iret = UUCONF_MALLOC_FAILED | UUCONF_ERROR_ERRNO;
        !           312:                      break;
        !           313:                    }
        !           314:                  memcpy ((pointer) qset->uuconf_zport, (pointer) pzsplit[2],
        !           315:                          cport);
        !           316:                  memcpy ((pointer) (qset->uuconf_zport + cport),
        !           317:                          (pointer) pzsplit[3], cclass);
        !           318:                  qset->uuconf_zport[cport + cclass] = '\0';
        !           319:                }
        !           320:            }
        !           321: 
        !           322:          if (ctoks < 5)
        !           323:            continue;
        !           324: 
        !           325:          /* Get the phone number.  */
        !           326:          qset->uuconf_zphone = pzsplit[4];
        !           327: 
        !           328:          if (ctoks < 6)
        !           329:            continue;
        !           330: 
        !           331:          /* Get the chat script.  We just hand this off to the chat
        !           332:             script processor, so that it will parse subsend and
        !           333:             subexpect strings correctly.  */
        !           334:          pzsplit[4] = (char *) "chat";
        !           335:          iret = _uuconf_ichat_cmd (qglobal, ctoks - 4, pzsplit + 4,
        !           336:                                    &qset->uuconf_schat, pblock);
        !           337:          iret &=~ UUCONF_CMDTABRET_KEEP;
        !           338:          if (iret != UUCONF_SUCCESS)
        !           339:            break;
        !           340:        }
        !           341:   
        !           342:       (void) fclose (e);
        !           343: 
        !           344:       if (iret != UUCONF_SUCCESS)
        !           345:        break;
        !           346:     }
        !           347: 
        !           348:   if (zline != NULL)
        !           349:     free ((pointer) zline);
        !           350:   if (pzsplit != NULL)
        !           351:     free ((pointer) pzsplit);
        !           352:   if (pzcomma != NULL)
        !           353:     free ((pointer) pzcomma);
        !           354: 
        !           355:   if (iret != UUCONF_SUCCESS)
        !           356:     {
        !           357:       qglobal->zfilename = *pz;
        !           358:       return iret | UUCONF_ERROR_FILENAME;
        !           359:     }
        !           360: 
        !           361:   if (pblock == NULL)
        !           362:     return UUCONF_NOT_FOUND;
        !           363: 
        !           364:   /* Now we have to put in the Permissions information.  The relevant
        !           365:      Permissions entries are those with this system in the MACHINE
        !           366:      list and (if this system does not have a VALIDATE entry) those
        !           367:      with a LOGNAME list but no MACHINE list.  If no entry is found
        !           368:      with this system in the MACHINE list, then we must look for an
        !           369:      entry with "OTHER" in the MACHINE list.  */
        !           370:   ffound_machine = FALSE;
        !           371:   ffound_login = FALSE;
        !           372:   qother_machine = NULL;
        !           373:   for (qperm = qglobal->qprocess->qhdb_permissions;
        !           374:        qperm != NULL;
        !           375:        qperm = qperm->qnext)
        !           376:     {
        !           377:       boolean fmachine;
        !           378: 
        !           379:       /* MACHINE=OTHER is recognized specially.  It appears that OTHER
        !           380:         need only be recognized by itself, not when combined with
        !           381:         other machine names.  */
        !           382:       if (qother_machine == NULL
        !           383:          && qperm->pzmachine != NULL
        !           384:          && qperm->pzmachine != (char **) &_uuconf_unset
        !           385:          && qperm->pzmachine[0][0] == 'O'
        !           386:          && strcmp (qperm->pzmachine[0], "OTHER") == 0)
        !           387:        qother_machine = qperm;
        !           388: 
        !           389:       /* If this system is named in a MACHINE entry, we must add the
        !           390:         appropriate information to every alternate that could be used
        !           391:         for calling out.  */
        !           392:       fmachine = FALSE;
        !           393:       if (! ffound_machine
        !           394:          && qperm->pzmachine != NULL
        !           395:          && qperm->pzmachine != (char **) &_uuconf_unset)
        !           396:        {
        !           397:          for (pz = qperm->pzmachine; *pz != NULL; pz++)
        !           398:            {
        !           399:              if ((*pz)[0] == zsystem[0]
        !           400:                  && strcmp (*pz, zsystem) == 0)
        !           401:                {
        !           402:                  for (qalt = qsys;
        !           403:                       qalt != NULL;
        !           404:                       qalt = qalt->uuconf_qalternate)
        !           405:                    {
        !           406:                      if (qalt->uuconf_fcall)
        !           407:                        {
        !           408:                          iret = ihadd_machine_perm (qglobal, qalt, qperm);
        !           409:                          if (iret != UUCONF_SUCCESS)
        !           410:                            return iret;
        !           411:                        }
        !           412:                    }
        !           413: 
        !           414:                  fmachine = TRUE;
        !           415:                  ffound_machine = TRUE;
        !           416: 
        !           417:                  break;
        !           418:                }
        !           419:            }
        !           420:        }
        !           421: 
        !           422:       /* A LOGNAME line applies to this machine if it is listed in the
        !           423:         corresponding VALIDATE entry, or if it is not listed in any
        !           424:         VALIDATE entry.  On this pass through the Permissions entry
        !           425:         we pick up the information if the system appears in a
        !           426:         VALIDATE entry; if it does not, we make another pass to put
        !           427:         in all the LOGNAME lines.  */
        !           428:       if (qperm->pzlogname != NULL
        !           429:          && qperm->pzlogname != (char **) &_uuconf_unset
        !           430:          && qperm->pzvalidate != NULL
        !           431:          && qperm->pzvalidate != (char **) &_uuconf_unset)
        !           432:        {
        !           433:          for (pz = qperm->pzvalidate; *pz != NULL; ++pz)
        !           434:            if ((*pz)[0] == zsystem[0]
        !           435:                && strcmp (*pz, zsystem) == 0)
        !           436:              break;
        !           437:          if (*pz != NULL)
        !           438:            {
        !           439:              for (pz = qperm->pzlogname; *pz != NULL; ++pz)
        !           440:                {
        !           441:                  /* If this LOGNAME line is also a matching MACHINE
        !           442:                     line, we can add the LOGNAME permissions to the
        !           443:                     first alternate.  Otherwise, we must create a new
        !           444:                     alternate.  We cannot put a LOGNAME line in the
        !           445:                     first alternate if MACHINE does not match,
        !           446:                     because certain permissions (e.g. READ) may be
        !           447:                     specified by both types of lines, and we must use
        !           448:                     LOGNAME entries only when accepting calls and
        !           449:                     MACHINE entries only when placing calls.  */
        !           450:                  if (fmachine
        !           451:                      && (qsys->uuconf_zcalled_login == NULL
        !           452:                          || (qsys->uuconf_zcalled_login
        !           453:                              == (char *) &_uuconf_unset)))
        !           454:                    {
        !           455:                      qsys->uuconf_zcalled_login = *pz;
        !           456:                      iret = ihadd_logname_perm (qglobal, qsys, qperm);
        !           457:                    }
        !           458:                  else
        !           459:                    {
        !           460:                      struct uuconf_system *qnew;
        !           461:                      struct uuconf_system **pq;
        !           462: 
        !           463:                      qnew = ((struct uuconf_system *)
        !           464:                              uuconf_malloc (pblock,
        !           465:                                             sizeof (struct uuconf_system)));
        !           466:                      if (qnew == NULL)
        !           467:                        {
        !           468:                          qglobal->ierrno = errno;
        !           469:                          return UUCONF_MALLOC_FAILED | UUCONF_ERROR_ERRNO;
        !           470:                        }
        !           471: 
        !           472:                      *qnew = *qsys;
        !           473:                      qnew->uuconf_qalternate = NULL;
        !           474:                      for (pq = &qsys->uuconf_qalternate;
        !           475:                           *pq != NULL;
        !           476:                           pq = &(*pq)->uuconf_qalternate)
        !           477:                        ;
        !           478:                      *pq = qnew;
        !           479: 
        !           480:                      qnew->uuconf_zcalled_login = *pz;
        !           481:                      qnew->uuconf_fcall = FALSE;
        !           482:                      iret = ihadd_logname_perm (qglobal, qnew, qperm);
        !           483:                    }
        !           484: 
        !           485:                  if (iret != UUCONF_SUCCESS)
        !           486:                    return iret;
        !           487:                }
        !           488: 
        !           489:              ffound_login = TRUE;
        !           490:            }
        !           491:        }
        !           492:     }
        !           493: 
        !           494:   /* If we didn't find an entry for the machine, we must use the
        !           495:      MACHINE=OTHER entry, if any.  */
        !           496:   if (! ffound_machine && qother_machine != NULL)
        !           497:     {
        !           498:       for (qalt = qsys; qalt != NULL; qalt = qalt->uuconf_qalternate)
        !           499:        {
        !           500:          if (qalt->uuconf_fcall)
        !           501:            {
        !           502:              iret = ihadd_machine_perm (qglobal, qalt, qother_machine);
        !           503:              if (iret != UUCONF_SUCCESS)
        !           504:                return iret;
        !           505:            }
        !           506:        }
        !           507:     }
        !           508: 
        !           509:   /* If this system was not listed in any VALIDATE entry, then we must
        !           510:      add a called-login for each LOGNAME entry in Permissions.  */
        !           511:   if (! ffound_login)
        !           512:     {
        !           513:       for (qperm = qglobal->qprocess->qhdb_permissions;
        !           514:           qperm != NULL;
        !           515:           qperm = qperm->qnext)
        !           516:        {
        !           517:          if (qperm->pzlogname == NULL
        !           518:              || qperm->pzlogname == (char **) &_uuconf_unset)
        !           519:            continue;
        !           520: 
        !           521:          for (pz = qperm->pzlogname; *pz != NULL; pz++)
        !           522:            {
        !           523:              struct uuconf_system *qnew;
        !           524:              struct uuconf_system **pq;
        !           525: 
        !           526:              qnew = ((struct uuconf_system *)
        !           527:                      uuconf_malloc (pblock,
        !           528:                                      sizeof (struct uuconf_system)));
        !           529:              if (qnew == NULL)
        !           530:                {
        !           531:                  qglobal->ierrno = errno;
        !           532:                  return UUCONF_MALLOC_FAILED | UUCONF_ERROR_ERRNO;
        !           533:                }
        !           534: 
        !           535:              *qnew = *qsys;
        !           536:              qnew->uuconf_qalternate = NULL;
        !           537:              for (pq = &qsys->uuconf_qalternate;
        !           538:                   *pq != NULL;
        !           539:                   pq = &(*pq)->uuconf_qalternate)
        !           540:                ;
        !           541:              *pq = qnew;
        !           542: 
        !           543:              /* We recognize LOGNAME=OTHER specially, although this
        !           544:                 appears to be an SCO innovation.  */
        !           545:              if (strcmp (*pz, "OTHER") == 0)
        !           546:                qnew->uuconf_zcalled_login = (char *) "ANY";
        !           547:              else
        !           548:                qnew->uuconf_zcalled_login = *pz;
        !           549:              qnew->uuconf_fcall = FALSE;
        !           550:              iret = ihadd_logname_perm (qglobal, qnew, qperm);
        !           551:              if (iret != UUCONF_SUCCESS)
        !           552:                return iret;
        !           553:            }
        !           554:        }
        !           555:     }
        !           556: 
        !           557:   /* HDB permits local requests to receive to any directory, which is
        !           558:      not the default put in by _uuconf_isystem_basic_default.  We set
        !           559:      it here instead.  */
        !           560:   for (qalt = qsys; qalt != NULL; qalt = qalt->uuconf_qalternate)
        !           561:     {
        !           562:       iret = _uuconf_iadd_string (qglobal, (char *) ZROOTDIR,
        !           563:                                  FALSE, FALSE,
        !           564:                                  &qalt->uuconf_pzlocal_receive,
        !           565:                                  pblock);
        !           566:       if (iret != UUCONF_SUCCESS)
        !           567:        return iret;
        !           568:     }
        !           569: 
        !           570:   /* HDB does not have a maximum number of retries if a retry time is
        !           571:      given in the time field.  */
        !           572:   if (qsys->uuconf_qtimegrade != NULL
        !           573:       && qsys->uuconf_qtimegrade != (struct uuconf_timespan *) &_uuconf_unset
        !           574:       && qsys->uuconf_qtimegrade->uuconf_cretry > 0)
        !           575:     qsys->uuconf_cmax_retries = 0;
        !           576: 
        !           577:   return UUCONF_SUCCESS;
        !           578: }
        !           579: 
        !           580: /* Add the settings of a MACHINE line in Permissions to a system.  */
        !           581: 
        !           582: /*ARGSIGNORED*/
        !           583: static int
        !           584: ihadd_machine_perm (qglobal, qsys, qperm)
        !           585:      struct sglobal *qglobal;
        !           586:      struct uuconf_system *qsys;
        !           587:      struct shpermissions *qperm;
        !           588: {
        !           589:   if (qperm->frequest >= 0)
        !           590:     qsys->uuconf_fsend_request = qperm->frequest;
        !           591:   else
        !           592:     qsys->uuconf_fsend_request = FALSE;
        !           593:   qsys->uuconf_pzremote_send = qperm->pzread;
        !           594:   qsys->uuconf_pzremote_receive = qperm->pzwrite;
        !           595:   qsys->uuconf_pzcmds = qperm->pzcommands;
        !           596:   qsys->uuconf_zlocalname = qperm->zmyname;
        !           597:   qsys->uuconf_zpubdir = qperm->zpubdir;
        !           598:   qsys->uuconf_pzalias = qperm->pzalias;
        !           599: 
        !           600:   return UUCONF_SUCCESS;
        !           601: }
        !           602: 
        !           603: /* Add the settings of a LOGNAME line in Permissions to a system.  */
        !           604: 
        !           605: /*ARGSIGNORED*/
        !           606: static int
        !           607: ihadd_logname_perm (qglobal, qsys, qperm)
        !           608:      struct sglobal *qglobal;
        !           609:      struct uuconf_system *qsys;
        !           610:      struct shpermissions *qperm;
        !           611: {
        !           612:   qsys->uuconf_fcalled = TRUE;
        !           613:   if (qperm->frequest >= 0)
        !           614:     qsys->uuconf_fsend_request = qperm->frequest;
        !           615:   else
        !           616:     qsys->uuconf_fsend_request = FALSE;
        !           617:   qsys->uuconf_fcalled_transfer = qperm->fsendfiles;
        !           618:   qsys->uuconf_pzremote_send = qperm->pzread;
        !           619:   qsys->uuconf_pzremote_receive = qperm->pzwrite;
        !           620:   qsys->uuconf_fcallback = qperm->fcallback;
        !           621:   qsys->uuconf_zlocalname = qperm->zmyname;
        !           622:   qsys->uuconf_zpubdir = qperm->zpubdir;
        !           623: 
        !           624:   return UUCONF_SUCCESS;
        !           625: }

unix.superglobalmegacorp.com

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