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