|
|
1.1 ! root 1: /* uuchk.c ! 2: Display what we think the permissions of systems are. ! 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 uuchk_rcsid[] = "$Id: uuchk.c,v 1.1 93/07/30 07:54:31 bin Exp Locker: bin $"; ! 30: #endif ! 31: ! 32: #include "getopt.h" ! 33: ! 34: #include "uuconf.h" ! 35: ! 36: /* Local functions. */ ! 37: ! 38: static void ukusage P((void)); ! 39: static void ukshow P((const struct uuconf_system *qsys, ! 40: pointer puuconf)); ! 41: static int ikshow_port P((struct uuconf_port *qport, pointer pinfo)); ! 42: static void ukshow_dialer P((struct uuconf_dialer *qdial)); ! 43: static void ukshow_chat P((const struct uuconf_chat *qchat, ! 44: const char *zhdr)); ! 45: static void ukshow_size P((struct uuconf_timespan *q, boolean fcall, ! 46: boolean flocal)); ! 47: static void ukshow_proto_params P((struct uuconf_proto_param *pas, ! 48: int cindent)); ! 49: static void ukshow_time P((const struct uuconf_timespan *)); ! 50: static struct uuconf_timespan *qcompress_span P((struct uuconf_timespan *)); ! 51: static void ukuuconf_error P((pointer puuconf, int iret)); ! 52: ! 53: /* Structure used to pass uuconf pointer into ikshow_port and also let ! 54: it record whether any ports were found. */ ! 55: struct sinfo ! 56: { ! 57: /* The uuconf global pointer. */ ! 58: pointer puuconf; ! 59: /* The system. */ ! 60: const struct uuconf_system *qsys; ! 61: /* Whether any ports were seen. */ ! 62: boolean fgot; ! 63: }; ! 64: ! 65: /* Long getopt options. */ ! 66: static const struct option asKlongopts[] = { { NULL, 0, NULL, 0 } }; ! 67: ! 68: int ! 69: main (argc, argv) ! 70: int argc; ! 71: char **argv; ! 72: { ! 73: int iopt; ! 74: /* The configuration file name. */ ! 75: const char *zconfig = NULL; ! 76: int iret; ! 77: pointer puuconf; ! 78: char **pzsystems; ! 79: ! 80: while ((iopt = getopt_long (argc, argv, "I:x:", asKlongopts, ! 81: (int *) NULL)) != EOF) ! 82: { ! 83: switch (iopt) ! 84: { ! 85: case 'I': ! 86: /* Set the configuration file name. */ ! 87: zconfig = optarg; ! 88: break; ! 89: ! 90: case 'x': ! 91: /* Set the debugging level. There is actually no debugging ! 92: information for this program. */ ! 93: break; ! 94: ! 95: case 0: ! 96: /* Long option found and flag set. */ ! 97: break; ! 98: ! 99: default: ! 100: ukusage (); ! 101: break; ! 102: } ! 103: } ! 104: ! 105: if (optind != argc) ! 106: ukusage (); ! 107: ! 108: iret = uuconf_init (&puuconf, (const char *) NULL, zconfig); ! 109: if (iret != UUCONF_SUCCESS) ! 110: ukuuconf_error (puuconf, iret); ! 111: ! 112: iret = uuconf_system_names (puuconf, &pzsystems, FALSE); ! 113: if (iret != UUCONF_SUCCESS) ! 114: ukuuconf_error (puuconf, iret); ! 115: ! 116: while (*pzsystems != NULL) ! 117: { ! 118: struct uuconf_system ssys; ! 119: ! 120: iret = uuconf_system_info (puuconf, *pzsystems, &ssys); ! 121: if (iret != UUCONF_SUCCESS) ! 122: ukuuconf_error (puuconf, iret); ! 123: else ! 124: ukshow (&ssys, puuconf); ! 125: (void) uuconf_system_free (puuconf, &ssys); ! 126: ++pzsystems; ! 127: if (*pzsystems != NULL) ! 128: printf ("\n"); ! 129: } ! 130: ! 131: exit (EXIT_SUCCESS); ! 132: ! 133: /* Avoid errors about not returning a value. */ ! 134: return 0; ! 135: } ! 136: ! 137: /* Print a usage message and die. */ ! 138: ! 139: static void ! 140: ukusage () ! 141: { ! 142: fprintf (stderr, ! 143: "Taylor UUCP version %s, copyright (C) 1991, 1992 Ian Lance Taylor\n", ! 144: VERSION); ! 145: fprintf (stderr, ! 146: "Usage: uuchk [-I file]\n"); ! 147: fprintf (stderr, ! 148: " -I file: Set configuration file to use\n"); ! 149: exit (EXIT_FAILURE); ! 150: } ! 151: ! 152: /* Dump out the information for a system. */ ! 153: ! 154: static void ! 155: ukshow (qsys, puuconf) ! 156: const struct uuconf_system *qsys; ! 157: pointer puuconf; ! 158: { ! 159: char **pz; ! 160: int i; ! 161: int iret; ! 162: ! 163: printf ("System: %s", qsys->uuconf_zname); ! 164: if (qsys->uuconf_pzalias != NULL) ! 165: { ! 166: printf (" ("); ! 167: for (pz = qsys->uuconf_pzalias; *pz != NULL; pz++) ! 168: { ! 169: printf ("%s", *pz); ! 170: if (pz[1] != NULL) ! 171: printf (" "); ! 172: } ! 173: printf (")"); ! 174: } ! 175: printf ("\n"); ! 176: ! 177: for (i = 0; qsys != NULL; qsys = qsys->uuconf_qalternate, i++) ! 178: { ! 179: boolean fcall, fcalled; ! 180: struct uuconf_timespan *qtime, *qspan; ! 181: ! 182: if (i != 0 || qsys->uuconf_qalternate != NULL) ! 183: { ! 184: printf ("Alternate %d", i); ! 185: if (qsys->uuconf_zalternate != NULL) ! 186: printf (" (%s)", qsys->uuconf_zalternate); ! 187: printf ("\n"); ! 188: } ! 189: ! 190: /* See if this alternate could be used when calling out. */ ! 191: fcall = qsys->uuconf_fcall; ! 192: if (qsys->uuconf_qtimegrade == NULL) ! 193: fcall = FALSE; ! 194: ! 195: /* See if this alternate could be used when calling in. */ ! 196: fcalled = qsys->uuconf_fcalled; ! 197: ! 198: if (! fcall && ! fcalled) ! 199: { ! 200: printf (" This alternate is never used\n"); ! 201: continue; ! 202: } ! 203: ! 204: if (fcalled) ! 205: { ! 206: if (qsys->uuconf_zcalled_login != NULL ! 207: && strcmp (qsys->uuconf_zcalled_login, "ANY") != 0) ! 208: { ! 209: if (i == 0 && qsys->uuconf_qalternate == NULL) ! 210: printf (" Caller must log in as %s\n", ! 211: qsys->uuconf_zcalled_login); ! 212: else ! 213: printf (" When called using login name %s\n", ! 214: qsys->uuconf_zcalled_login); ! 215: } ! 216: else ! 217: printf (" When called using any login name\n"); ! 218: ! 219: if (qsys->uuconf_zlocalname != NULL) ! 220: printf (" Will use %s as name of local system\n", ! 221: qsys->uuconf_zlocalname); ! 222: } ! 223: ! 224: if (fcalled && qsys->uuconf_fcallback) ! 225: { ! 226: printf (" If called, will call back\n"); ! 227: fcalled = FALSE; ! 228: } ! 229: ! 230: if (fcall) ! 231: { ! 232: struct sinfo si; ! 233: ! 234: if (i == 0 && qsys->uuconf_qalternate == NULL) ! 235: printf (" Call out"); ! 236: else ! 237: printf (" This alternate applies when calling"); ! 238: ! 239: if (qsys->uuconf_zport != NULL || qsys->uuconf_qport != NULL) ! 240: { ! 241: printf (" using "); ! 242: if (qsys->uuconf_zport != NULL) ! 243: printf ("port %s", qsys->uuconf_zport); ! 244: else ! 245: printf ("a specially defined port"); ! 246: if (qsys->uuconf_ibaud != 0) ! 247: { ! 248: printf (" at speed %ld", qsys->uuconf_ibaud); ! 249: if (qsys->uuconf_ihighbaud != 0) ! 250: printf (" to %ld", qsys->uuconf_ihighbaud); ! 251: } ! 252: printf ("\n"); ! 253: } ! 254: else if (qsys->uuconf_ibaud != 0) ! 255: { ! 256: printf (" at speed %ld", qsys->uuconf_ibaud); ! 257: if (qsys->uuconf_ihighbaud != 0) ! 258: printf (" to %ld", qsys->uuconf_ihighbaud); ! 259: printf ("\n"); ! 260: } ! 261: else ! 262: printf (" using any port\n"); ! 263: ! 264: si.puuconf = puuconf; ! 265: si.qsys = qsys; ! 266: si.fgot = FALSE; ! 267: ! 268: if (qsys->uuconf_qport != NULL) ! 269: { ! 270: printf (" The port is defined as:\n"); ! 271: (void) ikshow_port (qsys->uuconf_qport, (pointer) &si); ! 272: } ! 273: else ! 274: { ! 275: struct uuconf_port sdummy; ! 276: ! 277: printf (" The possible ports are:\n"); ! 278: iret = uuconf_find_port (puuconf, qsys->uuconf_zport, ! 279: qsys->uuconf_ibaud, ! 280: qsys->uuconf_ihighbaud, ! 281: ikshow_port, (pointer) &si, ! 282: &sdummy); ! 283: if (iret != UUCONF_NOT_FOUND) ! 284: ukuuconf_error (puuconf, iret); ! 285: if (! si.fgot) ! 286: printf (" *** There are no matching ports\n"); ! 287: } ! 288: ! 289: if (qsys->uuconf_zphone != NULL) ! 290: { ! 291: if ((qsys->uuconf_zport != NULL ! 292: && strcmp (qsys->uuconf_zport, "TCP") == 0) ! 293: || (qsys->uuconf_qport != NULL ! 294: && (qsys->uuconf_qport->uuconf_ttype ! 295: == UUCONF_PORTTYPE_TCP ! 296: || qsys->uuconf_qport->uuconf_ttype ! 297: == UUCONF_PORTTYPE_TLI))) ! 298: printf (" Remote address %s\n", qsys->uuconf_zphone); ! 299: else ! 300: printf (" Phone number %s\n", qsys->uuconf_zphone); ! 301: } ! 302: ! 303: ukshow_chat (&qsys->uuconf_schat, " Chat"); ! 304: ! 305: if (qsys->uuconf_zcall_login != NULL ! 306: || qsys->uuconf_zcall_password != NULL) ! 307: { ! 308: char *zlogin, *zpass; ! 309: ! 310: iret = uuconf_callout (puuconf, qsys, &zlogin, &zpass); ! 311: if (iret == UUCONF_NOT_FOUND) ! 312: printf (" Can not determine login name or password\n"); ! 313: else if (iret != UUCONF_SUCCESS) ! 314: ukuuconf_error (puuconf, iret); ! 315: else ! 316: { ! 317: if (zlogin != NULL) ! 318: { ! 319: printf (" Login name %s\n", zlogin); ! 320: free ((pointer) zlogin); ! 321: } ! 322: if (zpass != NULL) ! 323: { ! 324: printf (" Password %s\n", zpass); ! 325: free ((pointer) zpass); ! 326: } ! 327: } ! 328: } ! 329: ! 330: qtime = qcompress_span (qsys->uuconf_qtimegrade); ! 331: ! 332: for (qspan = qtime; qspan != NULL; qspan = qspan->uuconf_qnext) ! 333: { ! 334: printf (" "); ! 335: ukshow_time (qspan); ! 336: printf (" may call if "); ! 337: if ((char) qspan->uuconf_ival == UUCONF_GRADE_LOW) ! 338: printf ("any work"); ! 339: else ! 340: printf ("work grade %c or higher", (char) qspan->uuconf_ival); ! 341: if (qspan->uuconf_cretry != 0) ! 342: printf (" (retry %d)", qspan->uuconf_cretry); ! 343: printf ("\n"); ! 344: } ! 345: ! 346: if (qsys->uuconf_qcalltimegrade != NULL) ! 347: { ! 348: boolean fprint, fother; ! 349: ! 350: qtime = qcompress_span (qsys->uuconf_qcalltimegrade); ! 351: fprint = FALSE; ! 352: fother = FALSE; ! 353: if (qtime->uuconf_istart != 0) ! 354: fother = TRUE; ! 355: for (qspan = qtime; qspan != NULL; qspan = qspan->uuconf_qnext) ! 356: { ! 357: if ((char) qspan->uuconf_ival == UUCONF_GRADE_LOW) ! 358: { ! 359: fother = TRUE; ! 360: continue; ! 361: } ! 362: fprint = TRUE; ! 363: printf (" "); ! 364: ukshow_time (qspan); ! 365: printf (" may accept work grade %c or higher\n", ! 366: (char) qspan->uuconf_ival); ! 367: if (qspan->uuconf_qnext == NULL) ! 368: { ! 369: if (qspan->uuconf_iend != 7 * 24 * 60) ! 370: fother = TRUE; ! 371: } ! 372: else ! 373: { ! 374: if (qspan->uuconf_iend ! 375: != qspan->uuconf_qnext->uuconf_istart) ! 376: fother = TRUE; ! 377: } ! 378: } ! 379: if (fprint && fother) ! 380: printf (" (At other times may accept any work)\n"); ! 381: } ! 382: } ! 383: ! 384: if (qsys->uuconf_fsequence) ! 385: printf (" Sequence numbers are used\n"); ! 386: ! 387: if (fcalled) ! 388: ukshow_chat (&qsys->uuconf_scalled_chat, " When called, chat"); ! 389: ! 390: if (qsys->uuconf_zdebug != NULL) ! 391: printf (" Debugging level %s\n", qsys->uuconf_zdebug); ! 392: if (qsys->uuconf_zmax_remote_debug != NULL) ! 393: printf (" Max remote debugging level %s\n", ! 394: qsys->uuconf_zmax_remote_debug); ! 395: ! 396: if (fcall) ! 397: { ! 398: ukshow_size (qsys->uuconf_qcall_local_size, TRUE, TRUE); ! 399: ukshow_size (qsys->uuconf_qcall_remote_size, TRUE, FALSE); ! 400: } ! 401: if (fcalled) ! 402: { ! 403: ukshow_size (qsys->uuconf_qcalled_local_size, FALSE, TRUE); ! 404: ukshow_size (qsys->uuconf_qcalled_remote_size, FALSE, TRUE); ! 405: } ! 406: ! 407: if (fcall) ! 408: printf (" May %smake local requests when calling\n", ! 409: qsys->uuconf_fcall_transfer ? "" : "not "); ! 410: ! 411: if (fcalled) ! 412: printf (" May %smake local requests when called\n", ! 413: qsys->uuconf_fcalled_transfer ? "" : "not "); ! 414: ! 415: if (qsys->uuconf_fcall_transfer || qsys->uuconf_fcalled_transfer) ! 416: { ! 417: printf (" May send by local request:"); ! 418: for (pz = qsys->uuconf_pzlocal_send; *pz != NULL; pz++) ! 419: printf (" %s", *pz); ! 420: printf ("\n"); ! 421: } ! 422: if (! qsys->uuconf_fsend_request) ! 423: printf (" May not send files by remote request\n"); ! 424: else ! 425: { ! 426: printf (" May send by remote request:"); ! 427: for (pz = qsys->uuconf_pzremote_send; *pz != NULL; pz++) ! 428: printf (" %s", *pz); ! 429: printf ("\n"); ! 430: } ! 431: if (qsys->uuconf_fcall_transfer || qsys->uuconf_fcalled_transfer) ! 432: { ! 433: printf (" May accept by local request:"); ! 434: for (pz = qsys->uuconf_pzlocal_receive; *pz != NULL; pz++) ! 435: printf (" %s", *pz); ! 436: printf ("\n"); ! 437: } ! 438: if (! qsys->uuconf_frec_request) ! 439: printf (" May not receive files by remote request\n"); ! 440: else ! 441: { ! 442: printf (" May receive by remote request:"); ! 443: for (pz = qsys->uuconf_pzremote_receive; *pz != NULL; pz++) ! 444: printf (" %s", *pz); ! 445: printf ("\n"); ! 446: } ! 447: ! 448: printf (" May execute"); ! 449: for (pz = qsys->uuconf_pzcmds; *pz != NULL; pz++) ! 450: printf (" %s", *pz); ! 451: printf ("\n"); ! 452: ! 453: printf (" Execution path"); ! 454: for (pz = qsys->uuconf_pzpath; *pz != NULL; pz++) ! 455: printf (" %s" , *pz); ! 456: printf ("\n"); ! 457: ! 458: if (qsys->uuconf_cfree_space != 0) ! 459: printf (" Will leave %ld bytes available\n", qsys->uuconf_cfree_space); ! 460: ! 461: if (qsys->uuconf_zpubdir != NULL) ! 462: printf (" Public directory is %s\n", qsys->uuconf_zpubdir); ! 463: ! 464: if (qsys->uuconf_pzforward_from != NULL) ! 465: { ! 466: printf (" May forward from"); ! 467: for (pz = qsys->uuconf_pzforward_from; *pz != NULL; pz++) ! 468: printf (" %s", *pz); ! 469: printf ("\n"); ! 470: } ! 471: ! 472: if (qsys->uuconf_pzforward_to != NULL) ! 473: { ! 474: printf (" May forward to"); ! 475: for (pz = qsys->uuconf_pzforward_to; *pz != NULL; pz++) ! 476: printf (" %s", *pz); ! 477: printf ("\n"); ! 478: } ! 479: ! 480: if (qsys->uuconf_zprotocols != NULL) ! 481: printf (" Will use protocols %s\n", qsys->uuconf_zprotocols); ! 482: else ! 483: printf (" Will use any known protocol\n"); ! 484: ! 485: if (qsys->uuconf_qproto_params != NULL) ! 486: ukshow_proto_params (qsys->uuconf_qproto_params, 1); ! 487: } ! 488: } ! 489: ! 490: /* Show information about a port. */ ! 491: ! 492: /*ARGSUSED*/ ! 493: static int ! 494: ikshow_port (qport, pinfo) ! 495: struct uuconf_port *qport; ! 496: pointer pinfo; ! 497: { ! 498: struct sinfo *qi = (struct sinfo *) pinfo; ! 499: char **pz; ! 500: struct uuconf_modem_port *qmodem; ! 501: struct uuconf_tli_port *qtli; ! 502: ! 503: qi->fgot = TRUE; ! 504: ! 505: printf (" Port name %s\n", qport->uuconf_zname); ! 506: switch (qport->uuconf_ttype) ! 507: { ! 508: case UUCONF_PORTTYPE_STDIN: ! 509: printf (" Port type stdin\n"); ! 510: break; ! 511: case UUCONF_PORTTYPE_DIRECT: ! 512: printf (" Port type direct\n"); ! 513: if (qport->uuconf_u.uuconf_sdirect.uuconf_zdevice != NULL) ! 514: printf (" Device %s\n", ! 515: qport->uuconf_u.uuconf_sdirect.uuconf_zdevice); ! 516: printf (" Speed %ld\n", qport->uuconf_u.uuconf_sdirect.uuconf_ibaud); ! 517: break; ! 518: case UUCONF_PORTTYPE_MODEM: ! 519: qmodem = &qport->uuconf_u.uuconf_smodem; ! 520: printf (" Port type modem\n"); ! 521: if (qmodem->uuconf_zdevice != NULL) ! 522: printf (" Device %s\n", qmodem->uuconf_zdevice); ! 523: if (qmodem->uuconf_zdial_device != NULL) ! 524: printf (" Dial device %s\n", qmodem->uuconf_zdial_device); ! 525: printf (" Speed %ld\n", qmodem->uuconf_ibaud); ! 526: if (qmodem->uuconf_ilowbaud != qmodem->uuconf_ihighbaud) ! 527: printf (" Speed range %ld to %ld\n", qmodem->uuconf_ilowbaud, ! 528: qmodem->uuconf_ihighbaud); ! 529: printf (" Carrier %savailable\n", ! 530: qmodem->uuconf_fcarrier ? "" : "not "); ! 531: if (qmodem->uuconf_qdialer != NULL) ! 532: { ! 533: printf (" Specially defined dialer\n"); ! 534: ukshow_dialer (qmodem->uuconf_qdialer); ! 535: } ! 536: else if (qmodem->uuconf_pzdialer != NULL ! 537: && qmodem->uuconf_pzdialer[0] != NULL) ! 538: { ! 539: struct uuconf_dialer sdial; ! 540: int iret; ! 541: ! 542: /* This might be a single dialer name, or it might be a ! 543: sequence of dialer/token pairs. */ ! 544: ! 545: if (qmodem->uuconf_pzdialer[1] == NULL ! 546: || qmodem->uuconf_pzdialer[2] == NULL) ! 547: { ! 548: iret = uuconf_dialer_info (qi->puuconf, ! 549: qmodem->uuconf_pzdialer[0], ! 550: &sdial); ! 551: if (iret == UUCONF_NOT_FOUND) ! 552: printf (" *** No dialer %s\n", qmodem->uuconf_pzdialer[0]); ! 553: else if (iret != UUCONF_SUCCESS) ! 554: ukuuconf_error (qi->puuconf, iret); ! 555: else ! 556: { ! 557: printf (" Dialer %s\n", qmodem->uuconf_pzdialer[0]); ! 558: ukshow_dialer (&sdial); ! 559: if (qmodem->uuconf_pzdialer[1] != NULL) ! 560: printf (" Token %s\n", qmodem->uuconf_pzdialer[1]); ! 561: } ! 562: } ! 563: else ! 564: { ! 565: pz = qmodem->uuconf_pzdialer; ! 566: while (*pz != NULL) ! 567: { ! 568: iret = uuconf_dialer_info (qi->puuconf, *pz, &sdial); ! 569: if (iret == UUCONF_NOT_FOUND) ! 570: printf (" *** No dialer %s\n", *pz); ! 571: else if (iret != UUCONF_SUCCESS) ! 572: ukuuconf_error (qi->puuconf, iret); ! 573: else ! 574: { ! 575: printf (" Dialer %s\n", *pz); ! 576: ukshow_dialer (&sdial); ! 577: } ! 578: ! 579: ++pz; ! 580: if (*pz != NULL) ! 581: { ! 582: printf (" Token %s\n", *pz); ! 583: ++pz; ! 584: } ! 585: } ! 586: } ! 587: } ! 588: else ! 589: printf (" *** No dialer information\n"); ! 590: break; ! 591: case UUCONF_PORTTYPE_TCP: ! 592: printf (" Port type tcp\n"); ! 593: printf (" TCP service %s\n", ! 594: qport->uuconf_u.uuconf_stcp.uuconf_zport); ! 595: break; ! 596: case UUCONF_PORTTYPE_TLI: ! 597: qtli = &qport->uuconf_u.uuconf_stli; ! 598: printf (" Port type TLI%s\n", ! 599: qtli->uuconf_fstream ? "S" : ""); ! 600: if (qtli->uuconf_zdevice != NULL) ! 601: printf (" Device %s\n", qtli->uuconf_zdevice); ! 602: if (qtli->uuconf_pzpush != NULL) ! 603: { ! 604: printf (" Push"); ! 605: for (pz = qtli->uuconf_pzpush; *pz != NULL; pz++) ! 606: printf (" %s", *pz); ! 607: printf ("\n"); ! 608: } ! 609: if (qtli->uuconf_pzdialer != NULL ! 610: && qtli->uuconf_pzdialer[0] != NULL) ! 611: { ! 612: printf (" Dialer sequence"); ! 613: for (pz = qtli->uuconf_pzdialer; *pz != NULL; pz++) ! 614: printf (" %s", *pz); ! 615: printf ("\n"); ! 616: } ! 617: if (qtli->uuconf_zservaddr != NULL) ! 618: printf (" Server address %s\n", qtli->uuconf_zservaddr); ! 619: break; ! 620: default: ! 621: fprintf (stderr, " CAN'T HAPPEN\n"); ! 622: break; ! 623: } ! 624: ! 625: if (qport->uuconf_zprotocols != NULL) ! 626: printf (" Will use protocols %s\n", qport->uuconf_zprotocols); ! 627: ! 628: if (qport->uuconf_zlockname != NULL) ! 629: printf (" Will use lockname %s\n", qport->uuconf_zlockname); ! 630: ! 631: if (qport->uuconf_qproto_params != NULL) ! 632: ukshow_proto_params (qport->uuconf_qproto_params, 3); ! 633: ! 634: /* Return NOT_FOUND to force find_port to continue searching. */ ! 635: return UUCONF_NOT_FOUND; ! 636: } ! 637: ! 638: /* Show information about a dialer. */ ! 639: ! 640: static void ! 641: ukshow_dialer (q) ! 642: struct uuconf_dialer *q; ! 643: { ! 644: ukshow_chat (&q->uuconf_schat, " Chat"); ! 645: printf (" Wait for dialtone %s\n", q->uuconf_zdialtone); ! 646: printf (" Pause while dialing %s\n", q->uuconf_zpause); ! 647: printf (" Carrier %savailable\n", q->uuconf_fcarrier ? "" : "not "); ! 648: if (q->uuconf_fcarrier) ! 649: printf (" Wait %d seconds for carrier\n", q->uuconf_ccarrier_wait); ! 650: if (q->uuconf_fdtr_toggle) ! 651: { ! 652: printf (" Toggle DTR"); ! 653: if (q->uuconf_fdtr_toggle_wait) ! 654: printf (" and wait"); ! 655: printf ("\n"); ! 656: } ! 657: ukshow_chat (&q->uuconf_scomplete, " When complete chat"); ! 658: ukshow_chat (&q->uuconf_sabort, " When aborting chat"); ! 659: if (q->uuconf_qproto_params != NULL) ! 660: ukshow_proto_params (q->uuconf_qproto_params, 4); ! 661: } ! 662: ! 663: /* Show a chat script. */ ! 664: ! 665: static void ! 666: ukshow_chat (qchat, zhdr) ! 667: const struct uuconf_chat *qchat; ! 668: const char *zhdr; ! 669: { ! 670: char **pz; ! 671: ! 672: if (qchat->uuconf_pzprogram != NULL) ! 673: { ! 674: printf ("%s program", zhdr); ! 675: for (pz = qchat->uuconf_pzprogram; *pz != NULL; pz++) ! 676: printf (" %s", *pz); ! 677: printf ("\n"); ! 678: } ! 679: ! 680: if (qchat->uuconf_pzchat != NULL) ! 681: { ! 682: ! 683: printf ("%s script", zhdr); ! 684: for (pz = qchat->uuconf_pzchat; *pz != NULL; pz++) ! 685: { ! 686: if ((*pz)[0] != '-' || pz == qchat->uuconf_pzchat) ! 687: printf (" "); ! 688: printf ("%s", *pz); ! 689: } ! 690: printf ("\n"); ! 691: printf ("%s script timeout %d\n", zhdr, qchat->uuconf_ctimeout); ! 692: if (qchat->uuconf_pzfail != NULL) ! 693: { ! 694: printf ("%s failure strings", zhdr); ! 695: for (pz = qchat->uuconf_pzfail; *pz != NULL; pz++) ! 696: printf (" %s", *pz); ! 697: printf ("\n"); ! 698: } ! 699: if (qchat->uuconf_fstrip) ! 700: printf ("%s script incoming bytes stripped to seven bits\n", zhdr); ! 701: } ! 702: } ! 703: ! 704: /* Show a size/time restriction. */ ! 705: ! 706: static void ! 707: ukshow_size (qspan, fcall, flocal) ! 708: struct uuconf_timespan *qspan; ! 709: boolean fcall; ! 710: boolean flocal; ! 711: { ! 712: struct uuconf_timespan *q; ! 713: boolean fother; ! 714: ! 715: qspan = qcompress_span (qspan); ! 716: if (qspan == NULL) ! 717: return; ! 718: ! 719: printf (" If call%s the following applies to a %s request:\n", ! 720: fcall ? "ing" : "ed", flocal ? "local" : "remote"); ! 721: ! 722: fother = FALSE; ! 723: if (qspan->uuconf_istart >= 60) ! 724: fother = TRUE; ! 725: ! 726: for (q = qspan; q != NULL; q = q->uuconf_qnext) ! 727: { ! 728: printf (" "); ! 729: ukshow_time (q); ! 730: printf (" may transfer files %ld bytes or smaller\n", q->uuconf_ival); ! 731: if (q->uuconf_qnext == NULL) ! 732: { ! 733: if (q->uuconf_iend <= 6 * 24 * 60 + 23 * 60) ! 734: fother = TRUE; ! 735: } ! 736: else ! 737: { ! 738: if (q->uuconf_iend + 60 <= q->uuconf_qnext->uuconf_istart) ! 739: fother = TRUE; ! 740: } ! 741: } ! 742: ! 743: if (fother) ! 744: printf (" (At other times may send files of any size)\n"); ! 745: } ! 746: ! 747: /* Show protocol parameters. */ ! 748: ! 749: static void ! 750: ukshow_proto_params (pas, cindent) ! 751: struct uuconf_proto_param *pas; ! 752: int cindent; ! 753: { ! 754: struct uuconf_proto_param *q; ! 755: ! 756: for (q = pas; q->uuconf_bproto != '\0'; q++) ! 757: { ! 758: int i; ! 759: struct uuconf_proto_param_entry *qe; ! 760: ! 761: for (i = 0; i < cindent; i++) ! 762: printf (" "); ! 763: printf ("For protocol %c will use the following parameters\n", ! 764: q->uuconf_bproto); ! 765: for (qe = q->uuconf_qentries; qe->uuconf_cargs > 0; qe++) ! 766: { ! 767: int ia; ! 768: ! 769: for (i = 0; i < cindent; i++) ! 770: printf (" "); ! 771: for (ia = 0; ia < qe->uuconf_cargs; ia++) ! 772: printf (" %s", qe->uuconf_pzargs[ia]); ! 773: printf ("\n"); ! 774: } ! 775: } ! 776: } ! 777: ! 778: /* Display a time span. */ ! 779: ! 780: static void ! 781: ukshow_time (q) ! 782: const struct uuconf_timespan *q; ! 783: { ! 784: int idaystart, idayend; ! 785: int ihourstart, ihourend; ! 786: int iminutestart, iminuteend; ! 787: const char * const zdays = "Sun\0Mon\0Tue\0Wed\0Thu\0Fri\0Sat\0Sun"; ! 788: ! 789: if (q->uuconf_istart == 0 && q->uuconf_iend == 7 * 24 * 60) ! 790: { ! 791: printf ("At any time"); ! 792: return; ! 793: } ! 794: ! 795: idaystart = q->uuconf_istart / (24 * 60); ! 796: ihourstart = (q->uuconf_istart % (24 * 60)) / 60; ! 797: iminutestart = q->uuconf_istart % 60; ! 798: idayend = q->uuconf_iend / (24 * 60); ! 799: ihourend = (q->uuconf_iend % (24 * 60)) / 60; ! 800: iminuteend = q->uuconf_iend % 60; ! 801: ! 802: if (idaystart == idayend) ! 803: printf ("%s from %02d:%02d to %02d:%02d", zdays + idaystart * 4, ! 804: ihourstart, iminutestart, ihourend, iminuteend); ! 805: else ! 806: printf ("From %s %02d:%02d to %s %02d:%02d", ! 807: zdays + idaystart * 4, ihourstart, iminutestart, ! 808: zdays + idayend * 4, ihourend, iminuteend); ! 809: } ! 810: ! 811: /* Compress a time span by merging any two adjacent spans with ! 812: identical values. This isn't necessary for uucico, but it looks ! 813: nicer when printed out. */ ! 814: ! 815: static struct uuconf_timespan * ! 816: qcompress_span (qlist) ! 817: struct uuconf_timespan *qlist; ! 818: { ! 819: struct uuconf_timespan **pq; ! 820: ! 821: pq = &qlist; ! 822: while (*pq != NULL) ! 823: { ! 824: if ((*pq)->uuconf_qnext != NULL ! 825: && (*pq)->uuconf_iend == (*pq)->uuconf_qnext->uuconf_istart ! 826: && (*pq)->uuconf_ival == (*pq)->uuconf_qnext->uuconf_ival) ! 827: { ! 828: struct uuconf_timespan *qnext; ! 829: ! 830: qnext = (*pq)->uuconf_qnext; ! 831: (*pq)->uuconf_qnext = qnext->uuconf_qnext; ! 832: (*pq)->uuconf_iend = qnext->uuconf_iend; ! 833: } ! 834: else ! 835: pq = &(*pq)->uuconf_qnext; ! 836: } ! 837: ! 838: return qlist; ! 839: } ! 840: ! 841: /* Display a uuconf error and exit. */ ! 842: ! 843: static void ! 844: ukuuconf_error (puuconf, iret) ! 845: pointer puuconf; ! 846: int iret; ! 847: { ! 848: char ab[512]; ! 849: ! 850: (void) uuconf_error_string (puuconf, iret, ab, sizeof ab); ! 851: if ((iret & UUCONF_ERROR_FILENAME) == 0) ! 852: fprintf (stderr, "uuchk: %s\n", ab); ! 853: else ! 854: fprintf (stderr, "uuchk:%s\n", ab); ! 855: exit (EXIT_FAILURE); ! 856: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.