10Sstevel@tonic-gate /*
2*2590Ssn199410 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
30Sstevel@tonic-gate * Use is subject to license terms.
40Sstevel@tonic-gate */
5549Smuffin
60Sstevel@tonic-gate /*
70Sstevel@tonic-gate * Copyright (c) 1983 Regents of the University of California.
80Sstevel@tonic-gate * All rights reserved. The Berkeley software License Agreement
90Sstevel@tonic-gate * specifies the terms and conditions for redistribution.
100Sstevel@tonic-gate */
110Sstevel@tonic-gate
12549Smuffin #pragma ident "%Z%%M% %I% %E% SMI"
130Sstevel@tonic-gate
140Sstevel@tonic-gate #include "tip.h"
150Sstevel@tonic-gate
16549Smuffin void cleanup(void);
17549Smuffin void timeout(void);
180Sstevel@tonic-gate
190Sstevel@tonic-gate /*
200Sstevel@tonic-gate * Botch the interface to look like cu's
210Sstevel@tonic-gate */
22549Smuffin void
cumain(int argc,char * argv[])23549Smuffin cumain(int argc, char *argv[])
240Sstevel@tonic-gate {
25549Smuffin int i;
26*2590Ssn199410 static char sbuf[14];
270Sstevel@tonic-gate
280Sstevel@tonic-gate if (argc < 2) {
290Sstevel@tonic-gate usage:
30549Smuffin (void) fprintf(stderr,
31549Smuffin "usage: cu telno [-t] [-s speed] [-a acu] [-l line] [-#]\n");
320Sstevel@tonic-gate exit(8);
330Sstevel@tonic-gate }
340Sstevel@tonic-gate CU = DV = NOSTR;
350Sstevel@tonic-gate for (; argc > 1; argv++, argc--) {
360Sstevel@tonic-gate if (argv[1][0] != '-')
370Sstevel@tonic-gate PN = argv[1];
380Sstevel@tonic-gate else if (argv[1][1] != '\0' && argv[1][2] != '\0') {
39549Smuffin (void) fprintf(stderr,
40549Smuffin "cu: extra characters after flag: %s\n",
41549Smuffin argv[1]);
420Sstevel@tonic-gate goto usage;
430Sstevel@tonic-gate } else switch (argv[1][1]) {
440Sstevel@tonic-gate
450Sstevel@tonic-gate case 't':
460Sstevel@tonic-gate HW = 1, DU = -1;
470Sstevel@tonic-gate --argc;
480Sstevel@tonic-gate continue;
490Sstevel@tonic-gate
500Sstevel@tonic-gate case 'a':
510Sstevel@tonic-gate CU = argv[2]; ++argv; --argc;
520Sstevel@tonic-gate break;
530Sstevel@tonic-gate
540Sstevel@tonic-gate case 's':
550Sstevel@tonic-gate if (argc < 3)
560Sstevel@tonic-gate goto usage;
570Sstevel@tonic-gate if (speed(atoi(argv[2])) == 0) {
58549Smuffin (void) fprintf(stderr,
59549Smuffin "cu: unsupported speed %s\n",
60549Smuffin argv[2]);
610Sstevel@tonic-gate exit(3);
620Sstevel@tonic-gate }
630Sstevel@tonic-gate BR = atoi(argv[2]); ++argv; --argc;
640Sstevel@tonic-gate break;
650Sstevel@tonic-gate
660Sstevel@tonic-gate case 'l':
670Sstevel@tonic-gate DV = argv[2]; ++argv; --argc;
680Sstevel@tonic-gate break;
690Sstevel@tonic-gate
700Sstevel@tonic-gate case '0': case '1': case '2': case '3': case '4':
710Sstevel@tonic-gate case '5': case '6': case '7': case '8': case '9':
720Sstevel@tonic-gate if (CU)
730Sstevel@tonic-gate CU[strlen(CU)-1] = argv[1][1];
740Sstevel@tonic-gate if (DV)
750Sstevel@tonic-gate DV[strlen(DV)-1] = argv[1][1];
760Sstevel@tonic-gate break;
770Sstevel@tonic-gate
780Sstevel@tonic-gate default:
79549Smuffin (void) fprintf(stderr, "cu: bad flag %s\n", argv[1]);
800Sstevel@tonic-gate goto usage;
810Sstevel@tonic-gate }
820Sstevel@tonic-gate }
83549Smuffin (void) signal(SIGINT, (sig_handler_t)cleanup);
84549Smuffin (void) signal(SIGQUIT, (sig_handler_t)cleanup);
85549Smuffin (void) signal(SIGHUP, (sig_handler_t)cleanup);
86549Smuffin (void) signal(SIGTERM, (sig_handler_t)cleanup);
870Sstevel@tonic-gate
880Sstevel@tonic-gate /*
890Sstevel@tonic-gate * The "cu" host name is used to define the
900Sstevel@tonic-gate * attributes of the generic dialer.
910Sstevel@tonic-gate */
92*2590Ssn199410 (void) snprintf(sbuf, sizeof (sbuf), "cu%d", BR);
930Sstevel@tonic-gate if ((i = hunt(sbuf)) == 0) {
94549Smuffin (void) printf("all ports busy\n");
950Sstevel@tonic-gate exit(3);
960Sstevel@tonic-gate }
970Sstevel@tonic-gate if (i == -1) {
98549Smuffin (void) printf("link down\n");
990Sstevel@tonic-gate delock(uucplock);
1000Sstevel@tonic-gate exit(3);
1010Sstevel@tonic-gate }
1020Sstevel@tonic-gate setbuf(stdout, NULL);
1030Sstevel@tonic-gate loginit();
1040Sstevel@tonic-gate gid = getgid();
1050Sstevel@tonic-gate egid = getegid();
1060Sstevel@tonic-gate uid = getuid();
1070Sstevel@tonic-gate euid = geteuid();
1080Sstevel@tonic-gate userperm();
1090Sstevel@tonic-gate vinit();
1100Sstevel@tonic-gate setparity("none");
1110Sstevel@tonic-gate boolean(value(VERBOSE)) = 0;
1120Sstevel@tonic-gate if (HW)
1130Sstevel@tonic-gate ttysetup(speed(BR));
1140Sstevel@tonic-gate if (connect()) {
115549Smuffin (void) printf("Connect failed\n");
1160Sstevel@tonic-gate myperm();
1170Sstevel@tonic-gate delock(uucplock);
1180Sstevel@tonic-gate exit(1);
1190Sstevel@tonic-gate }
1200Sstevel@tonic-gate if (!HW)
1210Sstevel@tonic-gate ttysetup(speed(BR));
1220Sstevel@tonic-gate }
123