2 C-Kermit 8.0 Unix Installation Instructions
4 [ [1]Contents ] [ [2]C-Kermit ] [ [3]Kermit Home ]
10 As of C-Kermit version: 8.0.211, 10 April 2004
11 This file last updated: Tue Apr 13 10:14:33 2004 (New York City
14 IF YOU ARE READING A PLAIN-TEXT version of this document, note that
15 this file is a plain-text dump of a Web page. You can visit the
16 original (and possibly more up-to-date) Web page here:
18 [4]http://www.columbia.edu/kermit/ckuins.html
19 __________________________________________________________________________
25 1. [6]INTERNET QUICK START
26 2. [7]INSTALLING FROM PACKAGES
27 3. [8]INSTALLING PREBUILT BINARIES
28 4. [9]BUILDING FROM SOURCE CODE
29 5. [10]INSTALLING THE KERMIT FILES
30 6. [11]INSTALLING UNIX C-KERMIT FROM DOS-FORMAT DISKETTES
31 7. [12]CHECKING THE RESULTS
32 8. [13]REDUCING THE SIZE OF THE EXECUTABLE PROGRAM IMAGE
34 10. [15]DIALING OUT AND COORDINATING WITH UUCP
35 11. [16]RUNNING UNIX C-KERMIT SETUID OR SETGID
36 12. [17]CONFIGURING UNIX WORKSTATIONS
37 13. [18]BIZARRE BEHAVIOR AT RUNTIME
38 14. [19]CRASHES AND CORE DUMPS
40 16. [21]BUILDING SECURE VERSIONS OF C-KERMIT 8.0
41 17. [22]INSTALLING C-KERMIT AS AN SSH SERVER SUBSYSTEM
42 __________________________________________________________________________
46 [ [23]Top ] [ [24]Contents ] [ [25]Next ]
48 WARNING: This document contains notes that have been accumulating
49 since the early 1980s. Many of the products and Unix versions
50 mentioned here have not been heard of in a long while, but that
51 does not necessarily mean they are not still running in some
54 This file contains Unix-specific information. A lot of it. Unlike most
55 other packages, C-Kermit tries very hard to be portable to every Unix
56 variety (and every release of each one) known to exist, including many
57 that are quite old, as well as to other platforms like VMS, AOS/VS,
58 VOS, OS-9, the BeBox, the Amiga, etc.
60 Since C-Kermit gets so deeply into the file system, i/o system, and
61 other areas that differ radically from one Unix platform to the next,
62 this means that a lot can go wrong when you try to install C-Kermit on
63 (for example) a new release of a particular variety of Unix, in which
64 certain things might have changed that C-Kermit depended upon.
66 This file concentrates on installation. For a description of general
67 configuration options for C-Kermit, please read the [26]Configurations
68 Options document. For troubleshooting after installation, see the
69 [27]General Hints and Tips and [28]Unix-Specific Hints and Tips
70 documents. The latter, in particular, contains lots of information on
71 lots of specific Unix platforms. If you want to work on the source
72 code, see the [29]C-Kermit Program Logic Manual
74 You may install C-Kermit:
76 * From an "[30]install package", if one is available.
77 * As a [31]prebuilt binary, if available, plus accompanying text
79 * By building from [32]source code.
80 __________________________________________________________________________
82 1. INTERNET QUICK START
84 [ [33]Top ] [ [34]Contents ] [ [35]Next ] [ [36]Previous ]
86 If your Unix computer is on the Internet and it has a C compiler,
87 here's how to download, build, and install C-Kermit directly from the
88 "tarballs" or Zip archives:
90 1. Make a fresh directory and cd to it.
91 2. Download the C-Kermit source code:
92 [37]ftp://kermit.columbia.edu/kermit/archives/cku211.tar.Z
94 [38]ftp://kermit.columbia.edu/kermit/archives/cku211.tar.gz
96 3. Uncompress the compressed tar file with "uncompress" or "gunzip",
97 according to which type of compressed file you downloaded. (If you
98 don't understand this, you could download a (much larger)
99 uncompressed tar archive directly:
100 [39]ftp://kermit.columbia.edu/kermit/archives/cku211.tar
101 4. Now type "tar xvf cku211.tar" to unpack the individual files from
103 5. Type "rm cku211.tar" to get rid of the tar archive, which is no
105 6. Read the comments at the top of the makefile to find out which
106 target to use and then type the appropriate "make" command, such
107 as "make linux", "make solaris8", etc.
108 7. This produces a binary in your current directory called "wermit".
109 Start it by typing "./wermit" and [40]try it out to make sure it
110 works. Then read [41]Section 5 for how to install it, or simply
111 copy the wermit binary to the desired public directory, rename it
112 to kermit, and give it the needed permissions (and, if it is going
113 to be used to dial out, give it the same group and owner and
114 permissions as the cu, tip, or minicom program).
116 For secure installations, see [42]Sections 5 and [43]16.
117 __________________________________________________________________________
119 2. INSTALLING FROM PACKAGES
121 [ [44]Top ] [ [45]Contents ] [ [46]Next ] [ [47]Previous ]
123 Various Unix varieties -- Linux, Solaris, AIX, etc -- now incorporate
124 the idea of "install packages", and many users expect to find all new
125 applications in this format. A selection of install packages might be
126 available for any given release of C-Kermit, but there is a tradeoff
127 between convenience and safety. Unix presents several notable problems
128 to the builder of install packages:
130 a. Since C-Kermit is portable to many non-Unix platforms (VMS, VOS,
131 AOS/VS, etc), some of the files in the C-Kermit distribution do
132 not fit into the Unix application model. In particular, C-Kermit
133 includes some plain text files (described in [48]Section 5) and
134 Unix has no standard place to put such files. Typical Unix package
135 managers do not allow for them. Where should they go, and how will
136 the user know where to find them?
137 b. Installation of any program that will be used to make modem calls
138 requires some important decisions from the installer regarding
139 security and privilege.
141 Item (b) is discussed at length in [49]Sections 10 and [50]11 of this
142 document, but the package-related aspects are also given here. The
143 basic problem is that Unix dialout devices and the UUCP "lock files"
144 that regulate contention for them (described in [51]Section 10) are
145 usually protected against "world". Therefore, the install procedure
146 must either run as root in order to give the Kermit binary the
147 required permissions, group, and/or owner, or else the dialout devices
148 and associated directories must be open for group or world reading and
149 writing. Otherwise, the Kermit program just installed WILL NOT WORK
152 Thus, a well-crafted installation procedure should present the options
153 and allow the installer to choose the method, if any, for regulating
154 access to the dialout devices:
156 a. Check the permissions of the lockfile directory and the dialout
157 devices. If they do not allow group or world R/W access, then:
158 b. "Your UUCP lockfile directory and/or dialout devices require
159 privilege to access. You must either change their permissions or
160 install Kermit with privileges."
161 c. "If you wish to install Kermit with privileges, it will be given
162 the same owner, group, and permissions as the cu program so it can
163 use the dialout devices."
164 d. If they choose (c) but the user is not root, give a message that
165 the install procedure can be run only by root and then quit.
167 It should go without saying, of course, that any binaries that are to
168 be included in an install package should be built fresh on the exact
169 platform (e.g. Red Hat 8.0 on Intel) for which the package is
170 targeted; prebuilt binaries ([52]next section) from other sites are
171 likely to have library mismatches. [53]CLICK HERE for more about
172 building C-Kermit install packages.
174 The Kermit Project does not have the resources or the expertise to
175 make install packages for every platform. Most install packages,
176 therefore, are contributed by others, and they do not necessarily
177 follow the guidelines given above. Pay attention to what they do.
179 If you are an end user who has obtained a C-Kermit install package for
180 a particular platform, you should be aware that some additional steps
181 might needed if you want to use Kermit to dial out. Read [54]Section
183 __________________________________________________________________________
185 3. INSTALLING PREBUILT BINARIES
187 [ [55]Top ] [ [56]Contents ] [ [57]Next ] [ [58]Previous ]
189 Hundreds of prebuilt C-Kermit binaries are available on the CDROM in
190 the BINARY tree [NOTE: The C-Kermit CDROM is still for version 7.0],
191 and at our ftp site in the [59]kermit/bin area (with names starting
192 with "ck"), also accessible on the [60]C-Kermit website. To install a
195 a. Rename the binary to "wermit".
196 b. Make sure it works; some tests are suggested in [61]Section 7.
197 c. Follow steps (b) through (e) in [62]Section 4.
198 d. Install related files as described in [63]Section 5.
200 But first... Please heed the following cautions:
202 a. If you pick the wrong binary, it won't work (or worse).
203 b. Even when you pick the appropriate binary, it still might not work
204 due to shared-library mismatches, etc. (see [64]Section 4.0).
205 c. Don't expect a binary built on or for version n of your OS to work
206 on version n - x (where x > 0). However, it is usually safe to run
207 a binary built on (or for) an older OS release on a newer one.
209 Therefore, it is better to build your own binary from source code
210 ([65]next section) if you can. But since it is increasingly for Unix
211 systems (not to mention VMS and other OS's) to be delivered without C
212 compilers, it is often impractical. In such cases, try the most
213 appropriate prebuilt binary or binaries, and if none of them work,
214 [66]contact us and we'll see what we can do to help.
215 __________________________________________________________________________
217 4. BUILDING FROM SOURCE CODE
219 [ [67]Top ] [ [68]Contents ] [ [69]Next ] [ [70]Previous ]
221 Also see: [71]Section 8 and [72]Section 9.
223 C-Kermit is designed to be built and used on as many platforms as
224 possible: Unix and non-Unix, old and new (and ancient), ANSI C and
225 K&R. The Unix version does not use or depend on any external tools for
226 building except the "make" utility, the C compiler, and the linker. It
227 does not use any automated configuration tools such as configure,
228 autoconf, automake, libtool, etc. Everything in C-Kermit has been
229 built by hand based on direct experience or reports or contributions
230 from users of each platform.
232 The [73]C-Kermit makefile contains the rules for building the program
233 for each of the hundreds of different kinds of Unix systems that
234 C-Kermit attempts to support. It covers all Unix variations since
235 about 1980 -- pretty much everything after Unix V6. Separate makefiles
236 are used for [74]Plan 9 and [75]2.x BSD.
240 * The C compiler, linker, and make program must be installed.
241 * The C libraries and header files must be installed (*).
242 * The C-Kermit source code and makefile in your current directory.
243 * The C-Kermit text files ([76]Section 5) in your current directory.
245 * This is becoming problematic in this new age of "selective
246 installs" e.g. of Linux packages. C-Kermit builds will often fail
247 because replying "no" to some obscure Linux installation option
248 will result in missing libraries or header files. Ditto on
249 platforms like AIX and Solaris that don't come with C compilers,
250 and then later have gcc installed, but are still missing crucial
251 libraries, like libm (math).
255 * For TCP/IP networking support, the sockets library and related
256 header files must be installed.
257 * The math library for floating-point arithmetic support (can be
258 deselected by adding -DNOFLOAT to CFLAGS and removing -lm from
260 * Many and varied security libraries for building a secure version
261 (Kerberos, SSL/TLS, SRP, Zlib,...) These are required only if you
262 select a secure target.
263 * For the curses-based fullscreen file-ransfer display, the curses
264 or ncurses header file(s) and library, and probably also the
265 termcap and/or termlib library. Note that the names and locations
266 of these files and libraries are likely to change capriciously
267 with every new release of your Unix product. If you discover that
268 the C-Kermit build procedure fails because your curses and/or
269 termxxx headers or libraries are not named or located as expected,
270 please [77]let us know. In the meantime, work around by installing
272 * IMPORTANT: Modern Linux distributions might give you the choice
273 during installation of whether to install the "ncurses development
274 package" (perhaps called "ncurses-devel"). If you did not install
275 it, you won't be able to build C-Kermit with curses support
276 included. In this case, either go back and install ncurses, or
277 else choose (or create) a non-curses makefile target for your
278 platform. To install the ncurses developers tools in Red Hat
283 rpm -ivh ncurses-devel*.rpm
284 or to have the exact name ls ncurse* and load as
286 then leave the cdrom and unmount it.
288 * In AIX you might have to go back and install any or all of:
296 from the first installation CD.
298 The makefile might need to be renamed from ckuker.mak to makefile.
301 a. Type "make xxx" where xxx is the name of the makefile target most
302 appropriate to your platform, e.g. "make linux", "make aix43",
303 etc. Read the [78]comments at the top of the makefile for a
304 complete list of available targets (it's a long list).
305 b. Test the resulting 'wermit' file (see [79]Section 7 for
306 suggestions). If it's OK, proceed; otherwise [80]notify us.
308 NOTE: steps (c) through (e) can be accomplished using the
309 [81]makefile 'install' target as described in [82]Section 5.4.
310 c. Rename the 'wermit' file to 'kermit', copy it to the desired
311 binary directory (such as /usr/local/bin or /opt/something), and
312 if it is to be used for dialing out, give it the same owner,
313 group, and permissions as the 'cu' program (IMPORTANT: read
314 [83]Sections 10 and [84]11 for details).
315 d. Install the man page, ckuker.nr, with your other man pages.
316 e. Install the accompanying text files (see [85]Section 5).
317 f. If you want C-Kermit to also offer a Telnet command-line
318 personality, make a symbolic link as follows:
320 cd directory-where-kermit-binary-is
323 If you want C-Kermit to be the default Telnet client, make sure
324 the directory in which you created the symlink is in the PATH
325 ahead of the where the regular Telnet client is.
326 g. If you want C-Kermit to also offer an FTP command-line
327 personality, make a symlink called "ftp" as in (f).
328 h. If you want C-Kermit to also offer an FTTP command-line
329 personality, make a symlink called "http" as in (f).
330 i. If you want to offer an Internet Kermit Service, follow the
331 directions in the [86]IKSD Administrator's Guide.
332 ________________________________________________________________________
334 4.0. Special Considerations for C-Kermit 8.0
336 [ [87]Top ] [ [88]Contents ] [ [89]Next ]
338 Also see: [90]C-Kermit Configuration Options
342 4.1. [91]The Unix Makefile
343 4.2. [92]The C-Kermit Initialization File
344 4.3. [93]The 2.x BSD Makefile
345 4.4. [94]The Plan 9 Makefile
346 4.5. [95]Makefile Failures
348 (Also see the [96]Configurations Options document, [97]Section 8).
350 Lots of new features have been added in versions 7.0 and 8.0 that
351 require access to new symbols, APIs, libraries, etc, and this will no
352 doubt cause problems in compiling, linking, or execution on platforms
353 where 6.0 and earlier built without incident. This section contains
354 what we know as of the date of this file.
356 The first category concerns the new Kermit Service Daemon (IKSD; see
357 the [98]IKSD Administrator's Guide for details):
360 When C-Kermit is started as an IKSD (under inetd), it makes
361 syslog and wtmp entries, and also keeps its own ftpd-like log.
362 The code assumes the wtmp log is /var/log/wtmp on Linux and
363 /usr/adm/wtmp elsewhere. No doubt this assumption will need
364 adjustment. Use -DWTMPFILE=path to override at compile time
365 (there is also a runtime override). See [99]iksd.html for
369 C-Kermit 7.0 gets as much info as it can about its job --
370 mainly for IKSD logging -- from utmp. But of course utmp
371 formats and fields differ, and for that matter, there can be
372 two different header files, <utmp.h> and <utmpx.h>. Look for
373 HAVEUTMPX and HAVEUTHOST in [100]ckufio.c and let me know of
374 any needed adjustments.
377 IKSD needs to authenticate incoming users against the password
378 list. In some cases, this requires the addition of -lcrypt
379 (e.g. in Unixware 2.x). In most others, the crypt functions are
380 in the regular C library. If you get "crypt" as an unresolved
381 symbol at link time, add -lcrypt to LIBS. If your site has
382 local replacement libraries for authentication, you might need
383 a special LIBS clause such as "LIBS=-L/usr/local/lib -lpwent".
385 These days most Unix systems take advantage of shadow password
386 files or Plugable Authentication Modules (PAM). If your system
387 uses shadow passwords you must add -DCK_SHADOW to the CFLAGS
388 list. If your system requires PAM you must add -DCK_PAM to the
389 CFLAGS and -lpam -ldl to LIBS.
392 This is called by the IKSD at login time to see if a user has
393 been "turned off". But many Unix platforms lack this function.
394 In that case, you will get unresolved symbol reports at link
395 time for _getusershell, _endusershell; to work around, add
399 This is called by IKSD after successful authentication. But
400 some platforms do not have this function, so obviously it can't
401 be called there, in which case add -DNOINITGROUPS.
403 setreuid(), setreuid(), setregid() not found or "deprecated"
404 Find out what your Unix variety wants you to use instead, and
405 make appropriate substitutions in routine zvpass(), module
406 [101]ckufio.c, and [102]let us know.
409 IKSD installs a printf() substitute to allow redirection of
410 printf-like output to the connection. However, this can
411 conflict with some curses libraries. In this case, separate
412 binaries must be built for IKSD and non-IKSD use.
414 If you encounter difficulties with any of the above, and you are not
415 interested in running C-Kermit as an IKSD, then simply add NOIKSD to
416 CFLAGS and rebuild. Example:
421 make sco286 "KFLAGS=-DNOIKSD"
423 Some non-IKSD things to watch out for:
425 Return type of main()
426 The main() routine is in [103]ckcmai.c. If you get complaints
427 about "main: return type is not blah", define MAINTYPE on the
428 CC command line, e.g.:
430 make xxx "KFLAGS=-DMAINTYPE=blah
432 (where blah is int, long, or whatever). If the complaint is
433 "Attempt to return a value from a function of type void" then
436 make xxx "KFLAGS=-DMAINISVOID=blah
439 This feature allows a remote host to redirect C-Kermit to the
440 appropriate socket for the requested service; e.g. if C-Kermit
441 requests service "telnet" and the host offers Telnet service on
442 port 999 rather than the customary port 23. If you get
443 compile-time complaints about not being able to find
444 <resolv.h>, <netdb.h>, or <arpa/nameser.h>, add -DNO_DNS_SRV to
445 CFLAGS. If you get link-time complaints about unresolved
446 symbols res_search or dn_expand, try adding -lresolve to LIBS.
449 If "echo \v(ipaddress)" shows an empty string rather than your
450 local IP address, add -DCKGHNLHOST to CFLAGS and rebuild.
453 If this file can't be found at compile time, add -DNOREDIRECT
454 to CFLAGS. This disables the REDIRECT and PIPE commands and
455 anything else that needs the wait() system service.
458 C-Kermit can now write syslog records. Some older platforms
459 might not have the syslog facility. In that case, add
460 -DNOSYSLOG. Others might have it, but require addition of
461 -lsocket to LIBS (SCO OSR5 is an example). See [104]Section 15.
464 If "_putenv" comes up as an undefined symbol, add -DNOPUTENV to
467 "Passing arg1 of 'time' from incompatible pointer"
468 This is a mess. See the mass of #ifdefs in the appropriate
469 module, [105]ckutio.c or [106]ckufio.c.
472 Wrong number of arguments. On most platforms, gettimeofday()
473 takes two arguments, but on a handful of others (e.g. Motorola
474 System V/88 V4, SNI Reliant UNIX 5.43, etc) it takes one. If
475 your version of gettimeofday() is being called with two args
476 but wants one, add -DGTODONEARG.
478 "Assignment makes pointer from integer without a cast"
479 This warning might appear in [107]ckutio.c or [108]ckufio.c.
480 (or elsewhere), and usually can be traced to the use of a
481 system or library function that returns a pointer but that is
482 not declared in the system header files even though it should
483 be. Several functions are commonly associated with this error:
485 + getcwd(): Add -DDCLGETCWD to CFLAGS and rebuild.
486 + popen() : Add -DDCLPOPEN to CFLAGS and rebuild.
487 + fdopen(): Add -DDCLFDOPEN to CFLAGS and rebuild.
489 "Operands of = have incompatible types"
490 "Incompatible types in assignment"
491 If this comes from [109]ckcnet.c and comes from a statement
492 involving inet_addr(), try adding -DINADDRX to CFLAGS. If that
493 doesn't help, then try adding -DNOMHHOST.
495 Complaints about args to get/setsockopt(), getpeername(),
497 These are all in [110]ckcnet.c. Different platforms and OS's
498 and versions of the same OS change this all the time: int,
499 size_t, unsigned long, etc. All the affected variables are
500 declared according to #ifdefs within ckcnet.c, so find the
501 declarations and adjust the #ifdefs accordingly.
504 In case of complaints about "unknown type size_t", add
505 -DSIZE_T=int (or other appropriate type) to CFLAGS.
508 Use of undefined enum/struct/union 'timezone'
509 Left of 'tv_sec' specifies undefined struct/union 'timeval' And
510 similar complaints in [111]ckutio.c: Add -DNOGFTIMER and/or
514 The new built-in DIRECTORY command should show symlinks like
515 "ls -l" does. If it does not, check to see if your platform has
516 the lstat() and readlink() functions. If so, add -DUSE_LSTAT
517 and -DCKSYMLINK to CFLAGS and rebuild. On the other hand, if
518 lstat() is unresolved at link time, add -DNOLSTAT to CFLAGS. If
519 readlink() is also unresolved, add -DNOSYMLINK.
522 Link-time complains about realpath() -- find the library in
523 which it resides and add it to LIBS (example for Unixware 7.1:
524 "-lcudk70") or add -DNOREALPATH to CFLAGS and rebuild. If built
525 with realpath() but debug log file is truncated or mangled,
526 ditto (some realpath() implementations behave differently from
527 others). If built with realpath() and seemingly random core
528 dumps occur during file path resolution, ditto.
530 Failure to locate header file <term.h>
531 Usually happens on Linux systems that have the C compiler
532 installed, but not the ncurses package (see comments about
533 selective installs above). Go back and install ncurses, or use
534 "make linuxnc" (Linux No Curses).
536 "Can't find shared library libc.so.2.1"
537 "Can't find shared library libncurses.so.3.0", etc...
538 You are trying to run a binary that was built on a computer
539 that has different library versions than your computer, and
540 your computer's loader is picky about library version numbers.
541 Rebuild from source on your computer.
543 Time (struct tm) related difficulties:
544 Errors like the following:
546 "ckutio.c", line 11994: incomplete struct/union/enum tm: _tm
547 "ckutio.c", line 11995: error: cannot dereference non-pointer type
548 "ckutio.c", line 11995: error: assignment type mismatch
549 "ckutio.c", line 11997: warning: using out of scope declaration: localtime
550 "ckutio.c", line 11997: error: unknown operand size: op "="
551 "ckutio.c", line 11997: error: assignment type mismatch
552 "ckutio.c", line 11998: error: undefined struct/union member: tm_year
553 "ckutio.c", line 12000: error: undefined struct/union member: tm_mon
554 "ckutio.c", line 12001: error: undefined struct/union member: tm_mday
555 "ckutio.c", line 12002: error: undefined struct/union member: tm_hour
556 "ckutio.c", line 12003: error: undefined struct/union member: tm_min
557 "ckutio.c", line 12004: error: undefined struct/union member: tm_sec
559 are due to failure to include the appropriate time.h header
560 files. Unix platforms generally have one or more of the
561 following: <time.h>, <sys/time.h>, and <sys/timeb.h>. Any
562 combination of these might be required. Defaults are set up for
563 each makefile target. The defaults can be corrected on the CC
564 command line by adding the appropriate definition from the
565 following list to CFLAGS:
567 -DTIMEH Include <time.h>
568 -DNOTIMEH Don't include <time.h>
569 -DSYSTIMEH Include <sys/time.h>
570 -DNOSYSTIMEH Don't include <sys/time.h>
571 -DSYSTIMEBH Include <sys/timeb.h>
572 -DNOSYSTIMEBH Don't include <sys/timeb.h>
574 Note that <sys/timeb.h> is relatively scarce in the System V
575 and POSIX environments; the only platform of recent vintage
576 where it was/is used is OSF/1 and its derivatives (Digital Unix
579 Struct timeval and/or timezone not declared:
580 In some cases, merely including the appropriate time.h header
581 files is still not enough. POSIX.1 does not define the timeval
582 struct, and so the items we need from the header are protected
583 against us by #ifndef _POSIX_SOURCE or somesuch. In this case,
584 we have to declare the timeval (and timezone) structs
585 ourselves. To force this, include -DDCLTIMEVAL in CFLAGS.
587 Warnings about dn_expand() Argument #4
588 WARNING: argument is incompatible with prototyp. It's the old
589 char versus unsigned char stupidity again. Try to find a
590 compiler switch like GCC's "-funsigned-char". Failing that, add
591 -DCKQUERYTYPE=xxx to CFLAGS, where xxx is whatever 'man
592 dn_expand' tells you the type of the 4th argument should be
593 (presumably either char or unsigned char; in the latter case
594 use CHAR to avoid confusion caused by multiple words.
596 Switch Table Overflow (in [112]ckcuni.c)
597 Add -DNOUNICODE to CFLAGS.
599 Compile-time warnings about ck_out() or tgetstr() or tputs():
600 Easy solution: Add -DNOTERMCAP to CFLAGS. But then you lose the
601 SCREEN function. Real solution: Try all different combinations
602 of the following CFLAGS:
604 -DTPUTSARGTYPE=char -DTPUTSFNTYPE=int
605 -DTPUTSARGTYPE=int -DTPUTSFNTYPE=void
607 Until the warnings go away, except maybe "ck_outc: return with
608 a value in a function returning void", and in that case also
611 "Passing arg 1 of to tputs() makes pointer from integer without a
613 Add -DTPUTSARG1CONST to CFLAGS.
615 "Undefined symbol: dup2"
616 Add -DNOZEXEC to CFLAGS.
618 "header file 'termcap.h' not found"
619 Add -DNOHTERMCAP to CFLAGS.
621 Other difficulties are generally of the "where is curses.h and what is
622 it called this week?" variety (most easily solved by making symlinks
623 in the include and lib directories), or overzealous complaints
624 regarding type mismatches in function calls because of the totally
625 needless and silly signed versus unsigned char conflict (*), etc. In
626 any case, please send any compilation or linking warnings or errors to
627 the author, preferably along with fixes.
629 * C-Kermit does not use the signed property of chars at all
630 anywhere, ever. So if all chars and char *'s can be made unsigned
631 at compile time, as they can in gcc with "-funsigned-char", they
634 IMPORTANT: If you find any of these hints necessary for a particular
635 make target (or you hit upon others not listed here), PLEASE SEND A
638 [113]kermit-support@columbia.edu
639 ________________________________________________________________________
641 4.1. The Unix Makefile
643 [ [114]Top ] [ [115]Contents ] [ [116]Section Contents ] [ [117]Next ]
646 If your distribution does not contain a file with the name "makefile"
647 or "Makefile", then rename the file called ckuker.mak to makefile:
649 mv ckuker.mak makefile
651 Then type "make xxx", where xxx is the platform you want to build
652 C-Kermit for. These are listed in the [119]comments at the top of the
653 makefile. For example, to build C-Kermit for Linux, type:
657 Here are some typical examples:
660 linux Linux, any version on any hardware platform
661 openbsd OpenBSD, any version on any hardware platform
663 aix43g AIX 4.3, built with gcc
665 solaris9g Solaris 9 built with gcc
666 hpux1100 HP-UX 11-point-anything
668 The makefile is quite long, and at least two versions of Unix, SCO
669 Xenix/286 and 2.x BSD, cannot cope with its length. An attempt to
670 "make sco286" gives the message "Make: Cannot alloc mem for env..
671 Stop". Solution: edit away some or all of the nonrelevant material
672 from the makefile. (A separate version of the makefile is provided for
673 BSD 2.x: ckubs2.mak but C-Kermit 8.0 can't be built for BSD 2.x -- it
674 has simply grown too large.)
676 Some make programs reportedly cannot handle continued lines (lines
677 ending in backslash (\)). If you have a problem with the makefile, try
678 editing the makefile to join the continued lines (remove the
679 backslashes and the following linefeed).
681 Other makefile troubles may occur because tabs in the makefile have
682 somehow been converted to spaces. Spaces and tabs are distinct in Unix
685 Similarly, carriage returns might have been added to the end of each
686 line, which also proves confusing to most Unix versions of make.
688 Check to see if there are comments about your particular version in
689 its makefile target itself. In a text editor such as EMACS or VI,
690 search for the make entry name followed by a colon, e.g. "linux:" (if
691 you really are building C-Kermit for Linux, do this now).
693 Check to see if there are comments about your particular version in
694 the [120]ckubwr.txt file ([121]CLICK HERE for the Web version).
696 If you have trouble with building [122]ckwart.c, or running the
697 resulting wart preprocessor program on [123]ckcpro.w:
699 1. Just "touch" the [124]ckcpro.c file that comes in the distribution
700 and then give the "make" command again, or:
701 2. Compile ckwart.c "by hand": cc -o wart ckwart.c, or:
702 3. Try various other tricks. E.g. one Linux user reported that that
703 adding the "static" switch to the rule for building wart fixed
707 $(CC) -static -o wart ckwart.$(EXT) $(LIBS)
709 If your compiler supports a compile-time option to treat ALL chars
710 (and char *'s, etc) as unsigned, by all means use it -- and send me
711 email to let me know what it is (I already know about gcc
714 To add compilation options (which are explained later in this
715 document) to your makefile target without editing the makefile,
716 include "KFLAGS=..." on the make command line, for example:
718 make linux KFLAGS=-DNODEBUG
719 make bsd "KFLAGS=-DKANJI -DNODEBUG -DNOTLOG -DDYNAMIC -UTCPSOCKET"
721 Multiple options must be separated by spaces. Quotes are necessary if
722 the KFLAGS= clause includes spaces. The KFLAGS are added to the end of
723 the CFLAGS that are defined in the selected makefile target. For
724 example, the "bsd" entry includes -DBSD4 -DTCPSOCKET, so the second
725 example above compiles Kermit with the following options:
727 -DBSD4 -DTCPSOCKET -DKANJI -DNODEBUG -DNOTLOG -DDYNAMIC -UTCPSOCKET
729 (Notice how "-UTCPSOCKET" is used to negate the effect of the
730 "-DTCPSOCKET" option that is included in the makefile target.)
732 WARNING: Be careful with KFLAGS. If you build C-Kermit, change some
733 files, and then run make again using the same make entry but
734 specifying different KFLAGS than last time, make won't detect it and
735 you could easily wind up with inconsistent object modules, e.g. some
736 of them built with a certain option, others not. When in doubt, "make
737 clean" first to make sure all your object files are consistent.
738 Similarly, if you change CFLAGS, LIBS, or any other items in the
739 makefile, or you rebuild using a different makefile target, "make
742 If you create a new makefile target, use static linking if possible.
743 Even though this makes your C-Kermit binary bigger, the resulting
744 binary will be more portable. Dynamically linked binaries tend to run
745 only on the exact configuration and version where they were built; on
746 others, invocation tends to fail with a message like:
748 Can't find shared library "libc.so.2.1"
749 ________________________________________________________________________
751 4.2. The C-Kermit Initialization File
753 [ [125]Top ] [ [126]Contents ] [ [127]Section Contents ] [ [128]Next ]
756 (This section is obsolete.) Read [130]Section 5 about the
758 ________________________________________________________________________
760 4.3. The 2.x BSD Makefile
762 [ [131]Top ] [ [132]Contents ] [ [133]Section Contents ] [ [134]Next ]
765 This section is obsolete. C-Kermit 6.0 was the last release that
766 could be built on PDP-11 based BSD versions.
767 ________________________________________________________________________
769 4.4. The Plan 9 Makefile
771 [ [136]Top ] [ [137]Contents ] [ [138]Section Contents ] [ [139]Next ]
774 Use the separate makefile [141]ckpker.mk. NOTE: The Plan 9 version of
775 C-Kermit 8.0 has not yet been built. There should be no impediment to
776 building it. However, even when built successfully, certain key
777 features are missing, notably TCP/IP networking.
778 ________________________________________________________________________
780 4.5. Makefile Failures
782 [ [142]Top ] [ [143]Contents ] [ [144]Section Contents ] [
785 First, be sure the source files are stored on your current disk and
786 directory with the right names (in lowercase). Second, make sure that
787 the makefile itself does not contain any lines with leading spaces:
788 indented lines must all start with horizontal TAB, and no spaces.
790 Then make sure that your Unix PATH is defined to find the appropriate
791 compiler for your makefile target. For example, on SunOS systems,
792 "make sunos41" builds C-Kermit for the BSD environment, and assumes
793 that /usr/ucb/cc will be used for compilation and linking. If your
794 PATH has /usr/5bin ahead of /usr/ucb, you can have problems at compile
795 or link time (a commonly reported symptom is the inability to find
796 "ftime" during linking). Fix such problems by redefining your Unix
797 PATH, or by specifying the appropriate "cc" in CC= and CC2= statements
798 in your makefile target.
800 During edits 166-167, considerable effort went into making C-Kermit
801 compilable by ANSI C compilers. This includes prototyping all of
802 C-Kermit's functions, and including the ANSI-defined system header
803 files for system and library functions, as defined in K&R, second
804 edition: <string.h>, <stdlib.h>, <unistd.h> (except in NeXTSTEP this
805 is <libc.h>), and <sys/stdtypes.h>. If you get warnings about any of
806 these header files not being found, or about argument mismatches
807 involving pid_t, uid_t, or gid_t, look in ckcdeb.h and make
808 amendments. C-Kermit assumes it is being compiled by an ANSI-compliant
809 C compiler if __STDC__ is defined, normally defined by the compiler
810 itself. You can force ANSI compilation without defining __STDC__
811 (which some compilers won't let you define) by including -DCK_ANSIC on
814 On the other hand, if your compiler defines __STDC__ but still
815 complains about the syntax of Kermit's function prototypes, you can
816 disable the ANSI-style function prototyping by including -DNOANSI on
819 For SCO OpenServer, UNIX, ODT, and XENIX compilations, be sure to pick
820 the most appropriate [146]makefile target, and be sure you have
821 installed an SCO development system that is keyed to your exact SCO
822 operating system release, down to the minor version (like 2.3.1).
824 Also note that SCO distributes some of its libraries in encrypted
825 form, and they must be decrypted before C-Kermit can be linked with
826 them. If not, you might see a message like:
828 ld: file /usr/lib/libsocket.a is of unknown type: magic number = 6365
830 To decrypt, you must supply a key (password) that came with your
831 license. Call SCO for further info.
833 If your compiler uses something other than int for the pid (process
834 id) data type, put -DPID_T=pid_t or whatever in your CFLAGS.
836 If you get complaints about unknown data types uid_t and gid_t, put
837 -DUID_T=xxx -DGID_T=yyy in your CFLAGS, where xxx and yyy are the
840 If your compilation fails because of conflicting or duplicate
841 declarations for sys_errlist, add -DUSE_STRERROR or -DNDSYSERRLIST to
844 If your compilation dies because getpwnam() is being redeclared (or
845 because of "conflicting types for getwpnam"), add -DNDGPWNAM to your
846 CFLAGS. If that doesn't work, then add -DDCGPWNAM to your CFLAGS (see
847 ckufio.c around line 440).
849 If the compiler complains about the declaration of getpwnam() during
850 an ANSI C compilation, remove the declaration from ckufio.c or change
851 the argument in the prototype from (char *) to (const char *).
853 If you get complaints that getpwuid() is being called with an improper
854 type, put -DPWID_T=xx in your CFLAGS.
856 If you get compile-time warnings that t_brkc or t_eofc (tchars
857 structure members, used in BSD-based versions) are undefined, or
858 structure-member- related warnings that might be traced to this fact,
859 add -DNOBRKC to CFLAGS.
861 If you get a linker message to the effect that _setreuid or _setregid
862 is not defined, add -DNOSETREU to CFLAGS, or add -DCKTYP_H=blah to
863 CFLAGS to make C-Kermit read the right <types.h>-kind-of-file to pick
864 up these definitions.
866 If you get a message that _popen is undefined, add -DNOPOPEN to
869 If you get a complaint at compile time about an illegal
870 pointer-integer combination in ckufio.c involving popen(), or at link
871 time that _popen is an undefined symbol, add the declaration "FILE
872 *popen();" to the function zxcmd() in ckufio.c (this declaration is
873 supposed to be in <stdio.h>). If making this change does not help,
874 then apparently your Unix does not have the popen() function, so you
875 should add -DNOPOPEN to your make entry, in which case certain
876 functions involving "file" i/o to the standard input and output of
877 subprocesses will not be available.
879 If your linker complains that _getcwd is undefined, you can add a
880 getcwd() function to ckufio.c, or add it to your libc.a library using
886 getcwd(buf,size) char *buf; int size; {
893 if (!buf) return(NULL);
894 if (!(pfp = popen("pwd","r"))) return(NULL);
895 fgets(buf,size-2,pfp);
897 buf[strlen(buf)-1] = '\0';
906 FILE *popen(s,t) char *s,*t; {
911 If you get complaints about NPROC having an invalid value, add a valid
912 definition for it (depends on your system), as in the cray entry.
914 If you get some symbol that's multiply defined, it probably means that
915 a variable name used by Kermit is also used in one of your system
916 libraries that Kermit is linked with. For example, under PC/IX some
917 library has a variable or function called "data", and the variable
918 "data" is also used extensively by Kermit. Rather than edit the Kermit
919 source files, just put a -D in the make entry CFLAGS to change the
920 Kermit symbol at compile time. In this example, it might be
923 Some symbol is defined in your system's header files, but it produces
924 conflicts with, or undesired results from, Kermit. Try undefining the
925 symbol in the makefile target's CFLAGS, for example -UFIONREAD.
927 Some well-known symbol is missing from your system header files. Try
928 defining in the makefile target's CFLAGS, for example -DFREAD=1.
930 You get many warnings about pointer mismatches. This probably means
931 that Kermit is assuming an int type for signal() when it should be
932 void, or vice-versa. Try adding -DSIG_I (for integer signal()) or
933 -DSIG_V (for void) to CFLAGS. Or just include KFLAGS=-DSIG_V (or
934 whatever) in your "make" command, for example:
936 make bsd KFLAGS=-DSIG_V
938 You get many messages about variables that are declared and/or set but
939 never used. It is difficult to avoid these because of all the
940 conditional compilation in the program. Ignore these messages.
942 Some of C-Kermit's modules are so large, or contain so many character
943 string constants, or are so offensive in some other way, that some C
944 compilers give up and refuse to compile them. This is usually because
945 the -O (optimize) option is included in the make entry. If this
946 happens to you, you can (a) remove the -O option from the make entry,
947 which will turn off the optimizer for ALL modules; or (b) compile the
948 offending module(s) by hand, including all the switches from make
949 entry except for -O, and then give the appropriate "make" command
950 again; or (c) increase the value of the -Olimit option, if your
951 compiler supports this option; or (d) change the [147]makefile target
952 to first compile each offending module explicitly without
953 optimization, then compile the others normally (with optimization),
956 #Fortune 32:16, For:Pro 2.1 (mostly like 4.1bsd)
958 @echo 'Making C-Kermit $(CKVER) for Fortune 32:16 For:Pro 2.1...'
959 $(MAKE) ckuusx.$(EXT) "CFLAGS= -DNODEBUG -DBSD4 -DFT21 -DNOFILEH \
960 -SYM 800 \ -DDYNAMIC -DNOSETBUF -DCK_CURSES $(KFLAGS) -DPID_T=short"
961 $(MAKE) ckuxla.$(EXT) "CFLAGS= -DNODEBUG -DBSD4 -DFT21 -DNOFILEH \
962 -SYM 800 \ -DDYNAMIC -DNOSETBUF -DCK_CURSES $(KFLAGS) -DPID_T=short"
963 $(MAKE) ckudia.$(EXT) "CFLAGS= -DNODEBUG -DBSD4 -DFT21 -DNOFILEH \
964 -SYM 800 \ -DDYNAMIC -DNOSETBUF -DCK_CURSES $(KFLAGS) -DPID_T=short"
965 $(MAKE) wermit "CFLAGS= -O -DNODEBUG -DBSD4 -DFT21 -DNOFILEH -SYM 800 \
966 -DDYNAMIC -DNOSETBUF -DCK_CURSES $(KFLAGS) -DPID_T=short" \
967 "LNKFLAGS= -n -s" "LIBS= -lcurses -ltermcap -lv -lnet"
969 As an extreme example, some compilers (e.g. gcc on the DG AViiON) have
970 been known to dump core when trying to compile ckwart.c with
971 optimization. So just do this one "by hand":
979 and then give the "make" command again.
981 Speaking of wart, it is unavoidable that some picky compilers might
982 generate "statement unreachable" messages when compiling ckcpro.c.
983 Unreachable statements can be generated by the wart program, which
984 generates ckcpro.c automatically from [148]ckcpro.w, which translates
985 lex-like state/input constructions into a big switch/case
988 Some function in Kermit wreaks havoc when it is called. Change all
989 invocations of the function into a macro that evaluates to the
990 appropriate return code that would have been returned by the function
991 had it been called and failed, for example: -Dzkself()=0. Obviously
992 not a good idea if the function is really needed.
994 If you have just installed SunOS 4.1.2 or 4.1.3, you might find that
995 C-Kermit (and any other C program) fails to link because of unresolved
996 references from within libc. This is because of a mistake in Sun's
997 /usr/lib/shlib.etc files for building the new libc. Change the libc
998 Makefile so that the "ld" lines have "-ldl" at the end. Change the
999 README file to say "mv xccs.multibyte. xccs.multibyte.o" and follow
1001 __________________________________________________________________________
1003 5. INSTALLING THE KERMIT FILES
1005 [ [149]Top ] [ [150]Contents ] [ [151]Next ] [ [152]Previous ]
1009 5.1. [153]The C-Kermit Initialization File
1010 5.2. [154]Text Files
1011 5.3. [155]Installing the Kermit Files
1012 5.4. [156]The Makefile Install Target
1014 The C-Kermit executable does not need any external files to run.
1015 Unlike, say, the cu program, which on most platforms is useless unless
1016 you (as root) edit the /usr/spool/uucp/Systems and
1017 /usr/spool/uucp/Devices files to supply whatever obscure and
1018 undocumented syntax is required to match some supposedly user-friendly
1019 mnemonic to the real pathname of whatever device you want to use,
1020 Kermit runs on its own without needing any external configuration
1021 files, and lets you refer to device (and network hosts and services)
1022 by their own natural undisguised names.
1024 Nevertheless, a number of external files can be installed along with
1025 the C-Kermit executable if you wish. These include configuration and
1026 customization files that are read by Kermit as well as documentation
1027 files to be read by people. All of this material is (a) optional, and
1028 (b) available on the Kermit website:
1030 [157]http://www.columbia.edu/kermit/
1032 and usually in a more pleasant form, perhaps also with updated
1033 content. So if your computer is on the Internet, there is no need to
1034 install anything but the Kermit executable if users know how to find
1035 the Kermit website (and if they don't, Kermit's "help" command tells
1038 5.1. The C-Kermit Initialization File
1040 In C-Kermit 7.0 and earlier, the standard initialization file was a
1041 key C-Kermit component because:
1043 a. It "loaded" the dialing and network directories.
1044 b. It defined all the macros and variables for the services
1046 c. It defined macros for quickly changing Kermit's file-transfer
1049 The standard initialization file is quite long (more than 600 lines)
1050 and requires noticeable processing time (the slower the computer, the
1051 more noticeable), yet few people actually use the services directory,
1052 whose definition takes up most of its bulk. Meanwhile, in C-Kermit
1053 8.0, many of the remaining functions of the standard initialization
1054 file are now built in; for example, the FAST, CAUTIOUS, and ROBUST
1057 More to the point, many of the settings that could be made only in the
1058 initialization and customization files can now be picked up from
1059 environment variables. The first group identifies initialization and
1063 The path of your Kermit initialization file, if any. This
1064 overrides the built-in search for $HOME/.kermrc.
1067 The character set used for encoding local text files.
1068 Equivalent to SET FILE CHARACTER-SET.
1071 The full pathname of one or more Kermit dialing directory
1072 files. Equivalent to SET DIAL DIRECTORY.
1075 The full pathname of one or more Kermit network directory
1076 files. Equivalent to SET NETWORK DIRECTORY.
1080 The full pathname of a directory containing Kermit (if any)
1081 containing ckubwr.txt and other Kermit text files. Overrides
1082 Kermit's built-in search for this directory.
1084 The next group is related to dialing modems:
1087 The telephonic numeric country code for this location, e.g. 1
1088 for North America or 39 for Italy. It is recommended that this
1089 one be set for all users, system-wide. Not only is it used to
1090 process portable-format dialing directory entries, but it is
1091 also compared against Kermit's built-in list of "tone
1092 countries" to see if tone dialing can be used. Equivalent to
1093 Kermit's SET DIAL COUNTRY-CODE command.
1096 The telephonic numeric area code for this location, e.g. 212
1097 for Manhattan, New York, USA. Recommend this one also be set
1098 system-wide, so shared portable-format dialing directories will
1099 work automatically for everybody. Equivalent to Kermit's SET
1100 DIAL AREA-CODE command.
1103 TONE or PULSE. Equivalent to Kermit's SET DIAL METHOD command.
1104 If a dial method is not set explicitly (or implicitly from the
1105 country code), Kermit does not specify a dialing method, and
1106 uses the modem's default method, which tends to be pulse.
1109 The telephonic numeric international dialing prefix for this
1110 location. Equivalent to Kermit's SET DIAL INTL-PREFIX command.
1113 The telephonic numeric long-distance dialing prefix for this
1114 location. Equivalent to Kermit's SET DIAL LD-PREFIX command.
1117 The telephonic numeric PBX internal call prefix for this
1118 location. Equivalent to Kermit's SET DIAL PBX-INSIDE-PREFIX
1122 The telephonic numeric PBX external call prefix for this
1123 location. Equivalent to Kermit's SET DIAL PBX-OUTSIDE-PREFIX
1127 The telephonic numeric PBX exchange (first part of the
1128 subscriber number). Equivalent to Kermit's SET DIAL
1129 PBX-EXCHANGE command.
1132 A list of one or more telephonic numeric toll-free area codes.
1135 The telephonic numeric toll-free dialing prefix, in case it is
1136 different from the long-distance prefix. Equivalent to Kermit's
1137 SET DIAL TF-PREFIX command.
1139 The final group includes well-known environment variables that are
1140 also used by Kermit:
1143 Where the CD command should look for relative directory names.
1146 The path of your Unix shell. Used by the RUN (!) command to
1147 choose the shell to execute its arguments.
1153 The name or path of your preferred editor (used by the EDIT
1154 command). Equivalent to SET EDITOR.
1157 The name or path of your preferred web browser (used by the
1158 BROWSE command). Equivalent to Kermit's SET BROWSER command.
1160 Does this mean the initialization file can be abolished? I think so.
1163 * Kermit already does everything most people want it to do without
1165 * Important site-specific customizations can be done with global
1166 environment variables.
1167 * There is no longer any need for everybody to have to use the
1168 standard initialization file.
1169 * This means that your initialization file, if you want one, can
1170 contain your own personal settings, definitions, and preferences,
1171 rather than 600 lines of "standard" setups.
1172 * If you still want the services directory, you can either TAKE the
1173 standard initialization file (which must be named anything other
1174 than $HOME/.kermrc to avoid being executed automatically every
1175 time you start Kermit), or you can make it a kerbang script and
1176 execute it "directly" (the [158]makefile install target does this
1177 for you by putting ckermit.ini in the same directory as the Kermit
1178 binary, adding the appropriate Kerbang line to the top, and giving
1179 it execute permission).
1181 In fact, you can put any number of kerbang scripts in your PATH to
1182 start up C-Kermit in different ways, to have it adopt certain
1183 settings, make particular connections, execute complicated scripts,
1188 These are entirely optional. Many of them are to be found at the
1189 Kermit website in HTML form (i.e. as Web pages with clickable links,
1190 etc), and very likely also more up to date. Plain-text files that
1191 correspond to Web pages were simply "dumped" by Lynx from the website
1192 to plain ASCII text. The format is whatever Lynx uses for this
1193 purpose. If you wish, you can install them on your computer as
1194 described in the [159]next section.
1197 Copyright notice, permissions, and disclaimer.
1200 The standard initialization file, intended more for reference
1201 (in most cases) than actual use; see [162]Section 5.1.
1204 A sample customization file.
1207 Supplement to [165]Using C-Kermit for version 7.0. Available on
1208 the Kermit website as:
1209 [166]http://www.columbia.edu/kermit/ckermit70.html
1212 Supplement to [168]Using C-Kermit for version 8.0. Available on
1213 the Kermit website as:
1214 [169]http://www.columbia.edu/kermit/ckermit80.html
1217 The general C-Kermit hints and tips ("beware") file. Available
1218 on the Kermit website as:
1219 [171]http://www.columbia.edu/kermit/ckcbwr.html
1222 The Unix-specific C-Kermit hints and tips file. Available on
1223 the Kermit website as:
1224 [173]http://www.columbia.edu/kermit/ckubwr.html
1227 Unix C-Kermit Installation Instructions (this file). Available
1228 on the Kermit website as:
1229 [175]http://www.columbia.edu/kermit/ckuins.html
1232 C-Kermit compile-time configuration options. Available on the
1234 [177]http://www.columbia.edu/kermit/ckccfg.html
1237 The C-Kermit program logic manual. Available on the Kermit
1239 [179]http://www.columbia.edu/kermit/ckcplm.html
1242 Certificate Authority certificates for secure connections (see
1245 5.3. Installing the Kermit Files
1247 There is an "install" target in the [182]makefile that you can use if
1248 you wish. However, since every site has its own layout and
1249 requirements, it is often better to install the Kermit files by hand.
1250 You don't have to use the makefile install target to install C-Kermit.
1251 This is especially true since not all sites build C-Kermit from
1252 source, and therefore might not even have the makefile. But you should
1253 read this section in any case.
1255 If your computer already has an older version of C-Kermit
1256 installed, you should rename it (e.g. to "kermit6" or "kermit7") so
1257 in case you have any trouble with the new version, the old one is
1260 In most cases, you need to be root to install C-Kermit, if only to
1261 gain write access to directories in which the binary and manual page
1262 are to be copied. The C-Kermit binary should be installed in a
1263 directory that is in the users' PATH, but that is not likely to be
1264 overwritten when you install a new version of the operating system. A
1265 good candidate would be the /usr/local/bin/ directory, but the
1266 specific choice is site dependent. Example (assuming the appropriate
1267 Kermit binary is stored in your current directory as "wermit", e.g.
1268 because you just built it from source and that's the name the makefile
1271 mv wermit /usr/local/bin/kermit
1272 chmod 755 /usr/local/bin/kermit
1274 or (only after you finish reading this section!) simply:
1278 IMPORTANT: IF C-KERMIT IS TO BE USED FOR DIALING OUT, you must also do
1279 something to give it access to the dialout devices and lockfile
1280 directories. The 'install' target does not attempt to set Kermit's
1281 owner, group, and permissions to allow dialing out. This requires
1282 privileges, open eyes, and human decision-making. Please read
1283 [183]Sections 10 and [184]11 below, make the necessary decisions, and
1284 then implement them by hand as described in those sections.
1286 You should also install the man page, which is called ckuker.nr, in
1287 the man page directory for local commands, such as /usr/man/man1/,
1288 renamed appropriately, e.g. to kermit.1. This is also taken care of by
1291 Optionally, the text files listed in the [185]previous section can be
1292 placed in a publicly readable directory. Suggested directory names
1295 /usr/local/doc/kermit/
1296 /usr/local/lib/kermit/
1297 /usr/share/lib/kermit/
1300 (or any of these without the "/kermit"). Upon startup, C-Kermit checks
1301 the following environment variables whose purpose is to specify the
1302 directory where the C-Kermit text files are, in the following order:
1307 If either of these is defined, C-Kermit checks for the existence of
1308 the ckubwr.txt file (Unix C-Kermit Hints and Tips). If not found, it
1309 checks the directories listed above (both with and without the
1310 "/kermit") plus several others to see if they contain the ckubwr.txt
1311 file. If found, various C-Kermit messages can refer the user to this
1314 Finally, if you want to put the source code files somewhere for people
1315 to look at, you can do that too.
1317 5.4. The Makefile Install Target
1319 The makefile "install" target does almost everything for you if you
1320 give it the information it needs by setting the variables described
1321 below. You can use this target if:
1323 * You downloaded the [186]complete C-Kermit archive and built
1324 C-Kermit from source; or:
1325 * You downloaded an [187]individual C-Kermit binary and the
1326 [188]C-Kermit text-file archive, and your computer has a "make"
1329 Here are the parameters you need to know:
1332 Name of the binary you want to install as "kermit". Default:
1336 (lower case) If you define this variable, its value is
1337 prepended to all the following xxxDIR variables (8.0.211 and
1341 If you want to install the Kermit files in a directory
1342 structure like /opt/kermit/bin/, /opt/kermit/doc/,
1343 /opt/kermit/src/, then define DESTIR as the root of this
1344 structure; for example, /opt/kermit. The DESTDIR string should
1345 not end with a slash. By default, DESTDIR is not defined. If it
1346 is defined, but the directory does not exist, the makefile
1347 attempts to create it, which might require you to be root. Even
1348 so, this can fail if any segments in the path except the last
1349 one do not already exist. WARNING: If the makefile creates any
1350 directories, it gives them a mode of 755, and the default owner
1351 and group. Modify these by hand if necessary.
1354 Directory in which to install the Kermit binary (and the
1355 standard C-Kermit initialization file, if it is found, as a
1356 Kerbang script). If DESTDIR is defined, BINDIR must start with
1357 a slash. BINDIR must not end with a slash. If DESTDIR is
1358 defined, BINDIR is a subdirectory of DESTDIR. If BINDIR does
1359 not exist, the makefile attempts to create it as with DESTDIR.
1360 Default: /usr/local/bin.
1363 Directory in which to install the C-Kermit manual page as
1364 "kermit" followed by the manual-chapter extension (next item).
1365 Default: /usr/man/man1. If MANDIR is defined, the directory
1369 Extension for the manual page. Default: 1 (digit one).
1372 Directory in which to install the C-Kermit source code. If
1373 DESTDIR is defined, this is a subdirectory of DESTDIR. Default:
1377 For secure builds only: Directory in which to install the
1378 ca_certs.pem file. This must be the verification directory used
1379 by programs that use the SSL libraries at your site. Default:
1380 none. Possibilities include: /usr/local/ssl, /opt/ssl,
1381 /usr/lib/ssl, . . . If CERTDIR is defined, the directory
1385 Directory in which to install the C-Kermit text files. If
1386 DESTDIR is defined, this is a subdirectory of DESTDIR. Default:
1387 None. If INFODIR is defined but does not exist, the makefile
1388 attempts to create it, as with DESTDIR.
1393 Installs "wermit" as /usr/local/bin/kermit with permissions
1394 755, the default owner and group, and no special privileges.
1395 The manual page is installed as /usr/man/man1/kermit.1. Text
1396 files are not copied anywhere, nor are the sources.
1398 make MANDIR= install
1399 Just like "make install" but does not attempt to install the
1402 make DESTDIR=/opt/kermit BINDIR=/bin SRCDIR=/src INFODIR=/doc install
1403 Installs the Kermit binary "wermit" as /opt/kermit/bin/kermit,
1404 puts the source code in /opt/kermit/src, and puts the text
1405 files in /opt/kermit/doc, creating the directories if they
1406 don't already exist, and puts the man page in the default
1409 make BINDIR=/usr/local/bin CERTDIR=/usr/local/ssl install
1410 Installs the Kerberized Kermit binary "wermit" as
1411 /usr/local/bin/kermit, puts the CA Certificates file in
1412 /usr/local/ssl/, and the man page in the normal place.
1414 For definitive information, see the makefile. The following is
1415 excerpted from the 8.0.211 makefile:
1417 # The following symbols are used to specify library and header file locations
1418 # Redefine them to the values used on your system by:
1419 # . editing this file
1420 # . defining the values on the command line
1421 # . defining the values in the environment and use the -e option
1428 K4LIB=-L/usr/kerberos/lib
1429 K4INC=-I/usr/kerberos/include
1430 K5LIB=-L/usr/kerberos/lib
1431 K5INC=-I/usr/kerberos/include
1432 SRPLIB=-L$(srproot)/lib
1433 SRPINC=-I$(srproot)/include
1434 SSLLIB=-L$(sslroot)/ssl/lib
1435 SSLINC=-I$(sslroot)/ssl/include
1440 BINDIR = $(prefix)/bin
1441 MANDIR = $(manroot)/man/man1
1446 __________________________________________________________________________
1448 6. INSTALLING UNIX C-KERMIT FROM DOS-FORMAT DISKETTES
1450 [ [189]Top ] [ [190]Contents ] [ [191]Next ] [ [192]Previous ]
1452 This section is obsolete. We don't distribute C-Kermit on diskettes
1453 any more because (a)there is no demand, and (b) it no longer fits.
1455 If you received a DOS-format diskette containing a binary executable
1456 C-Kermit program plus supporting text files, be sure to chmod +x the
1457 executable before attempting to run it.
1459 In version 5A(190) and later, all the text files on the C-Kermit
1460 DOS-format diskettes are in Unix format: LF at the end of each line
1461 rather than CRLF. This means that no conversions are necessary when
1462 copying to your Unix file system, and that all the files on the
1463 diskette, text and binary, can be copied together. The following
1464 comments apply to the DOS-format diskettes furnished with version
1465 5A(189) and earlier or to other DOS-format diskettes you might have
1466 obtained from other sources.
1468 If you have received C-Kermit on MS-DOS format diskettes (such as
1469 those distributed by Columbia University), you should make sure that
1470 your DOS-to-Unix conversion utility (such as "dosread") both: (1)
1471 changes line terminators in all files from carriage-return linefeed
1472 (CRLF) to just linefeed (LF) (such as "dosread -a") and remove any
1473 Ctrl-Z's, and (2) that all filenames are converted from uppercase to
1474 lowercase. If these conversions were not done, you can use the
1475 following shell script on your Unix system to do them:
1480 # Shell script to convert C-Kermit DOS-format files into Unix format.
1481 # Lowercases the filenames, strips out carriage returns and Ctrl-Z's.
1483 x=$1 # the name of the source directory
1484 y=$2 # the name of the target directory if [ $# -lt 2 ]; then
1485 echo "usage: $0 source-directory target-directory"
1489 echo "Converting files from $1 to $2"
1491 echo "$0: cannot cd to $1"
1495 j=`echo $i | tr 'A-Z' 'a-z'`
1496 echo $x/$i =\> $y/$j
1497 tr -d '\015\032' < $i > $y/$j
1501 Cut out this shell script, save it as "convert.sh" (or any other name
1502 you prefer), then "chmod +x convert.sh". Then, create a new, empty
1503 directory to put the converted files in, and then "convert.sh /xxx
1504 /yyy" where /xxx is the name of the directory where the PC-format
1505 files are, and /yyy is the name of the new, empty directory. The
1506 converted files will appear in the new directory.
1507 __________________________________________________________________________
1509 7. CHECKING THE RESULTS
1511 [ [193]Top ] [ [194]Contents ] [ [195]Next ] [ [196]Previous ]
1513 First some quick checks for problems that can be easily corrected by
1514 recompiling with different options:
1516 DIRECTORY listing is garbage
1517 Permissions, size, and date are random garbage (but the
1518 filenames are correct) in a C-Kermit DIRECTORY listing. On some
1519 platforms, the lstat() function is present but simply doesn't
1520 work; try adding -DNOLSTAT to CFLAGS and rebuild. If that
1521 doesn't fix it, also add -DNOLINKBITS. If it's still not fixed,
1522 remove -DNOLSTAT and -DNOLINKBITS and add -DNOSYMLINK.
1525 When you make a connection with C-Kermit and transfer files
1526 using the fullscreen (curses) file-transfer display, and then
1527 get the C-Kermit> prompt back afterwards, do characters echo
1528 when you type them? If not, the curses library has altered the
1529 buffering of /dev/tty. Try rebuilding with KFLAGS=-DCK_NEWTERM.
1530 If it already has -DCK_NEWTERM in CFLAGS, try removing it. If
1531 that doesn't help, then rebuild with -DNONOSETBUF (yes, two
1532 NO's). If none of this works (and you can't fix the code), then
1533 either don't use the fullscreen display, or rebuild with
1536 Ctrl-L or any SCREEN command crashes C-Kermit:
1537 Rebuild with -DNOTERMCAP.
1539 No prompt after CONNECT:
1540 After escaping back from CONNECT mode, does your C-Kermit>
1541 prompt disappear? (Yet, typing "?" still produces a command
1542 list, etc) In that case, add -DCKCONINTB4CB to CFLAGS and
1545 Here is a more thorough checklist can use to tell whether your version
1546 of C-Kermit was built correctly for your Unix system, with hints on
1547 how to fix or work around problems:
1549 a. Start C-Kermit (usually by typing "./wermit" in the directory
1550 where you ran the makefile). Do you see the C-Kermit> prompt? If
1551 not, C-Kermit incorrectly deduced that it was running in the
1552 background. The test is in conbgt() in [197]ckutio.c. If you can
1553 fix it for your system, please send in the fix (Hint: read about
1554 "PID_T" below). Otherwise, you can force C-Kermit to foreground
1555 mode by starting it with the -z command line option, as in "kermit
1556 -z", or giving the interactive command SET BACKGROUND OFF.
1557 b. When you type characters at the C-Kermit prompt, do they echo
1558 immediately? If not, something is wrong with concb() and probably
1559 the other terminal mode settings routines in [198]ckutio.c. Be
1560 sure you have used the most appropriate make entry.
1561 c. At the C-Kermit> prompt, type "send ./?". C-Kermit should list all
1562 the files in the current directory. If not, it was built for the
1563 wrong type of Unix file system. Details below. In the meantime,
1564 try SET WILDCARD-EXPANSION SHELL as a workaround.
1565 d. CD to a directory that contains a variety of files, symlinks, and
1566 subdirectories and give a DIRECTORY command at the C-Kermit>
1567 prompt. Do the permissions, size, and date appear correct? If not
1568 see [199]Section 4.0.
1569 e. Assuming your platform supports long file names, create a file
1570 with a long name in your current directory, e.g.:
1572 $ touch thisisafilewithaveryveryveryveryveryveryveryverylooooooooongname
1574 (you might need to make it longer than this, perhaps as long as
1575 257 or even 1025 characters).
1576 Check with ls to see if your version of Unix truncated the name.
1577 Now start C-Kermit and type "send thisis<ESC>". Does Kermit
1578 complete the name, showing the same name as ls did? If not, wrong
1579 filesystem. Read on.
1580 f. Make sure that Kermit has the maximum path length right. Just type
1581 SHOW FILE and see what it says about this. If it is too short,
1582 there could be some problems at runtime. To correct, look in
1583 [200]ckcdeb.h to see how the symbol CKMAXPATH is set and make any
1585 g. Send a file to your new Kermit program from a different Kermit
1586 program that is known to work. Is the date/timestamp of the new
1587 file identical to the original? If not, adjustments are needed in
1588 zstrdt() in [201]ckufio.c.
1589 h. Go to another computer (Computer B) from which you can send files
1590 to C-Kermit. Connect Computer B to the computer (A) where you are
1591 testing C-Kermit. Then:
1592 i. Send a file from B to A. Make sure it transferred OK and was
1593 created with the the right name.
1594 j. Send a file from B to A, specifying an "as-name" that is very,
1595 very long (longer than the maximum name length on computer A).
1596 Check to make sure that the file was received OK and that its name
1597 was truncated to Computer A's maximum length. If not, check the
1598 MAXNAMLEN definition in [202]ckufio.c.
1599 k. Tell C-Kermit on Computer A to "set receive pathnames relative"
1600 and then send it a file from Computer B specifying an as-name that
1601 contains several directory segments:
1603 send foo dir1/dir2/dir3/foo
1605 Check to make sure that dir1/dir2/dir3/foo was created in Computer
1606 A's current directory (i.e. that three levels of directories were
1608 l. Repeat step k, but make each path segment in the pathname longer
1609 than Computer A's maximum name length. Make sure each directory
1610 name, and the final filename, were truncated properly.
1611 m. Type Ctrl-C (or whatever your Unix interrupt character is) at the
1612 prompt. Do you get "^C..." and a new prompt? If instead, you get a
1613 core dump (this shouldn't happen any more) "rm core" and then
1614 rebuild with -DNOCCTRAP added to your CFLAGS. If it did work, then
1615 type another Ctrl-C. If this does the same thing as the first one,
1616 then Ctrl-C handling is OK. Otherwise, the SIGINT signal is either
1617 not getting re-armed (shouldn't happen) or is being masked off
1618 after the first time it is caught, in which case, if your Unix is
1619 POSIX-based, try rebuilding C-Kermit with -DCK_POSIX_SIG.
1620 n. Type Ctrl-Z (or whatever your Unix suspend character is) to put
1621 C-Kermit in the background. Did it work? If nothing happened, then
1622 (a)your version of Unix does not support job control, or (b) your
1623 version of C-Kermit was probably built with -DNOJC. If your
1624 session became totally frozen, then you are probably running
1625 C-Kermit on a Unix version that supports job control, but under a
1626 shell that doesn't. If that's not the case, look in the congm()
1627 and psuspend() routines in [203]ckutio.c and see if you can figure
1628 out what's wrong. If you can't, rebuild with -DNOJC.
1629 o. Give a SET LINE command for a dialout device, e.g. "set line
1630 /dev/tty00". If you got some kind of permission or access denied
1631 message, go read [204]Section 10 and then come back here.
1632 p. After giving a successful SET LINE command, type "show comm" to
1633 see the communication parameters. Do they make sense?
1634 q. Type "set speed ?" and observe the list of available speeds. Is it
1635 what you expected? If not, see [205]Section 2) of the
1636 [206]Configurations Options document.
1637 r. Give a SET SPEED command to change the device's speed. Did it
1638 work? (Type "show comm" again to check.)
1639 s. Try dialing out: SET MODEM TYPE , SET LINE , SET SPEED , DIAL . If
1640 it doesn't work, keep reading. After dialing, can you REDIAL?
1641 t. If your version was built with TCP/IP network support, try the
1643 u. Transfer some files in remote mode on incoming asynchronous serial
1644 (direct or modem) connections, and on incoming network (telnet,
1645 rlogin, terminal server) connections. If you get lots of errors,
1646 try different SET FLOW settings on the remote Kermit program.
1647 v. Establish a serial connection from C-Kermit to another computer
1648 (direct or dialed) and transfer some files. If you have network
1649 support, do the same with a network connection.
1650 w. If your version was built with fullscreen file transfer display
1651 support, check that it works during local-mode file transfer.
1652 Also, check C-Kermit's operation afterwards: is the echoing funny?
1653 etc etc. If there are problems, see [207]Section 4.
1654 x. If your version was built with script programming language
1655 support, TAKE the ckedemo.ksc file to give it a workout.
1656 y. Does C-Kermit interlock correctly with UUCP-family programs (cu,
1657 tip, uucp, etc)? If not, read the section [208]DIALING OUT AND
1658 COORDINATING WITH UUCP below.
1659 z. Modem signals... Give a SET LINE command to a serial device and
1660 then type the SHOW MODEM command. If it says "Modem signals
1661 unavailable in this version of Kermit", then you might want to
1662 look at the ttgmdm() routine in [209]ckutio.c and add the needed
1663 code -- if indeed your version of Unix provides a way to get modem
1664 signals (some don't; e.g. modem signals are a foreign concept to
1665 POSIX, requiring politically incorrect workarounds).
1666 aa. If it says "Modem signals unavailable", then it is likely that the
1667 API for getting modem signals is provided, but it doesn't actually
1668 do anything (e.g. ioctl(ttyfd,TIOCMGET,&x) returns EINVAL).
1669 ab. In any case, it still should be able to manipulate the DTR signal.
1670 To test, SET LINE , SET MODEM NONE, and HANGUP. The DTR light
1671 should go out momentarily. If it doesn't, see if you can add the
1672 needed code for your system to the tthang() routine in
1674 ac. If your version of Kermit has the SET FLOW RTS/CTS command, check
1675 to see if it works: give Kermit this command, set your modem for
1676 RTS/CTS, transfer some files (using big packet and window sizes)
1677 and watch the RTS and CTS lights on the modem. If they go on and
1678 off (and Kermit does not get packet errors), then it works. If
1679 your version of Kermit does not have this command, but your
1680 version of Unix does support hardware flow control, take a look at
1681 the tthflow() command in [211]ckutio.c and see if you can add the
1682 needed code (see the section on [212]HARDWARE FLOW CONTROL below).
1683 (And please [213]send back any added code, so that others can
1684 benefit from it and it can be carried forward into future
1686 ad. If C-Kermit starts normally and issues its prompt, echoing is
1687 normal, etc, but then after returning from a CONNECT session, the
1688 prompt no longer appears, try rebuilding with -DCKCONINTB4CB.
1689 ae. (8.0.206 or later) Type some commands at the C-Kermit prompt. Can
1690 you use the Up-arrow and Down-arrow keys on your keyboard to
1691 access Kermit's command history? If not, and you're a programmer,
1692 take a look at the USE_ARROWKEYS sections of ckucmd.c.
1693 __________________________________________________________________________
1695 8. REDUCING THE SIZE OF THE EXECUTABLE PROGRAM IMAGE
1697 [ [214]Top ] [ [215]Contents ] [ [216]Next ] [ [217]Previous ]
1699 Also see: [218]C-Kermit Configuration Options
1701 a. Many of C-Kermit's options and features can be deselected at
1702 compile time. The greatest savings at the least sacrifice in
1703 functionality is to disable the logging of debug information by
1704 defining NODEBUG during compilation. See the [219]Configurations
1705 Options document for further information.
1706 b. Use shared libraries rather than static linking. This is the
1707 default on many Unix systems anyway. However, executables built
1708 for dynamic linking with shared libraries are generally not
1709 portable away from the machine they were built on, so this is
1710 recommended if the binary is for your use only.
1711 c. Most Unix systems have a "strip" command to remove symbol table
1712 information from an executable program image. "man strip" for
1713 further information. The same effect can be achieved by including
1714 "-s" among the link flags when building C-Kermit.
1715 d. SCO, Interactive, and some other Unix versions have an "mcs"
1716 command. "mcs -d wermit" can be used to delete the contents of the
1717 ".comment" section from the executable program image.
1718 e. Many modern optimizers can be instructed to optimize for space
1719 rather than execution efficiency. Check the CFLAGS in the makefile
1720 target, adjust as desired.
1721 __________________________________________________________________________
1725 [ [220]Top ] [ [221]Contents ] [ [222]Next ] [ [223]Previous ]
1732 9.1.3. [227]Other Standards
1733 9.2. [228]Library Issues
1734 9.3. [229]Unix File System Peculiarities
1735 9.4. [230]Hardware Flow Control
1736 9.5. [231]Terminal Speeds
1737 9.6. [232]Millisecond Sleeps
1738 9.7. [233]Nondestructive Input Buffer Peeking
1739 9.8. [234]Other System-Dependent Features
1740 9.9. [235]Terminal Interruption
1742 There are several major varieties of Unix: Bell Laboratories Seventh
1743 Edition, AT&T System V, Berkeley Standard Distribution (BSD), and
1744 POSIX. Each has many, many subvarieties and descendents, and there are
1745 also hybrids that exhibit symptoms of two or more varieties, plus
1746 special quirks of their own.
1748 Seventh edition versions of C-Kermit include the compile-time option
1749 -DV7 in the CFLAGS string in the makefile target. Various V7-based
1750 implementations are also supported: -DCOHERENT, -DMINIX, etc.
1752 AT&T-based versions of Unix Kermit include the compile-time option
1753 -DATTSV (standing for AT∓T Unix System V). This applies to System
1754 III and to System V up to and including Release 2. For System V
1755 Release 3, the flag -DSVR3 should be used instead (which also implies
1756 -DATTSV). This is because the data type of signal() and several other
1757 functions was changed between SVR2 and SVR3. For System V Release 4,
1758 include -DSVR4 because of changes in UUCP lockfile conventions; this
1759 also implies -DSVR3 and -DATTSV.
1761 For BSD, the flag -BSDxx must be included, where xx is the BSD version
1762 number, for example BSD4 (for version 4.2 or later, using only 4.2
1763 features), -DBSD41 (for BSD 4.1 only), -DBSD43 (for 4.3), -DBSD29 (BSD
1764 2.9 for DEC PDP-11s). -DBSD44 is for 4.4BSD, which is the basis of
1765 FreeBSD, NetBSD, OpenBSD, BSDI, and Mac OS X, and which contains many
1766 POSIX features, and has little relation to 4.3BSD and earlier.
1768 For POSIX, include the flag -DPOSIX. POSIX defines a whole new set of
1769 terminal i/o functions that are not found in traditional AT&T or
1770 Berkeley implementations, and also defines the symbol _POSIX_SOURCE,
1771 which is used in many system and library header files, mainly to
1772 disable non-POSIX (i.e. useful) features.
1774 Note (circa 1997): In order to enable serial speeds higher than 38400
1775 bps, it is generally necessary to add -DPOSIX (among other things),
1776 since the older terminal APIs can not accommodate the new speeds --
1777 out o' bits. But this often also means wholesale conversion to POSIX
1778 APIs. In general, just try adding -DPOSIX and then see what goes
1779 wrong. Be wary of features disappearing: when _POSIX_SOURCE is
1780 defined, all sorts of things that were perfectly OK before suddenly
1781 become politically incorrect -- like reading modem signals, doing
1782 hardware flow control, etc. POSIX was evidently not designed with
1783 serial communication in mind!
1785 Case in point: In UnixWare 7.0, #define'ing POSIX causes strictness
1786 clauses in the header files to take effect. These prevent <sys/time.h>
1787 from defining the timeval and timezone structs, which are needed for
1788 all sorts of things (like select()). Thus, if we want the high serial
1789 speeds, we have to circumvent the POSIX clauses.
1791 Similarly in SCO OpenServer R5.0.4 where, again, we must use the POSIX
1792 APIs to get at serial speeds higher than 38400, but then doing so
1793 removes hardware flow control -- just when we need it most! In cases
1794 like this, dirty tricks are the only recourse (search for SCO_OSR504
1795 in [236]ckutio.c for examples).
1797 For reasons like this, Unix implementations tend to be neither pure
1798 AT&T nor pure BSD nor pure POSIX, but a mixture of two or more of
1799 these, with "compatibility features" allowing different varieties of
1800 programs to be built on the same computer. In general, Kermit tries
1801 not to mix and match but to keep a consistent repertoire throughout.
1802 However, there are certain Unix implementations that only work when
1803 you mix and match. For example, the Silicon Graphics IRIX operating
1804 system (prior to version 3.3) is an AT&T Unix but with a BSD file
1805 system. The only way you can build Kermit successfully for this
1806 configuration is to include -DSVR3 plus the special option -DLONGFN,
1807 meaning "pretend I was built with -DBSDxx when it's time to compile
1808 file-related code". See the "iris" makefile target.
1809 ________________________________________________________________________
1813 [ [237]Top ] [ [238]Section Contents ] [ [239]Contents ] [ [240]Next ]
1819 9.1.3. [243]Other Standards
1821 In edits 166-167 (1988-89), C-Kermit was heavily modified to try to
1822 keep abreast of new standards while still remaining compatible with
1823 old versions of C and Unix. There are two new standards of interest:
1824 ANSI C (as described in Kernighan and Ritchie, "The C Programming
1825 Language", Second Edition, Prentice Hall, 1988) and POSIX.1 (IEEE
1826 Standard 1003.1 and ISO/IEC 9945-1, 1990, "Portable Operating System
1827 Interface"). These two standards have nothing to do with each other:
1828 you can build C-Kermit with a non-ANSI compiler for a POSIX system, or
1829 for a non-POSIX system with with an ANSI compiler.
1833 POSIX.1 defines a repertoire of system functions and header files for
1834 use by C language programs. Most notably, the ioctl() function is not
1835 allowed in POSIX; all ioctl() functions have been replaced by
1836 device-specific functions like tcsetattr(), tcsendbreak(), etc.
1838 Computer systems that claim some degree of POSIX compliance have made
1839 some attempt to put their header files in the right places and give
1840 them the right names, and to provide system library functions with the
1841 right names and calling conventions. Within the header files,
1842 POSIX-compliant functions are supposed to be within #ifdef
1843 _POSIX_SOURCE..#endif conditionals, and non-POSIX items are not within
1846 If Kermit is built with neither -D_POSIX_SOURCE nor -DPOSIX, the
1847 functions and header files of the selected version of Unix (or VMS,
1848 etc) are used according to the CFLAGS Kermit was built with.
1850 If Kermit is built with -D_POSIX_SOURCE but not -DPOSIX, then one of
1851 the -DBSD or -DATTSV flags (or one that implies them) must also be
1852 defined, but it still uses only the POSIX features in the system
1853 header files. This allows C-Kermit to be built on BSD or AT&T systems
1854 that have some degree of POSIX compliance, but still use BSD or AT&T
1857 The dilimma is this: it is often necessary to define _POSIX_SOURCE to
1858 get at new or modern features, such as high serial speeds and the APIs
1859 to deal with them. But defining _POSIX_SOURCE also hides other APIs
1860 that Kermit needs, for example the ones dealing with modem signals
1861 (others are listed just below). Thus all sorts of hideous contortions
1862 are often required to get a full set of features.
1864 The POSIX standard does not define anything about uucp lockfiles.
1865 "make posix" uses NO (repeat, NO) lockfile conventions. If your
1866 POSIX-compliant Unix version uses a lockfile convention such as
1867 HDBUUCP (see below), use the "posix" entry, but include the
1868 appropriate lockfile option in your KFLAGS on the "make" command line,
1871 make posix "KFLAGS=-DHDBUUCP"
1873 POSIX.1 also lacks certain other features that Kermit needs. For
1876 * There is no defined way for an application to do wildcard matching
1877 of filenames. Kermit uses the inode in the directory structure,
1878 but POSIX.1 does not include this concept. (Later POSIX revisions
1879 include functions named (I think) glob() and fnmatch(), but these
1880 functions are not yet in Kermit, and might not be appropriate in
1882 * There is no POSIX mechanism for sensing or controlling modem
1883 signals, nor to enable RTS/CTS or other hardware flow control.
1884 * There is no select() for multiplexing i/o, and therefore no
1886 * There is no way to check if characters are waiting in a
1887 communications device (or console) input buffer, short of trying
1888 to read them -- no select(), ioctl(fd,FIONREAD,blah), rdchk(),
1889 etc. This is bad for CONNECT mode and bad for sliding windows.
1890 * No way to do a millisecond sleep (no nap(), usleep(), select(),
1892 * There is no popen().
1894 So at this point, there cannot be one single fully functional POSIX
1895 form of C-Kermit unless it also has "extensions", as do Linux, QNX,
1898 More on POSIX (quoting from a newsgroup posting by Dave Butenhof):
1900 Standards tend to look at themselves as "enabling". So POSIX
1901 standards say that, in order to use POSIX functions, a program must
1902 define some macro that will put the development environment in
1903 "POSIX mode". For the ancient POSIX 1003.1-1990, the symbol is
1904 _POSIX_SOURCE. For recent revisions, it's _POSIX_C_SOURCE with an
1905 appropriate value. POSIX 1003.1-1996 says that, to use its features
1906 in a portable manner, you must define _POSIX_C_SOURCE=199506L
1907 before including any header files.
1909 But for Solaris, or Digital Unix, the picture is different. POSIX
1910 is one important but small part of the universe. Yet POSIX
1911 unconditionally and unambiguously REQUIRES that, when
1912 _POSIX_C_SOURCE=199506L, ALL of the functions and definitions
1913 required by the standard, and NO others (except in specific
1914 restricted namespaces, specifically "_" followed by an uppercase
1915 letter or "__" followed by a lowercase letter) shall be visible.
1916 That kinda puts a cramp on BSD and SVID support, because those
1917 require names that are not in the "protected" POSIX namespaces.
1918 It's ILLEGAL to make those symbols visible, unless you've done
1919 something else that's beyond the scope of POSIX to allow the system
1920 to infer that you didn't really mean it.
1922 In most cases, you should just compile, with no standards-related
1923 macros defined. The system will make available every interface and
1924 definition that isn't incompatible with the "main stream". There
1925 may indeed be cases where two standards cross, and you really can't
1926 use both together. But, in general, they play nicely together as
1927 long as you don't do anything rash -- like telling the system that
1928 it's not allowed to let them.
1930 In the area of threads, both Solaris and Digital Unix support
1931 incompatible thread APIs. We have POSIX and DCE, they have POSIX
1932 and UI. The nasty areas are in the _r routines and in some aspects
1933 of signal behavior. You cannot compile a single source file that
1934 uses both semantics. That's life. It sounds as if Solaris defaults
1935 to the UI variants, but allows you to define this
1936 _POSIX_THREAD_SEMANTICS to get around it. We default to POSIX, and
1937 allow you to define _PTHREAD_USE_D4 (automatically defined by the
1938 cc "-threads" switch) to select the DCE thread variants. That
1939 default, because you're operating outside of any individual
1940 standard, is really just a marketing decision.
1941 ______________________________________________________________________
1945 [ [244]Top ] [ [245]Contents ] [ [246]Section Contents ] [
1946 [247]Subsection Contents ] [ [248]Next ] [ [249]Previous ]
1948 The major difference between ANSI C and earlier C compilers is
1949 function prototyping. ANSI C allows function arguments to be checked
1950 for type agreement, and (when possible) type coercion in the event of
1951 a mismatch. For this to work, functions and their arguments must be
1952 declared before they are called. The form for function declarations is
1953 different in ANSI C and non-ANSI C (ANSI C also accepts the earlier
1954 form, but then does not do type checking).
1956 As of edit 167, C-Kermit tries to take full advantage of ANSI C
1957 features, especially function prototyping. This removes many bugs
1958 introduced by differing data types used or returned by the same
1959 functions on different computers. ANSI C features are automatically
1960 enabled when the symbol __STDC__ is defined. Most ANSI C compilers,
1961 such as GNU CC and the new DEC C compiler define this symbol
1964 On the downside, ANSI C compilation increases the
1965 administrative/bureacratic burden, spewing out countless unneeded
1966 warnings about mismatched types, especially when we are dealing with
1967 signed and unsigned characters, requiring casts everywhere to shut up
1968 the mindless complaints -- there is no use for signed chars in Kermit
1969 (or probably anywhere else). Some compilers, mercifully, include a
1970 "treat all chars as unsigned" option, and when available it should be
1971 used -- not only to stop the warnings, but also to avoid unhelpful
1972 sign extension on high-bit characters.
1974 To force use of ANSI C prototypes, include -DCK_ANSIC on the cc
1975 command line. To disable the use of ANSI prototypes, include -DNOANSI.
1976 ______________________________________________________________________
1978 9.1.3. Other Standards
1980 [ [250]Top ] [ [251]Contents ] [ [252]Section Contents ] [
1981 [253]Subsection Contents ] [ [254]Next ] [ [255]Previous ]
1983 As the years go by, standards with-which-all-must-comply continue to
1984 pile up: AES, XPG2, XPG3, XPG4, FIPS 151-2, successive generations of
1985 POSIX, OSF/1, X/Open, Spec 1170, UNIX95, Open Group UNIX98, ISO/IEC
1986 9945 parts 1-4, ISO 9899, 88Open, OS 99, Single Unix Specification
1987 (SUS, [256]IEEE 1003.1-2001, not to mention "mature standards" like
1988 V7, 4.2/4.3BSD, System V R3 and R4 (SVID2 and SVID3), 4.4BSD (the
1989 basis for BSDI, OpenBSD, NetBSD, FreeBSD, Mac OS X etc), /usr/group,
1990 plus assorted seismic pronouncements of the neverending series of
1991 ephemeral corporate consortia, not to mention the libc-vs-glibc
1992 turmoil in the Linux arena and who knows what else.
1994 None of these standards simplifies life for portable applications like
1995 C-Kermit -- each one is simply one more environment to support (or
1996 circumvent, as in many cases these standards do more harm than good by
1997 denying access to facilities we need, e.g. as noted in above in
1999 ________________________________________________________________________
2003 [ [258]Top ] [ [259]Contents ] [ [260]Section Contents ] [
2004 [261]Subsection Contents ] [ [262]Next ] [ [263]Previous ]
2006 On most modern platforms, applications are -- and often must be --
2007 dynamically linked. This has numerous advantages (smaller executables,
2008 ability to patch a library and thereby patch all applications that use
2009 it, etc), but also causes some headaches: most commonly, the library
2010 ID built into the executable at link time does not match the ID of the
2011 corresponding library on the target system, and so the loader refuses
2012 to let the application run.
2014 This problem only gets worse over time. In the Linux and *BSD world,
2015 we also have totally different libraries (each with their own names
2016 and numbering systems) that cover the same territory; for example,
2017 curses vs ncurses, libc versus glibc. Combinations proliferate and any
2018 given Unix computer might have any combination. For this reason it is
2019 becoming increasingly difficult to produce a "Linux binary" for a
2020 given architecture (e.g. PC or Alpha). There has to be a separate
2021 binary for (at least) every combination of curses vs ncurses and libc
2024 In such cases, the best advice is for every user to build C-Kermit
2025 from source code on the system where it will run. Too bad most
2026 commercial Unix vendors have stopped including C compilers with the
2028 ________________________________________________________________________
2030 9.3. Unix File System Peculiarities
2032 [ [264]Top ] [ [265]Contents ] [ [266]Section Contents ] [ [267]Next ]
2035 Normally, including a BSD, System-V, POSIX, or DIRENT flag in the make
2036 entry selects the right file system code. But some versions of Unix
2037 are inconsistent in this regard, and building in the normal way either
2038 gives compiler or linker errors, or results in problems at runtime,
2039 typically failure to properly expand wildcard file specifications when
2040 you do something like "send *.*", or failure to recognize long
2041 filenames, as in "send filewithaveryveryveryveryverylongname".
2043 C-Kermit is supposed to know about all the various styles of Unix file
2044 systems, but it has to be told which one to use when you build it,
2045 usually in the makefile target CFLAGS as shown below, but you might
2046 also have to add something like -I/usr/include/bsd to CFLAGS, or
2047 something like -lbsd to LIBS.
2049 C-Kermit gives you the following CFLAGS switches to adapt to your file
2050 system's peculiarities:
2052 -DDIRENT - #include <dirent.h>
2053 -DSDIRENT - #include <sys/dirent.h>
2054 -DNDIR - #include <ndir.h>
2055 -DXNDIR - #include <sys/ndir.h>
2056 -DRTU - #include "/usr/lib/ndir.h", only if NDIR and XNDIR not defined.
2057 -DSYSUTIMH - #include <sys/utime.h> for setting file creation dates.
2058 -DUTIMEH - #include <utime.h> for setting file creation dates.
2060 (Note, RTU should only be used for Masscomp RTU systems, because it
2061 also selects certain other RTU-specific features.)
2063 If none of these is defined, then <sys/dir.h> is used. IMPORTANT: If
2064 your system has the file /usr/include/dirent.h then be sure to add
2065 -DDIRENT to your makefile target's CFLAGS. "dirent" should be used in
2066 preference to any of the others, because it supports all the features
2067 of your file system, and the others probably don't.
2069 Having selected the appropriate directory header file, you might also
2070 need to tell Kermit how to declare the routines and variables it needs
2071 to read the directory. This happens most commonly on AT&T System-V
2072 based UNIXes, particularly System V R3 and earlier, that provide long
2073 file and directory names (longer than 14 characters). Examples include
2074 certain releases of HP-UX, DIAB DNIX, older versions of Silicon
2075 Graphics IRIX, and perhaps also MIPS. In this case, try adding
2076 -DLONGFN to your makefile target.
2078 Another problem child is <sys/file.h>. Most Unix C-Kermit versions
2079 need to #include this file from within [269]ckufio.c and
2080 [270]ckutio.c, but some not only do not need to include it, but MUST
2081 not include it because (a) it doesn't exist, or (b) it has already
2082 been included by some other header file and it doesn't protect itself
2083 against multiple inclusion, or (c) some other reason that prevents
2084 successful compilation. If you have compilation problems that seem to
2085 stem from including this file, then add the following switch to CFLAGS
2086 in your makefile target:
2090 There are a few odd cases where <sys/file.h> must be included in one
2091 of the cku[ft]io.c files, but not the other. In that case, add the
2092 aforementioned switch, but go into the file that needs <sys/file.h>
2093 and add something like this:
2095 #ifdef XXX /* (where XXX is a symbol unique to your system) */
2099 before the section that includes <sys/file.h>.
2101 Kermit's SEND command expands wildcard characters "?" and "*" itself.
2102 Before version 5A, commands like "send *" would send all regular
2103 (non-directory) files, including "hidden files" (whose names start
2104 with "."). In version 5A, the default behavior is to match like the
2105 Bourne shell or the ls command, and not include files whose names
2106 start with dot. Such files can still be sent if the dot is included
2107 explicitly in the SEND command: "send .oofa, send .*". To change back
2108 to the old way and let leading wildcard characters match dot files,
2109 include the following in your CFLAGS:
2113 (In C-Kermit 6.0, there is also a command to control this at runtime.)
2115 Complaints about data-type mismatches:
2117 * If you get compile-time complaints about data type mismatches for
2118 process-ID related functions like getpid(), add -DPID_T=pid_t.
2119 * If you get compile-time complaints about data type mismatches for
2120 user ID related functions like getuid(), add -DUID_T=uid_t.
2121 * If you get compile-time complaints about data type mismatches for
2122 user-ID related functions like getgid(), add -DGID_T=gid_t.
2123 * If you get compile-time complaints about data type mismatches for
2124 getpwuid(), add -DPWID_T=uid_t (or whatever it should be).
2126 File creation dates: C-Kermit attempts to set the creation date/time
2127 of an incoming file according to the date/time given in the file's
2128 attribute packet, if any. If you find that the dates are set
2129 incorrectly, you might need to build Kermit with the -DSYSUTIMEH flag,
2130 to tell it to include <sys/utime.h>. If that doesn't help, look at the
2131 code in zstrdt() in [271]ckufio.c.
2132 ________________________________________________________________________
2134 9.4. Hardware Flow Control
2136 [ [272]Top ] [ [273]Contents ] [ [274]Section Contents ] [ [275]Next ]
2139 Hardware flow control is a problematic concept in many popular Unix
2140 implementations. Often it is lacking altogether, and when available,
2141 the application program interface (API) to it is inconsistent from
2142 system to system. Here are some examples:
2144 a. POSIX does not support hardware flow control.
2145 b. RTS/CTS flow control support MIGHT be available for System V R3
2146 and later if /usr/include/termiox.h exists (its successful
2147 operation also depends on the device driver, and the device
2148 itself, not to mention the cable, etc, actually supporting it). If
2149 your SVR3-or-later Unix system does have this file, add:
2153 to your CFLAGS. If the file is in /usr/include/sys instead, add:
2157 Note that the presence of this file does not guarantee that
2158 RTS/CTS will actually work -- that depends on the device-driver
2159 implementation (reportedly, many Unix versions treat
2160 hardware-flow-control related ioctl's as no-ops).
2161 c. Search ("grep -i") through /usr/include/*.h and
2162 /usr/include/sys/*.h for RTS or CTS and see what turns up. For
2163 example, in SunOS 4.x we find "CRTSCTS". Figuring out how to use
2164 it is another question entirely! In IBM AIX RS/6000 3.x, we have
2165 to "add" a new "line discipline" (and you won't find uppercase RTS
2166 or CTS symbols in the header files).
2167 d. NeXTSTEP and IRIX, and possibly others, support hardware flow
2168 control, but do not furnish an API to control it, and thus on
2169 these systems Kermit has no command to select it -- instead, a
2170 special device name must be used. (NeXTSTEP: /dev/cufa instead of
2171 /dev/cua; IRIX: /dev/ttyf00)
2173 See the routine tthflow() in [277]ckutio.c for details. If you find
2174 that your system offers hardware flow control selection under program
2175 control, you can add this capability to C-Kermit as follows:
2177 a. See if it agrees with one of the methods already used in
2178 tthflow(). if not, add new code, appropriately #ifdef'd.
2179 b. Add -DCK_RTSCTS to the compiler CFLAGS in your makefile target or
2180 define this symbol within the appropriate #ifdefs in
2183 To illustrate the difficulties with RTS/CTS, here is a tale from Jamie
2184 Watson <jw@adasoft.ch>, who added the RTS/CTS code for the RS/6000,
2185 about his attempts to do the same for DEC ULTRIX:
2187 "The number and type of hardware signals available to/from a serial
2188 port vary between different machines and different types of serial
2189 interfaces on each machine. This means that, for example, there are
2190 virtually no hardware signals in or out available on the DECsystem
2191 3000/3100 series; on the DECsystem 5000/2xx series all modem
2192 signals in/out are present on both built-in serial ports; on the
2193 DECsystem 5100 some ports have all signals and some only have some;
2194 and so on... It looks to me as if this pretty well rules out any
2195 attempt to use hardware flow control on these platforms, even if we
2196 could figure out how to do it. The confusion on the user level
2197 about whether or not it should work for any given platform or port
2198 would be tremendous. And then it isn't clear how to use the
2199 hardware signals even in the cases where the device supports them."
2200 ________________________________________________________________________
2202 9.5. Terminal Speeds
2204 [ [279]Top ] [ [280]Contents ] [ [281]Section Contents ] [ [282]Next ]
2207 The allowable speeds for the SET SPEED command are defined in
2208 [284]ckcdeb.h. If your system supports speeds that are not listed in
2209 "set speed ?", you can add definitions for them to ckcdeb.h.
2211 Then if the speed you are adding is one that was never used before in
2212 Kermit, such as 921600, you'll also need to add the appropriate
2213 keywords to spdtab[] in [285]ckuus3.c, and the corresponding case to
2214 ttsspd() in [286]ckutio.c.
2215 ________________________________________________________________________
2217 9.6. Millisecond Sleeps
2219 [ [287]Top ] [ [288]Contents ] [ [289]Section Contents ] [ [290]Next ]
2222 There is no standard for millisecond sleeps, but at least five
2223 different functions have appeared in various Unix versions that can be
2224 used for this purpose: nap() (mostly in System V), usleep() (found at
2225 least in SunOS and NeXT OS), select() (found in 4.2BSD and later, and
2226 part of any TCP/IP sockets library), nanosleep(), and sginap(). If you
2227 have any of these available, pick one (in this order of preference, if
2228 you have more than one):
2230 -DSELECT: Include this in CFLAGS if your system has the select() function.
2231 -DNAP: Include this in CFLAGS if your system has the nap() function.
2232 -USLEEP: Include this in CFLAGS if your system has the usleep() function.
2234 NOTE: The nap() function is assumed to be a function that puts the
2235 process to sleep for the given number of milliseconds. If your
2236 system's nap() function does something else or uses some other units
2237 of time (like the NCR Tower 32, which uses clock-ticks), do not
2240 Reportedly, all versions of System V R4 for Intel-based computers, and
2241 possibly also SVR3.2, include nap() as a kernel call, but it's not in
2242 the library. To include code to use it via syscall(3112,x), without
2243 having to include Xenix compatibility features, include the following
2244 compile-time option:
2247 ________________________________________________________________________
2249 9.7. Nondestructive Input Buffer Peeking
2251 [ [292]Top ] [ [293]Contents ] [ [294]Section Contents ] [ [295]Next ]
2254 Some AT&T Unix versions have no way to check if input is waiting on a
2255 tty device, but this is a very important feature for Kermit. Without
2256 it, sliding windows might not work very well (or at all), and you also
2257 have to type your escape character to get Kermit's attention in order
2258 to interrupt a local-mode file transfer. If your system offers an
2259 FIONREAD ioctl, the build procedure should pick that up automatically
2260 and use it, which is ideal.
2262 If your system lacks FIONREAD but has a select() function, this can be
2263 used instead. If the build procedure fails to include it (SHOW
2264 FEATURES will list SELECT), then you can add it to your CFLAGS:
2268 Conversely, if the build procedure tries to use select() when it
2269 really is not there, add:
2273 Note: select() is not part of System V nor of POSIX, but it has been
2274 added to various System-V- and POSIX-based systems as an extension.
2276 Some System-V variations (SCO Xenix/UNIX/ODT and DIAB DNIX) include a
2277 rdchk() function that can be used for buffer peeking. It returns 0 if
2278 no characters are waiting and 1 if characters are waiting (but unlike
2279 FIONREAD, it does not tell the actual number). If your system has
2282 -DRDCHK: Include this in CFLAGS if your system has the rdchk() function.
2284 Otherwise, if your version of Unix has the poll() function (and the
2285 /usr/include/poll.h file) -- which appears to be a standard part of
2286 System V going back to at least SVR3, include:
2289 ________________________________________________________________________
2291 9.8. Other System-Dependent Features
2293 [ [297]Top ] [ [298]Contents ] [ [299]Section Contents ] [ [300]Next ]
2296 Systems with <termios.h> might have the symbol IEXTEN defined. This is
2297 used to turn "extended features" in the tty device driver on and off,
2298 such as Ctrl-O to toggle output flushing, Ctrl-V to quote input
2301 In most Unix implementations, it should be turned off during Kermit
2302 operation, so if [302]ckutio.c finds this symbol, it uses it. This is
2303 necessary, at least, on BSDI. On some systems, however, IEXTEN is
2304 either misdefined or misimplemented. The symptom is that CR, when
2305 typed to the command processor, is echoed as LF, rather than CRLF.
2306 This happens (at least) on Convex/OS 9.1. The solution is to add the
2307 following symbol to the makefile target's CFLACS:
2311 However, in at least one Unix implementation, QNX 4.21, IEXTEN must be
2312 set before hardware flow control can be used.
2314 In edits 177 and earlier, workstation users noticed a "slow screen
2315 writing" phenomenon during interactive command parsing. This was
2316 traced to a setbuf() call in [303]ckutio.c that made console (stdout)
2317 writes unbuffered. This setbuf() call has been there forever, and
2318 could not be removed without some risk. Kermit's operation was tested
2319 on the NeXT in edit 178 with the setbuf() call removed, and the
2320 slow-writing symptom was cured, and everything else (command parsing,
2321 proper wakeup on ?, ESC, Ctrl-U, and other editing characters,
2322 terminal emulation, remote-mode and local-mode file transfer, etc)
2323 seemed to work as well as or better than before. In subsequent edits,
2324 this change was made to many other versions too, with no apparent ill
2325 effects. To remove the setbuf() call for your version of Kermit, add:
2329 Later reports indicate that adding -DNOSETBUF has other beneficial
2330 effects, like cutting down on swapping when Kermit is run on
2331 workstations with small memories. But BEWARE: on certain small Unix
2332 systems, notably the AT&T 6300 and 3B1 (the very same ones that
2333 benefit from NOSETBUF), NOSETBUF seems to conflict with CK_CURSES. The
2334 program builds and runs OK, but after once using the curses display,
2335 echoing is messed up. In this case, we use a System-V specific
2336 variation in the curses code, using newterm() to prevent System V from
2337 altering the buffering. See makefile entries for AT&T 6300 and 3B1.
2339 The Unix version of C-Kermit includes code to switch to file
2340 descriptor zero (stdin) for remote-mode file transfer. This code is
2341 necessary to prevent Kermit from giving the impression that it is
2342 "idle" during file transfers, which, at some sites, can result in the
2343 job being logged out in the middle of an active file transfer by
2346 However, this feature can interfere with certain setups; for example,
2347 there is a package which substitutes a pty/tty pair for /dev/tty and
2348 sets file descriptor 0 to be read-only, preventing Kermit from sending
2349 packets. Or... When a Unix shell is invoked under the PICK
2350 environment, file descriptor 0 is inoperative.
2352 To remove this feature and allow Kermit to work in such environments,
2353 add the compile-time option:
2357 On some versions of Unix, earlier releases of C-Kermit were reported
2358 to render a tty device unusable after a hangup operation. Examples
2359 include IBM AIX on the RT PC and RS/6000. A typical symptom of this
2360 phenomenon is that the DIAL command doesn't work, but CONNECTing to
2361 the device and dialing manually do work. A further test is to SET DIAL
2362 HANGUP OFF, which should make dialing work once by skipping the
2363 pre-dial hangup. However, after the connection is broken, it can't be
2364 used any more: subsequent attempts to DIAL the same device don't work.
2365 The cure is usually to close and reopen the device as part of the
2366 hangup operation. To do this, include the following compile-time
2371 Similarly, there is a section of code in ttopen(), which does another
2372 close(open()) to force the O_NDELAY mode change. On some systems, the
2373 close(open()) is required to make the mode change take effect, and
2374 apparently on most others it does no harm. But reportedly on at least
2375 one System V R4 implementation, and on SCO Xenix 3.2, the
2376 close(open()) operation hangs if the device lacks carrier, EVEN THOUGH
2377 the CLOCAL characteristic has just been set to avoid this very
2378 problem. If this happens to you, add this to your CFLAGS:
2382 or, equivalently, in your KFLAGS on the make command line. It stands
2383 for NO Close(Open()) To Force Mode Change.
2385 C-Kermit renames files when you give a RENAME command and also
2386 according to the current SET FILE COLLISION option when receiving
2387 files. The normal Unix way to rename a file is via two system calls:
2388 link() and unlink(). But this leaves open a window of vulnerability.
2389 Some Unix systems also offer an atomic rename(oldname,newname)
2390 function. If your version of Unix has this function, add the following
2395 C-Kermit predefines the RENAME for several Unix versions in
2396 [304]ckcdeb.h (SVR4, SUNOS41, BSD44, AIXRS, etc). You can tell if
2397 rename() is being used if the SHOW FEATURES command includes RENAME in
2398 the compiler options list. If the predefined RENAME symbol causes
2399 trouble, then add NORENAME to your CFLAGS. Trouble includes:
2401 a. Linker complains that _rename is an unresolved symbol.
2402 b. Linking works, but Kermit's RENAME command doesn't work (which
2403 happens because older versions of rename() might have their
2404 arguments reversed).
2406 If rename() is not used, then Kermit uses link()/unlink(), which is
2407 equivalent except it is not atomic: there is a tiny interval in which
2408 some other process might "do something" to one of the files or links.
2410 Some Unix systems (Olivetti X/OS, Amdahl UTS/V, ICL SVR3, etc) define
2411 the S_ISREG and S_ISDIR macros incorrectly. This is compensated for
2412 automatically in [305]ckufio.c. Other systems might have this same
2413 problem. If you get a compile-time error message regarding S_ISREG
2414 and/or S_ISDIR, add the following to your CFLAGS:
2418 Finally, here's a symbol you should NEVER define:
2422 It's used for commenting out blocks of code. If for some reason you
2423 find that your compiler has COMMENT defined, then add -UCOMMENT to
2424 CFLAGS or KFLAGS! Similarly, some header files have been known to
2425 define COMMENT, in which case you must add "#undef COMMENT" to each
2426 C-Kermit source module, after all the #includes.
2427 ________________________________________________________________________
2429 9.9. Terminal Interruption
2431 [ [306]Top ] [ [307]Contents ] [ [308]Section Contents ] [ [309]Next ]
2434 When C-Kermit enters interactive command mode, it sets a Control-C
2435 (terminal keyboard interrupt = SIGINT) trap to allow it to return to
2436 the command prompt whenever the user types Control-C (or whatever is
2437 assigned to be the interrupt character). This is implemented using
2438 setjmp() and longjmp(). On some systems, depending on the machine
2439 architecture and C compiler and who knows what else, you might get
2440 "Memory fault (coredump)" or "longjmp botch" instead of the desired
2441 effect (this should not happen in 5A(190) and later). In that case,
2442 add -DNOCCTRAP to your CFLAGS and rebuild the program.
2444 Job control -- the ability to "suspend" C-Kermit on a Unix system by
2445 typing the "susp" character (normally Ctrl-Z) and then resume
2446 execution later (with the "fg" command) -- is a tricky business.
2447 C-Kermit must trap suspend signals so it can put the terminal back
2448 into normal mode when you suspend it (Kermit puts the terminal into
2449 various strange modes during interactive command parsing, CONNECT, and
2450 file transfer). Supporting code is compiled into C-Kermit
2451 automatically if <signal.h> includes a definition for the SIGTSTP
2452 signal. HOWEVER... some systems define this signal without supporting
2453 job control correctly. You can build Kermit to ignore SIGTSTP signals
2454 by including the -DNOJC option in CFLAGS. (You can also do this at
2455 runtime by giving the command SET SUSPEND OFF.)
2457 NOTE: As of version 5A(190), C-Kermit makes another safety check.
2458 Even if job control is available in the operating system (according
2459 to the numerous checks made in congm()), it will still disable the
2460 catching of SIGTSTP signals if SIGTSTP was set to SIG_IGN at the
2461 time C-Kermit was started.
2463 System V R3 and earlier systems normally do not support job control.
2464 If you have an SVR3 system that does, include the following option in
2469 On systems that correctly implement POSIX signal handling, signals can
2470 be handled more reliably than in Bell, Berkeley, or AT&T Unixes. On
2471 systems (such as QNX) that are "strictly POSIX", POSIX signal handling
2472 *must* be used, otherwise no signal will work more than once. If you
2473 have POSIX-based system and you find that your version of Kermit
2474 responds to Ctrl-C (SIGINT) or Ctrl-Z (SIGTSTP) only once, then you
2475 should add the following option to your CFLAGS:
2479 But be careful; some POSIX implementations, notably 4.4BSD, include
2480 POSIX signal handling symbols and functions as "stubs" only, which do
2481 nothing. Look in <signal.h> for sigsetjmp and siglongjmp and read the
2483 __________________________________________________________________________
2485 10. DIALING OUT AND COORDINATING WITH UUCP
2487 [ [311]Top ] [ [312]Contents ] [ [313]Next ] [ [314]Previous ]
2489 NOTE: Red Hat Linux 7.2 and later include a new API that allows
2490 serial-port arbitration by non-setuid/gid programs. This API has
2491 not yet been added to C-Kermit. If C-Kermit is to be used for
2492 dialing out on Red Hat 7.2 or later, it must still be installed as
2493 described in this section and the next.
2497 In order for C-Kermit to be able to dial out from your Unix
2498 computer, you need to give it the same owner, group, and
2499 permissions as your other dialout programs, such as cu, tip,
2500 minicom, uucp, seyon, etc.
2504 Make sure your dialout line is correctly configured for dialing out
2505 (as opposed to login). The method for doing this is different for each
2506 kind of Unix. Consult your system documentation for configuring lines
2507 for dialing out (for example, Sun SPARCstation IPC users should read
2508 the section "Setting up Modem Software" in the Desktop SPARC Sun
2509 System and Network Manager's Guide, or the Terminals and Modems
2510 section of the HP manual, "Configuring HP-UX for Peripherals" (e.g.
2511 /usr/sbin/sam => Peripheral Devices => Terminals and Modems => Add
2514 Unlike most other multiuser, multitasking operating systems, Unix
2515 allows multiple users to access the same serial device at the same
2516 time, even though there is no earthly reason why two users should do
2517 this. When they do, user A will read some of the incoming characters,
2518 and user B will read the others. In all likelihood, neither user will
2519 see them all. Furthermore, User B can hang up User A's call, etc.
2521 Rather than change Unix to enforce exclusive access to serial devices
2522 such as ttys, Unix developers chose instead to use a "lock file". Any
2523 process that wants to open a tty device should first check to see if a
2524 file of a certain name exists, and if so, not to open the device. If
2525 the file does not exist, the process creates the file and then opens
2526 the device. When the process closes the device, it destroys the
2527 lockfile. This procedure was originated for use with Unix's UUCP, CU,
2528 and TIP programs, and so these lockfiles are commonly called "UUCP
2529 lockfiles" (UUCP = Unix-to-Unix Copy Program).
2531 As you can imagine, this method is riddled with pitfalls:
2533 * If a process does not observe the prevailing lockfile convention,
2534 then it can interfere with other "polite" processes. And in fact,
2535 very few Unix applications or commands handle lockfiles at all; an
2536 original design goal of Unix was that "everything is a file", and
2537 countless utilities operate on files directly (by opening them) or
2538 indirectly through redirection of standard i/o, without creating
2539 or looking for lockfiles.
2540 * If a process crashes while it has the device open, the lockfile is
2541 left behind, preventing further processes from using the device.
2542 * Various versions of Unix use different names for the lockfiles,
2543 put them in different directories, with different owners and
2544 groups and permissions, and specify their contents differently.
2545 * On a given platform, the lockfile conventions may change from one
2546 Unix release to the next (for example, SunOS 4.0 to 4.1) or, in
2547 the case of Linux, across different distributions.
2548 * The same tty device might have more than one name, and most
2549 lockfile conventions don't allow for this. Similarly for symbolic
2552 In an attempt to address the problem of "stale" lockfiles, most UUCP
2553 implementations put the PID (Process ID) of the creating process in
2554 the lockfile. Thus, another process that wants to open the
2555 corresponding device can check not only for the lockfile itself, but
2556 also can check the PID for validity. But this doesn't work well
2559 * PIDs are stored in diverse formats that change with every new
2560 release (short, integer, long, or string in any of various
2561 formats). If the reading program does not follow the same
2562 convention as the writing program, it can diagnose a valid PID to
2563 be invalid, and therefore not honor the lock.
2564 * PIDs recycle. If the lockfile was created by PID 1234, which later
2565 crashed without removing the lockfile, and then a new process 1234
2566 exists a the time the lockfile is checked, the lockfile will be
2567 improperly taken as valid, and access to the device denied
2570 Several techniques address the problem of multiple names for the same
2573 * Multiple lockfiles. For example, if the user opens a device
2574 through a symlink, a lockfile is created for both the symlink name
2575 and the true name (obtained from readlink()). However, when
2576 multiple drivers are installed for the same device (e.g. /dev/cua,
2577 /dev/cufa, etc), this approach won't work unless all applications
2578 *know* all the different names for the same device and make
2579 lockfiles for all of them, which is obviously not practical.
2580 * Lockfiles whose names are not based on the device name. These
2581 lockfiles generally have names like LK.inode/major/minor, where
2582 inode, major, and minor are numbers, which will always be the same
2583 for any physical device, no matter what its name. This form of
2584 lockfile is used in System V R4 and its derivatives, such as
2585 Solaris, UnixWare, etc. If lockfiles must be used (as opposed to,
2586 say, kernel-based locks), this would seem to be the most effective
2589 Most versions of Unix were not designed to accommodate third-party
2590 communications software; thus vendors of these Unix products feel no
2591 compunction about changing lockfile conventions from release to
2592 release, since they also change their versions of the cu, uucp, tip,
2593 etc, programs at the same time to match. And since the source code to
2594 these programs might not be published, it is difficult for makers of
2595 third-party products like C-Kermit to find out what the new
2596 conventions are. It also forces release of new versions of C-Kermit
2597 whenever the OS vendor makes a change like this.
2599 Some Unix vendors have taken a small step to simplify communications
2600 application development for their products: the inclusion of lockfile
2601 routines in the standard system C runtime libraries to shield the
2602 application from the details of lockfile management (IBM AIX is an
2603 example). When such routines are used, communications applications do
2604 not need modification when lockfile conventions change (although they
2605 will need recompiling if the routines are statically linked into the
2606 application). In the AIX example, the simple function calls ttylock(),
2607 ttyunlock(), and ttylocked() replace hundreds of lines of ugly code in
2608 C-Kermit that attempts to keep pace with every release of every Unix
2609 product over the last 20 years. Inclusion of ttylock() code occurs
2614 is included in the CFLAGS.
2616 If such routines are available, they should be used. The rest of this
2617 section applies when they are not.
2619 To fit in with UUCP and other Unix-based communication software,
2620 C-Kermit must have the same idea as your system's uucp, cu, and tip
2621 programs about what the UUCP lock directory is called, what the
2622 lockfile itself is called, and what its contents should be. In most
2623 cases, C-Kermit preprocessor flags create the appropriate
2624 configuration at compile time if the appropriate makefile target was
2625 used (see [315]ckutio.c). The following CFLAGS options can be used to
2626 override the built-in configuration:
2629 Tells Kermit that the UUCP lock directory is
2630 /usr/spool/uucp/LCK.
2633 Tells Kermit to use the BSD 4.3 acucntrl() program to turn off
2634 getty (login) on the line before using it, and restore getty
2638 Include this if your system uses Honey DanBer UUCP, in which
2639 the lockfile directory and format are relatively standardized.
2641 -DLOCK_DIR=\\\"/xxx/yyy\\\"
2642 Gives the lock directory name explicitly. The triple quoting is
2643 necessary. For example:
2645 CFLAGS= -DBSD4 -DLOCK_DIR=\\\"/usr/local/locks\\\" -DNODEBUG
2647 (NOTE: The triple quoting assumes this is a "top-level" make
2648 entry, and not a make entry that calls another one.)
2650 -DLFDEVNO The lockfile name uses the tty device inode and major and
2652 numbers: LK.dev.maj.min, as in Sys V R4, e.g. LK.035.044.008.
2654 When the LK.inode.major.minor form is used, a single lockfile is
2655 enough. Otherwise, a single lockfile rarely suffices. For example, in
2656 Linux, it is common to have a /dev/modem symbolic link to an actual
2657 dialout device, like /dev/cua0 or /dev/ttyS0, whose purpose is to hide
2658 the details of the actual driver from the user. So if one user opens
2659 /dev/modem, a lockfile called LCK..modem is created, which does not
2660 prevent another user from simulataneously opening the same device by
2663 On SCO Unix platforms, we have a slightly different problem: the same
2664 device is, by convention, known by "lowercase" and "uppercase" names,
2665 depending on whether it has modem control. So by convention,
2666 communications programs are supposed to create the lockfiles based on
2667 the lowercase name. But some programs don't follow this convention. In
2668 HP-UX, we have several different names for each serial device. And so
2671 For this reason, on platforms where the LK.inode.major.minor form is
2672 not used, C-Kermit also creates a secondary lockfile (which is simply
2673 a link to the first) if:
2675 a. The given device name is a symbolic link. The secondary link is
2676 based on the device's real name.
2677 b. On SCO: The device name is not a symbolic link, but it contains
2678 uppercase letters. The primary link is based on the lowercase
2679 name; the secondary link is based on the name that was given.
2680 c. On HP-UX: The device name starts with "cu". The primary link is
2681 based on the name that was given; the secondary link is based on
2682 the corresponding "ttyd" device, e.g. "LCK..cua0p0" and
2685 NOTE: symlinks are not handled in HP-UX.
2687 Honey DanBer (HDB) UUCP, which is becoming increasingly popular, has
2688 two characteristics:
2690 a. Lockfiles are kept in /usr/spool/locks/ (usually).
2691 b. A lockfile contains the process id (pid) in ASCII, rather than as
2694 Non-HDB selections assume the lockfile contains the pid in int form
2695 (or, more precisely, in PID_T form, where PID_T is either int or
2696 pid_t, depending on your system's C library and header files). (b), by
2697 the way, is subject to interpretation: the numeric ASCII string may or
2698 may not be terminated by a newline, it may or may not have leading
2699 spaces (or zeros), and the number of leading spaces or zeros can
2700 differ, and the differences can be significant.
2702 Even if you build the program with the right lockfile option, you can
2703 still have problems when you try to open the device. Here are the
2704 error messages you can get from SET LINE, and what they mean:
2706 a. "Timed out, no carrier." This one is not related to lockfiles. It
2707 means that you have SET CARRIER ON xx, where xx is the number of
2708 seconds to wait for carrier, and carrier did not appear within xx
2709 seconds. Solution: SET CARRIER AUTO or OFF.
2710 b. "Sorry, access to lock denied." Kermit has been configured to use
2711 lockfiles, but (a)the lockfile directory is write-protected
2712 against you, or (b) it does not exist. The "access to lock denied"
2713 message will tell you the reason. If the directory does not exist,
2714 check to make sure Kermit is using the right name. Just because
2715 version n of your Unix used a certain lockfile directory is no
2716 gurantee that version n.1 does not use a different one.
2717 Workaround: ask the system administrator to install a symbolic
2718 link from the old name to the new name. Other solutions: (see
2720 c. "Sorry, access to tty device denied." The tty device that you
2721 specified in your SET LINE command is read/write protected against
2722 you. Solution: (see below)
2723 d. "Sorry, device is in use." The tty device you have specified is
2724 currently being used by another user. A prefatory message gives
2725 you an "ls -l" listing of the lockfile, which should show the
2726 username of the person who created it, plus a message "pid = nnn"
2727 to show you the process id of the user's program. Solutions: try
2728 another device, wait until the other user is finished, ask the
2729 other user to hurry up, or ask the system manager for help.
2730 e. "Sorry, can't open connection: reason". The device cannot be
2731 opened for some other reason, which is listed.
2732 f. "sh: /usr/lib/uucp/acucntrl: not found". This means your Kermit
2733 program was built with the -DACUCNTRL switch, but your computer
2734 system does not have the BSD 4.3 acucntrl program. Solution:
2735 install the acucntrl program if you have it, or rebuild Kermit
2736 without the -DACUCNTRL switch.
2738 There are two solutions for problems (b) and (c), both of which
2739 involve intervention by your Unix system administrator (superuser):
2741 a. Have the superuser change the permission of the lockfile directory
2742 and to the tty devices so that everyone on the system has
2743 read/write permission.
2745 su% chmod 777 /usr/spool/locks (or whatever the path is)
2746 su% chmod 666 /dev/ttyXX
2748 One risk here is that people can write lots of junk into the
2749 lockfile directory, delete other people's files in the lockfile
2750 directory, and intercept other people's data as it goes in and out
2751 of the tty device. The major danger here would be intercepting a
2752 privileged password. Of course, any user could write a short,
2753 ordinary, unprivileged program to do exactly the same thing if the
2754 tty device was world read/writeable. The other risk as that
2755 telephone calls are not controlled -- anybody on your system can
2756 make them, without having to belong to any particular group, and
2757 this could run up your phone bill.
2758 b. Use groups to regulate access. Normally the lockfile directory and
2759 and the dialout devices will have the same group (such as uucp).
2760 If so, then put everybody who's allowed to dial out into that
2761 group, and make sure that the lockfile directory and the tty
2762 devices have group read AND write permission. Example:
2764 su% chmod 770 /usr/spool/locks (or whatever the path is)
2765 su% chmod 660 /dev/ttyXX
2767 User whatever tool is available on your platform to add users to
2768 the appropropriate group (e.g. edit the /etc/group file).
2769 c. Have the superuser change Kermit to run setuid and/or setgid to
2770 the owner and/or group of the lockfile directory and the tty
2771 devices if necessary), typically uucp (see [316]next section), but
2774 su% chown uucp kermit - or - chgrp uucp kermit
2775 su% chmod u+s kermit (setuid) - or - chmod g+s kermit (setgid)
2777 and then make sure the lockfile directory, and the tty devices,
2778 have owner (setuid) and/or group (setgid) write permission. For
2781 su% chmod o+rwx /usr/spool/uucp
2782 su% chown uucp /dev/ttyXX ; chmod 600 /dev/ttyXX
2784 In some cases, the owner and group must be distinct; the key point
2785 is that read/write access is required to both the UUCP lockfile
2786 directory and the tty itself.
2788 If you make C-Kermit setuid or setgid to root, it refuses to run:
2790 Fatal: C-Kermit setuid to root!
2794 crw-r----- 1 uucp uucp 5, 67 Feb 11 06:23 /dev/cua3
2795 drwxrwxr-x 3 root uucp 1024 Feb 11 06:22 /var/lock
2797 requires suid uucp to get read/write access on /dev/cua3 and sgid to
2798 get read/write access on /var/lock (since you can't set Kermit's uid
2801 The reason Kermit can't be setuid or setgid to root has to do with
2802 the fact that some Unix OS's can't switch user or group IDs in that
2803 case. Unfortunately, the prohibition against making Kermit setuid
2804 or setgid to root means that Unix C-Kermit can't be used to make
2805 rlogin connections by non-root users. (The rlogin port is
2806 privileged, which is why the regular rlogin command is setuid root
2807 -- which is safe because the rlogin program never has to create or
2808 access files like Kermit does.)
2810 For the lockfile mechanism to achieve its desired purpose --
2811 prevention of access to the same tty device by more than one process
2812 at a time -- ALL programs on a given computer that open, read or
2813 write, and close tty devices must use the SAME lockfile conventions.
2814 Unfortunately, this is often not the case. Here is a typical example
2815 of how this can go wrong: In SunOS 4.0 and earler, the lockfile
2816 directory was /usr/spool/uucp; in 4.1 it was changed to
2817 /var/spool/locks in the quest for political correctness. Consequently,
2818 any third-party programs (such as C-Kermit) that were not modified to
2819 account for this change, recompiled, and reinstalled, did not use the
2820 same lockfiles as uucp, tip, etc, and so the entire purpose of the
2821 lockfile is defeated.
2823 What if your Unix system does not have UUCP installed? For example,
2824 you have a Unix workstation, and you do not use uucp, cu, or tip, or
2825 UUCP was not even supplied with your version of Unix (QNX is an
2826 example). In this case, you have two choices:
2828 a. If there may be more than one person running Kermit at the same
2829 time, competing for the same tty device, then create a special
2830 lockfile directory just for Kermit, for example,
2831 /usr/spool/kermit, and make sure you have read/write access to it.
2832 Then add the following to your makefile target CFLAGS, as shown
2835 -DLOCK_DIR=\\\"/usr/spool/kermit\\\"
2837 b. If you are the only user on your workstation, and no other
2838 processes will ever be competing with Kermit for the dialout tty
2839 device, then add -DNOUUCP to your makefile target's CFLAGS and
2841 __________________________________________________________________________
2843 11. RUNNING UNIX C-KERMIT SETUID OR SETGID
2845 [ [317]Top ] [ [318]Contents ] [ [319]Next ] [ [320]Previous ]
2847 Even if you don't intend to run C-Kermit setuid, somebody else might
2848 come along and chown and chmod it after it has been built. You should
2849 be sure that it is built correctly to run setuid on your system. For
2850 POSIX and AT&T Unix based versions, you don't have to do anything
2853 For 4.2 and 4.3 BSD-based Unix versions, you normally need not add
2854 anything special to the makefile. The program assumes that the
2855 setreuid() and setregid() functions are available, without which we
2856 cannot switch back and forth between real and effective uids. If
2857 "make" complains that _setreuid or _setregid is/are not defined, add
2858 -DNOSETREU to CFLAGS. In this case it is very likely (but not certain)
2859 that you cannot protect ttys and lockfiles against people and have
2860 them run Kermit setuid.
2862 If make does not complain about this, you should find out whether your
2863 BSD version (4.3 or other systems like SunOS 4.x that claim to include
2864 BSD 4.3 compatibility) includes the saved-setuid feature (see long
2865 notes under edit 146 in ckc178.upd). If it does, then add -DSAVEDUID
2868 IMPORTANT NOTE: Most Unix system documentation will not give you
2869 the required information. To determine whether your Unix system
2870 supplies the the saved-original-effective-user/group-id feature,
2871 use the ckuuid.c program. Read and follow the instructions in the
2872 comments at the beginning.
2874 C-Kermit for 4.4BSD-based systems automatically use sete[ug]id(). See
2877 If you have a version of Unix that is not BSD-based, but which
2878 supplies the setreuid() and setregid() functions, and these are the
2879 only way to switch between real and effective uid, add -DSETREUID to
2880 your makefile target.
2882 WARNING: There are two calls to access() in [322]ckufio.c, by which
2883 Kermit checks to see if it can create an output file. These calls
2884 will not work correctly when (a)you have installed C-Kermit setuid
2885 or setgid on a BSD-based Unix system, and (b) the
2886 saved-original-effective-uid/gid feature is not present, and (c)
2887 the access() function always checks what it believes to be the real
2888 ID rather than the effective ID. This is the case, for example, in
2889 Olivetti X/OS and in NeXTSTEP. In such cases, you can force correct
2890 operation of access() calls by defining the symbol SW_ACC_ID at
2891 compile time in CFLAGS.
2893 If you have a version of Unix that does not allow a process to switch
2894 back and forth between its effective and real user and group ids
2895 multiple times, you probably should not attempt to run Kermit setuid,
2896 because once having given up its effective uid or gid (which it must
2897 do in order to transfer files, fork a shell, etc) it can never get it
2898 back, and so it can not use the original effective uid or gid to
2899 create or delete uucp lockfiles. In this case, you'll either have to
2900 set the permissions on your lockfile directory to make them publicly
2901 read/writable, or dispense with locking altogether.
2903 MORAL: Are you thoroughly sickened and/or frightened by all that you
2904 have just read? You should be. What is the real answer? Simple. Serial
2905 devices -- such as ttys and magnetic tapes -- in Unix should be opened
2906 with exclusive access only, enforced by the Unix kernel. Shared access
2907 has no conceivable purpose, legitimate or otherwise, except by
2908 privileged system programs such as getty. The original design dates
2909 from the late 1960s, when Unix was developed for laboratory use under
2910 a philosophy of trust by people within shouting distance of each other
2911 -- but even then, no useful purpose was served by this particular form
2912 of openness; it was probably more of a political statement. Since the
2913 emergence of Unix from the laboratory into the commercial market, we
2914 have seen every vestige of openness -- but this one -- stripped away.
2915 I'd like to see some influential Unix maker take the bold step of
2916 making the simple kernel change required to enforce exclusive access
2917 to serial devices. (Well, perhaps not so simple when bidirectionality
2918 must also be a goal -- but then other OS's like VMS solved this
2919 problem decades ago.)
2920 __________________________________________________________________________
2922 12. CONFIGURING UNIX WORKSTATIONS
2924 [ [323]Top ] [ [324]Contents ] [ [325]Next ] [ [326]Previous ]
2926 On desktop workstations that are used by only the user at the console
2927 keyboard, C-Kermit is always used in local mode. But as delivered,
2928 C-Kermit runs in remote mode by default. To put it in local mode at
2929 startup, you can put a SET LINE command in your .mykermrc.
2931 You can also build C-Kermit to start up in local mode by default. To
2932 do this, include the following in the CFLAGS in your makefile target:
2934 -DDFTTY=\\\"/dev/ttyxx\\\"
2936 where ttyxx is the name of the device you will be using for
2937 communications. Presently there is no way of setting the default modem
2938 type at compile time, so use this option only for direct lines.
2940 C-Kermit does not work well on certain workstations if it is not run
2941 from within a terminal window. For example, you cannot start C-Kermit
2942 on a NeXT by launching it directly from NeXTstep. Similarly for Sun
2943 workstations in the Open Windows environment. Run Kermit in a terminal
2945 __________________________________________________________________________
2947 13. BIZARRE BEHAVIOR AT RUNTIME
2949 [ [327]Top ] [ [328]Contents ] [ [329]Next ] [ [330]Previous ]
2951 See the "beware file",
2953 [331]ckubwr.txt, for hints about runtime misbehavior. This section
2954 lists some runtime problems that can be cured by rebuilding C-Kermit.
2956 The program starts, but there is no prompt, and certain operations
2957 don't work (you see error messages like "Kermit command error in
2958 background execution"). This is because Kermit thinks it is running in
2959 the background. See conbgt() in [332]ckutio.c. Try rebuilding Kermit
2964 added to your CFLAGS. If that doesn't help, find out the actual data
2965 type for pids (look in types.h or similar file) and use it in place of
2966 "pid_t", for example:
2970 Unexplainable and inappropriate error messages ("Sockets not supported
2971 on this device", etc) have been traced in at least one case to a lack
2972 of agreement between the system header files and the actual kernel.
2973 This happened because the GNU C compiler (gcc) was being used. gcc
2974 wants to have ANSI-C-compliant header files, and so part of the
2975 installation procedure for gcc is (or was) to run a shell script
2976 called "fixincludes", which translates the system's header files into
2977 a separate set of headers that gcc likes. So far so good. Later, a new
2978 version of the operating system is installed and nobody remembers to
2979 run fixincludes again. From that point, any program compiled with gcc
2980 that makes use of header files (particularly ioctl.h) is very likely
2981 to misbehave. Solution: run fixincludes again, or use your system's
2982 regular C compiler, libraries, and header files instead of gcc.
2983 __________________________________________________________________________
2985 14. CRASHES AND CORE DUMPS
2987 [ [333]Top ] [ [334]Contents ] [ [335]Next ] [ [336]Previous ]
2989 If C-Kermit constitently dumps core at the beginning of a file
2990 transfer, look in SHOW FEATURES for CKREALPATH. If found, rebuild with
2991 -DNOREALPATH and see if that fixes the problem (some UNIXes have
2992 realpath() but it doesn't work).
2994 Total failure of the Kermit program can occur because of bad memory
2995 references, bad system calls, or problems with dynamic memory
2996 allocation. First, try to reproduce the problem with debugging turned
2997 on: run Kermit with the -d command-line option (for example, "wermit
2998 -d") and then examine the resulting debug.log file. The last entry
2999 should be in the vicinity of the crash. In VMS, a crash automatically
3000 produces a "stack dump" which shows the routine where the crash
3001 occurs. In some versions of Unix, you can get a stack dump with "adb"
3002 -- just type "adb wermit core" and then give the command "$c", then
3003 Ctrl-D to quit (note: replace "wermit" by "kermit" or by the full
3004 pathname of the executable that crashed if it is not in the current
3005 directory). Or use gdb to get a backtrace, etc.
3007 In edit 186, one implementation, UNISYS 5000/95 built with "make
3008 sys5r3", has been reported to run out of memory very quickly (e.g.
3009 while executing a short initialization file that contains a SET DIAL
3010 DIRECTORY command). Debug logs show that malloc calls are failing,
3011 reason unknown. For this and any other implementation that gives error
3012 messages about "malloc failure" or "memory allocation failure",
3013 rebuild the program *without* the -DDYNAMIC CFLAGS definition, for
3016 make sys5r3 KFLAGS=-UDYNAMIC
3018 As of edit 169, C-Kermit includes a malloc() debugging package which
3019 you may link with the Kermit program to catch runtime malloc errors.
3020 See the makefile entries for sunos41md and nextmd for examples of how
3021 to select malloc debugging. Once you have linked Kermit with the
3022 malloc debugger, it will halt with an informative message if a
3023 malloc-related error occurs and, if possible, dump core. For this
3024 reason, malloc-debugging versions of Kermit should be built without
3025 the "-s" link option (which removes symbols, preventing analysis of
3026 the core dump). You have several ways to track down the malloc error:
3027 Analyze the core dump with adb. Or reproduce the problem with "log
3028 debug" and then look at the code around the last debug.log entry. If
3029 you have gcc, build the program with "-g" added to CFLAGS and then
3030 debug it with gdb, e.g.
3035 .. set other breakpoints or watchpoints
3038 Watchpoints are especially useful for finding memory leaks, but they
3039 make the program run about a thousand times slower than usual, so
3040 don't set them until the last possible moment. When a watchpoint is
3041 hit, you can use the "where" command to find out which C-Kermit source
3042 statement triggered it.
3044 If you have the Pure Software Inc "Purify" product, see the sunos41cp
3045 makefile entry for an example of how to use it to debug C-Kermit.
3046 __________________________________________________________________________
3050 [ [337]Top ] [ [338]Contents ] [ [339]Next ] [ [340]Previous ]
3052 "Syslogging" means recording selected in the system log via the Unix
3053 syslog() facility, which is available in most Unix versions.
3054 Syslogging is not done unless C-Kermit is started with:
3058 on the command-line, where n is a number greater than 0 to indicate
3059 the level of syslogging. See [341]Section 4.2 of the [342]IKSD
3060 Administrator's Guide for details.
3062 Obviously you can't depend on users to include --syslog:3 (or
3063 whatever) on the command line every time they start C-Kermit, so if
3064 you want certain kinds of records to be recorded in the system log,
3065 you can build C-Kermit with forced syslogging at the desired level,
3068 make linux KFLAGS=-DSYSLOGLEVEL=2
3070 Levels 2 and 3 are the most likely candidates for this treatment.
3071 Level 2 forces logging of all successful dialout calls (e.g. for
3072 checking against or phone bills), and level 3 records all connections
3073 (SET LINE or SET HOST / TELNET / RLOGIN, etc) so you can see who is
3074 connecting out from your system, and to where.
3076 Level 2 and 3 records are equivalent to those in the connection log;
3077 see the [343]C-Kermit 7.0 Supplement) for a detailed description of
3079 __________________________________________________________________________
3081 16. BUILDING SECURE VERSIONS OF C-KERMIT 8.0
3083 [ [344]Top ] [ [345]Contents ] [ [346]Next ] [ [347]Previous ]
3085 C-Kermit 7.0 and later may be built with Kerberos(TM) and/or SRP(TM)
3086 (Secure Remote Password) and/or SSL/TLS security for strong
3087 authentication and encryption of Internet connections. These security
3088 methods require external libraries that, in their binary forms, are
3089 restricted from export by USA law. See the [348]Kermit Security
3090 Reference) for details. C-Kermit binaries themselves are likewise
3091 restricted; the C-Kermit binaries that are available for public
3092 download on the Internet are not allowed to contain the security
3095 Sample makefile entries are provided for Linux and many other
3096 operating systems. A list of secure makefile entries is included in
3097 the Makefile. Complete instructions on building C-Kermit 8.0 with MIT
3098 Kerberos; Secure Remote Password; and/or OpenSSL can be found in the
3099 [349]Kermit Security Reference.
3101 C-Kermit 8.0 comes with a current list of Certificate Authority
3102 certificates, including one for the Kermit Project that can be used
3103 for authentication to Columbia's [350]Internet Kermit Service (IKSD).
3104 You can use C-Kermit 7.0 or later to access Columbia's IKSD securely
3105 by installing the Kermit Project certificate in
3106 /usr/local/ssl/cert.pem (or the appropriate location based upon the
3107 installation of OpenSSL on your system). You can find a copy of the
3108 certificates file at:
3110 [351]ftp://kermit.columbia.edu/kermit/c-kermit/ca_certs.pem
3111 __________________________________________________________________________
3113 17. INSTALLING C-KERMIT AS AN SSH SERVER SUBSYSTEM
3115 [ [352]Top ] [ [353]Contents ] [ [354]Previous ]
3117 This requires C-Kermit 8.0.206 or later and an SSH v2 server. If you
3118 list C-Kermit as a Subsystem in the SSH v2 server configuration file
3119 (as, for example, SFTP is listed), users can make SSH connections
3120 direct to a Kermit server as explained here:
3122 [355]http://www.columbia.edu/kermit/skermit.html
3124 The name and location of the SSH server configuration file depends on
3125 your platform, which SSH product(s) you have, etc. C-Kermit itself
3126 must be referred to in this file as "kermit-sshsub". On the host,
3127 install the C-Kermit 8.0.211 binary in the normal way. Then, in the
3128 same directory as the C-Kermit binary, make a symbolic link:
3130 ln -s kermit kermit-sshsub
3132 (Note: the "make install" makefile target does this for you.) Then in
3133 the sshd configuration file, add a line:
3135 Subsystem kermit /some/path/kermit-sshsub
3137 (where /some/path is the fully specified directory where the symlink
3138 is.) This is similar to the line that sets up the SFTP susbsystem.
3141 Subsystem sftp /usr/local/libexec/sftp-server
3142 Subsystem kermit /usr/local/bin/kermit-sshsub
3144 The mechanics might vary for other SSH servers; "man sshd" for
3145 details. The method shown here is used because the OpenSSH server does
3146 not permit the subsystem invocation to include command-line options.
3147 C-Kermit would have no way of knowing that it should enter Server mode
3148 if it were not called by a special name.
3150 [ [356]Top ] [ [357]Contents ] [ [358]C-Kermit Home ] [ [359]C-Kermit
3151 8.0 Overview ] [ [360]Kermit Home ]
3152 _________________________________________________________________
3155 C-Kermit 8.0 Unix Installation Instructions / The Kermit Project /
3156 Columbia University / 10 April 2004
3160 1. http://www.columbia.edu/kermit/ckuins.html#contents
3161 2. http://www.columbia.edu/kermit/ckermit.html
3162 3. http://www.columbia.edu/kermit/index.html
3163 4. http://www.columbia.edu/kermit/ckuins.html
3164 5. http://www.columbia.edu/kermit/ckuins.html#x0
3165 6. http://www.columbia.edu/kermit/ckuins.html#x1
3166 7. http://www.columbia.edu/kermit/ckuins.html#x2
3167 8. http://www.columbia.edu/kermit/ckuins.html#x3
3168 9. http://www.columbia.edu/kermit/ckuins.html#x4
3169 10. http://www.columbia.edu/kermit/ckuins.html#x5
3170 11. http://www.columbia.edu/kermit/ckuins.html#x6
3171 12. http://www.columbia.edu/kermit/ckuins.html#x7
3172 13. http://www.columbia.edu/kermit/ckuins.html#x8
3173 14. http://www.columbia.edu/kermit/ckuins.html#x9
3174 15. http://www.columbia.edu/kermit/ckuins.html#x10
3175 16. http://www.columbia.edu/kermit/ckuins.html#x11
3176 17. http://www.columbia.edu/kermit/ckuins.html#x12
3177 18. http://www.columbia.edu/kermit/ckuins.html#x13
3178 19. http://www.columbia.edu/kermit/ckuins.html#x14
3179 20. http://www.columbia.edu/kermit/ckuins.html#x15
3180 21. http://www.columbia.edu/kermit/ckuins.html#x16
3181 22. http://www.columbia.edu/kermit/ckuins.html#x16
3182 23. http://www.columbia.edu/kermit/ckuins.html#top
3183 24. http://www.columbia.edu/kermit/ckuins.html#contents
3184 25. http://www.columbia.edu/kermit/ckuins.html#x1
3185 26. http://www.columbia.edu/kermit/ckccfg.html
3186 27. http://www.columbia.edu/kermit/ckcbwr.html
3187 28. http://www.columbia.edu/kermit/ckubwr.html
3188 29. http://www.columbia.edu/kermit/ckcplm.html
3189 30. http://www.columbia.edu/kermit/ckuins.html#x2
3190 31. http://www.columbia.edu/kermit/x3
3191 32. http://www.columbia.edu/kermit/ckuins.html#x4
3192 33. http://www.columbia.edu/kermit/ckuins.html#top
3193 34. http://www.columbia.edu/kermit/ckuins.html#contents
3194 35. http://www.columbia.edu/kermit/ckuins.html#x2
3195 36. http://www.columbia.edu/kermit/ckuins.html#x0
3196 37. ftp://kermit.columbia.edu/kermit/archives/cku211.tar.Z
3197 38. ftp://kermit.columbia.edu/kermit/archives/cku211.tar.gz
3198 39. ftp://kermit.columbia.edu/kermit/archives/cku211.tar
3199 40. http://www.columbia.edu/kermit/ckuins.html#x7
3200 41. http://www.columbia.edu/kermit/ckuins.html#x5
3201 42. http://www.columbia.edu/kermit/ckuins.html#x5
3202 43. http://www.columbia.edu/kermit/ckuins.html#x16
3203 44. http://www.columbia.edu/kermit/ckuins.html#top
3204 45. http://www.columbia.edu/kermit/ckuins.html#contents
3205 46. http://www.columbia.edu/kermit/ckuins.html#x3
3206 47. http://www.columbia.edu/kermit/ckuins.html#x1
3207 48. http://www.columbia.edu/kermit/ckuins.html#x5
3208 49. http://www.columbia.edu/kermit/ckuins.html#X10
3209 50. http://www.columbia.edu/kermit/ckuins.html#x11
3210 51. http://www.columbia.edu/kermit/ckuins.html#x10
3211 52. http://www.columbia.edu/kermit/ckuins.html#x3
3212 53. http://www.columbia.edu/kermit/ck80packages.html
3213 54. http://www.columbia.edu/kermit/ckuins.html#x10
3214 55. http://www.columbia.edu/kermit/ckuins.html#top
3215 56. http://www.columbia.edu/kermit/ckuins.html#contents
3216 57. http://www.columbia.edu/kermit/ckuins.html#x4
3217 58. http://www.columbia.edu/kermit/ckuins.html#x2
3218 59. ftp://kermit.columbia.edu/kermit/bin/
3219 60. http://www.columbia.edu/kermit/ck80binaries.html
3220 61. http://www.columbia.edu/kermit/ckuins.html#x7
3221 62. http://www.columbia.edu/kermit/ckuins.html#build
3222 63. http://www.columbia.edu/kermit/ckuins.html#x5
3223 64. http://www.columbia.edu/kermit/ckuins.html#x4
3224 65. http://www.columbia.edu/kermit/ckuins.html#x4
3225 66. mailto:kermit@columbia.edu
3226 67. http://www.columbia.edu/kermit/ckuins.html#top
3227 68. http://www.columbia.edu/kermit/ckuins.html#contents
3228 69. http://www.columbia.edu/kermit/ckuins.html#x5
3229 70. http://www.columbia.edu/kermit/ckuins.html#x3
3230 71. http://www.columbia.edu/kermit/ckuins.html#x8
3231 72. http://www.columbia.edu/kermit/ckuins.html#x9
3232 73. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
3233 74. ftp://kermit.columbia.edu/kermit/c-kermit/ckpker.mk
3234 75. ftp://kermit.columbia.edu/kermit/c-kermit/ckubsd.mak
3235 76. http://www.columbia.edu/kermit/ckuins.html#x5
3236 77. mailto:kermit-support@columbia.edu
3237 78. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
3238 79. http://www.columbia.edu/kermit/ckuins.html#x7
3239 80. mailto:kermit-support@columbia.edu
3240 81. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
3241 82. http://www.columbia.edu/kermit/ckuins.html#x5.4
3242 83. http://www.columbia.edu/kermit/ckuins.html#x10
3243 84. http://www.columbia.edu/kermit/ckuins.html#x11
3244 85. http://www.columbia.edu/kermit/ckuins.html#x5
3245 86. http://www.columbia.edu/kermit/iksd.html
3246 87. http://www.columbia.edu/kermit/ckuins.html#top
3247 88. http://www.columbia.edu/kermit/ckuins.html#contents
3248 89. http://www.columbia.edu/kermit/ckuins.html#x4.1
3249 90. http://www.columbia.edu/kermit/ckccfg.html
3250 91. http://www.columbia.edu/kermit/ckuins.html#x4.1
3251 92. http://www.columbia.edu/kermit/ckuins.html#x4.2
3252 93. http://www.columbia.edu/kermit/ckuins.html#x4.3
3253 94. http://www.columbia.edu/kermit/ckuins.html#x4.4
3254 95. http://www.columbia.edu/kermit/ckuins.html#x4.5
3255 96. http://www.columbia.edu/kermit/ckccfg.html
3256 97. http://www.columbia.edu/kermit/ckccfg.html#x8
3257 98. http://www.columbia.edu/kermit/iksd.html
3258 99. http://www.columbia.edu/kermit/iksd.html
3259 100. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3260 101. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3261 102. mailto:kermit-support@columbia.edu
3262 103. ftp://kermit.columbia.edu/kermit/c-kermit/ckcmai.c
3263 104. http://www.columbia.edu/kermit/ckuins.html#x15
3264 105. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3265 106. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3266 107. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3267 108. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3268 109. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.c
3269 110. ftp://kermit.columbia.edu/kermit/c-kermit/ckcnet.c
3270 111. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3271 112. ftp://kermit.columbia.edu/kermit/c-kermit/ckcuni.c
3272 113. mailto:kermit-support@columbia.edu
3273 114. http://www.columbia.edu/kermit/ckuins.html#top
3274 115. http://www.columbia.edu/kermit/ckuins.html#contents
3275 116. http://www.columbia.edu/kermit/ckuins.html#x4
3276 117. http://www.columbia.edu/kermit/ckuins.html#x4.2
3277 118. http://www.columbia.edu/kermit/ckuins.html#x4.0
3278 119. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
3279 120. ftp://kermit.columbia.edu/kermit/c-kermit/ckubwr.txt
3280 121. http://www.columbia.edu/kermit/ckubwr.html
3281 122. ftp://kermit.columbia.edu/kermit/c-kermit/ckwart.c
3282 123. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.w
3283 124. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.c
3284 125. http://www.columbia.edu/kermit/ckuins.html#top
3285 126. http://www.columbia.edu/kermit/ckuins.html#contents
3286 127. http://www.columbia.edu/kermit/ckuins.html#x4
3287 128. http://www.columbia.edu/kermit/ckuins.html#x4.3
3288 129. http://www.columbia.edu/kermit/ckuins.html#x4.1
3289 130. http://www.columbia.edu/kermit/ckuins.html#x5
3290 131. http://www.columbia.edu/kermit/ckuins.html#top
3291 132. http://www.columbia.edu/kermit/ckuins.html#contents
3292 133. http://www.columbia.edu/kermit/ckuins.html#x4
3293 134. http://www.columbia.edu/kermit/ckuins.html#x4.4
3294 135. http://www.columbia.edu/kermit/ckuins.html#x4.2
3295 136. http://www.columbia.edu/kermit/ckuins.html#top
3296 137. http://www.columbia.edu/kermit/ckuins.html#contents
3297 138. http://www.columbia.edu/kermit/ckuins.html#x4
3298 139. http://www.columbia.edu/kermit/ckuins.html#x4.5
3299 140. http://www.columbia.edu/kermit/ckuins.html#x4.3
3300 141. ftp://kermit.columbia.edu/kermit/c-kermit/ckpker.mk
3301 142. http://www.columbia.edu/kermit/ckuins.html#top
3302 143. http://www.columbia.edu/kermit/ckuins.html#contents
3303 144. http://www.columbia.edu/kermit/ckuins.html#x4
3304 145. http://www.columbia.edu/kermit/ckuins.html#x4.4
3305 146. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
3306 147. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
3307 148. ftp://kermit.columbia.edu/kermit/c-kermit/ckcpro.w
3308 149. http://www.columbia.edu/kermit/ckuins.html#top
3309 150. http://www.columbia.edu/kermit/ckuins.html#contents
3310 151. http://www.columbia.edu/kermit/ckuins.html#x6
3311 152. http://www.columbia.edu/kermit/ckuins.html#x4
3312 153. http://www.columbia.edu/kermit/ckuins.html#x5.1
3313 154. http://www.columbia.edu/kermit/ckuins.html#x5.2
3314 155. http://www.columbia.edu/kermit/ckuins.html#x5.3
3315 156. http://www.columbia.edu/kermit/ckuins.html#x5.4
3316 157. http://www.columbia.edu/kermit/
3317 158. http://www.columbia.edu/kermit/ckuins.html#x5.4
3318 159. http://www.columbia.edu/kermit/ckuins.html#x5.3
3319 160. ftp://kermit.columbia.edu/kermit/c-kermit/COPYING.TXT
3320 161. ftp://kermit.columbia.edu/kermit/c-kermit/ckermit.ini
3321 162. http://www.columbia.edu/kermit/ckuins.html#x5.1
3322 163. ftp://kermit.columbia.edu/kermit/c-kermit/ckermod.ini
3323 164. ftp://kermit.columbia.edu/kermit/c-kermit/ckermit70.txt
3324 165. http://www.columbia.edu/kermit/ck60manual
3325 166. http://www.columbia.edu/kermit/ckermit70.html
3326 167. ftp://kermit.columbia.edu/kermit/c-kermit/ckermit80.txt
3327 168. http://www.columbia.edu/kermit/ck60manual
3328 169. http://www.columbia.edu/kermit/ckermit80.html
3329 170. ftp://kermit.columbia.edu/kermit/c-kermit/ckcbwr.txt
3330 171. http://www.columbia.edu/kermit/ckcbwr.html
3331 172. ftp://kermit.columbia.edu/kermit/c-kermit/ckubwr.txt
3332 173. http://www.columbia.edu/kermit/ckubwr.html
3333 174. ftp://kermit.columbia.edu/kermit/c-kermit/ckuins.txt
3334 175. http://www.columbia.edu/kermit/ckuins.html
3335 176. ftp://kermit.columbia.edu/kermit/c-kermit/ckccfg.txt
3336 177. http://www.columbia.edu/kermit/ckccfg.html
3337 178. ftp://kermit.columbia.edu/kermit/c-kermit/ckcplm.txt
3338 179. http://www.columbia.edu/kermit/ckcplm.html
3339 180. ftp://kermit.columbia.edu/kermit/c-kermit/ca_certs.pem
3340 181. http://www.columbia.edu/kermit/ckuins.html#x16"
3341 182. ftp://kermit.columbia.edu/kermit/c-kermit/makefile
3342 183. http://www.columbia.edu/kermit/ckuins.html#x?
3343 184. http://www.columbia.edu/kermit/ckuins.html#x11
3344 185. http://www.columbia.edu/kermit/ckuins.html#x5.2
3345 186. http://www.columbia.edu/kermit/ckermit.html#download
3346 187. http://www.columbia.edu/kermit/ck80binaries.html
3347 188. http://www.columbia.edu/kermit/ckermit.html#download
3348 189. http://www.columbia.edu/kermit/ckuins.html#top
3349 190. http://www.columbia.edu/kermit/ckuins.html#contents
3350 191. http://www.columbia.edu/kermit/ckuins.html#x7
3351 192. http://www.columbia.edu/kermit/ckuins.html#x5
3352 193. http://www.columbia.edu/kermit/ckuins.html#top
3353 194. http://www.columbia.edu/kermit/ckuins.html#contents
3354 195. http://www.columbia.edu/kermit/ckuins.html#x8
3355 196. http://www.columbia.edu/kermit/ckuins.html#x6
3356 197. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3357 198. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3358 199. http://www.columbia.edu/kermit/ckuins.html#x4.0
3359 200. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
3360 201. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3361 202. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3362 203. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3363 204. http://www.columbia.edu/kermit/ckuins.html#x10
3364 205. http://www.columbia.edu/kermit/ckccfg.html#x2
3365 206. http://www.columbia.edu/kermit/ckccfg.html
3366 207. http://www.columbia.edu/kermit/ckuins.html#x4
3367 208. http://www.columbia.edu/kermit/ckuins.html#x10
3368 209. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3369 210. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3370 211. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3371 212. http://www.columbia.edu/kermit/ckuins.html#x9.4
3372 213. mailto:kermit-support@columbia.edu
3373 214. http://www.columbia.edu/kermit/ckuins.html#top
3374 215. http://www.columbia.edu/kermit/ckuins.html#contents
3375 216. http://www.columbia.edu/kermit/ckuins.html#x9
3376 217. http://www.columbia.edu/kermit/ckuins.html#x7
3377 218. http://www.columbia.edu/kermit/ckccfg.html
3378 219. http://www.columbia.edu/kermit/ckccfg.html
3379 220. http://www.columbia.edu/kermit/ckuins.html#top
3380 221. http://www.columbia.edu/kermit/ckuins.html#contents
3381 222. http://www.columbia.edu/kermit/ckuins.html#x10
3382 223. http://www.columbia.edu/kermit/ckuins.html#x8
3383 224. http://www.columbia.edu/kermit/ckuins.html#x9.1
3384 225. http://www.columbia.edu/kermit/ckuins.html#x9.1.1
3385 226. http://www.columbia.edu/kermit/ckuins.html#x9.1.2
3386 227. http://www.columbia.edu/kermit/ckuins.html#x9.1.3
3387 228. http://www.columbia.edu/kermit/ckuins.html#x9.2
3388 229. http://www.columbia.edu/kermit/ckuins.html#x9.3
3389 230. http://www.columbia.edu/kermit/ckuins.html#x9.4
3390 231. http://www.columbia.edu/kermit/ckuins.html#x9.5
3391 232. http://www.columbia.edu/kermit/ckuins.html#x9.6
3392 233. http://www.columbia.edu/kermit/ckuins.html#x9.7
3393 234. http://www.columbia.edu/kermit/ckuins.html#x9.8
3394 235. http://www.columbia.edu/kermit/ckuins.html#x9.9
3395 236. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3396 237. http://www.columbia.edu/kermit/ckuins.html#top
3397 238. http://www.columbia.edu/kermit/ckuins.html#x9
3398 239. http://www.columbia.edu/kermit/ckuins.html#contents
3399 240. http://www.columbia.edu/kermit/ckuins.html#x9.2
3400 241. http://www.columbia.edu/kermit/ckuins.html#x9.1.1
3401 242. http://www.columbia.edu/kermit/ckuins.html#x9.1.2
3402 243. http://www.columbia.edu/kermit/ckuins.html#x9.1.3
3403 244. http://www.columbia.edu/kermit/ckuins.html#top
3404 245. http://www.columbia.edu/kermit/ckuins.html#contents
3405 246. http://www.columbia.edu/kermit/ckuins.html#x9
3406 247. http://www.columbia.edu/kermit/ckuins.html#x9.1
3407 248. http://www.columbia.edu/kermit/ckuins.html#x9.1.3
3408 249. http://www.columbia.edu/kermit/ckuins.html#x9.1.1
3409 250. http://www.columbia.edu/kermit/ckuins.html#top
3410 251. http://www.columbia.edu/kermit/ckuins.html#contents
3411 252. http://www.columbia.edu/kermit/ckuins.html#x9
3412 253. http://www.columbia.edu/kermit/ckuins.html#x9.1
3413 254. http://www.columbia.edu/kermit/ckuins.html#x9.2
3414 255. http://www.columbia.edu/kermit/ckuins.html#x9.1.2
3415 256. http://www.opengroup.org/onlinepubs/007904975/
3416 257. http://www.columbia.edu/kermit/ckuins.html#x9.1.1
3417 258. http://www.columbia.edu/kermit/ckuins.html#top
3418 259. http://www.columbia.edu/kermit/ckuins.html#contents
3419 260. http://www.columbia.edu/kermit/ckuins.html#x9
3420 261. http://www.columbia.edu/kermit/ckuins.html#x9.1
3421 262. http://www.columbia.edu/kermit/ckuins.html#x9.3
3422 263. http://www.columbia.edu/kermit/ckuins.html#x9.1
3423 264. http://www.columbia.edu/kermit/ckuins.html#top
3424 265. http://www.columbia.edu/kermit/ckuins.html#contents
3425 266. http://www.columbia.edu/kermit/ckuins.html#x9
3426 267. http://www.columbia.edu/kermit/ckuins.html#x9.4
3427 268. http://www.columbia.edu/kermit/ckuins.html#x9.2
3428 269. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3429 270. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3430 271. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3431 272. http://www.columbia.edu/kermit/ckuins.html#top
3432 273. http://www.columbia.edu/kermit/ckuins.html#contents
3433 274. http://www.columbia.edu/kermit/ckuins.html#x9
3434 275. http://www.columbia.edu/kermit/ckuins.html#x9.5
3435 276. http://www.columbia.edu/kermit/ckuins.html#x9.3
3436 277. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3437 278. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
3438 279. http://www.columbia.edu/kermit/ckuins.html#top
3439 280. http://www.columbia.edu/kermit/ckuins.html#contents
3440 281. http://www.columbia.edu/kermit/ckuins.html#x9
3441 282. http://www.columbia.edu/kermit/ckuins.html#x9.6
3442 283. http://www.columbia.edu/kermit/ckuins.html#x9.4
3443 284. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
3444 285. ftp://kermit.columbia.edu/kermit/c-kermit/ckuus3.c
3445 286. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3446 287. http://www.columbia.edu/kermit/ckuins.html#top
3447 288. http://www.columbia.edu/kermit/ckuins.html#contents
3448 289. http://www.columbia.edu/kermit/ckuins.html#x9
3449 290. http://www.columbia.edu/kermit/ckuins.html#x9.7
3450 291. http://www.columbia.edu/kermit/ckuins.html#x9.5
3451 292. http://www.columbia.edu/kermit/ckuins.html#top
3452 293. http://www.columbia.edu/kermit/ckuins.html#contents
3453 294. http://www.columbia.edu/kermit/ckuins.html#x9
3454 295. http://www.columbia.edu/kermit/ckuins.html#x9.8
3455 296. http://www.columbia.edu/kermit/ckuins.html#x9.6
3456 297. http://www.columbia.edu/kermit/ckuins.html#top
3457 298. http://www.columbia.edu/kermit/ckuins.html#contents
3458 299. http://www.columbia.edu/kermit/ckuins.html#x9
3459 300. http://www.columbia.edu/kermit/ckuins.html#x9.9
3460 301. http://www.columbia.edu/kermit/ckuins.html#x9.7
3461 302. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3462 303. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3463 304. ftp://kermit.columbia.edu/kermit/c-kermit/ckcdeb.h
3464 305. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3465 306. http://www.columbia.edu/kermit/ckuins.html#top
3466 307. http://www.columbia.edu/kermit/ckuins.html#contents
3467 308. http://www.columbia.edu/kermit/ckuins.html#x9
3468 309. http://www.columbia.edu/kermit/ckuins.html#x10
3469 310. http://www.columbia.edu/kermit/ckuins.html#x9.8
3470 311. http://www.columbia.edu/kermit/ckuins.html#top
3471 312. http://www.columbia.edu/kermit/ckuins.html#contents
3472 313. http://www.columbia.edu/kermit/ckuins.html#x11
3473 314. http://www.columbia.edu/kermit/ckuins.html#x9
3474 315. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3475 316. http://www.columbia.edu/kermit/ckuins.html#x11
3476 317. http://www.columbia.edu/kermit/ckuins.html#top
3477 318. http://www.columbia.edu/kermit/ckuins.html#contents
3478 319. http://www.columbia.edu/kermit/ckuins.html#x12
3479 320. http://www.columbia.edu/kermit/ckuins.html#x10
3480 321. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3481 322. ftp://kermit.columbia.edu/kermit/c-kermit/ckufio.c
3482 323. http://www.columbia.edu/kermit/ckuins.html#top
3483 324. http://www.columbia.edu/kermit/ckuins.html#contents
3484 325. http://www.columbia.edu/kermit/ckuins.html#x13
3485 326. http://www.columbia.edu/kermit/ckuins.html#x11
3486 327. http://www.columbia.edu/kermit/ckuins.html#top
3487 328. http://www.columbia.edu/kermit/ckuins.html#contents
3488 329. http://www.columbia.edu/kermit/ckuins.html#x14
3489 330. http://www.columbia.edu/kermit/ckuins.html#x12
3490 331. ftp://kermit.columbia.edu/kermit/c-kermit/ckubwr.txt
3491 332. ftp://kermit.columbia.edu/kermit/c-kermit/ckutio.c
3492 333. http://www.columbia.edu/kermit/ckuins.html#top
3493 334. http://www.columbia.edu/kermit/ckuins.html#contents
3494 335. http://www.columbia.edu/kermit/ckuins.html#x15
3495 336. http://www.columbia.edu/kermit/ckuins.html#x13
3496 337. http://www.columbia.edu/kermit/ckuins.html#top
3497 338. http://www.columbia.edu/kermit/ckuins.html#contents
3498 339. http://www.columbia.edu/kermit/ckuins.html#x16
3499 340. http://www.columbia.edu/kermit/ckuins.html#x14
3500 341. http://www.columbia.edu/kermit/iksd.html#x4.2
3501 342. http://www.columbia.edu/kermit/iksd.html
3502 343. http://www.columbia.edu/kermit/ckermit2.html
3503 344. http://www.columbia.edu/kermit/ckuins.html#top
3504 345. http://www.columbia.edu/kermit/ckuins.html#contents
3505 346. http://www.columbia.edu/kermit/ckuins.html#x17
3506 347. http://www.columbia.edu/kermit/ckuins.html#x15
3507 348. http://www.columbia.edu/kermit/security.html
3508 349. http://www.columbia.edu/kermit/security80.html
3509 350. http://www.columbia.edu/kermit/cuiksd.html
3510 351. ftp://kermit.columbia.edu/kermit/c-kermit/ca_certs.pem
3511 352. http://www.columbia.edu/kermit/ckuins.html#top
3512 353. http://www.columbia.edu/kermit/ckuins.html#contents
3513 354. http://www.columbia.edu/kermit/ckuins.html#x16
3514 355. http://www.columbia.edu/kermit/skermit.html
3515 356. http://www.columbia.edu/kermit/ckuins.html#top
3516 357. http://www.columbia.edu/kermit/ckuins.html#contents
3517 358. http://www.columbia.edu/kermit/ckermit.html
3518 359. http://www.columbia.edu/kermit/ck80.html
3519 360. http://www.columbia.edu/kermit/index.html