Commit | Line | Data |
---|---|---|
051b1e55 DF |
1 | /* |
2 | * Copyright (c) 1983 Regents of the University of California. | |
3 | * All rights reserved. The Berkeley software License Agreement | |
4 | * specifies the terms and conditions for redistribution. | |
5 | */ | |
6 | ||
05862919 | 7 | #ifndef lint |
f95c3446 | 8 | static char sccsid[] = "@(#)cu.c 5.2 (Berkeley) %G%"; |
051b1e55 | 9 | #endif not lint |
24f09632 SL |
10 | |
11 | #include "tip.h" | |
12 | ||
13 | int cleanup(); | |
14 | int timeout(); | |
15 | ||
16 | /* | |
17 | * Botch the interface to look like cu's | |
18 | */ | |
19 | cumain(argc, argv) | |
20 | char *argv[]; | |
21 | { | |
22 | register int i; | |
c731dacc | 23 | static char sbuf[12]; |
24f09632 | 24 | |
24f09632 | 25 | if (argc < 2) { |
c731dacc | 26 | printf("usage: cu telno [-t] [-s speed] [-a acu] [-l line] [-#]\n"); |
24f09632 SL |
27 | exit(8); |
28 | } | |
c731dacc | 29 | CU = DV = NOSTR; |
24f09632 SL |
30 | for (; argc > 1; argv++, argc--) { |
31 | if (argv[1][0] != '-') | |
32 | PN = argv[1]; | |
3f48242d | 33 | else switch (argv[1][1]) { |
24f09632 SL |
34 | |
35 | case 't': | |
36 | HW = 1, DU = -1; | |
37 | --argc; | |
38 | continue; | |
39 | ||
40 | case 'a': | |
41 | CU = argv[2]; ++argv; --argc; | |
42 | break; | |
43 | ||
44 | case 's': | |
45 | if (speed(atoi(argv[2])) == 0) { | |
c731dacc BS |
46 | fprintf(stderr, "cu: unsupported speed %s\n", |
47 | argv[2]); | |
24f09632 SL |
48 | exit(3); |
49 | } | |
50 | BR = atoi(argv[2]); ++argv; --argc; | |
51 | break; | |
52 | ||
53 | case 'l': | |
54 | DV = argv[2]; ++argv; --argc; | |
55 | break; | |
56 | ||
57 | case '0': case '1': case '2': case '3': case '4': | |
58 | case '5': case '6': case '7': case '8': case '9': | |
c731dacc BS |
59 | if (CU) |
60 | CU[strlen(CU)-1] = argv[1][1]; | |
61 | if (DV) | |
62 | DV[strlen(DV)-1] = argv[1][1]; | |
24f09632 SL |
63 | break; |
64 | ||
65 | default: | |
66 | printf("Bad flag %s", argv[1]); | |
67 | break; | |
68 | } | |
69 | } | |
c731dacc BS |
70 | signal(SIGINT, cleanup); |
71 | signal(SIGQUIT, cleanup); | |
72 | signal(SIGHUP, cleanup); | |
73 | signal(SIGTERM, cleanup); | |
74 | ||
24f09632 SL |
75 | /* |
76 | * The "cu" host name is used to define the | |
77 | * attributes of the generic dialer. | |
78 | */ | |
c731dacc | 79 | if ((i = hunt(sprintf(sbuf, "cu%d", BR))) == 0) { |
24f09632 SL |
80 | printf("all ports busy\n"); |
81 | exit(3); | |
82 | } | |
83 | if (i == -1) { | |
84 | printf("link down\n"); | |
85 | delock(uucplock); | |
86 | exit(3); | |
87 | } | |
c731dacc BS |
88 | setbuf(stdout, NULL); |
89 | loginit(); | |
f95c3446 MK |
90 | gid = getgid(); |
91 | egid = getegid(); | |
92 | uid = getuid(); | |
93 | euid = geteuid(); | |
94 | setregid(egid, gid); | |
95 | setreuid(euid, uid); | |
c731dacc | 96 | vinit(); |
dfec50f2 | 97 | setparity("none"); |
c731dacc | 98 | boolean(value(VERBOSE)) = 0; |
24f09632 SL |
99 | if (HW) |
100 | ttysetup(speed(BR)); | |
101 | if (connect()) { | |
102 | printf("Connect failed\n"); | |
f95c3446 MK |
103 | setreuid(uid, euid); |
104 | setregid(gid, egid); | |
24f09632 SL |
105 | delock(uucplock); |
106 | exit(1); | |
107 | } | |
108 | if (!HW) | |
109 | ttysetup(speed(BR)); | |
110 | } |