xref: /illumos-gate/usr/src/cmd/tip/cu.c (revision b70bf3ee79d81df3ccc36e553e0ff11049a2b51a)
1 /*
2  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
3  * Use is subject to license terms.
4  */
5 
6 /*
7  * Copyright (c) 1983 Regents of the University of California.
8  * All rights reserved.  The Berkeley software License Agreement
9  * specifies the terms and conditions for redistribution.
10  */
11 
12 #include "tip.h"
13 
14 int	gid, egid;
15 int	uid, euid;
16 void	cleanup(void);
17 void	timeout(void);
18 
19 /*
20  * Botch the interface to look like cu's
21  */
22 void
23 cumain(int argc, char *argv[])
24 {
25 	int i;
26 	static char sbuf[14];
27 
28 	if (argc < 2) {
29 usage:
30 		(void) fprintf(stderr,
31 	"usage: cu telno [-t] [-s speed] [-a acu] [-l line] [-#]\n");
32 		exit(8);
33 	}
34 	CU = DV = NOSTR;
35 	for (; argc > 1; argv++, argc--) {
36 		if (argv[1][0] != '-')
37 			PN = argv[1];
38 		else if (argv[1][1] != '\0' && argv[1][2] != '\0') {
39 			(void) fprintf(stderr,
40 			    "cu: extra characters after flag: %s\n",
41 			    argv[1]);
42 			goto usage;
43 		} else switch (argv[1][1]) {
44 
45 		case 't':
46 			HW = 1, DU = -1;
47 			--argc;
48 			continue;
49 
50 		case 'a':
51 			CU = argv[2]; ++argv; --argc;
52 			break;
53 
54 		case 's':
55 			if (argc < 3)
56 				goto usage;
57 			if (speed(atoi(argv[2])) == 0) {
58 				(void) fprintf(stderr,
59 				    "cu: unsupported speed %s\n",
60 				    argv[2]);
61 				exit(3);
62 			}
63 			BR = atoi(argv[2]); ++argv; --argc;
64 			break;
65 
66 		case 'l':
67 			DV = argv[2]; ++argv; --argc;
68 			break;
69 
70 		case '0': case '1': case '2': case '3': case '4':
71 		case '5': case '6': case '7': case '8': case '9':
72 			if (CU)
73 				CU[strlen(CU)-1] = argv[1][1];
74 			if (DV)
75 				DV[strlen(DV)-1] = argv[1][1];
76 			break;
77 
78 		default:
79 			(void) fprintf(stderr, "cu: bad flag %s\n", argv[1]);
80 			goto usage;
81 		}
82 	}
83 	(void) signal(SIGINT, (sig_handler_t)cleanup);
84 	(void) signal(SIGQUIT, (sig_handler_t)cleanup);
85 	(void) signal(SIGHUP, (sig_handler_t)cleanup);
86 	(void) signal(SIGTERM, (sig_handler_t)cleanup);
87 
88 	/*
89 	 * The "cu" host name is used to define the
90 	 * attributes of the generic dialer.
91 	 */
92 	(void) snprintf(sbuf, sizeof (sbuf), "cu%d", BR);
93 	if ((i = hunt(sbuf)) == 0) {
94 		(void) printf("all ports busy\n");
95 		exit(3);
96 	}
97 	if (i == -1) {
98 		(void) printf("link down\n");
99 		delock(uucplock);
100 		exit(3);
101 	}
102 	setbuf(stdout, NULL);
103 	loginit();
104 	gid = getgid();
105 	egid = getegid();
106 	uid = getuid();
107 	euid = geteuid();
108 	userperm();
109 	vinit();
110 	setparity("none");
111 	boolean(value(VERBOSE)) = 0;
112 	if (HW)
113 		ttysetup(speed(BR));
114 	if (connect()) {
115 		(void) printf("Connect failed\n");
116 		myperm();
117 		delock(uucplock);
118 		exit(1);
119 	}
120 	if (!HW)
121 		ttysetup(speed(BR));
122 }
123