home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / c-kermit / ckc209.txt < prev    next >
Text File  |  2020-01-01  |  145KB  |  2,936 lines

  1. C-KERMIT CHANGE LOG (Changes since 8.0.200 of 12 Dec 2001)
  2.  
  3. Chronological order: Go to the bottom to find the newest edits.
  4.  
  5. ---8.0.200---
  6.  
  7. Known bugs (+ = fixed after release):
  8.  
  9.  + 1. tilde_expand() can call getcwd() with NULL arg.
  10.  + 2. getexedir() called too early (fatal in combination with (1)).
  11.  + 3. Kermit "get blah" where blah is a symlink; server refuses to send it.
  12.       Should not do this if GET not recursive.
  13.  ? 4. Dave Sneddon's report about VMS fore/background confusion.
  14.  + 5. FTP GET path/file doesn't work - path not stripped - but MGET works.
  15.  + 6. IRIX 5.3 compilation problems (have patches from Marcus Herbert)
  16.  X 7. Filename completion bug (see below) (deferred).
  17.  + 8. QNX6 herald and other problems.
  18.  
  19. -------------
  20.  
  21. Merged Jeff's changes, 20 Dec 2001:
  22.  
  23.  . Changed all occurrences of "ttnproto == NP_TELNET" to "IS_TELNET()" to
  24.    account for the difference between SSH and Telnet.  ckuscr.c,
  25.    ckuus[3457].c, ckcnet.h, ckcfns.c, ckudia.c, ckutio.c, ckucon.c, ckucns.c.
  26.  
  27.  . Moved SSH pty failure warnings.  ckuusr.c.
  28.  
  29.  . Security adjustments to FTP module, plus fix an error message.  ckcftp.c.
  30.  
  31.  . Adjustment of some security-related #ifdefs. ckcdeb.h, ckuus2.c, ckctel.c.
  32.  
  33.  . Guard against calling getpwnam() with a NULL arg in tilde_expand() ckufio.c.
  34.  
  35.  . Moved getexedir() call to later, where it's safe.  ckcmai.c.
  36.  
  37. Added SSH ADD and many SSH SET commands from Jeff's spec.  Fixed SHOW SSH
  38. to not dump core if variables weren't set.  ckcker.h, ckuus[r3].c, 20 Dec 2001.
  39.  
  40. C-Kermit in server mode, client says "get foo" where foo is a symlink.
  41. Server says "no files meet selection criteria" instead of sending the file.
  42. It should only refuse to follow symlinks if it's a recursive get.  Fixed
  43. in sgetinit(): ckcpro.w, 21 Dec 2001.
  44.  
  45. More work on SSH and SET/SHOW SSH commands.  ckuus[r3].c, 21 Dec 2001.
  46.  
  47. Undid Jeff's replacement of the SSH pseudoterminal allocation failure
  48. message, because now it comes out any time an SSH command has to be
  49. reparsed (in the non-SSHBUILTIN case).  ckuusr.c, 21 Dec 2001.
  50.  
  51. More SSH and SET SSH command work back & forth with Jeff, plus Jeff added
  52. SET HOST /NET:SSH.  ckcmai.c, ckuus[r37].c, ckcdeb.h, ckuusr.h, 22 Dec 2001.
  53.  
  54. Added SSH OPEN switches.  ckuusr.c, 22 Dec 2001.
  55.  
  56. Added SSH CLEAR, HELP SSH, and HELP SET SSH.  ckuus[r2].c, 23 Dec 2001.
  57.  
  58. From Jeff:
  59.  . SET TCP commands now apply to SSH
  60.  . SSH V2 REKEY and FORWRD-{LOCAL,REMOTE}-PORT  commands now implemented
  61.  . Missing DLLs automatically disable appropriate authentication mechanisms.
  62. ckuusr.c ckcnet.c ckuus3.c ckcmai.c ckcnet.h ckuus4.c, 26 Dec 2001.
  63.  
  64. From Jeff:
  65.  . Remove SET SSH KEEPALIVES.
  66.  . Add help text for SSH AGENT { ADD, DELETE, LIST }.
  67. ckuus[23].c, 28 Dec 2001.
  68.  
  69. Added parsing for SSH AGENT { ADD, DELETE, LIST }.  ckuusr.c, 28 Dec 2001.
  70.  
  71. From Jeff:
  72.  . Fixed a crash that can happen when making an SSH connection.
  73.  . Filled in SSH AGENT actions.
  74.  . Changed default for strict host key check (to ASK) and help text.
  75.  . uploaded new binaries include ~kermit/os2test/beta/ssh-agent.exe
  76.  . Read man ssh-agent on ftp.kermit.columbia.edu for details on what it does.
  77. ckuus[r23].c, 28 Dec 2001.
  78.  
  79. "ftp get path/filename" didn't work; the FTP client did not strip the path
  80. from the local copy of the filename when doing a GET, even though it did
  81. for MGET.  Diagnosis: in doftpget(), the "if (!getone && !skipthis)" statement
  82. lacked an "else" part for the getone case.  ckcftp.c, 28 Dec 2001.
  83.  
  84. A while back Jeff reported that in FTP MGET, if you cancel a file with 'x',
  85. all the rest of the files arrive truncated to 0 bytes.  I tried this on both
  86. Unix and Windows and couldn't reproduce it.
  87.  
  88. In the last-minute flurry to release C-Kermit 8.0, I thought I noticed the FTP
  89. client failing to update the fullscreen file-transfer display.  But it seems
  90. to work right, at least in Unix.  When downloading a big file with FTP, all
  91. the display fields are updated as expected.  But smaller files might go by too
  92. fast for the display to do anything.  HOWEVER, in K95 the file transfer
  93. display does not update itself until the end of the file, even if the file
  94. takes a long time to transfer.  This happens in both the Console and GUI
  95. versions.  A thread thing?  (Jeff says no.)  Yet the same display works fine
  96. on Telnet connections.
  97.  
  98. In IRIX 5.3, the select()-based CONNECT module had to include <sys/time.h>
  99. or else it blew up with "struct timeval" unknown.  Since there already was
  100. a SYSTIMEH CFLAG, I added the #include within #ifdef SYSTIMEH..#endif and
  101. rebuilt with KFLAGS=-DSYSTIMEH, only to discover that the irix5* targets
  102. didn't bother to propagate KFLAGS.  Fixed in ckucns.c, makefile, 30 Dec 2001.
  103.  
  104. Increased IRIX5x Olimit from 2400 to 3000 because of ckuus[34].c.  Added
  105. -ansi, since (Marcus Herbert reported) we were not actually getting ANSI-C
  106. compilation even though CK_ANSIC was defined.  But now that we are, we get
  107. warnings in <netinet/tcp.h>, which is included by ckcnet.h:
  108.  
  109.   bit-field 'th_off' type required to be int, unsigned int, or signed int.
  110.   (3.5.2.1(30))
  111.       u_char  th_off:4,
  112.       ------  ^
  113. Tough.  makefile, 30 Dec 2001.
  114.  
  115. But adding -ansi to the IRIX 5x targets also make compilation bomb whenever we
  116. referenced fdopen() or popen(), which evidently don't have prototypes in any
  117. of the header files.  Luckily we already have CFLAGS for this occasion too:
  118. DCLFDOPEN and DCLPOPEN.  Added these to the irix51 target.  Also had to copy
  119. the fdopen()-popen() prototype section to ckuusx.c, which has a new reference
  120. to fdopen() in a workaround for the curses console buffering bug.  makefile,
  121. ckuusx.c, 30 Dec 2001.
  122.  
  123. The QNX6 version did not receive a proper herald (it announced itself as
  124. "unknown version".  Reshuffled #ifdefs in ckuver.h, added display of QNX6
  125. and NEUTRINO symbols to ckuus5.c, 30 Dec 2001.
  126.  
  127. Lucas Hart sent in a patch for the VMS problem.  Apparently it was even worse
  128. than Dave Sneddon had reported: 8.0 couldn't run at all under Batch.  ckvtio.c,
  129. 31 Dec 2001.
  130.  
  131. A major obstacle to the usability of the FTP client is that certain commands
  132. don't behave as FTP users expect: CD, DIR, DELETE, MKDIR, etc, which are local
  133. rather remote, and there are no LCD (etc), USER, or ACCOUNT commands.  We
  134. could fix this by adding an FTP command-language personality, but file
  135. management commands can also be remote or local on connections to Kermit
  136. servers too.  So:
  137.  
  138. SET LOCUS { LOCAL, REMOTE, AUTO }
  139.   Sets the locus for unprefixed file management commands.
  140.   When LOCAL, a REMOTE (or R) prefix is required for
  141.   to send file management commands to a remote server (e.g. RCD, RDIR).
  142.   When REMOTE, an L prefix is required to issue local file management
  143.   commands (e.g. LCD, LDIR).  The word LOCAL can't be used as a prefix
  144.   since it is used for declaring local variables.
  145.  
  146. This applies to all types of connections, and thus is orthogonal to SET
  147. GET-PUT-REMOTE, which selects between Kermit and FTP for remote file-transfer
  148. and management commands.
  149.  
  150. The default LOCUS is AUTO, which means we switch to REMOTE whenever an FTP
  151. connection is made, and to LOCAL whenever a non-FTP connection is made,
  152. and switch back accordingly whenever a connection is closed.
  153.  
  154. Implementation (31 Dec 2001):
  155.  . None of this is compiled if LOCUS is not defined.
  156.  . Added XYLOCUS (SET LOCUS) and LOCUS definitions: ckuusr.h.
  157.  . Override by defining NOLOCUS (which inhibits definition of LOCUS).
  158.  . Added LOCUS to SET keyword table: ckuusr.c.
  159.  . Added locus & autolocus variables: ckuusr.c.
  160.  . Added SET LOCUS parsing and variable setting: ckuus3.c.
  161.  . Added display of LOCUS setting to SHOW COMMAND: ckuus5.c.
  162.  . Added automatic locus setting to setlin(): ckuus7.c.
  163.  . Added automatic locus setting to ftpopen() and ftpclose(): ckcftp.c.
  164.  
  165. How to catch all the places where a Kermit connection is closed?  Turns out
  166. we've done this before, when we added the connection log.  So I made
  167. dologend() take care of locus switching.  But dologend() was not compiled in
  168. if certain symbols were defined, such as NOLOCAL, or not defined, such as
  169. CKLOGDIAL.  So I (a) rearranged the #ifdefs so that even if these would
  170. otherwise have obviated dologend(), now they leave a piece of it for
  171. locus-setting; (b) moved the prototype out of #ifdefs; and (c) took all calls
  172. to it out of #ifdefs.  ckcker.h, ckcfn2.c, ckcmai.c, ckucns.c, ckucon.c,
  173. ckuus[r347x].c, 31 Dec 2001.
  174.  
  175. Added locus checking to the following commands: DIRECTORY, CD/CWD, CDUP,
  176. DELETE, PWD, MKDIR, RMDIR, RENAME.  ckuusr.c, 31 Dec 2001.
  177.  
  178. Added LDIRECTORY, LCD/LCWD, LCDUP, LDELETE, LPWD, LMKDIR, LRMDIR,
  179. LRENAME.  ckuusr.[ch], 31 Dec 2001.
  180.  
  181. Added USER and ACCOUNT commands, which are the same as FTP USER and FTP
  182. ACCOUNT.  ckuusr.[ch], ckcftp.c, 31 Dec 2001.
  183.  
  184. Since automatic locus switching could be a big surprise for most people, I
  185. printed message any time it changed.  ckcftp.c, ckuus[37].c, 31 Dec 2001.
  186.  
  187. Added help text for the new L commands and filled in missing HELP text for
  188. SET GET-PUT-REMOTE, CDUP, MKDIR, and RMDIR.  ckuus2.c, 31 Dec 2001.
  189.  
  190. Changed help text of CD, DIR, etc, for LOCUS.  Changed the help text for
  191. RCD, RPWD, RDEL, RDIR, etc, to mention that they also work with FTP servers.
  192. Updated HELP REMOTE for this too.  ckuus2.c, 31 Dec 2001.
  193.  
  194. Made sure code builds with NOLOCAL, NOLOGDIAL, and NOLOCUS (it does).
  195.  
  196. The IKSD command, when given with a /USER: switch, sends the user ID to the
  197. IKSD.  But the SET HOST /USER: command does not, when making a connection to a
  198. Kermit service.  This makes it impossible to script IKSD interactions using
  199. only client commands.  Furthermore, even if you include a /PASSWORD switch
  200. with the IKSD command, it does not send the password.  I added code near the
  201. bottom of setlin() to do this.  If we have a connection to a Kermit service
  202. and a /USER: switch was given, then we attempt a REMOTE LOGIN.  If a
  203. /PASSWORD: switch was not given then if the username is "ftp" or "anonymous",
  204. we automatically supply a password of user@host; otherwise we prompt for a
  205. password.  If a /USER: switch was not given, it acts like before.  It all
  206. works, but it might not be the best way (or place) to do it.  setlin():
  207. ckuus7.c, 31 Dec 2001.
  208.  
  209.   NOTE: The above change doesn't help with IKSD /USER:anonymous,
  210.   the server prompts for password anyway, not sure why.
  211.  
  212.   NOTE 2: What about secure authentication?  We have to test to see
  213.   if user was already authenticated before sending the login packet.
  214.  
  215. Added /opt/kermit and /opt/kermit/doc to info_dir[] list (for Solaris).
  216. ckuus5.c, 31 Dec 2001.
  217.  
  218. From Jeff: new Help text for SET TERM FONT (K95 GUI).  ckuus2.c, 1 Jan 2002.
  219.  
  220. More work on help text for file management commands -- e.g. we can't lump
  221. the L-commands together with the unprefixed ones; they need separate entries.
  222. Also: added missing HELP REMOTE PWD, improved the default case (in which
  223. help text had been omitted for a valid command).  ckuus2.c, 1 Jan 2002.
  224.  
  225. It seems VMS C-Kermit was pretty much ignoring the -B (force background) and
  226. -z (force foreground) command-line options.  Fixed in congm(): ckvtio.c,
  227. 1 Jan 2002.
  228.  
  229. Tested the SET LOCUS business with VMS C-Kermit, which does not have a
  230. built-in FTP client.  Of course in this case there is no automatic locus
  231. switching, but SET LOCUS REMOTE works nicely on IKSD connections.
  232.  
  233. From Jeff:
  234.  . #ifdef adjustments for LOCUS changes.
  235.  . SSH KEY CREATE /TYPE:SRP.
  236.  . Fix \v(serial) to not be 8N2 by default if speed is 0.
  237.  . Don't let doexit() run if sysinit() hasn't been called first.
  238. ckuus[r247x].c, 2 Jan 2002.
  239.  
  240. Made SET BACKGROUND { ON, OFF } do exactly the same as -B and -z options.
  241. ckuus3.c, 2 Jan 2002.
  242.  
  243. Updated user-visible copyright dates to 2002 (but still need to do all the
  244. source-module comments).  ckcmai.c, ckuus[25].c, 2 Jan 2002.
  245.  
  246. Rearranged #include <sys/time.h> in ckucns.c that was done for IRIX 5.3,
  247. to avoid conflicts in SV/68 R3v6.  3 Jan 2002.
  248.  
  249. From Dave Sneddon: Code changes in VMS sysinit() and congm() to work around
  250. problems in batch, SPAWN'd, etc, and change CTTNAM from TT: to SYS$INPUT:.
  251. ckcdeb.h, ckvtio.c, 3 Jan 2002.
  252.  
  253. From Jeff:
  254.  . Fixed typo in definition of CTTNAM for VMS.  ckcdeb.h
  255.  . Moved macro definitions for SSHBUILTIN from ckuus3.c to ckuusr.h
  256.    so they can be referenced in ckuus7.c
  257.  . Added SSH functionality to SET HOST:
  258.      SET HOST /NET:SSH /CONNECT hostname [port] /switches
  259.  . Fixed SET NET TYPE so it won't reject SSH if SSH is installed.
  260.  . Changes to allow IKSD to continue functioning.  Somehow this minor change
  261.    to ckcmai.c got lost in one of the back and forth exchanges.
  262.  . HELP TEXT for UCS2 kverb
  263.  . Fix a problem in K95 where multiple threads could be attempting to
  264.    send a telnet negotiation simultaneously.
  265. ckcmai.c ckcdeb.h ckuus2.c ckuus3.c ckuusr.c ckuusr.h ckuus7.c ckctel.c
  266. ck_crp.c ckuat2.h ckuath.c, 4 Jan 2002.
  267.  
  268. From Jeff:
  269.  
  270.   Peter Runestig complaining that the Telnet Forward X code was corrupting
  271.   data.  This resulted in a very thorough examination of the telnet module
  272.   code and a discovery of some rather significant problems.  The root of the
  273.   problems is the lack of thread safety.  To correct this problem the
  274.   following was done.
  275.  
  276.   All code (regardless of module) which outputs telnet commands is placed
  277.   into a mutex region to ensure that competing output threads do not result
  278.   in interleaving their output.  This could happen for instance when the
  279.   forward-x thread is forwarding data and the user changes the window size
  280.   or sends an AYT or BREAK.  Next the buffer used for input and output
  281.   processing were identical.  This means that output data could be treated
  282.   as input or vice versa.  Ugh....
  283.  
  284.   I also spent some more time cleaning up setlin().  Mostly reorganizing the
  285.   code into single if (...) blocks so that breaking it up will be easier.
  286.  
  287. ckctel.c ckuus7.c, 4 Jan 2002.
  288.  
  289. Updated internal copyright notices.  All modules, 5 Jan 2002.
  290.  
  291. From Jeff:
  292.   More of same, plus new makefile target and changes from Spike Gronim
  293.   for freebsd44+srp+openssl.
  294. ckcdeb.h ckcnet.c ckctel.c ckuus7.c ck_ssl.c makefile, 5 Jan 2002.
  295.  
  296. Some minor updates and fixes to SSH and SET SSH help text.
  297. ckuus2.c, 6 Jan 2002.
  298.  
  299. Added SET RGB-COLORS for GUI.  ckuusr.[ch], ckuus3.c, 6 Jan 2002.
  300.  
  301. From Jeff: More Telnet changes, Debug semaphores for K95, etc: ckcdeb.h,
  302. ckuusr.h, ckuus[r35x].c, ckctel.[ch], ckuath.c, 7 Jan 2002.
  303.  
  304. Added --xpos:n --ypos:n, SET GUI WINDOW POSITION x y, and changed SET
  305. RGB-COLORS to SET GUI RGBCOLOR.  Action needs to be filled in (in setguiwin()
  306. in ckuus3.c), and gui_xpos and gui_ypos need to be defined in cko???.c.
  307. ckuusr.h, ckuus[r3y].c, 7 Jan 2002.
  308.  
  309. Added --fontname:name --fontsize:name (and facename as synonym for fontname).
  310. ckuusr.h, ckuus[7y].c, 7 Jan 2002.
  311.  
  312. Moved GUI (not OS/2) SET TERM FONT code in ckuus7.c to its own routine,
  313. setguifont(), in ckuus3.c, and made GUI SET TERM FONT call this routine,
  314. and also made SET GUI FONT call the same routine.  ckuus[37].c, 7 Jan 2002.
  315.  
  316. Added --termtype:, --height:, --width:, --user:.  Also added symbols for
  317. --telnet:, --ssh:, --ftp:, --[remote-]charset, and --password:, but didn't
  318. fill them in.  --password: is probably not a good idea (but we allow it for
  319. FTP); the others involve a lot of code-shuffling and reconciliation, which
  320. I'll try to do when I get a chance (especially the connection ones, which
  321. can be done as part of the setlin() restructuring).  ckuusr.h, ckuusy.c,
  322. 8 Jan 2002.
  323.  
  324. Also I tried commenting out the #ifndef KUI..#endif's around SET TERMINAL
  325. CHARACTER-SET (easier said than done because a crucial #endif was mislabeled).
  326. Let's see if it compiles & works...  ckuus7.c, 8 Jan 2002
  327.  
  328. Added FTP [ OPEN ] /NOINIT, meaning don't send REST, STRU, and MODE commands
  329. upon making an FTP connection.  This allows connection to servers that close
  330. the connection (or worse) when given these commands (e.g. Linux 2.4 TUX 2.0
  331. FTP server).  ckcftp.c, 8 Jan 2002.
  332.  
  333. Looked at adding caller ID support for the ANSWER command:
  334.  
  335.  . SET ANSWER CALLER-ID { ON, OFF }
  336.  . SET ANSWER RINGS <number>
  337.  . \v(callid_xxx) xxx = { date, time, name, nmbr, mesg }
  338.  . CKD_CID modem capability
  339.  . Set CKD_CID for modems that have it.
  340.  . A quick survey shows:
  341.    - USR V.90:      No (but Jeff says some USRs have it).
  342.    - V.250:         No
  343.    - Lucent Venus:  No
  344.    - USR:           #CID=1 (the ones that have it -- X2?)
  345.    - Diamond Supra: #CID=1
  346.    - Rockwell 56K:  #CID=1
  347.    - PCTEL:         #CID=1
  348.    - Zoltrix:       +VCID=1
  349.    - Conexant:      +VCID=1
  350.  . Since there are different commands to enable caller ID reporting,
  351.    we need a new field in struct MDMINF.
  352.  . SHOW MODEM and SHOW DIAL would need updating.
  353.  . etc etc...
  354.  
  355. This is all way too much for now so I just did the setting of the \v(callid_*)
  356. variables.  These are reset at the beginning of an ANSWER command, and then
  357. set by the ANSWER command if they come in; thus they persist from the time
  358. they are collected until another ANSWER command is given.  To take advantage
  359. of autoanswer, the user has to enable it in the modem (all the modems I found
  360. that support it have it disabled by default), and also has to set the number
  361. of rings to at least 2.  This can be done with (depending on the modem):
  362.  
  363.   set modem command autoanswer on ATS0=2#CID=1\{13}
  364.   set modem command autoanswer on ATS0=2+VCID=1\{13}
  365.  
  366. and undone with:
  367.  
  368.   set modem command autoanswer on ATS0=1#CID=0\{13}
  369.   set modem command autoanswer on ATS0=1+VCID=0\{13}
  370.  
  371. The variables can be accessed only after the call is answered.  Therefore the
  372. only way to refuse a call is to answer it, inspect the variables, and then
  373. hang it up if desired.  Future Kermit releases can do this more nicely (as
  374. sketched out above.)  Also while I was in the dialing code, I added result
  375. code VCON (= VOICE), used by several of the newer modems.  These changes are
  376. untested.  The SET ANSWER command is written but commented out.  ckuusr.h,
  377. ckcker.h, ckuus[r3].c, ckudia.c, 8 Jan 2002.
  378.  
  379. From Jeff: fixes to --termtype:, --height:, --width:, --user:, and filling in
  380. of --rcharset:, which required extracting code from settrm() into a separate
  381. parse-method-independent remote character-set setting routine.  ckuus[7y].c,
  382. 8 Jan 2002.
  383.  
  384. From Jeff: More work on TERMINAL CHARACTER-SET code reorganization, and
  385. reinstatement of SET TERMINAL CHARACTER-SET in K95G.  Also, fix char/CHAR
  386. warnings in Telnet module.  ckuus7.c, ckctel.c, 9 Jan 2002.
  387.  
  388. Made SET TERM CHARACTER-SET visible for all builds, including K95G, and filled
  389. in HELP text for it.  ckuus[27].c, 9 Jan 2002.
  390.  
  391. Added help text for new extended options.  ckuusy.c, 9 Jan 2002.
  392.  
  393. Commented out the return(-2) statement at the end of xgnbyte() to make the
  394. "Statement not reached" errors go away, after checking to make sure that there
  395. was no path that could fall through to the end.  I'm 99.99% sure there isn't,
  396. but that doesn't mean that some compilers might not still complain.  ckcfns.c,
  397. 9 Jan 2002.
  398.  
  399. From Jeff: fix typo in the K95 extended-option help text; add more
  400. semaphores to network i/o.  ckuusy.c, ckcnet.c, 10 Jan 2002.
  401.  
  402. Undid ansiisms in set{lcl,rem}charset() declarations.  ckuus7.c, 10 Jan 2002.
  403.  
  404. Removed a duplicated clause from the install target.  makefile, 10 Jan 2002.
  405.  
  406. From Jeff: more semaphores.  ckcnet.c, 11 Jan 2002.
  407.  
  408. Moved references to tmpusrid and tmpstring out of NOSPL #ifdefs -- they can
  409. be used with NOSPL.  setlin(): ckuus7.c, 13 Jan 2002.
  410.  
  411. Made a dummy dologend() routine outside of #ifndef NOICP, so we don't have
  412. to enclose every reference to dologend in #ifdefs.  (I had added a bunch of
  413. calls to dologend() throughout the code to handle automatic LOCUS switching.)
  414. ckuus3.c, 13 Jan 2002.
  415.  
  416. Moved "extern int nettype" outside of NOICP #ifdefs in ckuus4.c for NOICP
  417. builds.  13 Jan 2002.
  418.  
  419. Moved a misplaced #ifdef in the VERSION command.  ckuusr.c, 13 Jan 2002.
  420.  
  421. Did 81 different feature-selection builds on Linux (RH 7.0), all OK after the
  422. changes listed above for today.  13 Jan 2002.
  423.  
  424. Added prototypes for set{rem,lcl}charset().  ckcxla.h, 13 Jan 2002.
  425.  
  426. Added ckcxla.h to dependencies for ckuusy.c.  ckvker.com, 13 Jan 2002.
  427.  
  428. Made a correction to the HELP SET LOCUS text and supplied a missing comma
  429. for HELP REMOTE.  ckuus2.c, 13 Jan 2002.
  430.  
  431. Built OK on HP-UX 11.11 (K&R and ANSI), Solaris 8 (cc), Solaris 2.5.1 (gcc),
  432. SunOS 4.1.3 (cc and gcc), VMS 7.1 (DEC C, net and nonet), Unixware 7.1.1,
  433. Tru64 4.0G, HP-UX 10.20 (K&R), AIX 4.3.3, FreeBSD 2.2.8, Slackware 8.0, IRIX
  434. 6.5.13f, IRIX 5.3 (??? Can't tell -- the computer ran out of swap space -- but
  435. it was OK a few days ago), VMS 5.5-2 (VAX C, UCX + nonet)...  HP-UX 9.05, ...
  436.  
  437. Some corrections to comments in HP targets from PeterE.  makefile, 14 Jan 2002.
  438.  
  439. Corrections to prototypes for set{rem,lcl}charset() (VOID, not void) from Jeff.
  440. ckcxla.h, 14 Jan 2002.
  441.  
  442. Builds, cont'd...  SINIX 5.42, Red Hat Linux 5.2 on i386, SuSE 7.0 on S/390, 
  443. Red Hat 7.1 on IA64, QNX 4.25, HP-UX 5.21/WinTCP, ..., 
  444.  
  445. Dell Coleman <dell@aleph.tum.com> noticed that in AIX, the COPY command always
  446. says "Source and destination are the same file" when the destination file
  447. doesn't exist.  This is because in AIX, realpath() fails with ENOENT (errno
  448. 2).  The zfnqfp() code already accounts for this, but evidently not well
  449. enough.  So I did what I should have done long ago.  zfnqfp() was originally
  450. accomplished with do-it-yourself code.  Later I added support for realpath(),
  451. and partitioned the routine into mutually exclusive compile-time sections:
  452. #ifdef CKREALPATH realpath()... #else do-it-yourself... #endif.  But if
  453. realpath() failed, there was no recourse to the do-it-yourself code.  Today I
  454. replaced the #else with the #endif, so the do-it-yourself part is always
  455. included and is executed if the realpath() call fails.  Built and tested on
  456. AIX 4.3.3 and Solaris 2.5.1, as well as on Linux with and without the
  457. realpath() code included.  zfnqfp(): ckufio.c, 16 Jan 2002.
  458.  
  459. Separated K95 and C-Kermit test version numbers, so C-Kermit can be RC.02
  460. while K95 is Beta.01.  ckcmai.c, 16 Jan 2002.
  461.  
  462. Inhibited 0-length writes by conol() and conoll(), since they cause big
  463. trouble with the AIX 4.3.3 pty driver, e.g. when you have an SSH connection
  464. into AIX and run C-Kermit there.  ckutio.c, 16 Jan 2002.
  465.  
  466. Suppressed "Switching LOCUS..." messages from FTP client when it was invoked
  467. from the command line.  ckcfns.c, 17 Jan 2002.
  468.  
  469. Dave Sneddon noticed that FOPEN /APPEND gets "?Write access denied" in VMS
  470. if the file exists.  This is apparently because VMS zchko() does the wrong
  471. thing.  Commenting out the call zchko() in the VMS case gets past this but
  472. then the appended part of the file has different attributes than the original
  473. part, e.g.:
  474.  
  475.   abc  <- original line (horizontal, normal)
  476.   d    <- appended line (vertical)
  477.   e
  478.   f
  479.  
  480. VMS fopen() takes an optional 4th argument: a series of RMS keyword=value
  481. pairs.  Kermit doesn't give any.  Experimentation shows that appending to
  482. a Stream_LF works fine.  That'll be a restriction for now, until somebody
  483. sends in code to get the RMS attributes of the original file and feed them
  484. to fopen().  Also need code to fix VMS zhcko() to say whether it's OK to
  485. append to a file.  ckuus7.c, 17 Jan 2002.
  486.  
  487. Somebody suggested I could get a working Kermit for Neutrino 2+ by doing the
  488. QNX6 build on Neutrino itself.  I verified that this can't be done -- at least
  489. not by me -- since Netutrino 2+ doesn't have a compiler, and we already know
  490. the version cross-built for it on QNX4 doesn't work.  17 Jan 2002.
  491.  
  492. From Jeff: SET SSH GSSAPI KEY-EXCHANGE { ON, OFF } parsing, SHOW SSH.
  493. ckuus3.c, 18 Jan 2002.
  494.  
  495. PeterE suggested that SET ESCAPE allow 8-bit escape characters because of the
  496. difficulty in entering Ctrl-\ on European keyboards and the hardship (e.g. to
  497. EMACS and VI users) of sacrificing another C0 control character.  Like
  498. everything these days, this turns out to be rather a bigger deal than it would
  499. seem.  The SET ESCAPE parser calls setcc(), which accepts control characters
  500. in various formats (literal, ^X notation, or numbers), and gives an error
  501. return if the value is not 0-31 or 127.  This is changed easily enough to also
  502. allow numbers between 128 and 255.  But who else calls setcc()?  The commands
  503. for setting Kermit packet start and end characters.  No big deal, this gives
  504. people a bit more flexibility in case they need it, but it won't be
  505. documented.  setcc(): ckuus7.c, 18 Jan 2002.
  506.  
  507. Since code to display the escape character is scattered all over the place,
  508. and some of it indexes into an array based on the character value (which would
  509. now dump core if the escape character was > 128), I put the code in one place,
  510. a new shoesc() routine in ckuusx.c (which needs to be outside #ifndef NOICP,
  511. since the CONNECT modules use it even in command-line only builds).  Also
  512. discovered that this code was indexing into the nm[] array with tt_escape to
  513. get "enabled" or "disabled", which is no longer appropriate, so fixed this
  514. too.  ckuusr.h, ckuus[5x].c, 18 Jan 2002.
  515.  
  516. Made SHOW ESCAPE, SHOW TERM, and the various CONNECT modules call shoesc(),
  517. and updated HELP SET ESC.  ckuus[25].c, ckucns.c, ck[cuvd9]con.c, 18 Jan 2002.
  518.  
  519. After all that, it occurred to me that this is a really bad idea for K95,
  520. with all the confusion about Console code pages, OEM code pages, Windows
  521. code pages, and Unicode.  But I tried "echo \161" at the K95 prompt and got
  522. the expected 8-bit character in both the Console version and the GUI, so
  523. maybe it's OK after all.
  524.  
  525. Removed the automatic IKSD login code from setlin() since it complicates
  526. interactive anonymous login.  ckuus7.c, 20 Jan 2002.
  527.  
  528. An #ifdef clause from Matthew Clarke to avoid "redeclaration of free" error
  529. when building a curses version of C-Kermit for AIX 2.2.1 on RT PC.  ckuusx.c,
  530. 22 Jan 2002.
  531.  
  532. Took care of one detail I omitted when adding the 8-bit escape character:
  533. not stripping the 8th bit before comparing the keyboard char with the escape
  534. char.  ck[uv]con.c, ckucns.c, 24 Jan 2002.
  535.  
  536. Started to go through Jeff's changes of the last week but he had run trim -t
  537. on them, which untabifies, so the diffs were huge.  Retabifying Jeff's files
  538. only makes matters worse.  So instead of comparing each old and new source
  539. file in EMACS windows with M-X Compare-Windows like I usually do (which can't
  540. be told to ignore whitespace), I had to work from the diff -c -b listings.
  541. In ascending order of size of diffs:
  542.  
  543. ckcker.h: Add I_AM_SSHSUB definition.
  544. ckuusr.h: XXLINK and VN_PERSONAL, etc, definitions.
  545. ckuusy.c: Support for "I Am SSHSUB" invocation.
  546. ckuus5.c: Support for new K95 directory structure.
  547. ckcmai.c: Init endianness earlier (K95 TYPE was broken), "I Am SSHSUB" support.
  548. ckuus7.c: Security #ifdefs, SSH OPEN /PASSWORD, SSHSUB support
  549. ckcftp.c: <-- SAVE TIL LAST
  550. ckuus6.c: Add LINK command for K95 on NT.
  551. ckuus4.c: Support for new K95 directory structure; SSHSUB support
  552. ckuus3.c: Support for new K95 directory structure; some SSH changes
  553. ckuus2.c: Changes to SSH related help text, add HELP LINK text
  554. ckuusr.c: LINK command, SSH OPEN /PASSWORD: /SUBSYSTEM: switches,
  555.   Pattern-management fixes.
  556. ckctel.c, ck_ssl.c, ckuath.c, ckcnet.c:
  557.  Took Jeff's without looking.
  558. ckuusx.c, ckucns.c, ckucon.c, ckwart.c:
  559.   My changes from weeks ago that were never picked up.
  560.  
  561. Built OK on Solaris with gcc and on SunOS with (K&R non-ANSI) cc.
  562. 31 Jan 2002.
  563.  
  564. Meanwhile, Jeff had made various changes in response to Jaya Natarajan at IBM,
  565. whose basic complaint was that numerous failure conditions were not being
  566. detected if the fullscreen file-transfer display was active.  Jeff found that
  567. this was because big blocks of code were skipped in that case and changed the
  568. code not to do that, which fixed the reported problems.  But later Jaya said
  569. that "ftp mget file1 file2" acted like "ftp mget *", so it seemed that Jeff's
  570. fixes broke file selection.  After taking Jeff's fixes for ckcftp.c, however,
  571. I still could not reproduce the problem.  ckcftp.c, 31 Jan 2002.  <-- Later,
  572. it turned out the problem was with IBM's custom FTP server.
  573.  
  574. Fixed updates that I missed yesterday in ckcftp.c, ckuusr.c.  Moved misplaced
  575. #ifdef in ckuusy.c breaking nonet builds.  Added #ifdefs to sysinit() for
  576. nonet builds in ckutio.c.  Ran through build-in-many-configurations script
  577. in Linux, all builds OK.  1 Feb 2002.
  578.  
  579. Moved shoesc() definition outside of NOXFER to fix NOXFER builds.
  580. ckuusx.c, 1 Feb 2002.
  581.  
  582. Added MYCUSTOM definition alongside KERMRC and changed KERMCL to be the
  583. same as CKMAXPATH, instead of some random hardwired number.  ckuusr.h,
  584. 1 Feb 2002.
  585.  
  586. Changed ckcdeb.h to define DIRSEP and ISDIRSEP(), and put #ifndef
  587. [IS]DIRSEP..#endif around all [IS]DIRSEP definitions in ck[udso]fio.c, so we
  588. can finally put away the many repeated #ifdef chains when we get around to it.
  589. 1 Feb 2002.
  590.  
  591. Make VMS zkermini() return 1 on success, 0 on failure, rather than 0 always.
  592. ckvfio.c, 1 Feb 2002.
  593.  
  594. Added code to doinit(), just before it goes to execute the init file.  If the
  595. init file name we are about to open is empty or fails zchki(), substitute the
  596. customization filename.  For now this code is in #ifdef USE_CUSTOM..#endif,
  597. which is not defined by default.  It does the trick in Unix and VMS.  Also
  598. included code from Jeff for K95, but this needs verification and testing.
  599. Also used DIRSEP and ISDIRSEP() throughout doinit() instead of the long #ifdef
  600. chains.  ckuus5.c, 1 Feb 2002.
  601.  
  602. Moved shoesc() prototype from ckuusr.h to ckcker.h so modules that need it
  603. don't have to include ckuusr.h just for this one thing (example: ckvcon.c).
  604. 1 Feb 2002.
  605.  
  606. Defined USE_CUSTOM by default, except if NOCUSTOM is defined.  ckuusr.h,
  607. 1 Feb 2002.
  608.  
  609. Fixed kermit-sshsub code to really enter server mode, and to print
  610. "KERMIT READY TO SERVE..." so scripts can wait for it.  Also bumped the
  611. C-Kermit test ID to RC.03 and the K95 one to Beta.02.  ckcpro.w, ckcmai.c,
  612. 2 Feb 2002.
  613.  
  614. I was thinking about adding SET COMMAND BUFFER-SIZE to let people allocate
  615. as big a buffer as they wanted at runtime, mainly for defining huge macros.
  616. Moved the SCMD_blah definitions from ckuusr.h to ckuus3.c, since they aren't
  617. used anywhere else.  But stopped there since the rest turns out to be a rather
  618. big deal.  ckuusr.h, ckuus3.c, 2 Feb 2002.
  619.  
  620. From Jeff, 3 Feb 2002:
  621.  . Fix an out-of-order modem name in the SET MODEM TYPE table: ckudia.c.
  622.  . Use SET LOGIN USER and PASSWORD if present. ckcftp.c.
  623.  
  624. Cody Gould noticed that array declarations had become case sensitive, and
  625. upper case didn't work.  Diagnosis: misplaced case conversion in xarray().
  626. Fixed in ckuus5.c, 4 Feb 2002.
  627.  
  628. SHOW VAR dumps core on \v(sexpression) or \v(svalue) -- failure to check for
  629. NULL pointer.  I wonder why this didn't happen before (answer: because I was
  630. doing it on SunOS; now I'm doing it on Solaris).  ckuus4.c, 6 Feb 2002.
  631.  
  632. I've had several requests for "show var name name name...".  I added this to
  633. doshow(), such that SHOW VAR works exactly as it did before (if you don't give
  634. it an arg, it lists all variables; if you give it an arg, it appends "*" to it
  635. and lists all matching variables) but now you can also give more than one arg
  636. and it works the same way with each one as it did before if you gave it a
  637. single item (i.e., "*" is appended, so "show var os cmd" shows all variables
  638. whose names begin with "os" or "cmd".  You can also freely use pattern
  639. notation, including anchors.  Hmmm, no, actually it's different in that now
  640. each includes an implied * before AND after, so "show var version" shows all
  641. variables whose name contain "version" rather than all variables whose names
  642. start with it.  ckuus5.c, 6 Feb 2002.
  643.  
  644. Cody Gould reported that WRITE FILE blah blah \fexec(anything) ... got a
  645. spurious "File or Log not open" error.  This turns out to be a rather
  646. pervasive problem -- whenever you use \fexec() it calls the parser recursively
  647. and this can run roughshod over global variables, such as our innocent little
  648. x, y, and s.  The fix in this case was to put x and y on the stack.  The same
  649. thing probably needs doing in about 10,000 other places.  Too bad C isn't
  650. Algol.  ckuusr.c, 6 Feb 2002.
  651.  
  652. Minor fix to SHO VAR -- the "^" anchor wasn't working (e.g. "show var ^os").
  653. ckuus5.c, 6 Feb 2002.
  654.  
  655. Fixes from Jeff for FTP file-transfer character-set translation in K95 and
  656. in WIKSD, plus updated K95 SSH help text.  ckcftp.c, ckcfns.c, ckuus2.c,
  657. 7 Feb 2002.
  658.  
  659. Server has its date set in the past.  Client says "remote dir".  Server sends
  660. A packet containing old date.  If client has FILE COLLISION UPDATE, it
  661. rejects the directory listing.  Changed gattr() to only reject real files
  662. (introduced by F packet), not X-packet material like directory listings.
  663. ckcfn3.c, 7 Feb 2002.
  664.  
  665. Up-down arrow keys for command recall.  People have been asking for it for
  666. years but now it's actually important because of PDAs that don't have Ctrl
  667. keys.  Would have been trivial except that we use getchar() rather than
  668. coninc() for reading from the keyboard in Unix so conchk() doesn't help.  In
  669. fact there are lots of other places where conchk() is used this way and works
  670. only by accident.  The only reason we never noticed a problem before is that
  671. characters don't usually arrive from the keyboard that fast.  But when an
  672. arrow key sends "ESC [ A" all once, the stdin buffer gets some extra stuff in
  673. it, which getchar() will return next time, but which coninc()/conchk() will
  674. never see.  So I added a new cmdconchk() routine which, if the keyboard is
  675. being read with getchar() rather than coninc(), looks at the stdin buffer.
  676. Unfortunately, however, there is no API for this, nor is there any standard
  677. way to access the stdin buffer directly.  So first I did it for Solaris.  Then
  678. to make it portable requires a survey of the headers for every platform.  I
  679. found four major variations:
  680.  
  681.   stdin->_r:
  682.     {Free,Open,Net}BSD, BSDI
  683.   stdin->_cnt:
  684.     SunOS, Solaris, HP-UX 5-6, AIX, VMS, SINIX, IRIX 5.3-6.5, DGUX
  685.     4.2BSD, 4.3BSD, OSF/1..Tru64, QNX4, Unixware 1.0-2.1.0
  686.   stdin->__cnt:
  687.     HP-UX 7-11, SCO: OSR5.0.6a, Unixware 2.1.3-7.x, OU8, UNIX 3.2v4.x
  688.   Subtract read from end pointer (_IO_file_flags defined):
  689.     Linux (tested on RH 5.2 thru 7.1)
  690.  
  691. The Linux method is new and different to account for multibyte characters.
  692. All the others assume character == byte.
  693.  
  694. For docs: ANSI only, 7-bit only; both application and cursor modes are
  695. accepted.  Only up and down arrow are handled; left and right arrows cause
  696. a beep.  ckucmd.c, 8 Feb 2002.
  697.  
  698. Build-all: Discovered that changing CTTNAM from TT: to SYS$INPUT: in VMS
  699. (which was done on 3 Jan 2002 to work around problems starting Kermit in
  700. batch, spawn'd, etc) breaks Kermit on VMS 5.5/VAX (concb() fails with "lacks
  701. sufficient privilege"; if you enable all privs Kermit starts but then spews
  702. out a constant stream of BEL characters).  If you put dftty back to "TT:",
  703. everything is fine -- I have no idea why, so I used #ifdef VMSV70 to decide,
  704. which is totally crude.  Next I had to find where the boundary really is: VAX
  705. vs Alpha?  VAX C vs DEC C?  Or between VMS releases?  Built on:
  706.  . VMS 6.2 Alpha (DEC C) - OK with TT:
  707.  . VMS 6.2 Alpha (DEC C) - OK with SYS$INPUT: <-- keep this one
  708.  . VMS 7.1 VAX   (DEC C)
  709. So the final condition is #ifdef VMSV60.  ckvker.com, ckvtio.c, ckuus5.c.
  710.  
  711. QNX 6 needed some attention too:
  712.  . Whoever did the makefile target made the default port "/dev/ser1".
  713.  . Arrow keys...
  714. But I gave up on getting arrow keys to work -- it should be just like *BSD,
  715. but for some reason gcc complains that struct FILE has no _r member, even
  716. though it does (getchar uses it).
  717.  
  718. Checked stdio.h on Mac OS X and it looks like the *BSDs.
  719.  
  720. --- C-Kermit 8.0.201 ---
  721.  
  722. Removed -g from solaris2xg+krb5+krb4+openssl+shadow makefile target -- it
  723. was producing a 15MB binary!  makefile, 14 Feb 2002.
  724.  
  725. Fixed a couple thinkos in "make install": $(DESTDIR) should not have been
  726. included in the tests for whether INFODIR or SRCDIR were desired.  makefile,
  727. 14 Feb 2002.
  728.  
  729. (tarball refreshed 16 Feb 2002)
  730.  
  731. --- C-Kermit 8.0.201 ---
  732.  
  733. From Jeff: Better seeding of \frandom(): ckcmai.c, ckuus4.c, 18 Feb 2002.
  734.  
  735. From Jeff: Make arrow keys work in WIKSD, but now also unconditionally
  736. compile arrow-key code in all versions.  ckucmd.c, 18 Feb 2002.
  737.  
  738. From Jeff: ckuath.c, ck_ssl.c, ckcnet.c (didn't look).  18 Feb 2002.
  739.  
  740. Added ORIENTATION command, that lists the various important directories, and
  741. \flongpathname() and \fshortpathname(), which do path format conversions in
  742. Windows, and are just synonyms for \fpathname() elsewhere.  The new functions
  743. need building and testing in Windows.  ckuusr.h, ckuus[r24].c, 18 Feb 2002.
  744.  
  745. Changed PWD for Windows only to show both short and long paths (but only if
  746. they are different; otherwise it behaves as before).  ckuusr.c, 18 Feb 2002.
  747.  
  748. Changed default Windows prompt to show long pathname. ckuus5.c, 18 Feb 2002.
  749.  
  750. Updated INTRO command to mention FTP, HTTP, and SSH.  ckuus2.c, 18 Feb 2002.
  751.  
  752. From Jeff: fixes for typos in GetLongPathName() code: ckuus[r4].c, 22 Feb 2002.
  753.  
  754. From Jeff: net/auth updates: ckcnet.c, ckuath.c, 22 Feb 2002.
  755.  
  756. Added -DUSE_FILE__CNT to NCR MPRAS targets, George Gilmer: makefile,
  757. 24 Feb 2002.
  758.  
  759. From Jeff: Add support for GetLongPathName() in Win95 and NT: ckcdeb.h,
  760. ckuus[r4].c, 24 Feb 2002.
  761.  
  762. From Jeff: More fixes for FTP SIGINT, plus fix [M]PUT /MOVE.  ckcftp.c,
  763. 24 Feb 2002.
  764.  
  765. Fixed an unguarded reference to inserver, gtword(): ckucmd.c, 24 Feb 2002.
  766.  
  767. Adapted RETRIEVE for use with FTP connections; this one was missed when
  768. adapting GET, REGET, MOVE, etc.  ckuus6.c, ckcftp.c, 24 Feb 2002.
  769.  
  770. Added special COPYRIGHT command text for the free version of WIKSD.
  771. ckcmai.c, ckuusr.c, 24 Feb 2002.
  772.  
  773. C-Kermit, when in CONNECT mode and given the <Esc-Char>U sequence, would
  774. unconditionally close the connection if it was a network connection.  This
  775. is bad when Telnetting to a modem server.  I added to code to prevent this
  776. in the RFC2117 TELNET COMPORT case but I'm not sure how to exend this to the
  777. general case (or whether it would be a good idea).  ckucns.c, 24 Feb 2002.
  778.  
  779. During file transfer, chktimo() calls ttgspd() for every packet, which clearly
  780. doesn't make sense on network connections, especially since on Telnet COMPORT
  781. connections it results in a network speed query for every packet.  Rearranged
  782. the code so this happens only on true serial-port connections.  ckcfn2.c,
  783. 24 Feb 2002.
  784.  
  785. From Jeff: Fix reversed ANSI/non-ANSI function declarations clauses in
  786. ckcftp.c, 26 Feb 2002.
  787.  
  788. Changed Unix CONNECT module to call kstart() only when it has a chance of
  789. doing anything (i.e. a Kermit packet has been partially detected, or the
  790. packet start character just came in), rather than unconditionally on every
  791. incoming character.  ckucns.c, 8 Mar 2002.
  792.  
  793. FTP PUT /SERVER-RENAME:, /RENAME-TO:, /MOVE-TO: were sticky.  Patch: In
  794. ckcftp.c, near the top of doftpput(), add the lines marked with "+":
  795.  
  796.     makestr(&filefile,NULL);            /* No filename list file yet. */
  797. +   makestr(&srv_renam,NULL);        /* Clear /SERVER-RENAME: */
  798. +   makestr(&snd_rename,NULL);        /*  PUT /RENAME */
  799. +   makestr(&snd_move,NULL);        /*  PUT /MOVE */
  800.     putpath[0] = NUL;                   /* Initialize for syncdir(). */
  801.  
  802. ckcftp.c, 26 Mar 2002.
  803.  
  804. \fday() and \fnday() were broken for dates prior to 17 Nov 1858.  Fixed in
  805. fneval(): ckuus4.c, 28 Mar 2002.
  806.  
  807. From Jeff:
  808.  . New calling convention for demoscrn(): ckucmd.c, ckuusx.c
  809.  . Fix for host-initiated 80/132 col screen mode change.  ckuus7.c.
  810.  . New \v(desktop) variable: K95 user desktop directory, ckuusr.h, ckuus4.c
  811.  . New \v(rfc2717_signature) var: Telnet Com Port, ckuusr.h, ckuus4.c
  812.  . Uncomment "not-reached" return(-2) in xgnbyte(): ckcfns.c
  813.  . New dates: ckcmai.c.
  814.  . Telnet Com Port fixes: ckutio.c
  815.  . SET PRINTER fixes for K95: ckuus3.c
  816.  . Session limit adjustments: ckuus3.c
  817.  . New directory layout for K95 (TAKE, ORIENT): ckuusr.c
  818.  . Fixes for Telnet Com Port, recycling SSH connections: ckuusr.c
  819.  
  820. From me, not picked up by Jeff previously:
  821.  . kstart() speedup: ckucns.c.
  822.  
  823. 1 Apr 2002.
  824.  
  825. ---K95 1.1.21---
  826.  
  827. From Jeff, 4 Apr 2002:
  828.  . More fixes for Telnet Com Port: ckuus4.c, ckudia.c, ckutio.c, ckcnet.c:
  829.    . network connections will check for carrier detect if SET
  830.      CARRIER-WATCH is ON.   This could have a potential conflict if
  831.      the option is negotiated and the carrier is off, but the site
  832.      requires login.
  833.    . modem hangup message generated since the dial module did not
  834.      believe that network modems could be reset with a DTR drop.
  835.  . Version number adjustments: 8.0.203, 1.1.99: ckcmai.c.
  836.  . Security: ck_ssl.[ch], ckuath.c.
  837.  
  838. ---C-Kermit 8.0.203---
  839.  
  840. From Jeff, 6 Apr 2002:
  841.  . Fix typo in HELP REMOTE HOST: ckuus2.c.
  842.  . More Telnet Com Port fixes: ckctel.c, ckcnet.c, ckudia.c, ckutio.c
  843.  
  844. From Jeff, 9 Apr 2002:
  845.  . Fix autodownload problem: ckcfn[2s].c.
  846.  
  847. Chiaki Ishikawa reported that in Linux (two different kinds), if you choose
  848. hardware parity, CONNECT, then escape back, the speed can change.  I tracked
  849. this down to the following statement in ttvt():
  850.  
  851.     tttvt.c_cflag &= ~(IGNPAR);    /* Don't discard incoming bytes */
  852.  
  853. Somehow execution of this statement corrupted the speed words of the termios
  854. struct, which are entirely separate words that are nowhere near the c_cflag
  855. member.  Anyway, the statement is wrong; it should be:
  856.  
  857.     tttvt.c_cflag |= IGNPAR;    /* Don't discard incoming bytes */
  858.  
  859. Fixing it cured the problem; don't ask me why.  ckutio.c, 9 Apr 2002.
  860.  
  861. From Jeff:
  862.   fixes the problem reported by robi@hastdeer.com.au.  The request to
  863.   enter server mode was received while we were entering server mode.
  864.   But the server was waiting for the response to REQ_STOP sent to the
  865.   client.  Therefore, we weren't quite in server mode yet and the
  866.   request to enter server mode was rejected.  A check for the sstate
  867.   value solves the problem.  ckctel.c, 10 Apr 2002.
  868.  
  869. Chiaki Ishikawa (CI) discovered the real cause for the speed changing problem.
  870. I was setting the IGNPAR bit in the wrong flag word: it should have been
  871. c_iflag instead of c_oflag, silly me.  Fixed in ttvt() and ttpkt(): ckutio.c.
  872. I also did a thorough census of all the termio[s] flags to ensure each was
  873. applied to the right flag word -- they were, IGNPAR in the HWPARITY case was
  874. the only mistake.  CI also discovered that the speed words in the Linux
  875. termios struct are not used at all -- the speeds are encoded in an
  876. undocumented field of c_cflag, which explains the problem.  10 Apr 2002.
  877.  
  878. Any use of \{nnn} character notation in a macro definition, loop, or other
  879. braced block caused an "unbalanced braces" parse error.  The backslash in this
  880. case is not quoting the open brace; it's introducing a balanced braced
  881. quantity.  Special-cased in getncm(): ckuus5.c, 12 Apr 2002.
  882.  
  883. The semantics of "if defined \v(xxx)" were changed in 8.0 to avoid obnoxious
  884. error messages when xxx was not a built-in variable (see notes of 19 Nov
  885. 2000), such that "if defined \v(xxx)" would always succeed if there were such
  886. a variable, even if it had no value.  The behavior that is documented in the
  887. book (and also in ckermit70.html) and that we had in versions 6 and 7, was
  888. that IF DEFINED \v(xxx) would fail if \v(xxx) was defined but had an empty
  889. value OR if it was not defined, and would succeed only if it was defined and
  890. had a value.  Fixed in boolexp(): ckuus6.c, 12 Apr 2002.
  891.  
  892. What about \function()s?  IF DEF \fblah() presently succeeds if the function
  893. exists; you don't even have to give arguments.  I think this behavior is more
  894. useful than if I required valid arguments and then evaluated the function --
  895. you can do that anyway with 'if not eq "\fxxx(a,b)" "" ...'  Of course this
  896. argument applies to "if def \v(xxx)" too, except that the current behavior is
  897. consistent with the 7.0 behavior, so there is no need for a change.
  898.  
  899. Kent Martin discovered that if a macro contains a LOCAL statement for a
  900. variable whose name is the same as, or a unique left substring of, the macro's
  901. name, then undefining the local variable makes the macro disappear:
  902.  
  903.   define DateDiff {
  904.     echo {DateDiff(\%1) executing...}
  905.   }
  906.   define Kent {
  907.     do DateDiff {2}
  908.     local date
  909.     assign date {}
  910.     do DateDiff {3}  <-- This fails (A)
  911.   }
  912.   do DateDiff {1}
  913.   do Kent
  914.   do DateDiff {4}    <-- So does this (B)
  915.  
  916. The first part of the problem is that "assign date {}" called delmac with
  917. exact=0, so delmac evidently deleted first macro whose name started with
  918. "date" -- and since the only one was DateDiff, that's the one that was
  919. deleted.  Fixing this (change "delmac(vnp,0)" to "delmac(vnp,1)" in dodef())
  920. got us past A.  The second part was making the same fix to the delmac()
  921. call in popclvl().  ckuus[56].c, 13 Apr 2002.
  922.  
  923. The INPUT command ignored the parity setting, thus SET PARITY EVEN,
  924. INPUT 10 "login:" didn't work.  Fixed in doinput(): ckuus4.c.  Also fixed a
  925. bogus #ifdef COMMENT section that messed up the block structure of the module
  926. and therefore EMACS's indenting.  18 Apr 2002.
  927.  
  928. Added sco32v500net+ssl and Added sco32v505net+ssl targets, from Scott Rochford
  929. at Dell (not sure yet if they work).  Makefile, 19 Apr 2002.
  930.  
  931. From Jeff, 22 Apr 2002:
  932.  . Added "darkgray" color and made "dgray" an invisible synonym: ckuus3.c.
  933.  . Fix carrier sense on Telnet Com Port immediately after dial: ckudia.c.
  934.  . Change krb5_des_blah() arg list: ckutio.c.
  935.  . Fix ttgmdm() for Telnet Com Port: ckutio.c.
  936.  . Fix tthang() return code: ckutio.c.
  937.  . Add aix43gcc+openssl target: makefile.
  938.  
  939. From Jeff, 25 Apr 2002:
  940.  . Fix SET GUI keyword table: ckuus[37].c.
  941.  . A final fix to Telnet Com Port: ckctel.c, ckcnet.c.
  942.  
  943. From Jeff, 26 Apr 2002:
  944.  . Another final fix to Telnet Com Port: ckctel.c, ckudia.c.
  945.  
  946. From Jeff, 27 Apr 2002:
  947.  . separate the wait mechanism for TELNET SB COMPORT synchronous messages
  948.    from the asynchronous TELNET SB COMPORT MODEMSTATUS messages: ckctel.[ch]
  949.  . fix debug messages in Certificate verify functions: ck_ssl.c, ckcftp.c.a
  950.  
  951. Frank, 27 Apr 2002:
  952.  . Fixed VMS zgetfs() to fail when file doesn't exist: ckvfio.c.
  953.  . Fixed UNIX zgetfs() to check for null or empty arg: ckufio.c.
  954.  . Added #include <time.h> for time() call: ckcmai.c.
  955.  . Add casts to args in tn_wait() calls: ckctel.c.
  956.  
  957. SINIX-P 5.42 (Pyramid architecture) makefile target from Igor Sobrado.
  958. makefile (no source-code changes), 1 May 2002.
  959.  
  960. From Jeff, 5 May 2002,
  961.  . Fix some "unknown host" messages: ckcftp.c.
  962.  . Add more casts to tnc_wait() calls: ckudia.c.
  963.  . Improvements to SHOW SSH, SHOW GUI: ckuus3.c.
  964.  . Fixes to SET COMMAND { WIDTH, HEIGHT }: ckuus3.c.
  965.  . Updates to ck_ssl.[ch], ckctel.c, ckcnet.c.
  966.  
  967. Fixed the erroneous setting of ssh_cas during switch parsing rather than
  968. after cmcfm() in setlin(): ckuus7.c, 5 May 2002.
  969.  
  970. setlin() decomposition (2300 lines), Part One: 
  971.  
  972.  . Copied a big chunk from the end of setlin(), beginning with net directory
  973.    lookup, but only the network-specific and common parts, to a new routine,
  974.    cx_net(), 900 lines.
  975.  
  976.  . Extracted many repetitious lines of error-message code from cx_net()
  977.    to a new routine, cx_fail().  Error messages are stored in slmsg, and
  978.    also printed but only if we were not called from a GUI dialog (and
  979.    QUIET wasn't set, etc etc).  Any adjustments in this policy can now be
  980.    made in one place.
  981.  
  982.  . I put a call to cx_net() in setlin() just before all the code it replaced.
  983.    It works for TELNET and SET HOST /TELNET.
  984.  
  985.  . Built with mkwatsol-k5k4ssl; after a couple fixes it builds OK and makes
  986.    Kerberized connections OK.
  987.  
  988.  . Copied the serial-port and common parts of the setlin() post-cmcfm()
  989.    code to another new routine, cx_serial(), about 275 lines.  Fixed
  990.    messages not to come out when called from GUI dialog, etc.  Inserted
  991.    a call to cx_serial() at the appropriate spot in setlin().  Tested
  992.    serial connections on watsun with "set line /dev/ttyh6", works OK.
  993.  
  994.  . Removed all the code from setlin() that was copied to cx_*().  This slims
  995.    setlin() down to 1120 lines.  Tested regular Telnet, Kerberized Telnet, and
  996.    serial connections again, all OK.  The Unix version of the SSH command is
  997.    OK too.
  998.  
  999. setlin() deconstruction, Part Two:
  1000.  
  1001. Now that we have the common network and serial connection pieces moved out of
  1002. setlin(), we still need to move out the little code snippets for each network
  1003. type that take place between command confirmation and the common code we just
  1004. replaced.   As far as I can tell, this needs doing only for SSH.  The code
  1005. labeled "Stash everything" copied to cx_ssh() but I didn't remove the original
  1006. code since I can't test this.  I think I'm done -- maybe I'm overlooking
  1007. something but I don't know what...  First we need to test the heck out of it
  1008. in all command-line versions (K95 and C-Kermit).  Then to use this from
  1009. the GUI, see the calling sequences for cx_serial(), cx_net(), and cx_ssh():
  1010.  
  1011.  . For serial or TAPI connections, the GUI should call cx_serial().
  1012.  . For SSH connections, it should call cx_ssh() and then cx_net().
  1013.  . For all other network connections, just calls cx_net().
  1014.  
  1015. ckuus7.c, Cinco de Mayo de 2002.
  1016.  
  1017. New ckuus7.c from Jeff, 8 May 2002.  Merge cx_ssh() into cx_net().  Also: I
  1018. had made line[] an automatic variable, since the global line[] buffer is used
  1019. by almost every parsing routine in C-Kermit to hold string fields between
  1020. parsing and execution but Jeff says he found that some code somewhere depended
  1021. on line[] containing the hostname after setlin() was finished.
  1022.  
  1023. From Jeff, 10 May 2002:
  1024.  . Fix SET SSH STRICT-HOST-CHECKING parse: ckuus3.c.
  1025.  . Add prototypes for cx_net() and cx_serial(): ckuusr.h.
  1026.  . Add ANSI versions of cx_net() and cx_serial() declarations and supply a
  1027.    missing parameter in the cx_serial() invocation, change SSHCMD cx_net()
  1028.    invocation to new form.
  1029.  
  1030. From Jeff, 16 May 2002:
  1031.  . ANSI strictness changes: ck_ssl.[ch]
  1032.  . New DIALER command: ckuusr.[ch]
  1033.  . Correction to how -0 turns off autodownload: ckuusy.c
  1034.  . Prototypes for GUI menu action functions: ckuusr.h.
  1035.  . Replace setting of GUI-action variables by function calls: ckuus[3457x].c
  1036.  . Fix FTP -z switch parsing: ckcftp.c.
  1037.  . Fix SET HOST testing of setlin() return code: ckuus3.c
  1038.  
  1039. From Jeff, 18 May 2002:
  1040.  . Allow half-size GUI fonts: ckuus[35y].c.
  1041.  
  1042. Fixed setguifont() to parse fractional font sizes and round to nearest half
  1043. point.  ckuus3.c, 18 May 2002.
  1044.  
  1045. For GUI, wrote front ends for getyesno(), readtext(), and readpass():
  1046.  
  1047.  . uq_ok() prints text and gets Yes/No, OK/Cancel, or just OK response.
  1048.    This replaces getyesno() and can also be used for alert or help boxes.
  1049.  
  1050.  . uq_txt() prints text and gets a single text response.  Replaces
  1051.    readtext() and readpass().
  1052.  
  1053.  . uq_mtxt() is like uq_txt() but allows multiple text fields.  Replaces
  1054.    any combination of readtext() and readpass().
  1055.  
  1056. Obviously the #ifdef KUI portions of the uq_blah() routines need filling in.
  1057. ckuusr.h, ckuus3.c, 18 May 2002.
  1058.  
  1059. Converted selected getyesno() calls to uq_ok(): ckcftp.c, ckuus3.c, ckuus6.c.
  1060. Some were not converted because it was inappropriate, e.g. DELETE /ASK; others
  1061. because they're in Jeff's code.  The most interesting conversions are in the
  1062. DIAL command when DIAL CONFIRMATION is ON.  Here there is a dialog for each
  1063. phone number asking if it's OK (ug_ok()) and if not, asking for a replacement
  1064. (uq_txt()); seems to work fine in C-Kermit.  All the candidates for uq_mtxt()
  1065. are in Jeff's code.  18 May 2002.
  1066.  
  1067. From Jeff: Convert remaining getyesno/readtext/readpass calls to uq_blah()
  1068. so they can be GUI dialogs.  ckuus[37].c, ckcftp.c, ckuath.c, ck_ssl.c,
  1069. 21 May 2002.
  1070.  
  1071. Added KCD command = CD to symbolic directory name (EXEDIR, COMMON, APPDATA,
  1072. TMPDIR, etc etc).  ckuusr.h, ckuus[r25].c, 21 May 2002.
  1073.  
  1074. From Jeff, 28 May 2002:
  1075.  . --title: commandline option: ckuusr.h, ckuusy.c
  1076.  . Fix some #includes, move some declarations: ckcfns.c
  1077.  . Change K95 version from Dev.00 to Beta.01
  1078.  . ASK[Q] /GUI: ckuus6.c.
  1079.  . Various GUI screen updates and #ifdefs: ckuus7.c
  1080.  . Add missing cx_net() calls to new setlin() for file SuperLAT..: ckuus7.c
  1081.  . Updated uq_*() routines for GUI dialogs: ckuus3.c.
  1082.  
  1083. Added GETOK switches (/TIMEOUT for all; /POPUP and /GUI for K95G):
  1084. ckuus6.c, 29 May 2002.
  1085.  
  1086. Added HELP SET GUI text.  ckuus2.c, 29 May 2002.
  1087.  
  1088. From Jeff:
  1089.  . Another K95-specific #include for ckcfns.c.
  1090.  . More items for K95G Actions menu.
  1091.  . Change K95G Locus switching to call setlocus() rather than set variable.
  1092.  . Ditto for several other variables now settable from Actions menu.
  1093.  . Fix SET HOST /NET:SSH status code so IF SUCCESS works.
  1094.  . Fix SHOW SSH port-forwarding.
  1095. ckcfns.c, ckuus[r367].c, ckcftp.c, ckcmai.c, 30 May 2002.
  1096.  
  1097. Changed SET LOCUS to have a new value, ASK, corresponding to new autolocus
  1098. value of 2, K95G only.  Changed setlocus() to not do anything if the new and
  1099. old loci are the same, otherwise to invoke a GUI dialog in K95G if autolocus
  1100. is 2, and also to handle any text messages.  Changed SHOW COMMAND to show ASK
  1101. value for SET LOCUS.  Rewrote HELP SET LOCUS.  ckuusr.[ch], ckuus[23].c,
  1102. ckcftp.c, 30 May 2002.
  1103.  
  1104. Add a missing space to Locus popup, and fix Jeff's version of the code to
  1105. compile in C-Kermit.  ckuusr.c, 31 May 2002.
  1106.  
  1107. From Jeff, for K95 GUI, 6 June 2002:
  1108.  . Force some GUI popups to be in foreground: ckuus3.c.
  1109.  . Fix SHOW TERM font display: ckuus5.c.
  1110.  . Update K95 version numbers and date (4 June 2002): ckcmai.c.
  1111.  . Add note about encrypted private keys vs scripts to HELP SET AUTH: ckuus2.c.
  1112.  . Fix SET HOST for DECnet: ckuus7.c.
  1113.  
  1114. --- K95 2.0 ---
  1115.  
  1116. From Jeff, 7 June 2002:
  1117.  . Fix some #ifdefs for Unix builds (locus, dial, etc): ckuus7.c
  1118.  . Add gui_resize_scale_font() prototype: ckuus3.c
  1119.  . Add some missing SET GUI commands: ckuus3.c
  1120.  . Update version numbers: ckcmai.c
  1121.  
  1122. --- K95 2.0.1 ---
  1123.  
  1124. From Jeff, 11 June 2002:
  1125.  . Conditionalize Locus-switching popup text for GUI/Console: ckuusr.c.
  1126.  . Fix the SRP_installed_as_server() function.  The new API returns TRUE even
  1127.    if the SRP config and password files cannot be found.  Went back to the old
  1128.    API.  This bug affects C-Kermit 8 when built with SRP as well as 1.1.21
  1129.    through 2.0.1.  Since iksdnt.exe has not been shipped yet I fixed it and
  1130.    uploaded a new non-beta build of it.  ckuath.c.
  1131.  
  1132. From Jeff, 12 June 2002:
  1133.  . Fix SSH AGENT ADD: ckuusr.c.
  1134.  . Fix --facename: option to not fail if name unknown: ckuusy.c.
  1135.  . Fixes for OpenSSL 0.9.7 and OpenBSD 3.1: ck_ssl.c.
  1136.  . Fix SET AUTH TLS VERIFY NO to prevent a dialog but still a warning if
  1137.    SET AUTH TLS VERBOSE ON is set: ck_ssl.c.
  1138.  . Fix FTP code to verify the hostname as specified by the user and not
  1139.    the hostname discovered by the reverse DNS lookup.  For example,
  1140.      FTP OPEN kermit.columbia.edu
  1141.    should produce a dialog because that name is not in the certificate
  1142.    even though ftp.kermit.columbia.edu (the reverse DNS name) is:  ckcftp.c.
  1143.  
  1144. Add support for Solaris 9 and NetBSD 1.6.  makefile, ckuver.h, ckcdeb.h,
  1145. 13 Jun 2002.
  1146.  
  1147. Discovered that Solaris 9 wants to hide the members of struct FILE, and
  1148. enforces this for 64-bit builds.  They offer some functions like __fbufsize()
  1149. to get the info, but not the info we need for reading escape sequences (the
  1150. _cnt member).  Let's hear it for political correctness.  Created new solaris9g
  1151. (32-bit) and solaris9g64 (64-bit) targets.  Sorry, no arrow keys in 64-bit
  1152. mode.  Also no more direct access to sys_errlist[]; must use strerror().
  1153. makefile, ckucmd.c, 13 Jun 2002.
  1154.  
  1155. Added solaris9g+openssl+zlib+pam+shadow, which in turn required adding
  1156. solaris2xg32+openssl+zlib+pam+shadow, needed for gcc 3.1 in which you have
  1157. to specify 32-bit.  Fails for some mysterious reason in link step
  1158. (can't find libssl.so.0.9.6 even though it's there).  makefile, 13 Jun 2002.
  1159.  
  1160. Solaris 8 empty socket problems again -- tthang() times out, subsequent
  1161. tcsetattr() calls do horrible things.  Added a bandaid to ttclos(): don't
  1162. call tcsetattr() any more if hangup timed out.  ckutio.c, 14 June 2002.
  1163.  
  1164. Gerry B reported the bandaid got us bit farther but Kermit still disappears.
  1165. Added code to reassert the alarm signal handler, since it is likely that
  1166. Solaris has become stricter about this since last time I looked.  (Later
  1167. Gerry reported back that this did the trick -- C-Kermit now exits normally
  1168. and releases the lockfile).  ttclos(): ckutio.c, 17 Jun 2002.
  1169.  
  1170. If you use Kermit to copy a file to a destination file that already exists and
  1171. is longer than the source file, the destination file is not truncated.  I had
  1172. mistakenly assumed that setting O_CREAT in the open() call in zcopy() would
  1173. create a new copy of the file.  Fixed by also setting O_TRUNC.  ckufio.c,
  1174. 17 Jun 2002.
  1175.  
  1176. Updated HELP INPUT and MINPUT text to explain 0 and -1 timeout values, and
  1177. HELP DIAL to explain about entering CONNECT mode automatically.  ckuus2.c,
  1178. 17 Jun 2002.
  1179.  
  1180. Got rid of client-side "Press the X or E key to cancel" message when giving
  1181. a REMOTE command if QUIET is set or if XFER DISPLAY is NONE.  ckuus7.c,
  1182. 17 Jun 2002.
  1183.  
  1184. From Jeff 25 Jun 2002:
  1185.  . Add SUN terminal type: ckuusr.h, ckuus[57].c.
  1186.  . Add GUI file transfer display: ckcker.h, ckuus[47x].c.
  1187.  . Changes to allow C-Kermit to build with OpenSSL 0.9.7.  Current
  1188.    C-Kermit code is designed to compile with 0.9.6 and earlier.  To
  1189.    compile with 0.9.7 you must specify -DOPENSSL_097.  This avoids
  1190.    missing symbols in the DES library.  The functions in OpenSSL were
  1191.    renamed in 0.9.7 to avoid link time conflicts with Kerberos 4.
  1192.    ckufio.c ck_crp.c ckuath.c ck_ssl.h ck_ssl.c, makefile.
  1193.  
  1194. From Jeff 26 Jun 2002:
  1195.  . apparently the SSL Passphrase Callback function was not converted
  1196.    from readpass() to uq_txt()
  1197.  . FTP Authentication failure errors were not being reported to the
  1198.    user.  So a failure would appear to be a successful completion
  1199.    unless FTP DEBUG was ON.  Now the message is reported unless
  1200.    the QUIET flag is set.
  1201. ck_ssl.c, ckcftp.c.
  1202.  
  1203. SET TRANSFER MODE MANUAL didn't work for FTP; fixed in putfile() and getfile():
  1204. ckcftp.c, 1 Jul 2002.
  1205.  
  1206. Changed debug log for FTP to log "FTP SENT" and "FTP RECD" for protocol
  1207. messages, just like we do for Telnet, to make it easy to grep them out of
  1208. the log.  ckcftp.c, 1 Jul 2002.
  1209.  
  1210. In FTP MGET /UPDATE, equal times spuriously caused download.  doftpget() was
  1211. misinterpreting chkmodtime()'s return code.  ckcftp.c, 3 Jul 2002.
  1212.  
  1213. In FTP MGET /RECOVER, recovery is skipped if the local file is newer than
  1214. the remote.  This would seem to make sense, but when a download is
  1215. interrupted, the partial file never gets the date of the remote file, so
  1216. the partial file is always newer, and recovery never works.  Fixed in
  1217. recvrequest() by commenting out the date check.  ckcftp.c, 3 Jul 2002.
  1218.  
  1219. A better way to fix the previous problem is to always set the file date from
  1220. the server and then only allow /RECOVER to work when the dates are equal.
  1221. But that's not possible because MDTM is not implemented universally, and it
  1222. conflicts with how Kermit currently works, namely that FTP DATES are OFF by
  1223. default.  Also, checking dates prevents [M]GET /RECOVER from working with
  1224. files that were incompletely downloaded by some other FTP client.
  1225.  
  1226. In FTP MGET /RECOVER <wildcard> <wildcard> ..., the first file in each group
  1227. is always downloaded.  Diagnosis: Kermit sends "TYPE A" prior to NLST (as it
  1228. must).  Then when it sends its first SIZE command, it's still in ASCII mode,
  1229. so the server sends the "ASCII size" rather than the binary size, which does
  1230. not agree with the size of the local file (which was downloaded in binary
  1231. mode), so recovery is always attempted even when the files are identical.  The
  1232. TYPE A command is sent by initconn().  After the remote_files() call, we have
  1233. to change the type back to the prevailing type before sending the first SIZE
  1234. command.  Fixed in cmdlinget() and doftpget(): ckcftp.c, 3 Jul 2002.
  1235.  
  1236. In FTP MGET /EXCEPT:<pattern> used with SET XFER DISPLAY brief, files that
  1237. are skipped just say ERROR instead of saying why they were skipped.  Fixed
  1238. in doftpget(): ckcftp.c, 3 Jul 2002.
  1239.  
  1240. Added EXIT to top-level HELP text.  ckuus2.c, 13 Jul 2002.
  1241.  
  1242. Strip braces in REINPUT n {string}.  ckuusr.c, 13 Jul 2002.
  1243.  
  1244. Added /QUIET switch to ASK-class commands.  This means not to print any error
  1245. messages when an ASK-class command times out waiting for a response.  Made
  1246. sure that when a timeout occurs, the command fails.  Also made sure the
  1247. c-Kermit prompt doesn't write over the ASK prompt if ASK times out.  Also
  1248. fixed ASK, when it times out, not to return -9, which it did in one case,
  1249. which causes a command-stack dump.  ckuus[267].c, ckucmd.c, 13 Jul 2002.
  1250.  
  1251. Fixed SET FILE INCOMPLETE help text, which said that both KEEP and AUTO were
  1252. the default.  ckuus2.c, 13 Jul 2002.
  1253.  
  1254. If you SET FTP DEB ON and then turn it OFF, the MGET temp file is still kept.
  1255. Fixed by getting rid of ftp_knf variable and using ftp_deb to control whether
  1256. temp file is deleted (ftp_knf was being set from ftp_deb anyway, but then
  1257. wasn't being reset by SET FTP DEB OFF).  ckcftp.c, 13 Jul 2002.
  1258.  
  1259. If an FTP transfer was in progress but the FTP connection drops and automatic
  1260. locus switching is enabled, the locus does not change; thus (for example) a
  1261. subsequent DELETE command makes Kermit send a REMOTE DELETE packet on stdout.
  1262. Fixed in lostpeer(): ckcftp.c, 13 Jul 2002.
  1263.  
  1264. For docs: FTP CD with no arg might not be accepted by the server; e.g. the
  1265. Kermit FTP server says "501 Invalid number of arguments".
  1266.  
  1267. The FTP module never handled SET INCOMPLETE.  Fixed in doftprecv2().  ckcftp.c,
  1268. 13 Jul 2002.
  1269.  
  1270. When FTP DATES is ON, we set an incoming file's date only if the file was
  1271. received successfully.  Changed the code to set the file's date even if it was
  1272. received only partially (assuming we can get the date from server).  ckcftp.c,
  1273. 13 Jul 2002.
  1274.  
  1275. Suppose we were doing FTP MGET /UPDATE from a server directory of 100,000
  1276. files.  Kermit would send a SIZE command for every file unconditionally.  On
  1277. some connections, e.g. to the Red Hat Rawhide server, each one could take up
  1278. to 30 seconds.  That would be 3 million seconds = 34 days.  Don't send a SIZE
  1279. command during the selection phase unless a /SMALLER or /LARGER selector was
  1280. given.  Once the file is selected, send a SIZE command only if one hadn't been
  1281. sent for that file already.  ckcftp.c, 13 Jul 2002.
  1282.  
  1283. Made [M]GET and [M]PUT /UPDATE switch imply FTP DATES ON, since they didn't
  1284. work unless it was.  ckcftp.c, 13 Jul 2002.
  1285.  
  1286. Added FTP [M]GET /DATES-DIFFER, which is like /UPDATE except it selects files
  1287. that are newer or older, rather than only newer.  This allows updates from
  1288. sources where files might be rolled back to earlier versions.  It's a bit
  1289. dangerous if you use it without knowing what it's for, since it allows older
  1290. files to overwrite newer ones.  (Code is also in place for [M]PUT
  1291. /DATES-DIFFER, and it works, but I commented it out because it's either
  1292. useless or dangerous since when uploading, you can't set the the file dates
  1293. when they are arrive on the server.)  ckcftp.c, 13 Jul 2002.
  1294.  
  1295. Changed chkmodtime() to remember if MDTM fails on a particular connection
  1296. because it's an unknown command (500, 502, or 202), and if so, not to ask
  1297. again.  ckcftp.c, 13 Jul 2002.
  1298.  
  1299. With this last change, I think it's safe to change the default for FTP DATES
  1300. from OFF to ON.  ckcftp.c, 13 Jul 2002. 
  1301.  
  1302. Increased max number of /EXCEPT: patterns from 8 to 64 for file transfer (not
  1303. necessarily for other things).  This is now a compile-time symbol NSNDEXCEPT.
  1304. ckcker.h, ckcmai.c, ckclib.c, ckcfns.c, ckcftp.c, ckuus[rx].c.  13 Jul 2002.
  1305.  
  1306. Fixed FTP MGET to not send SIZE command when there is a name collision and
  1307. FILE COLLISION is DISCARD, even if /SMALLER or /LARGER were also specified.
  1308. ckcftp.c, 15 Jul 2002.
  1309.  
  1310. MGET fails if no files were transferred, even if the reason is that no files
  1311. met the selection criteria: /COLLISION:DISCARD, /UPDATE, /SMALLER, etc.
  1312. Changed MGET to succeed in that case.  domget(): ckcftp.c, 16 Jul 2002.
  1313.  
  1314. Big problems with canceling MGET; Ctrl-C cancels the current file, but we
  1315. don't break out of the file loop, we just go on to the next file.  Worse, if
  1316. we're executing a command file that has a series of MGETs, Ctrl-C doesn't
  1317. break us out of the command file.  Fixed by making failftprecv() and
  1318. failftprecv2() "chain" to the main SIGINT handler, trap().  This is fine in
  1319. Unix, but I'd be really surprised if it works in K95 so I put it in #ifndef
  1320. OS2.  Ditto for MPUT: Added the same treatment to failftpsend() and
  1321. failftpsend2().  Ditto for cmdcancel().  To adapt to K95, search for "TEST ME
  1322. IN K95" (5 places).  ckcftp.c, 16 Jul 2002.
  1323.  
  1324. Fixed previous fix to account for the fact that failftpblah() can be called
  1325. not only upon Ctrl-C, but also if transfer interrupted with X or Z.
  1326. ckcftp.c, 16 Jul 2002.
  1327.  
  1328. Yesterday's fixes revealed another problem: Interrupt MGET with Ctrl-C, start
  1329. another MGET, and the file list is total garbage.  Diagnosis: secure_getc()
  1330. and secure_getbyte() use internal static buffer pointers.  The only way they
  1331. ever get reset is when the data connection is closed by the server, so if you
  1332. interrupt a GET, the pointers are not reset and the next network read (e.g. of
  1333. an NLST response) returns whatever junk was lying around in the old buffer.
  1334. ckcftp.c, 17 Jul 2002.
  1335.  
  1336. FTP MGET temp file is kept only if FTP DEBUG is ON.  Changed FTP module to
  1337. also keep it if the regular debug log is active.  ckcftp.c, 17 Jul 2002.
  1338.  
  1339. Fixed version test in ckermit.ini: should be 6 digits, not 5.  17 Jul 2002.
  1340.  
  1341. Changed C-Kermit version number to 8.0.205 so scripts can test for the
  1342. recent changes.  ckcmai.c, 18 Jul 2002.
  1343.  
  1344. ---8.0.205---
  1345.  
  1346. SET FILE COLLISION UPDATE would unset FTP DATES due to a typo in the recent
  1347. changes.  ckcftp.c, 21 Jul 2002.
  1348.  
  1349. FTP [M]GET /DATES-DIFFER really should have been a collision option.  Added
  1350. this option (implemented for FTP only) to both SET FTP COLLISION and the
  1351. FTP [M]GET /COLLISION: table, so this way if you have lots of [M]GETs, you
  1352. don't have to put /DATES-DIFFER on each one.  ckcker.h, ckcftp.c, 21 Jul 2002.
  1353.  
  1354. "FTP MGET a* b* c*" would fail to get any c*'s if no b*'s existed.
  1355. ckcftp.c, 21 Jul 2002.
  1356.  
  1357. From Jeff, 22 Jul 2002:
  1358.  . Beginnings of Ann Arbor Ambassador terminal emulation for K95;
  1359.    ckuus[57].c, ckuusr.h.
  1360.  . Bump K95 version number to 2.0.2: ckcmai.c
  1361.  
  1362. Added -DCK_PAM -DCK_SHADOW to all Solaris targets, 2.6 and above.  makefile,
  1363. 23 Jul 2002.
  1364.  
  1365. Discovered that CK_SCRIPTS path search for TAKE files was #ifdef'd out
  1366. except for K95.  Fixed in ckuusr.c, 25 Jul 2002.
  1367.  
  1368. From Jeff: changes to support K95 italics: ckuus[57].c,  25 Jul 2002.
  1369.  
  1370. Fixed path search for TAKE to not search the CK_SCRIPTS path if the filespec
  1371. contains any directory or path parts.  Added a new function to check for
  1372. this:  int hasnopath(filespec) in ckucmd.c: 26 Jul 2002.
  1373.  
  1374. Update HP-UX build instructions from PeterE: makefile, 26 Jul 2002.
  1375.  
  1376. Commented out "const" from struct pam_message declarations because it
  1377. causes "initialization type mismatch" warnings.  ckufio.c, 26 Jul 2002.
  1378.  
  1379. Suppose you have a network directory containing a listing for host "foo":
  1380.  
  1381.   foo tcp/ip foo.bar.com
  1382.  
  1383. Then in K95 you give a command "set host /network-type:ssh foo".  This
  1384. results in the directory lookup replacing the "ssh" network type with TCP/IP,
  1385. and making a Telnet connection.  Fix attempted at about line 8625 of ckuus7.c
  1386. in cx_net(); needs testing in K95.  26 Jul 2002.
  1387.  
  1388. FTP Password: prompt in Unix was not allowing editing.  The code looked right;
  1389. I put in some debugging and suddenly it worked.  Took out the debugging and
  1390. it still worked.  Maybe I dreamed it.  Anyway, I fixed the "FTP SENT" debug
  1391. log entry to not record the password, and removed a redundant section above
  1392. to log the same thing, but prior to any charset conversion.  ckcftp.c,
  1393. 27 Jul 2002.
  1394.  
  1395. From Jeff, 28 Jul 2002:
  1396.  . Fix typo in initxlist(): ckcmai.c.
  1397.  . Fix typo in Friday's set-host fix: ckuus7.c.
  1398.  . Move parsing of --height/width command-line args after prescan(): ckuusy.c.
  1399.  
  1400. Added invisible top-level SITE and PASSIVE commands for FTP as a convenience
  1401. for habituated FTP client users.  ckuusr.[ch], ckcftp.c, 28 Jul 2002.
  1402.  
  1403. A while back a user asked if it was possible to MGET a bunch of files from
  1404. an FTP server and have them all appended to each other upon arrival.  The
  1405. obvious way to do this would have been:
  1406.  
  1407.   mget /collision:append /as-name:bigfile *.*
  1408.  
  1409. But to make this work, I had to get rid of the "as-name must contain
  1410. variables" check in the MGET parser.  doftpget(): ckcftp.c, 28 Jul 2002.  
  1411.  
  1412. Verified that it was possible to do the same thing (GET a bunch of files
  1413. and append them all into one result file) with Kermit protocol.  It works
  1414. fine but in this case there is no /COLLISION switch; you have to SET FILE
  1415. COLLISION APPEND first.  30 Jul 2002.
  1416.  
  1417. Changed COPY /APPEND to allow wild source to single destination file, e.g.
  1418. "copy /append *.* bigfile".  ckuus6.c, 30 Jul 2002.
  1419.  
  1420. From Mark Berryman: a replacement for zchkpath(), the VMS routine that checks
  1421. whether a file is in the current directory; the old one (that I wrote) was
  1422. a hack that only worked sometimes.  Martin Vorlaender verified Mark's code in
  1423. the situation where mine was breaking (server running in captive account).
  1424. ckvfio.c, 30 Jul 2002.
  1425.  
  1426. PeterE reported a problem with SWITCH case labels that start with '#':
  1427. The problem is that the SWITCH variable contents in this case happens to be
  1428. a comment, e.g.:
  1429.  
  1430.   CMD(M)[_forward # Stand: 24.07.2002<CR>]
  1431.  
  1432. so the GOTO target is null.  The solution would be for SWITCH to put the GOTO
  1433. (_FORWARD) target in quotes.  But GOTO does not strip quotes or braces from
  1434. around its target.  Fixed in ckuusr.c, 30 Jul 2002.
  1435.  
  1436. Fixed the SWITCH macro definition to put the _FORWARD target in quotes.
  1437. ckuus5.c, 30 Jul 2002.
  1438.  
  1439. PeterE also reported that an empty SWITCH case label did not work.  There's no
  1440. particular reason why it should, but after a brief look, it wasn't that hard
  1441. so I did it.  It required commenting out the check for empty labels and fixing
  1442. the comparison in dogoto().  Now it's possible to read lines from a file and
  1443. use each line as a SWITCH variable, with patterns as case labels, including an
  1444. empty label to match empty lines, #* labels to match comment lines, etc.
  1445. ckuus[r6].c, 30 Jul 2002.
  1446.  
  1447. PeterE also reported the value of \%* acquiring a trailing blank when
  1448. referenced inside a SWITCH statement.  This happens because \%* is formed using
  1449. \fjoin() on the \&_[] array based on its dimension, and at some point the
  1450. dimension is spuriously increased by one.  As a workaround, I made \fjoin()
  1451. ignore trailing empty \&_[] array elements and oddly enough this also fixed
  1452. the growing dimensions problem.  The many script torture tests reveal no ill
  1453. effects, so it seems like a keeper.  ckuus4.c, 30 Jul 2002.
  1454.  
  1455. Some of Peter's sample scripts made C-Kermit 8.0.201 dump core, but no more.
  1456.  
  1457. Fixed "delete xxx" to print an error message and fail if if xxx does not exist.
  1458. Ditto for when xxx is a directory.  ckuus6.c, 30 Jul 2002.
  1459.  
  1460. Patches to SSL modules from Jeff based on yesterday's advisory.  ck_ssl.[ch],
  1461. 31 Jul 2002.
  1462.  
  1463. Fixed some typos affecting the filename collision action during command-line
  1464. FTP [M]GET.  ckcftp.c, 31 Jul 2002.
  1465.  
  1466. Fixed SHOW FTP to handle FTP COLLISION DATES-DIFFER.  ckcftp.c, 31 Jul 2002.
  1467.  
  1468. A while back someone pointed out that SET CONTROL UNPREFIX ALL and SET
  1469. PREFIXING NONE gave different results.  Fixed them to use the same code.
  1470. Also made "set prefixing none" visible.  ckuus3.c, 4 Aug 2002.
  1471.  
  1472. Added SET CD HOME <path>, to let the user specify which directory is intended
  1473. when "CD" or "KCD" is given by itself.  This is because in Windows, some
  1474. applications set up their own HOME environment variable that isn't necessarily
  1475. where the user wants "cd" to go, but redefining HOME can interfere with the
  1476. application (example: Windows EMACS).  SET CD HOME was done by adding a myhome
  1477. variable, initially a NULL pointer, and then changing homepath() to use it if
  1478. it is set.  zhome() is not affected.  Also the homepath() prototype had been
  1479. missing from header files.  ckcmai.c, ckuusr.h, ckuus[2345].c, 4 Aug 2002.
  1480.  
  1481. PeterE got another core dump with his SWITCH statement.  Found a place where
  1482. an out-of-bounds array reference could occur if the switch variable was
  1483. empty.  ckuus6.c, 5 Aug 2002.
  1484.  
  1485. PeterE noticed that if the switch variable contained a comma, spurious matches
  1486. could occur with the label pattern.  The real problem turns out to be what
  1487. happens when the SWITCH variable doesn't match any of the case labels and
  1488. there is no DEFAULT label.  Fixed by having dogoto() in the SWITCH (_FORWARD)
  1489. case pop the command stack before returning failure, i.e. by moving the
  1490. "if (stopflg) return(0);" statement down a few lines.  ckuus6.c, 5 Aug 2002.
  1491.  
  1492. PeterE noticed that a SWITCH case label of :* did not match an empty SWITCH
  1493. variable.  Fixed in doswitch(): ckuus6.c, 6 Aug 2002.
  1494.  
  1495. In testing the previous fix, I found it only worked sometimes.  Inspection
  1496. of the debug log showed that a statement like:
  1497.  
  1498.   if (y == -3) s = "{}";
  1499.  
  1500. was assigning "{" rather than "{}" to s.  Replacing the string constant by a
  1501. buffer containing the same string fixed it.  The reason (guessed correctly by
  1502. PeterE) was the following sequence:
  1503.  
  1504.   y = cmfld("Variable name","",&s,xxstring);
  1505.   if (y == -3) s = "{}";
  1506.   len = ckstrncpy(tmpbuf,brstrip(s),TMPBUFSIZ);
  1507.  
  1508. brstrip() (by design and as documented) affects the string in place.  But in
  1509. this case the string is a constant, not data in a buffer, so all further uses
  1510. of "{}" get the wrong string (at least in optimized builds).  The only real
  1511. cure is to change brstrip() to make a copy of its argument if it has to do
  1512. anything to it.  This will slow down some scripts, but it's too risky to
  1513. leave it as it was.  ckclib.c, 6 Aug 2002.
  1514.  
  1515. The previous change required an audit of the C-Kermit code to make sure that
  1516. no references to brstrip() depended the result buffer being persistent, or the
  1517. result pointer indicating a position in the source buffer.  Oops, it turns out
  1518. that thousands of places rely on brstrip() working in place.  Therefore the
  1519. change had to be undone.  There's no good way to write a dummy-proof brstrip();
  1520. programmers either have be sure they're not calling it with a pointer to a
  1521. string constant, or else they have to copy the result back to the right place
  1522. each time.  Better to leave it as it was and audit the code to fix any calls
  1523. that refer to string constants (turns out there were only two).  Restored the
  1524. original fix to doswitch() (replacing the string constant by a buffer holding
  1525. the same string), plus minor fixes to ckcftp.c, ckuus[r36].c, 6 Aug 2002.
  1526.  
  1527. We need file dialogs in several situations in the K95 GUI.  I added a "user
  1528. query" routine for this, uq_file(), in ckuus3.c, filling it in only for Unix.
  1529. Then I added code to call it from rcvfil() when (a) it's an autodownload, and
  1530. (b) SET TERM AUTODOWNLOAD is ASK (I just added this option; it needs to be set
  1531. to see it in action -- maybe it should be the default for KUI, in which case
  1532. initialize "int autodl = ?" to TAD_ASK in ckcmai.c).  Works fine, except of
  1533. course it interferes with the file-transfer display, but that won't be a
  1534. problem in K95G.  ckuusr.h, ckuus[37].c, ckcfns.c, ckucns.c, 6 Aug 2002.
  1535.  
  1536. Another place we need a file dialog is when Kermit is a URL interpreter.  The
  1537. problem is: how can we let the user decide whether Kermit should ask?  There
  1538. really isn't any way.  Either it always asks or it never does.  In this case I
  1539. think it makes sense to always ask if it's KUI, otherwise never.  I added the
  1540. code for ftp: URLs to to doftprecv2(), which I tested successfully in Unix
  1541. before putting it into #ifdef KUI..#endif.  Also added code for http[s] to
  1542. ckuusy.c in #ifdef KUI..#endif, not tested.
  1543.  
  1544. Still need this added for K95G Actions->Capture.  The clearest example is the
  1545. FTP one.  Just search for KUI in the FTP module.
  1546.  
  1547. Some minor adjustments to yesterday's work, mainly just comments, plus
  1548. generate the full pathname for the default file.  ckuus3.c, ckcftp.c,
  1549. 7 Aug 2002.
  1550.  
  1551. Note: for some reason cmofi() is not supplying the default value if user
  1552. enters an empty name... (but that won't affect the Windows version).
  1553.  
  1554. Added /USER: and /PASSWORD: switches to SET TCP { HTTP-PROXY, SOCKS-SERVER }.
  1555. ckuus3.c, 7 Aug 2002.
  1556.  
  1557. New 'uninstall' target from PeterE, works by having the 'install' target
  1558. write an UNINSTALL shell script.  makefile, 8 Aug 2002.
  1559.  
  1560. Added some debugging statements to the VMS communications i/o module to try
  1561. to track down a problem that occurs when the controlling terminal is a LAT
  1562. device.  ckvtio.c, 10 Aug 2002.
  1563.  
  1564. Fixed the non-K95 uq_file() to respect the given default name, but still show
  1565. the fully qualified absolute pathname for the default in the dialog.  The
  1566. reason to not use the fully qualified name as the default in the cmxxx() calls
  1567. is that this can easily result in a whole directory tree being created due to
  1568. directory aliases, symlinks, etc.  So when you get a file by referring to its
  1569. URL (e.g. ftp://kermit.columbia.edu/kermit/READ.ME), uq_file() converts the
  1570. READ.ME part to (e.g.) /home/fdc/tmp/READ.ME but gives just "READ.ME" as the
  1571. default when parsing the name.  This way the user knows where it will go and
  1572. gets an opportunity to change it, and if the default is accepted, it goes into
  1573. the current directory.  uq_file(): ckuus3.c, 10 Aug 2002.
  1574.  
  1575. Found the spot for calling uq_file() for kermit:// URL downloads.  Added
  1576. prefatory text to filename prompts for Kermit and FTP downloads.  ckcfns.c,
  1577. ckcftp.c, 10 Aug 2002.
  1578.  
  1579. Now with kermit:// or ftp:// URL downloads there's no way to disable the
  1580. prompting.  I could easily make SET TERMINAL AUTODOWNLOAD ASK cover these
  1581. cases too (even though "terminal" has nothing to do with FTP or URL
  1582. downloads).  OK, I did this, but now prompting is disabled by default.
  1583. ckcftp.c, ckcfns.c.  10 Aug 2002.
  1584.  
  1585. Enabled file prompting (adl_ask) by default in K95G, disabled it by default
  1586. everywhere else.  So now FTP and Kermit URL downloads as well as terminal-mode
  1587. Kermit (but not Zmodem) downloads are prompted for if TERMINAL AUTODOWNLOAD is
  1588. ASK, which is it by default only in K95G.  But this will happen only if
  1589. uq_file() is filled in for K95G; otherwise everything should work as before.
  1590. ckcmai.c, 10 Aug 2002.
  1591.  
  1592. Notes:
  1593.  . Need a better command to control this.
  1594.  . FTP URL downloads are almost instantaneous, whereas Kermit URL downloads
  1595.    take a really long time to set up (logging in takes at least 10 seconds).
  1596.  
  1597. From Jeff, 13 Aug 2002:
  1598.  . Increase K95 version to 2.1.0: ckcmai.c.
  1599.  . SET TCP { HTTP-PROXY, SOCKS-SERVER } /USER: /PASSWORD: actions: ckuus3.c.
  1600.  
  1601. From PeterE: a new install target that's only about half as a big as the
  1602. previous one, yet still generates an UNINSTALL script.  makefile, 13 Aug 2002.
  1603.  
  1604. Vace wanted to be able to give the FTP client an offset for the server time,
  1605. in case the server's time (or timezone) is set incorrectly.  I added this by
  1606. building on all the date/time parsing/arithmetic code -- notably delta times
  1607. -- that was done for C-Kermit 8.0.  The new command is SET FTP
  1608. SERVER-TIME-OFFSET delta-time; shows up in SHOW FTP and HELP SET FTP.
  1609. ckcftp.c, 13 Aug 2002.
  1610.  
  1611. Fixed HELP ASK and HELP GETOK text.  ckuus2.c, 14 Aug 2002.
  1612.  
  1613. Fixed GETOK to accept /GUI switch even in K95.EXE and C-Kermit, just like ASK
  1614. does (in which case, it just ignores it).  ckuus6.c, 14 Aug 2002.
  1615.  
  1616. SET XFER CHAR TRANSPARENT no longer disables character-set translation because
  1617. file-scanning turns it back on.  The "new way" to disable character-set
  1618. translation is SET XFER TRANSLATION OFF.  This needlessly confuses users who
  1619. expect the old way to still work.  So I fixed SET XFER CHAR TRANSPARENT to set
  1620. XFER TRANSLATION OFF, and SET XFER CHAR anything-else to set it back ON.
  1621. ckuus3.c, 15 Aug 2002.
  1622.  
  1623. Fixed SET TERM AUTODOWNLOAD { ON, OFF } to turn off the ASK flag (adl_ask).
  1624. ckuus7.c, 16 Aug 2002.
  1625.  
  1626. Added FEAT query to FTP client from draft-ietf-ftpext-mlst-13.txt.  FEAT is
  1627. sent along with REST 0, MODE S, and STRU F if /NOINIT is not included in the
  1628. FTP OPEN command.  Parsing the FEAT result is handled by turning the "auth"
  1629. argument to getreply() into a function code: GRF_AUTH to parse AUTH reply;
  1630. GRF_FEAT to parse FEAT reply.  For GRF_FEAT, getreply() fills in a flag array,
  1631. sfttab[] (server feature table); sfttab[0] > 0 means server responded to the
  1632. FEAT query, in which case individual elements are set > 0 for each supported
  1633. feature.  ckcftp.c, 18 Aug 2002.
  1634.  
  1635. If server sends a feature list, display it if FTP DEBUG is on, then set mdtmok
  1636. and sizeok (the flags that say whether it's OK to send MDTM and SIZE commands)
  1637. accordingly.  If user gives an [M]PUT /RECOVER command and server has
  1638. announced it doesn't support REST, print a warning but try anyway (maybe
  1639. change this later).  Responses about other features that we use such as AUTH
  1640. and PBSZ are ignored for now -- i.e. we try them anyway.  And of course
  1641. responses for features we don't care about (LANG, TVFS, PROT) are ignored.
  1642. ckcftp.c, 18 Aug 2002.
  1643.  
  1644. If the server says it supports MLST, use MLSD instead of NLST to get the file
  1645. list.  This is done in remote_files() with some simple string-twiddling.  Then
  1646. replace the relevant (but not all) SIZE commands with code to first check if
  1647. we already got the size from the MLSD response and use that instead rather
  1648. than asking again.  Same deal for MDTM.  ckcftp.c, 18 Aug 2002.
  1649.  
  1650. Checked that this works when giving pathnames in the MGET filespec.  Checked
  1651. to make sure everything works as before with servers that don't support FEAT
  1652. or MLSD.  Checked to make sure FTP OPEN blah /NOINIT worked with servers that
  1653. do support FEAT and MLSD.  Checked that FTP CHECK works.  It's all OK.
  1654.  
  1655. Tested only with Ipswitch server; need to find and test with others.
  1656.  
  1657. The stack of temp files needed for MGET /RECURSIVE is annoying because what
  1658. if we run out of file descriptors...  But the spec doesn't provide a way to
  1659. request a recursive listing.
  1660.  
  1661. Supplied a missing comma in HELP SET CD text.  ckuus2.c, 19 Aug 2002.
  1662.  
  1663. Generalized parsing of MLST/MLSD file facts and values.  Got file type from
  1664. server and had MGET skip non-regular files.  ckcftp.c, 19 Aug 2002.
  1665.  
  1666. Kirk Turner-Rustin <ktrustin@owu.edu> reported that if Unix C-Kermit has a SET
  1667. HOST PTY connection (e.g. SSH) open, local window size changes are not
  1668. propagated through the connection to the host.  I imagine that must be because
  1669. the SIGWINCH signal is caught by Kermit and its children don't see it; maybe
  1670. if I pass it along to the child fork, all will be OK.  Began by exporting
  1671. "slavepid" from the pty module and changing its name to pty_fork_pid.  Moved
  1672. the SIGWINCH handler, winchh(), from ckctel.c to ckutio.c.  Armed it from Unix
  1673. sysinit() so it's always armed.  This way window changes affect Unix C-Kermit
  1674. no matter what mode it's in: tt_rows, tt_cols, cmd_rows, and cmd_cols are all
  1675. kept in sync.  Then if we're not in remote mode (i.e. we have a ttyfd), we
  1676. call tn_snaws() and rlog_snaws() (which should be ok since they return right
  1677. away if the appropriate kind of connection is not open) and then if
  1678. (pty_fork_pid > -1), a SIGWINCH signal is sent to it.  ckupty.c, ckctel.c,
  1679. ckutio.c, 20 Aug 2002.
  1680.  
  1681. All this works fine except the PTY part; in other words, the original problem
  1682. is not fixed.  The "kill(pty_fork_pid,SIGWINCH)" call executes without error
  1683. but has no effect because the size of the PTY never changed.  To make this
  1684. work I had to add an ioctl() to change the size of the PTY before sending it
  1685. the SIGWINCH.  Compiles and works ok on Linux and Solaris; Kirk also confirmed
  1686. it for AIX 4.3.3.  ckutio.c, 20 Aug 2002.
  1687.  
  1688. Fixed xlookup() to work for uppercase keywords.  ckucmd.c, 20 Aug 2002.
  1689.  
  1690. Fixed FTP parsefeat() and parsefacts() to use xlookup() instead of lookup(),
  1691. since abbreviated keywords are not allowed.  ckcftp.c, 20 Aug 2002.
  1692.  
  1693. Adjusted some lines from yesterday's window-size code for platforms I hadn't
  1694. tried yet.  ckutio.c, 21 Aug 2002.
  1695.  
  1696. EXIT from K95 when it has an FTP connection open and it pops up the
  1697. Locus dialog.  Made it not do this if it knows it's in the act of EXITing.
  1698. ckuus[rx].c, 22 Aug 2002.
  1699.  
  1700. In K95, FTP GET in ASCII mode results in a file with Unix line terminators
  1701. even though the protocol is correct:
  1702.  
  1703.   RETR smjulie.txt
  1704.   150 Opening ASCII mode data connection for smjulie.txt (1878 bytes).
  1705.  
  1706. The source file is a regular Unix text file with LF at the end of each line.
  1707. It's incredible that nobody noticed this before.  It only came to light when
  1708. somebody tried to open a downloaded text file with Notepad, which doesn't
  1709. handle Unix-format files (Wordpad and Emacs have no problems with them).  The
  1710. problem was in doftprecv2() in the FTT_ASC section.  There was no conditional
  1711. code for Unix vs Windows.  In all cases, the code discarded incoming CR's in
  1712. ASCII mode.  I put the CR-discarding code in #ifdef UNIX..#endif.  ckcftp.c,
  1713. 22 Aug 2002.
  1714.  
  1715. Removed super-verbose debugging from gtword(): ckucmd.c, 23 Aug 2002.
  1716.  
  1717. Gregory Bond reported a problem with "if defined \$(BLAH) ..." inside of a
  1718. SWITCH statement.  It wasn't really the SWITCH that was doing it, it was the
  1719. fact that he had enclosed the SWITCH case in braces, which made it an
  1720. "immediate macro" (XXMACRO).  The XXMACRO code parsed the macro definition
  1721. (the part inside the braces) with cmtxt(...,xxstring), which should have been
  1722. cmtxt(...,NULL) to defer the evaluation of the interior of the macro until it
  1723. was executed.  This is better illustrated with the following example:
  1724.  
  1725.   { echo START, for \%i 1 3 1 { echo \%i }, echo STOP }
  1726.  
  1727. which totally fell on its face prior to the fix.  Also fixed ?-help for
  1728. immediate macros, which was broken too.  ckuusr.c, 23 Aug 2002.
  1729.  
  1730. RFC959 says STOU does not take an argument.  But every FTP server I've
  1731. encountered but one accepts the arg and constructs the unique name from it,
  1732. which is better than making up a totally random name for the file, which is
  1733. what RFC959 calls for.  Especially because there is no way for the client to
  1734. find out the name chosen by the server (because RFC 959 and 1123 are
  1735. contradictory, plus no servers follow either one of them for this anyway).  So
  1736. we try STOU with the argument first, which works with most servers, and if it
  1737. fails, we retry it without the arg, for the benefit of the one picky server
  1738. that is not "liberal in what it accepts" UNLESS the first STOU got a 502 code
  1739. ("not implemented") which means STOU is not accepted, period (which happens
  1740. with ProFTPD).  ckcftp.c, 25 Aug 2002.
  1741.  
  1742. Added SET FTP ANONYMOUS-PASSWORD (plus help text and show value).  ckcftp.c,
  1743. 25 Aug 2002.
  1744.  
  1745. Made FTP command "not available" if NOFTP is defined.  ckuusr.c, 25 Aug 2002.
  1746.  
  1747. Forced client to send a TYPE command upon initial connection, since given
  1748. the variable quality of FTP servers, it's not safe to assume the server is
  1749. in ASCII or any other particular mode.  ckcftp.c, 25 Aug 2002.
  1750.  
  1751. SET FTP CHARACTER-SET-TRANSLATION ON is completely broken in K95, although it
  1752. works fine in C-Kermit.  Furthermore it is broken in both the GUI and Console
  1753. versions, so it's not a Unicode vs OEM console-character-set issue.
  1754.  
  1755. Added Concurrent PowerMAX OS target from Tom Horsley.  makefile, ckuver.h,
  1756. 27 Aug 2002.
  1757.  
  1758. Minor fixes to FTP module from Jeff.  ckcftp.c, 27 Aug 2002.
  1759.  
  1760. New Makefile target for Mac OS X 10.2, needs -DNDSYSERRLIST added, from
  1761. William Bader.  2 Sep 2002.
  1762.  
  1763. SET OPT DIR /DOTFILES didn't work for server listings.  A few years ago when
  1764. I front-ended zxpand() with nzxpand(), I missed a couple places where
  1765. traverse() needed to refer to xmatchdot (nzxpand's argument flag) rather than
  1766. global matchdot.  Fixed in traverse(): ckufio.c, 2 Sep 2002.
  1767.  
  1768. From Jeff, 4 Sep 2002:
  1769.  . setautodl(x) -> setautodl(x,y): ckuusr.h, ckuus[7y].c
  1770.  . Add another parameter to popup_readblah(): ckuus6.c
  1771.  . Sort out some confusion in scanfile() where a parameter was also used as a
  1772.    local flag.  ckuusx.c.
  1773.  . Protect restoring of saved terminal idle parameters with a flag that says
  1774.    they were actually saved.  ckuusr.c.
  1775.  . Rework uq_text() and uq_mtxt().  ckuus3.c.
  1776.  . Fix FTP charset translation for little-endian hardware: ckcftp.c.
  1777.  
  1778. The latter still doesn't work in Linux:
  1779.  
  1780.   (/home/fdc/kermit/) C-Kermit>set ftp server-character-set latin1-iso
  1781.   (/home/fdc/kermit/) C-Kermit>set file character-set utf8
  1782.   (/home/fdc/kermit/) C-Kermit>get latin1.txt
  1783.  
  1784. Results in "????????: file not found".  But it works fine on the Sun.
  1785.  
  1786. Jeff's patch removed a little-endian byte-swap (LEBS) from doftpsend2().  But
  1787. the real problem was that LEBS was not being done consistently throughout the
  1788. module.  There were similar xgnbyte()/xpnbyte() loops elsewhere in the code,
  1789. and all of them needed to work the same way.  Undoing Jeff's fix and then
  1790. adding the LEBS to the loop in getreply() makes downloads work right, but the
  1791. messages are still messed up (they come out in Chinese :-)  Begin by moving all
  1792. byte-swapping operations that occur in ckcftp.c itself into a new function,
  1793. bytswap().  It's either right to do it all the time, or to do it never; this
  1794. way we can turn it on and off in one place.
  1795.  
  1796. xp/gnbyte() include behavior that depends on what Kermit is doing: W_SEND,
  1797. etc.  xpnbyte() tests W_KERMIT, which is a combination of W_SEND, W_RECV, etc.
  1798. Defined a new symbol W_XFER, which is like W_KERMIT but includes W_FTP.  These
  1799. are all the "whats" in which character sets might need to be converted.
  1800. Changed the W_KERMIT reference in xpnbyte() to W_XFER.  Fixed the indeterminate
  1801. "what" state after an FTP command by moving "what = W_COMMAND;" from before
  1802. the main parse loop to inside it (this didn't matter before the addition of
  1803. FTP but now it does).  ckcker.h, ckcftp.c, ckuus5.c, 6 Sep 2002.
  1804.  
  1805. Finally I changed xlatec() to be consistent with all the other xgnbyte() /
  1806. xpnbyte() usage throughout the FTP module and, poof, everything worked in
  1807. Linux (and still works on the Sun).  We still need some work in Windows (where
  1808. the file character-set is not necessarily the console character set for
  1809. messages) but we can tackle that next.  ckcftp.c, 6 Sep 2002.
  1810.  
  1811. Checking yesterday's work:
  1812.  
  1813. Kermit file transfers with charset translation work fine in both directions.
  1814.  
  1815. FTP GET with charset translation works fine on both BE and LE
  1816.  
  1817. Fixed a typo in yesterday's changes that made FTP PUT with charset translation
  1818. always upload 0-length files.  ckcftp.c, 7 Sep 2002.
  1819.  
  1820. FTP PUT (after the typo was fixed) with charset translation works fine on BE,
  1821. but on LE the message comes out in Chinese and the resulting file gets ? or
  1822. nothing for all for the accented letters:
  1823.  
  1824.       FTP...  Kermit 
  1825.       Up  Dn  Up  Dn  Term
  1826.   BE  OK  OK  OK  OK   xx
  1827.   LE  no  OK  OK  OK   xx
  1828.  
  1829. xx = C-Kermit CONNECT mode with translation doesn't seem to do anything, not
  1830. only in today's code, but also in the 8.0 release version: "set term char
  1831. latin1 utf8" -- SHOW CHAR shows the right stuff, but no translation is done.
  1832. Ditto for the 7.0 release.  That can't be right...
  1833.  
  1834. But one problem at a time -- what's wrong with LE FTP uploads?  Note that
  1835. XLATE works on the same machine, so it's obviously confusion in xgnbyte()
  1836. about "what".  Suppose we make xgnbyte() ALWAYS return bytes in BE order.
  1837. This makes sense because xgnbyte() is almost always used to feed xpnbyte(),
  1838. and xpnbyte() requires its bytes to come in BE order.  This means that all
  1839. code that uses xgnbyte()/xpnbyte() loops can be simplified, which I did for
  1840. the FTP module.  ckcfns.c, ckcftp.c, 7 Sep 2002.
  1841.  
  1842. Of course Kermit protocol uses xgnbyte() too, but only for filling
  1843. packets, and packets never contain UCS2 and even if they did, it would have
  1844. to be big-endian, so no changes needed for getpkt().  Now we have:
  1845.  
  1846.       FTP...  Kermit 
  1847.       Up  Dn  Up  Dn
  1848.   BE  OK  OK  OK  OK
  1849.   LE  OK  OK  OK  OK
  1850.  
  1851. Now let's look at the remaining xgnbyte() calls in the rest of the code:
  1852.  
  1853. ckuus4.c:
  1854.   xlate() uses it of course.  I simplified the general-case loop.
  1855.   Works OK on both Sun and Linux.
  1856.  
  1857. ckuus6.c:
  1858.   typegetline() uses it.  I commented out the byte swap.  Seems OK.
  1859.  
  1860. Built and tested on Linux, Solaris, and SunOS.  I'm sure I must have broken
  1861. something, but the main things are better than they were.  Kermit and FTP
  1862. transfers need testing in K95, as well as the TYPE command (there's a bunch of
  1863. special K95 code in there).  C-Kermit charset translation during CONNECT is
  1864. still broken, or else I forgot how to use it, but that's a separate issue
  1865. since xgnbyte()/xpnbyte() are not involved.  And we still need to do something
  1866. in FTP getreply() for K95 to convert messages to the console character set for
  1867. display, rather than the file character set (should be trivial).  Also there's
  1868. still a lot of extra debugging and commented-out junk in ckcftp.c to be
  1869. cleaned up after more testing.
  1870.  
  1871. During yesterday's testing, I noticed that REMOTE SET { FILE, XFER }
  1872. CHARACTER-SET didn't work.  The server accepted these commands but they didn't
  1873. seem to do anything.  In fact, they did work, but they were undone later by
  1874. code in sfile() that restored the global settings in case they had been
  1875. temporarily overridden by autoswitching or whatever.  The solution is to
  1876. "unsave" the saved values whenever a global setting is performed explicitly.
  1877. Tested successfully against Sun and Linux servers.  Also the server end of
  1878. REMOTE SET needed updating for Unicode.  ckcfn[s3].c, ckuus3.c, 8 Sep 2002.
  1879.  
  1880. Cleaned commented-out cruft and extra debugging from ckcftp.c.  8 Sep 2002.
  1881.  
  1882. Kermit autodownload with ASK file dialog: if user supplied an absolute
  1883. pathname, it was treated like a relative one.  Fixed the invocation of
  1884. uq_file() in rcvfil() to temporarily override the RECEIVE PATHNAMES setting.
  1885. ckcfns.c, 10 Sep 2002.
  1886.  
  1887. Added SET TERMINAL ROLL KEYSTROKES { SEND, RESTORE-AND-SEND, IGNORE }, parse
  1888. only.  Needs implementation (search for tt_rkeys and rollkeytab in ckuus7.c).
  1889. ckuusr.h, ckuus[27].c, 10 Sep 2002.
  1890.  
  1891. If FILE INCOMPLETE is DISCARD and a file is being received by IKSD but IKSD
  1892. gets a Telnet LOGOUT command, the partial file is not deleted.  In fact this
  1893. happens any time doexit() is called for any reason during file reception,
  1894. e.g. because of SIGHUP.  Added code to doclean() to check if a download
  1895. output file was open, and if so, to delete it after closing it if keep==0.
  1896. ckuusx.c, 10 Sep 2002.
  1897.  
  1898. Added a brief one-line message after remote-mode file transfer saying
  1899. what (or how many) file(s) were transferred, where they went, and whether
  1900. the transfer was successful -- kind of an automatic WHERE command, useful
  1901. with autodownloads so you know what happened.  ckcpro.w, 11 Sep 2002.
  1902.  
  1903. The Unix and VMS C-Kermit CONNECT modules have botched remote-charset to
  1904. local-UTF8 translation ever since the Unicode was first added in v7.0.  Fixed
  1905. in ckucns.c, ckucon.c, ckvcon.c, 11 Sep 2002.
  1906.  
  1907. On to pattern-matching...  The matchdot business should apply only for (Unix)
  1908. filename matching, not for general string matching.  Fixed in ckmatch():
  1909. ckclib.c, 11 Sep 2002.
  1910.  
  1911. A bigger problem occurs in filename matching.  Somehow the dirsep == fence
  1912. business interferes with matching {foo,bar,baz} segments.  For example, I have
  1913. a filename "foo" and I want to match it with the pattern "{foo,bar}".  Somehow
  1914. the segment pattern becomes "*/foo" and doesn't match the string.  Where does
  1915. the '/' get tacked on?  I don't even know how to explain this, but the short
  1916. story was that ckmatch(), under certain circumstances, would back up to before
  1917. the beginning of the filename string, which just happened to contain a "/"
  1918. (and before that a ".") because of who was calling it.  Obviously this is not
  1919. how to write a pattern matching function...  Ensuring that it never backs up
  1920. beyond the beginning of a string fixed the immediate problem and does not seem
  1921. to have broken any other matching scenarios (I have 150 of them in my test
  1922. script).  ckclib.c, 11 Sep 2002.
  1923.  
  1924. There's still a problem though.  Suppose the a client sends "dir {{.*,*}}" to
  1925. a server.  This asks for a directory listing of all files that begin with
  1926. dot as well as all files.  Still doesn't work because we don't normally show
  1927. dot-files, but in this case it SHOULD work because ".*" was explicitly
  1928. requested.  Staring at the ckmatch() code revealed how to fix this, and I did,
  1929. but that was only half the problem.  The other half was that the list of
  1930. files being fed to ckmatch() did not include the dotfiles in the first place.
  1931. The cure here is to change nzxpand() to prescan the pattern to see if it
  1932. includes a leading dot, and if so to set the "xmatchdot" flag itself, even
  1933. if it wasn't set by the caller.  ckclib.c, ckufio.c, 11 Sep 2002.
  1934.  
  1935. Now that {foo,bar,...} patterns work better, I added a quick hack to the
  1936. DIRECTORY command to allow multiple filespecs to be given, in which case we
  1937. combine them into a {file1,file2,...} pattern before calling nzxpand().  Works
  1938. fine but it's a hack because you don't get file lists upon "?" in the second
  1939. and subsequent filespec fields, but I doubt anyone will notice.  So now,
  1940. finally, people can do "dir .* *" like they do in Unix (except with ls) to get
  1941. a listing of all files in a directory without having to know about or use the
  1942. /DOTFILES switch.  This was NOT done for the server end of RDIR because of
  1943. ambiguity of spaces as separators versus filename characters.)  domydir():
  1944. ckuus6.c, ckuus[r2].c, 11 Sep 2002.
  1945.  
  1946. Added a CONTINUE command.  In a script, this does whatever CONTINUE did before
  1947. (e.g. in a FOR or WHILE loop).  At the prompt, it calls popclvl(), which gives
  1948. a more natural way to continue a script that has "shelled out" to the prompt.
  1949. ckuusr.[ch], 11 Sep 2002.
  1950.  
  1951. Added help text for CONTINUE.  ckuus2.c, 12 Sep 2002.
  1952.  
  1953. From Jeff, 16 Sep 2002:
  1954.  . SET TERM ROLL KEYSTROKES for K95: ckuusr.h, ckuus7.c
  1955.  . Remove the doexit() call from the Telnet TELOPT_LOGOUT handler: ckctel.c
  1956.  
  1957. Fixed an FTP debug message to be consistent with Kermit ones.
  1958. ckcftp.c, 16 Sep 2002.
  1959.  
  1960. Added SET/SHOW TRANSFER REPORT to turn the post-transfer report off and on.
  1961. ckuusr.h, ckuus[234].c, 16 Sep 2002.
  1962.  
  1963. Fixed Solaris (and maybe some other SVORPOSIX builds) to find out their full
  1964. hostname rather than just short form (e.g. watsol.cc.columbia.edu rather than
  1965. just watsol).  ckhost(): ckuusx.c, 16 Sep 2002.
  1966.  
  1967. "cat somefile | kermit -Ts -" is supposed to send stdin in text mode, but
  1968. K95's file transfer display reports BINARY.  Looked at C-Kermit code; it seems
  1969. fine.  Looked at packet and debug logs; C-Kermit was indeed sending in text
  1970. mode and announcing it correctly.  K95 gattr() is doing the right thing:
  1971.  
  1972.   gattr file type[AMJ]=3
  1973.   gattr attribute A=text=0
  1974.   gattr sets tcharset TC_TRANSP[A]
  1975.  
  1976. Same thing happens when C-Kermit is receiving.  Yet when I send an actual
  1977. file, rather than stdin, it's received in text mode.  The only difference is
  1978. that stdin does not have a Length attribute in its A-packet, so in this case
  1979. the receiver skips any calls to screen() that show the length or percent done.
  1980. Aha, so maybe it's just a display problem -- scrft() is not being called to
  1981. repaint the file type if the size was not known.  Fixed in opena() by
  1982. removing the IF clause from "if (fsize > -1L) xxscreen(SCR_FS,0,fsize,"");".
  1983. ckcfn3.c, 18 Sep 2002.
  1984.  
  1985. K95 user has a listfile containing some regular filenames and then some
  1986. filenames that include paths and has all kinds of problems with MGET /LISTFILE
  1987. (pieces of different names concatenated to each other, etc).  Setting up the
  1988. same scenario here, I don't see the same problems but I do see "Refused: Name"
  1989. when we go to get a path/name file.  This happens because (a) we had already
  1990. got a top-level file with a certain name, (b) a file in a subdirectory has the
  1991. same name, (c) we are stripping the path before calling zchki(), and (d)
  1992. FTP COLLISION is set to DISCARD.  How do we make FTP not strip the path?
  1993.  
  1994. This is an interesting question...  The answer depends on where the user
  1995. wants the file to go.  Normally if you tell an FTP client to "get foo/bar",
  1996. you want the file "bar" to be downloaded to the current directory.
  1997.  
  1998. Anyway, it turns out the FTP module uses paths locally during MGET only if
  1999. /RECURSIVE was specified.  So:
  2000.  
  2001.   mget /listfile:blah /recursive
  2002.  
  2003. should have made this work, but it didn't because in the /LISTFILE case,
  2004. we have effectively turned an MGET into a series of GETs, where the code to
  2005. check whether to strip the path didn't check the recursive flag because how
  2006. could a GET (as opposed to an MGET) be recursive?  Adding this exception to
  2007. the if-condition got us a bit farther but now when we try to open the output
  2008. file in doftprecv2(), zopeno() fails because the name contains a dirsep.
  2009. We have to call zmkdir() first but that wasn't happening because some other
  2010. flag wasn't set right in this case.  Finally zmkdir was called, but with
  2011. the wrong string.  After fixing that, it works.  Now we should be able
  2012. to use /RECURSIVE to force the pathname to be used on the local end.
  2013. ckcftp.c, 19 Sep 2002.
  2014.  
  2015. Checked FTP filename conversion issues.  FTP FILENAMES AUTO is supposed to
  2016. mean LITERAL if "wearealike" OR server is UNIX or Windows, otherwise
  2017. CONVERTED, but there were places where this rule was not applied consistently,
  2018. fixed now.  ckcftp.c, 21 Sep 2002.
  2019.  
  2020. Added SET FTP DISPLAY, which is like SET TRANSFER DISPLAY but applies only to
  2021. FTP, mainly because I tended to type it all the time.  Now if you have dual
  2022. sessions, each session can have its own transfer display style.  ckcftp.c,
  2023. ckuusr.h, ckuus[347].c, 21 Sep 2002.
  2024.  
  2025. Back to FTP MLSD.  We're supposed to match the pattern locally, not rely on
  2026. the server to filter its list according to the client's pattern.  Thus we must
  2027. also allow an empty argument to MGET and must not send a filespec with MLSD.
  2028. Actually this is tricky -- how is the client supposed to know whether to send
  2029. a filespec.  For example, if the user's command is "mget foo*bar", and the
  2030. server supports MLSD, then what should the client do?  The client does not
  2031. know the wildcard syntax on the server, so for all the client knows, this
  2032. might be a valid directory name, in which case it should be sent.  On the
  2033. other hand, the user might intend it as a wildcard, in which case it should
  2034. NOT be sent.  But the FTP client can't read the user's mind.  This is another
  2035. serious flaw in the Elz/Hethmon draft.  Anyway, I got the local matching
  2036. business working for MLSD as long as the user's MGET arg is really a pattern
  2037. and not a directory name.  To be continued...  ckcftp.c, 21 Sep 2002.
  2038.  
  2039. Added FTP { ENABLE, DISABLE } { FEAT, MLST }.  If we always send FEAT, we
  2040. usually get a complaint.  If we send FEAT and MLST is negotiated, there is a
  2041. good chance it is misimplemented or will have undesirable side effects, such
  2042. as sending huge file lists.  NOTE: /NOINIT on the FTP OPEN command also
  2043. disables both of these.  ckcftp.c, 22 Sep 2002.
  2044.  
  2045. Fixed mkstemp() code in FTP remote_files().  mktemp() does not open the file,
  2046. mkstemp() does open it; previously we had been opening it again and never
  2047. closing the first instance so every MGET would create another open file
  2048. descriptor.  ckcftp.c, 22 Sep 2002.
  2049.  
  2050. Added debug messages for temp-file creation and lines read from the temp file.
  2051. ckcftp.c, 22 Sep 2002.
  2052.  
  2053. Eliminated sending of some extraneous TYPE commands, but there's still room
  2054. for improvement.  ckcftp.c, 22 Sep 2002.
  2055.  
  2056. Moved definition of build date to top of ckcmai.c.  22 Sep 2002.
  2057.  
  2058. Added recursion to MGET with MLSD...  It's all done in remote_files().
  2059. Temp-file pointers are on a stack (max size 128).  When parsing MLSD lines
  2060. from the temp file and we see "type=dir", we create the local directory by
  2061. calling zmkdir(), change to the remote by sending CWD, increment the depth,
  2062. and call ourselves.  When reading from a temp file, upon EOF we close and
  2063. dispose of the temp file, return -3 if currently at top level, otherwise we
  2064. free the tmpfile name, decrement the depth, send CDUP to the server, "cd .."
  2065. locally, and go back and read the next line from the previous but now current
  2066. temp file.  Conceptually simple but needed hours of debugging -- what must
  2067. be static, what must be on the stack...  Seems OK now but still needs some
  2068. heavy testing.  ckcftp.c, 22 Sep 2002.
  2069.  
  2070. Added FTP { ENABLE, DISABLE } { SIZE, MDTM } and add help text for FTP
  2071. ENABLE and DISABLE.  ckcftp.c, 23 Sep 2002.
  2072.  
  2073. Don't allow restart if SIZE disabled.  ckcftp.c, 23 Sep 2002.
  2074.  
  2075. Make sure all implicit SIZE commands are suppressed if SIZE disabled.
  2076. ckcftp.c, 23 Sep 2002.
  2077.  
  2078. If an explicit FTP MODTIME command is sent when MDTM is DISABLED, and it
  2079. succeeds, re-ENABLE MDTM.  Ditto for SIZE.  ckcftp.c, 23 Sep 2002.
  2080.  
  2081. If an explicit FTP FEATURES command is sent during an FTP session, redo the
  2082. features database from it.  ckcftp.c, 23 Sep 2002.
  2083.  
  2084. After further discussion with Robert Elz, I realized I had to expose the
  2085. underlying MGET mechanisms to the user; the draft isn't going to change, and
  2086. the new spec will result in undesirable effects if the client tries to "do the
  2087. right thing" by magic in all situations; thus the user must have some new
  2088. controls:
  2089.  
  2090.   MGET [ /MLST, /NLST, /MATCH:xxx ] [ filespec [ filespec [ ... ] ] ]
  2091.  
  2092. These switches let the user force the use of MLSD or NLST when there's a
  2093. choice, and to force local use of a pattern rather than sending it to the
  2094. server, and even to send a directory name to the server at the same time as
  2095. specifying a pattern for local matching, and of course by default we try to do
  2096. the right thing in all scenarios.  Symbols only; not coded yet.  ckuusr.h,
  2097. 23 Sep 2002.
  2098.  
  2099. Added the three new switches to MGET, plus /MLST is an invisible synonym for
  2100. /MLSD.  If /NLST or /MLSD is given it, it forces the corresponding FTP protocol
  2101. directive.  ckcftp.c, 25 Sep 2002.
  2102.  
  2103. Now for the tricky part: now we have two separate concepts for what to send to
  2104. the server: a filename or wildcard to be interpreted by the server (NLST only)
  2105. or a directory from which to get a list of all the files (NLST or MLSD),
  2106. possibly together with a pattern to be used by the client to match filenames
  2107. returned by the server.  This required giving remote_files() an additional
  2108. argument.  Now it uses "pattern" (if any) strictly for local pattern matching
  2109. (because now it is the /MATCH: switch argument, not the MGET filespec), and
  2110. "arg" (the MGET filespec) is what it sends to the server, maybe (see the
  2111. comments in the code for the actual details); either or both these can be
  2112. null.  ckcftp.c, 25 Sep 2002.
  2113.  
  2114. Discovered that "mget foo", where foo is a directory name, never worked.
  2115. Fixed in remote_files(): ckcftp.c, 25 Sep 2002.
  2116.  
  2117. Going through every combination of NLST, MLSD, /MATCH:, and MGET arg and
  2118. debugging each case until OK...  Then also with the panix.com NetBSD server
  2119. (lukemftpd 1.0) which also supports MLSD....  11 test cases all debugged and
  2120. tested OK.  ckcftp.c, 26 Sep 2002.
  2121.  
  2122. Added /NODOTFILES switch to FTP MGET, to control what happens with dot-files
  2123. if the server includes their names in the list (as lukemftpd does).  There's
  2124. no point in adding a /DOTFILES switch because what could it possibly do?
  2125. ckcftp.c, 26 Sep 2002.
  2126.  
  2127. Changed a bunch of "skipthis++" to "continue" in doftpget(), to avoid
  2128. error messages when skipping files that user said she wanted to skip.
  2129. ckcftp.c, 26 Sep 2002.
  2130.  
  2131. Added help text for the new MGET switches.  ckcftp.c, 26 Sep 2002.
  2132.  
  2133. Don't switch LOCUS when making an FTP connection until logged in.
  2134. ckcftp.c, 26 Sep 2002.
  2135.  
  2136. Fixed LDIR to run Kermit's built-in DIRECTORY code rather than the external
  2137. directory program.  ckuusr.c, 26 Sep 2002.
  2138.  
  2139. Protect iswild() against NULL args.  ckufio.c, 26 Sep 2002.
  2140.  
  2141. From Jeff: SET GUI WINDOW RUN-MODE { MAXIMIZE, MINIMIZE, RESTORE },
  2142. plus variables for GUI Window X position, GUI Window Y position, GUI
  2143. Window X resolution, GUI Window Y resolution, GUI Window Run mode.
  2144. ckuusr.h, ckuus[24].c, 27 Sep 2002.
  2145.  
  2146. From Ronan Flood: updated FreeBSD 1.0 makefile entry, plus an #ifdef to protect
  2147. sysconf() calls.  makefile, ckutio.c, 28 Sep 2002.
  2148.  
  2149. Change ftp_auth() to return(0) if an AUTH command gets a 500 response, so it
  2150. doesn't keep sending other kinds of AUTH commands.  ckcftp.c, 29 Sep 2002.
  2151.  
  2152. Changes from Jeff to yesterday's changes.  ckcftp.c, 30 Sep 2002.
  2153.  
  2154. From Jeff: SSH command-line personality.  Uses same command line as the Telnet
  2155. personality.  ckcker.h, ckcmai.c, ckuus[4y].c, 3 Oct 2002.
  2156.  
  2157. From Jeff, 7 Oct 2002:
  2158.  . SET PRINTER CHARACTER-SET.  ckuxla.c, ckuusr.h, ckuus[25].c
  2159.  . Promotion of K95 to Beta.01.  ckcmai.c
  2160.  . Promotion of SET GUI { MENUBAR, TOOLBAR } to visible.  ckuus3.c
  2161.  
  2162. Changed the URL parser as follows: if the username and/or password fields are
  2163. present but empty, as in:
  2164.  
  2165.            ftp://@ftp.xyzcorp.com/somepath
  2166.   or:      ftp://:@ftp.xyzcorp.com/somepath
  2167.   but not: ftp://:ftp.xyzcorp.com/somepath
  2168.  
  2169. the pointer for these items becomes a pointer to an empty string, rather than
  2170. a NULL pointer.  Then when we go to open the connection, if the username
  2171. string pointer points to an empty string, we prompt for the username (and/or
  2172. password).  ckuusy.c 9 Oct 2002.
  2173.  
  2174. Jason Heskett reported an interesting bug involving a core dump when an
  2175. ON_EXIT macro is defined that executes another macro.  Sometimes.  He was able
  2176. to send a short command file that always crashed.  Diagnosis: ON_EXIT, when it
  2177. is called, pokes itself out of the macro table by setting its own entry in the
  2178. macro name list to an empty string.  But this interferes with any macro
  2179. lookups that are done while executing ON_EXIT's body and also evidently some
  2180. code is not happy with empty macro names...  To fix: replace "on_exit" with
  2181. "on_exxx", so the replacement keyword is (a) nonempty, and (b) doesn't wreck
  2182. the alphabetical sorting of the table.  ckuusx.c, 9 Oct 2002.
  2183.  
  2184. Added makefile targets for FreeBSD 4.6 and 5.0.  Built and tested on 4.6;
  2185. don't know about 5.0.  ckuver.h, makefile, 9 Oct 2002.
  2186.  
  2187. Added targets for AIX 5.2 and 5.3; totally untested.  ckuver.h, makefile,
  2188. 9 Oct 2002.
  2189.  
  2190. Built current source on Unixware 7.1.3 (make uw7); it's fine.  9 Oct 2002.
  2191.  
  2192. Promoted C-Kermit to 8.0.206 Beta.01 in hopes of a simultaneous release
  2193. with K95 2.1.  ckcmai.c, 9 Oct 2002.
  2194.  
  2195. From Jeff: Change KERMITFONT definitions to use the new (Unicode 3.1) code
  2196. points for the terminal graphics characters (such as VT100 horizontal scan
  2197. lines), rather than private-use codes.  ckcuni.c, 10 Oct 2002.
  2198.  
  2199. Jason Heskett also complained that REMOTE CD would print the name of the new
  2200. directory returned by the server even if he SET QUIET ON.  This is a tricky
  2201. one.  Which server replies should the QUIET settings apply to?  If I give a
  2202. REMOTE DIRECTORY command, it means I want to see the directory listing,
  2203. period.  But if I give a REMOTE CD command, I get an "unsolicited" response
  2204. message that SET QUIET ON should suppress.  Adding message suppression to 
  2205. rcv_shortreply() is close, but not totally right; for example, it also
  2206. suppresses the response to REMOTE PWD, which is not helpful.  The only right
  2207. way to do this is to suppress for REMOTE CD only, which can be done only by
  2208. setting a (new) global flag, rcdactive.  ckuus[r57].c, ckcpro.w, 10 Oct 2002.
  2209.  
  2210. Ditto for REMOTE LOGIN response message ("Logged in").  ckuus7.c, 11 Oct 2002.
  2211.  
  2212. From Jeff: SET GUI WINDOW FONT { NAME, SIZE }. ckuusr.h, ckuus4.c, 11 Oct 2002.
  2213.  
  2214. Quick preliminary 8.0.206 build-all:
  2215.  
  2216.  OK SunOS 4.1.3
  2217.  OK Solaris 2.5.1
  2218.  OK Solaris 9
  2219.  OK AIX 4.3.3
  2220.  OK HP-UX 10.20
  2221.  OK VMS 7.1 Alpha + TCP/IP
  2222.  OK VMS 7.1 Alpha nonet
  2223.  OK VMS 5.5 VAX + TCP/IP
  2224.  OK VMS 5.5 VAX nonet
  2225.  OK Unixware 7.1.3
  2226.  OK FreeBSD 3.1
  2227.  OK FreeBSD 4.6
  2228.  OK NetBSD 1.5.2 MVME (Gerry B)
  2229.  OK Sinix 5.42
  2230.  
  2231. Sinix build got stuck on ckuusr.c even though we're not optimizing on Sinix
  2232. any more.  Rebooting the machine fixed it.
  2233.  
  2234. Fixed some #ifdefs for VMS in new incomplete-file deletion code in doclean().
  2235. ckuusx.c, 11 Oct 2002.
  2236.  
  2237. Moved uq_blah() prototypes from ckuusr.h to ckcker.h because these routines
  2238. are called in modules that don't (and shouldn't have to) include ckuusr.h.
  2239. 11 Oct 2002.
  2240.  
  2241. Jeff verified secure builds on Linux and Solaris.
  2242.  
  2243. Custom-build workout: 80 different feature-selection combinations:
  2244.  . Fixed yesterday's change for NOSPL: ckcfns.c.
  2245.  . Fixed conflict between NORECALL and USE_ARROWKEYS: ckucmd.c.
  2246.  . Moved setseslog() from ckuus5.c to ckuusx.c to avoid link-time foulups.
  2247.  . Fixed an unguarded reference to zmkdir() in ckcftp.c.
  2248.  . Protected rmsg() by #ifndef NOXFER: ckuus7.c.
  2249.  . Protected initxlist() by #ifndef NOXFER: ckcmai.c.
  2250.  . Fixed unguarded references to g_url struct in xx_ftp(): ckuusy.c.
  2251.  . Fixed unguarded references to tt_snaws() in winchh(): ckutio.c.
  2252.  
  2253. --- 8.0.206 Beta.01 11 Oct 2002 ---
  2254.  
  2255. From Jeff, 16 Oct 2002:
  2256.  . Fix K95 RMDIR: ckcfn3.c.
  2257.  . Makefile targets for Red Hat 7.2, 7.3, 8.0: ckuver.h, makefile.
  2258.  . Added \v(log_xxx) for each kind of log for PeterE: ckuusr.h, ckuus4.c.
  2259.  . Added SET TERM ATTRIBUTE DIM { ON, OFF }: ckuus[27].c.
  2260.  . Change "const" to "CONST" in some PAM declarations.  ckufio.c.
  2261.  
  2262. Added SET MATCH { DOTFILE, FIFO } { ON, OFF }.  A FIFO special file is a named
  2263. pipe, used for interprocess communication.  It must be opened at both ends, so
  2264. it's silly to match them by default; opening a FIFO and attempting to read
  2265. will block forever unless somebody is writing into the other end.  Made the
  2266. MATCH FIFO default OFF in all cases.  The dotfile default is the same as
  2267. always (OFF for UNIX, ON elsewhere); SET MATCH DOTFILE is simply a more
  2268. intuitive and findable command than SET WILD KERMIT /MATCH-DOT-FILES.  Note
  2269. that SET MATCH DOTFILE undoes SET OPTIONS DIRECTORY /[NO]DOTFILES, and vice
  2270. versa.  ckcmai.c, ckuusr.h, ckuus[23].c, ckufio.c. 17 Oct 2002.
  2271.  
  2272. Added client and server end of REMOTE SET MATCH { DOTFILE, FIFO } { ON, OFF }.
  2273. The new protocol codes are 330 and 331, respectively.  ckuus[367].c, ckcfns.c,
  2274. 17 Oct 2002.
  2275.  
  2276. Adjusted the "match dot if pattern starts with dot" heuristic in nzxpand()
  2277. to not kick in if the filespec is "./foo".  This probably needs more work.
  2278. ckufio.c, 17 Oct 2002.
  2279.  
  2280. Fixed typo in transcribing Jeff's ckcfn3.c code from yesterday.  18 Oct 2002.
  2281.  
  2282. Moved some help text out of #ifdef ANYSSH that had nothing to do with SSH.
  2283. (Idea for a new EMACS feature: M-X list-ifdef-environment.)
  2284. ckuus2.c, 18 Oct 2002.
  2285.  
  2286. Removed "set file { permission, protection }" keywords, which led nowhere.
  2287. ckuus7.c, 18 Oct 2002.
  2288.  
  2289. Added -DSV68 to all SV/68 targets.  Make ckgetfqhostname() just return its
  2290. argument in SV/68; it dumps core otherwise.  In case this happens anywhere
  2291. else, add -DNOCKGETFQHOST to CFLAGS.  makefile, ckcnet.c, 18 Oct 2002.
  2292.  
  2293. For PeterE, added SET { SEND, RECEIVE } PERMISSIONS { ON, OFF } so incoming and
  2294. outbound permission attributes can be set separately. ckuus[27].c, 18 Oct 2002.
  2295.  
  2296. Changed SHOW ATTRIBUTES to show In and Out permissions separately.
  2297. ckuus5.c, 18 Oct 2002.
  2298.  
  2299. Fixed REDO to display the command it's redoing and to add it to the bottom
  2300. of the recall buffer.  ckuusr.c, 18 Oct 2002.
  2301.  
  2302. Discovered that DATE SATURDAY dumps core...  Apparently it always did; this
  2303. case was not included in the date-time torture test script.  The crash happens
  2304. because the DATE parsing code doesn't check for a NULL date-conversion
  2305. error-message pointer.  Fixed in ckuusr.c, 18 Oct 2002.
  2306.  
  2307. The reason DATE SATURDAY got a date-conversion error was that this path thru
  2308. the code left a result pointer unset.  Fixed in cmcvtdate(): ckucmd.c,
  2309. 19 Oct 2002.
  2310.  
  2311. DATE SUNDAY +1DAY returned incorrect results (for any day-of-week name, any
  2312. delta time), even though DATE TODAY +1DAY worked fine.  Fixed in cmcvtdate():
  2313. ckucmd.c, 19 Oct 2002.
  2314.  
  2315. SET TAKE ECHO ON counted each line twice when GOTO was active.  Fixed in
  2316. dogoto(): ckuus6.c, 19 Oct 2002.
  2317.  
  2318. Jeff noticed:
  2319. "KERMIT READY TO GET...
  2320.  RCVD: (2 files) Last: [/amd/prost/p/kd/jaltman/.src/ckonet.c] (OK)
  2321. the last file attempted may have been ckonet.c but it certainly was
  2322. not the last file received" (similarly for sending).  Fixed by having two
  2323. pointers for each name; a preliminary pointer, which is set for each file at
  2324. the beginning of the transfer (when we have all the needed info), and a final
  2325. one that is set from the preliminary one only after the file was transferred
  2326. successfully.  This corrects not only the automatic "wheremessage" at the end
  2327. of a remote-mode transfer, but also the WHERE and SHOW FILE command results.
  2328. ckuusx.c, ckcfn[s3].c, ckcpro.w, 19 Oct 2002.
  2329.  
  2330. From Jeff: Improve ORIENTATION message for K95 to say which directories are
  2331. for which INI files.  ckuusr.c, 23 Oct 2002.
  2332.  
  2333. Removed Beta designation from herald.  ckcmai.c, 23 Oct 2002.
  2334.  
  2335. Put final dates and ID strings in Unix and VMS build procedures.
  2336. Makefile, ckvker.com, 23 Oct 2002.
  2337.  
  2338. Build-all...  #ifdef adjustments: ckcfns.c...  83 different feature-set
  2339. combinations build OK on Linux.  23 Oct 2002.
  2340.  
  2341. From Jeff: SET WIN95 HORIZONTAL-SCAN-LINE-SUBSTITUTIONS.  ckuusr.h, ckuus7.c,
  2342. 24 Oct 2002.
  2343.  
  2344. Fixed Heath-19 graphic character-set table to use new Unicode 3.1 values
  2345. if WIN95 HORIZ OFF.  ckcuni.c, 24 Oct 2002.
  2346.  
  2347. Changed tx_usub() to return Unicode 3.1 values if WIN95 HORIZ OFF.
  2348. ckcuni.c, 24 Oct 2002. <-- No backed off on this.
  2349.  
  2350. Some problems during build-all:
  2351.  
  2352.  . VMS 7.1 TGV 4.2: If I make a Telnet connection with it, then try to send
  2353.    a file (itself. wermit.exe) over the connection, the connection drops
  2354.    after about 20%, the thermometer zooms out to 100% and SUCCESS is reported.
  2355.    This doesn't happen with UCX.
  2356.  
  2357.  . VMS 7.3 TGV 4.3: ckcmai.c won't compile because of a complaint about the
  2358.    declaration of select() (which ckcmai.c doesn't use) in
  2359.    SYS$COMMON:[SYSLIB]DECC$RTLDEF.TLB.  Ditto in VMS 7.2 TGV 4.3.
  2360.    Adding NOSELECT to CFLAGS doesn't help.  I don't think the VMS version
  2361.    even uses select().  But the TGV 4.3 builds were OK in 8.0.201, so what
  2362.    changed?  I don't see anything in ckcnet.h that would have done it.
  2363.  
  2364. It builds OK with VMS 7.1 / TGV 4.2 but sending files on Telnet connections
  2365. fails in a strange way: the connection drops, but the thermometer goes to 100%
  2366. and success is reported.  I don't know why the connection is dropping (s_errno
  2367. is 32 == "broken pipe"), but the spurious success indication is because of
  2368. a double failure in sdata(): (1) The packet-sending loop index could go
  2369. negative without breaking the loop when streaming; (2) if spack() fails,
  2370. sdata() should return -2, not -1 (which means EOF).  Also if any ttchk() in
  2371. sdata() returns < 0, sdata should return -2.  I fixed this code (which has
  2372. been this way for YEARS) and now VMS C-Kermit properly fails when it gets
  2373. the spack() error, but ttchk() in this case still doesn't think the connection
  2374. is lost, but that must be our new problem with MultiNet.  ckcfns.c,
  2375. 27 Oct 2002.
  2376.  
  2377. The compilation failure in ckcmai.c is a clue...  The problem was that I added
  2378. #ifdef VMS / #include <time.h> / #endif to shut up complaints about the time()
  2379. call.  Evidently something in VMS <time.h> gives MultiNet a bad case of
  2380. indigestion; removing it fixes the compilation and the result works fine.  The
  2381. transmission failures in the other case seem to be a coincidence -- something
  2382. to do with the U of Arizona (probably some obscure VMS quota on my IDs there,
  2383. or some kind of network connection throttling), since it doesn't happen
  2384. anywhere else.  ckcmai.c, 27 Oct 2002.
  2385.  
  2386. Changed four occurrences of "void" to "VOID" in ckcftp.c, 27 Oct 2002.
  2387.  
  2388. Defined NOCKFQHOSTNAME for HPUXPRE65.  Might also need this for HP-UX 7
  2389. and maybe 8.  ckcnet.c, 27 Oct 2002.
  2390.  
  2391. From Jeff: PAM_CONST definition to clear up warnings caused by different
  2392. vendors' definitions of PAM structs.  ckufio.c, 28 Oct 2002.
  2393.  
  2394. Unixware 2.1.0 build bombs immediately with "UX:make: ERROR: line too long"
  2395. (which line?)  Not worth chopping up the makefile to fix but in a pinch it
  2396. could be done.  2.1.3 builds OK.
  2397.  
  2398. Did another 20-some platform builds, bringing the total to 83, plus a final
  2399. runthrough of the build-with-84-different-feature-set-combinations script on
  2400. Linux.  Should be good to go!
  2401.  
  2402. --- 8.0.206 24 Oct 2002 ---
  2403.  
  2404. Finally got access to Linux on IA64 again.  Builds OK but dumps core
  2405. immediately on startup.  Adding -DNOCKGETFQHOST was necessary but not
  2406. sufficient.  In this case, the very call to ckgetfqhostname() from ckhost()
  2407. (which is in ckuusx.c) was dumping core; thus I had to move the definition of
  2408. NOCKGETFQHOST from ckcnet.c to ckcdeb.h, add an #ifdef __ia64__ clause to it,
  2409. and protect the call to ckgetfqhostname() with it.  Obviously there has to be
  2410. a better fix but this will have to for now.  ckcnet.c, ckuusx.c, ckcdeb.h,
  2411. 31 Oct 2002.
  2412.  
  2413. Link step fails in Mandrake 9.0 with undefined references to res_search,
  2414. dn_expand, and crypt.  Turns out the linux makefile target tests for the
  2415. existence of libcrypt.a and libresolv.a, but in Mandrake 9.0 they exist
  2416. only as *.so.  Changed linux target to look for both.  makefile, 1 Nov 2002.
  2417.  
  2418. Vace reported that "ftp mget a b c" would get ALL files from the server's
  2419. directory if c did not exist.  Diagnosis: off-by-one error in counting MGET
  2420. args processed.  Naturally fixing this bug revealed another (this time
  2421. cosmetic) one, which resulted in spurious error messages when hitting MGET
  2422. args that have no match on the server.  Fixed in ckcftp.c, 1 Nov 2002.
  2423.  
  2424. Rebuilt about 60 of the most important Unix binaries to pick up the fixes
  2425. 31 Oct - 1 Nov 2002, and refreshed the FTP site with new sources, tarballs,
  2426. ZIP files, etc.  Sat Nov  2 19:11:30 2002
  2427.  
  2428. From Martin Vorlaender and Jeff, SSL/TLS support for VMS:
  2429. ckuusr.h, ckuath.h, ckcnet.c, ckctel.c, ckuath.c, 10 Nov 2002.
  2430.  
  2431. Added PASV as invisible synonym for PASSIVE.  ckcftp.c, 10 Nov 2002.
  2432.  
  2433. --- 8.0.206 24 Oct 2002 #2 ---
  2434.  
  2435. More work on SSL in VMS: Jeff + Martin Vorlaender: ck_ssl.c ckcmai.c ckcnet.c
  2436. ckctel.c ckuath.h ckvcon.c ckvtio.c ckvker.com 10-15 Nov 2002.
  2437.  
  2438. Discovered that ckvfio.c would not compile on VMS 6.1 with UCX 4.1 because 
  2439. <conv$routines.h> was missing, which is explicitly included.  Enclosed the
  2440. #include in #ifdef NOCONVROUTINES..#endif and rebuilt with
  2441. @[users.fdc.src]ckvker.com "" "" "NOCONVROUTINES".  16 Nov 2002.
  2442.  
  2443. Fixed the "ftp mget */data/*" problem with two small changes to doftpget():
  2444. ckcftp.c, 16 Nov 2002.  Placed a copy of ckcftp.patch in ~kermit/f.
  2445.  
  2446. From Lucas Hart: Fixes for VAX C 2.x and CMU TCP/IP.  "Can't guarantee that
  2447. the revised CKVOLD will work for all combinations of more recent
  2448. VMS/compiler/TCPIP releases, but I've tested it for compatibility on our AXP
  2449. VMS 6.2, UCX 4.0, DECC 5.6, your AXP VMS 7.1, DEC TCPIP 5.1, DECC 6.0 as well
  2450. as with VAX VMS 5.4, VAX C 3.2, CMU12 and VAX VMS 4.7, VAX C 2.4."  ckvfio.c,
  2451. ckvtio.c, ckuus5.c, ckvker.com, ckvold.com, 17 Nov 2002.
  2452.  
  2453. From Jeff: More work on VMS SSL.  Now it actually works, even in CONNECT mode,
  2454. except it hangs when it gets an error alert or the remote closes the
  2455. connection.  ckcnet.c. ckvtio.c, 17 Nov 2002.
  2456.  
  2457. NOTE: Lucas's changes should go into the 8.0.206 source code but it's too
  2458. late since ckvtio.c (upon which he based his changes) is already full of
  2459. SSL code.
  2460.  
  2461. MGET in K95 in totally broken FOR SOME PEOPLE (mainly me) if the TMP (or TEMP)
  2462. value is too long.  It works fine if you set these to C:\TMP.  Diagnosis: (1)
  2463. we were malloc'ing only 16 bytes for the temp file name (I think this was my
  2464. fault -- I was only looking at the "ckXXXXXX" part and forgetting that this
  2465. was appended to the TMP path); (2) the Windows version of mktemp() wants you
  2466. to use the value pointed to by the pointer it returns, rather than assuming
  2467. the mktemp() arg will be modified in place.  The code was changed to malloc a
  2468. longer string and to use the return value from mktemp() (if any) rather than
  2469. assuming that mktemp() modified its argument string (in K95 only -- not sure
  2470. about Unix platforms; the man pages differ on this, but at least this way if
  2471. some mktemp() version does NOT alter its argument, we still have a usable
  2472. filename (like /tmp/ckXXXXXX)).  Of course this won't be good for recursive
  2473. MLSD downloads, but we can always issue patches for the Unix version later if
  2474. needed.  The Linux and BSD versions use mkstemp() anyway.  There is, however,
  2475. a danger of a memory leak in the Unix version if the user has defined a TMPDIR
  2476. or CK_TMP environment variable whose value is longer than 9 bytes.  All this
  2477. is highly unlikely so we should be OK.  ckcftp.c, 17 Nov 2002.
  2478.  
  2479. --- K95 2.1.1 and updated ck[uv]206.{tar,zip} but not C-Kermit binaries ---
  2480.  
  2481. From Jeff: Fixes for Telnet Com Port Control, update to a newer release of
  2482. OpenSSL: ck_ssl.c ck_ssl.h ckcdeb.h ckcftp.c ckcmai.c ckcnet.c ckctel.c
  2483. ckuath.c ckuath.h ckucns.c ckuus4.c ckuus5.c ckuusr.c ckuusr.h ckvcon.c
  2484. ckvfio.c ckvker.com ckvtio.c ckvvms.h, 25 Nov 2002.
  2485.  
  2486. --- K95 2.1.2 and C-Kermit 8.0 CDROM ---
  2487.  
  2488. From Jeff, 28 Nov 2002:
  2489.  . Updated SSL modules: ck_ssl.[ch].
  2490.  . Fixed cipher-list display in SHOW AUTH & FTP ssl_auth(): ckuus7.c. ckcftp.c
  2491.  . Some minor tn_wait() fixes: ckctel.c.
  2492.  . Preliminary SSL support for VMS CONNECT: ckvcon.c.
  2493.  
  2494. Bumped C-Kermit edit number to 207.
  2495.  
  2496. From Jeff, 29 Nov 2002: "[C-Kermit was dumping core on SCO OSR5 Telnet Com Port
  2497. connections because] the SCO compiler treats all characters as signed.  This
  2498. was causing 'sprintf(buf,"02x ",ch);' to produce strings such as "ffffffc2"
  2499. instead of "c2" for values between 128 and 255.  This wrote beyond the end of
  2500. a buffer and blew away the stack.  Having fixed this I also noticed that
  2501. conect() did not properly check for carrier when TN CPC was negotiated.  This
  2502. has now been fixed as well."  ckucns.c, ckucon.c, ckctel.c, 29 Nov 2002.
  2503.  
  2504. From Jeff, 30 Nov 2002: Fix SSL for VMS and also carry forward the CPC fixes
  2505. to VMS.  ckcnet.c, ckvtio.c, ckvcon.c, 30 Nov 2002.
  2506.  
  2507. Changed copyright dates that are displayed (but not yet all the internal
  2508. ones) from 2002 to 2003.  ckcmai.c, 3 Jan 2003.
  2509.  
  2510. Fixed the FTP module's brief-format transaction log, which had the status
  2511. inverted: OK for FAILED and v.v.  ckcftp.c 3 Jan 2003.
  2512.  
  2513. From Jeff, 4 Jan 2003:
  2514.  . Make /MOVE-TO:xxx convert xxx to full pathname: ckuus[r67].c,
  2515.  . Make SHOW OPTIONS ALL show both kinds of options: ckuus2.c.
  2516.  . More command-line personalities: ckcmai.c, ckuusy.c.
  2517.  . New NOSCROLL command for K95: ckuusr.[ch], ckuus2.c.
  2518.  . New lockdown and other command-line options: ckuusr.h, ckuusy.c.
  2519.  . SSL interface updated to OpenSSL 0.9.7: ck_ssl.c.
  2520.  . SET TERM LINE-SPACING and CURSOR xxx NOBLINK: ckuus[27]c.
  2521.  . Expanded SHOW GUI command: ckuus3.c
  2522.  . New SHOW TABS code: ckuus5.c.
  2523.  
  2524. Updated SUPPORT (BUG), NEWS, and INTRO texts.  ckuus[26].c. 5 Jan 2003.
  2525.  
  2526. Fixed FTP module to suppress "'FEAT': Command not understood" message
  2527. unless FTP DEBUG is ON.  ckcftp.c, 6 Jan 2003.
  2528.  
  2529. Got a report that C-Kermit dumps core on Solaris when executing a certain
  2530. script.  Seems to be related to changing vnambuf[] in zzstring() from an
  2531. automatic array to a malloc'd buffer (see notes from 29 Jun 2000).  Changed
  2532. it to an automatic buffer except for K95.  ckuus4.c, 6 Jan 2003.
  2533.  
  2534. Nope, that's not it.  It evidently happens only after FTP PUT has been used.
  2535. Fixed solaris9g makefile target to include -funsigned-char and built a new
  2536. binary.  Determined that building with gcc and -funsigned-char makes no
  2537. difference.  makefile, 7 Jan 2003.
  2538.  
  2539. I did a preliminary audit, looking at the items in the left column: if used in
  2540. a given routine, are there any obvious mistakes:
  2541.  
  2542.                        1        2          3           4              5
  2543.                    doftpput->putfile->sendrequest->doftpsend2->secure_write
  2544. malloc                OK       OK         OK          OK             OK
  2545. makestr               OK       OK           OK          OK             OK
  2546. automatic arrays      OK       OK           OK          OK             OK
  2547. [ck]str[n]cpy         OK       OK           OK          OK             OK
  2548. [ck]str[n]cat         OK       OK           OK          OK             OK
  2549. sprintf               OK       OK           OK          OK             OK
  2550. nzltor                OK       OK           OK          OK             OK
  2551. zfnqfp                OK       OK           OK          OK             OK
  2552. memcpy                OK       OK           OK          OK             OK
  2553. bcopy                 OK       OK           OK          OK             OK
  2554.  
  2555. secure_write sends the data directly on clear-text connections.  On secure
  2556. connections, it calls secure_putbuf(), which calls secure_putbyte(), but we
  2557. aren't using those, so secure_write() is the end of the call chain for FTP
  2558. PUT.  doftpsend2 has buf[] as an automatic array, which it reads file data
  2559. into using zxin (binary mode only), but this looks OK.  Still, I changed it
  2560. read 1 less than the buffer size (fread) just in case.  Also there was one
  2561. debug() statement that referred to an automatic array (fullname[]) before it
  2562. was initialized (but not used in this case), which I fixed.  ckcftp.c,
  2563. 7 Jan 2003.
  2564.  
  2565. FTP GET /RECURSIVE somepath/somefile still didn't work, despite what the
  2566. notes of 19 Sep 2001 say.  There are so many paths through the code,
  2567. depending on switch values, GET vs MGET, etc, that a crucial spot was missed.
  2568. Fixed in doftpget(): ckcftp.c, 7 Jan 2003.
  2569.  
  2570. Back to the core dump...  after two days of full-time debugging, I found the
  2571. culprit: the buffer-full test in the zzout() macro should have been ">="
  2572. rather than just ">", thus Kermit wrote 1 byte past the end of the malloc'd
  2573. FTP PUT output buffer, ucbuf.  Why did it never happen in K95?  Because, since
  2574. it's a secure build, FUDGE_FACTOR is defined there.  But it's not defined in
  2575. Solaris or other clear-text builds.  Although the crash wouldn't happen in
  2576. secure builds, the 1-byte leak might have caused errors in the data transfer.
  2577. In non-Solaris clear-text builds, like Linux, I suspect that malloc() tends
  2578. add something for safety (especially given the man page statement that it
  2579. allocates "at least" what you asked for).  Another reason the problem escaped
  2580. notice is that zzout() is used only for text-mode PUTs (and then only when
  2581. there is no character-set translation), but most transfers these days are
  2582. binary and/or downloads.  Anyway, in the course of debugging, a lot of small
  2583. cleanups were done: sizeof(blah) for all arrays was replaced by the same
  2584. symbolic size that was used to allocate the array, numeric array sizes were
  2585. replaced with symbolic ones, etc.  The real fix is one character long.
  2586. ckcftp.c, 9 Jan 2003.
  2587.  
  2588. Got a report that "mget /recursive */somedir/*" downloaded the files into
  2589. the current directory, rather than re-creating the remote directory structure.
  2590. Fixed in doftpget(): ckcftp.c, 10 Jan 2003.
  2591.  
  2592. Unix C-Kermit did not allow file transfer if started under inetd and accessed
  2593. via Internet raw socket (or whatever).  Diagnosis: isatty() and friends would
  2594. fail causing ttopen() to fail.  Fixed by adding escape clauses for "-l 0"
  2595. situations (i.e. Kermit invoked with an already-open file descriptor) at the
  2596. appropriate places.  ckcmai.c, ckutio.c, 14 Jan 2003.
  2597.  
  2598. From Jeff for K95 2.1.3
  2599.  . Add test for startflags & 128 to trap() for ignoring BREAK.
  2600.  . Fix for SHOW TRANSMIT.
  2601.  
  2602. --- K95 2.1.3 ---
  2603.  
  2604. FTP USER, FTP ACCOUNT, plus the various prompts and switches for FTP username,
  2605. password, and account all neglected to strip quotes, and in most cases quotes
  2606. are necessary to specify a username that contains spaces.  ckcftp.c,
  2607. 15 Jan 2003.
  2608.  
  2609. FTP MPUT f1 f2 f3... gets a parse error if any of the fn's do not match an
  2610. existing file.  This is bad for scripts.  In doftpput(), cmfdb() looks for
  2611. keywords (switches) or CMIFI.  When it hits CMIFI, it exits from the initial
  2612. parse loop and then does additional cmifi()s in a loop until done.  The most
  2613. obvious fix is to parse each field with cmfdb(CMIFI,CMFLD), i.e. fall back to
  2614. CMFLD if CMIFI doesn't match anything.  Then if CMFLD was used, we don't add
  2615. the filespec to the list.  This is a rather big change but it seems to work.
  2616. No error messages or failures happen for non-matching fields, but an error
  2617. message is printed (and the MPUT command fails) if none of the fields match
  2618. any files.  This fix got in too late for 2.1.3; workaround: use C-Shell
  2619. like wildcard list (ftp mput "{*.abc,foo.*}").  ckcftp.c, 16 Jan 2003.
  2620.  
  2621. GREP did not pass its pattern through the expander, thus variables could
  2622. not be used for patterns.  This must have been an oversight -- I can't find
  2623. anything in my notes about it.  Fixed in dogrep(): ckuus6.c, 24 Jan 2003.
  2624.  
  2625. New makefile target for HP-UX 11.xx with OpenSSL from Tapani Tarvainen.
  2626. makefile, 31 Jan 2003.
  2627.  
  2628. From Jeff:
  2629.  . Avoid core dump when dereferencing tnc_get_signature(): ckuus4.c.
  2630.  . Bump version numbers to 8.0.208, 2.1.4: ckcmai.c.
  2631.  
  2632. Added /NOLOGIN to FTP [OPEN].  ckcftp.c, 10 Feb 2003.
  2633.  
  2634. Don't dump core if FTP DEBUG is ON and FTP OPEN does not include a service.
  2635. openftp(): ckcftp.c, 10 Feb 2003.
  2636.  
  2637. HELP PATTERN text incorrectly identified commands and functions with
  2638. floating and anchored patterns.  The corrected lists are:
  2639. Floating: GREP, TYPE /MATCH:, /EXCEPT: patterns, \farraylook(),
  2640. Anchored: IF MATCH, file-matching wildcards, \fsearch(), \frsearch()
  2641. ckuus2.c, 10 Feb 2003.     
  2642.  
  2643. INPUT n \fpattern(xxx) did not work for case-independent comparisons.
  2644. Fixed in doinput(): ckuus4.c, 10 Feb 2003.
  2645.  
  2646. It seems \fpattern() didn't work with MINPUT at all.  There was no code to
  2647. handle \fpattern() in the MINPUT parse loop, so it never worked.  The code
  2648. had to be totally rewritten to use cmfld() in a loop, rather than cmtxt()
  2649. and then cksplit().  Furthermore, whenever any of the fields was an
  2650. \fjoin(), this had to be split.  ckuusr.c, 10 Feb 2003.
  2651.  
  2652. Macro replacement via \m() and \fdefinition() does not work as advertised
  2653. (i.e. case sensitively) for associative array elements; e.g. \m(xxx<abc>) is
  2654. treated the same as \m(xxx<ABC>), contrary to section 7.10.10 of the C-Kermit
  2655. 7.0 update notes, and to the fact that the two really do exist separately.
  2656. Fixed by adding a static function isaarray(s) which succeeds if s is an
  2657. associative array reference and fails otherwise, and then having \m()
  2658. and \fdef() call mxxlook() (case-sensitive lookup) if isaarray(), otherwise
  2659. (as before) mxlook()).  ckuus4.c, 11 Feb 2003.
  2660.  
  2661. Fixed FTP OPEN to allow the /USER switch to override SET FTP AUTOLOGIN OFF,
  2662. just as /NOLOGIN overrides SET FTP AUTOLOGIN ON.  ckcftp.c, 11 Feb 2003.
  2663.  
  2664. In K95, "set key \1234 \27H" (any SET KEY command in which the first char of
  2665. the definition was backslash, and the ONLY character after the backslash
  2666. quantity was an uppercase letter, that letter would be lowercased).  Diagnosis:
  2667. xlookup() poking its argument (see notes from July 2000).  Jeff sent a fix.
  2668. ckucmd.c, 15 Feb 2003.
  2669.  
  2670. Ran my S-Expression torture test to make sure Sexps still worked.  They do,
  2671. except the bitwise & and | operators were broken, e.g. (& 7 2) and (| 1 2 4)
  2672. get "Invalid operand" errors.  Jeff's code had added an early failure return
  2673. from the lookup loop when when a single-byte keyword matched a keyword that
  2674. started with the same byte but was more than one byte long.  So "&" would hit
  2675. "&&" and fail instead of continuing its search (xlookup tables aren't sorted
  2676. so there can be no early return).  Fixed in xlookup(): ckucmd.c, 16 Feb 2003.
  2677.  
  2678. Got rid of "krbmit" target from makefile.  It's still there, but we don't
  2679. use it any more.  All secure targets now use "xermit", and produce a binary
  2680. called wermit, just like the regular ones do (except the old ckucon.c ones).
  2681. Non-secure targets, since they don't define any of the security symbols,
  2682. wind up compiling and linking to (mostly) empty security modules.  makefile,
  2683. 15 Feb 2003.
  2684.  
  2685. Added \fcvtdate(xxx,3) to format its result in MDTM format (yyyymmddhhmmss,
  2686. all numeric, no spaces or punctuation).  Of course these numeric strings
  2687. are too big to be 32-bit numbers and are useless for arithmetic, but they're
  2688. useful for lexical comparison, etc.  ckuus[24].c, 16 Feb 2003.
  2689.  
  2690. The following FTP commands did not set FAILURE when they failed: RMDIR,
  2691. CD, CDUP, Fixed in the corresponding doftpblah() routines.  ckcftp.c,
  2692. 16 Feb 2003.
  2693.  
  2694. RENAME would sometimes not print an error message when it failed, e.g. in K95
  2695. when the destination file already existed.  ckuus6.c, 17 Feb 2003.
  2696.  
  2697. Fixed COPY error messages, which did not come out in standard format when
  2698. /LIST was not included.  ckuus6.c, 17 Feb 2003.
  2699.  
  2700. Fixed #ifdefs in ck_crp.c to allow nonsecure builds on old platforms like
  2701. System V/68 R3.  19 Feb 2003.
  2702.  
  2703. Similar treatment for ck_ssl.c.  20 Feb 2003.
  2704.  
  2705. From Jeff, 21 Feb 2003:
  2706.  . AIX53 and AIX52 symbols for ckcdeb.h, makefile.
  2707.  . New gcc targets for various AIX 4.x/5.x versions: makefile.
  2708.  . Copyright date updates: ck_crp.c, ck_ssl.c.
  2709.  . ENABLE/DISABLE QUERY broken because keyword table out of order: ckuusr.c.
  2710.  . Fixed the use of HTTP proxies for HTTP [RE]OPEN for Unix: ckcnet.c.
  2711.  
  2712. Also for K95 only: Allow file transfer when K95 is invoked on the remote end
  2713. of a connection to a Pragma Systems Terminal Server connection; automatically
  2714. SET EXIT HANGUP OFF when invoked with open port handle ("k95 -l nnnn").
  2715.  
  2716. "cd a*" failed even when "a*" matched only one directory.  Fixed in cmifi():
  2717. ckucmd.c, 21 Feb 2003.
  2718.  
  2719. In the Unix version, replace "extern int errno;" with "#include <errno.h>"
  2720. if __GLIBC__ is defined, since glibc now defines a thread-specific errno.
  2721. ckcdeb.h, 26 Feb 2003.
  2722.  
  2723. Added #ifdefs to skip compilation of ckuath.c in nonsecure builds.  Tested
  2724. by building both secure and regular versions in Linux.  ckuath.c, 26 Feb 2003.
  2725.  
  2726. Ran the build-in-84-different-configurations script on Linux to make sure it
  2727. still builds with all different combinations of feature selection options.
  2728. All OK.  26 Feb 2003.
  2729.  
  2730. Built on VMS.  Needed to add a prototype for mxxlook*() to ckuusr.h; built
  2731. OK otherwise.  26 Feb 2003.
  2732.  
  2733. From Jeff: More #ifdef shuffling for nonsecure builds: ckuath.c, ck_ssl.c,
  2734. 27 Feb 2003.
  2735.  
  2736. Added code to ensure \v(download) ends in a directory separator in Unix,
  2737. Windows, and OS/2.  ckuus7.c, 27 Feb 2003.
  2738.  
  2739. Added code to K95 zfnqfp() to tack on directory separator when returning
  2740. a directory name.  ckofio.c, 27 Feb 2003.
  2741.  
  2742. Somehow an old copy of ckuath.c popped to replace the new one.  Put the new
  2743. one back.  28 Feb 2003.
  2744.  
  2745. From Jeff: Fix typo in my K95 zfnqfp() code from yesterday; fixes for handling
  2746. UNCs uniformly, no matter which way their slashes are leaning.  ckofio.c,
  2747. 28 Feb 2003.
  2748.  
  2749. At Jeff Mezei's suggestion, separate text and binary mode open sequences
  2750. for VMS session log.  ckvfio.c, 28 Feb 2003.
  2751.  
  2752. Added freebsd48 target for FreeBSD 4.8.  makefile, 1 Mar 2003.
  2753.  
  2754. Changed Mac OS X entries to include -DUSE_STRERROR.  makefile, 2 Mar 2003.
  2755.  
  2756. Fixed GETOK /GUI to evaluate its text argument.  ckuus6.c, 3 Mar 2003.
  2757.  
  2758. Jeff fixed the K95 Dialer QUICK dialog to (a) allow templates, and (b) have
  2759. a Save-As option.  3 Mar 2003.
  2760.  
  2761. Jeff fixed a problem with the Xmodem-CRC checksum being crunched whenever
  2762. there was a retransmission.  7 Mar 2003.
  2763.  
  2764. Added target/banner for Tru64 5.1B.  makefile, ckuver.h, 5 Mar 2003.
  2765.  
  2766. In Unix, the zcopy() routine (used by the COPY command) reset the user's umask
  2767. to 0 for the remainder of the Kermit process lifetime.  The bug was in
  2768. ckufio.c 8.0.194, 24 Oct 2002, and is fixed in ckufio.c 8.0.195, 6 Mar 2003.
  2769. Of course this happened after building 155 C-Kermit 8.0.208 binaries.  (But
  2770. before officially releasing 8.0.208.)
  2771.  
  2772. In the VMS version, changed:
  2773.  
  2774.         while ((n--) && xx_inc(2) > -1) ;
  2775. to:
  2776.         while ((n--) && xx_inc(2) >= 0) ;
  2777.  
  2778. to suppress the "...is being compared with a relational operator to a constant
  2779. whose value is not greater than zero" warning.  ckvtio.c, 7 Mar 2002.
  2780.  
  2781. Added a debug call to dologend in hopes of catching overzealous Locus
  2782. switching, which seems to happen only in K95.  ckuus3.c, 7 Mar 2002.
  2783.  
  2784. Rebuilt binaries for some of the more current Unix releases: AIX 4.3.3-5.1,
  2785. Solaris 7-9 , Red Hat 7.0-8.0, Slackware 8.1, Freebsd 4.7-4.8, NetBSD 1.6,
  2786. OpenBSD 3.2, Unixware 7.1.3, Open Unix 8, OSR5.0.6a, etc.  A Unix binary with
  2787. COPY umask fix shows a 6 Mar 2003 date for "UNIX File support" in SHOW
  2788. VERSIONS; a binary without the fix shows 24 Oct 2002.
  2789.  
  2790. C-Kermit 8.0.208 dated 14 March 2003 released on 10 March 2003.
  2791.  
  2792. ---8.0.208---
  2793.  
  2794. From Jeff 13 Mar 2003:
  2795.  . Updated SSL module allows importation of tickets from host.
  2796.  . freebsd50+openssl target: makefile.
  2797.  . FTP PUT /PERMISSIONS error message for K95: ckcftp.c.
  2798.  
  2799. Fixed MINPUT to strip quotes or braces from around targets (this was broken
  2800. on Feb 10th).  Thanks to Jason Heskett for discovering and reporting this
  2801. (killer) bug.  ckuusr.c, 14 Mar 2003.
  2802.  
  2803. Changed version number to 209 Dev.00.  ckcmai.c, 14 Mar 2003.
  2804.  
  2805. While debugging the alphapage script, I found that the command "minput 8 \6\13
  2806. \21\13 \13\27\4\13 \30\13" gets "?Not confirmed" in 8.0.208 and 8.0.209, but
  2807. not in 206 and earlier.  This problem too was introduced on Feb 10th by
  2808. changing MINPUT parsing from cmtxt() followed by cksplit() to cmfld() in a
  2809. loop.  cmfld() uses setatm() to return its result and of course setatm()
  2810. breaks on \13.  Changing setatm() not to do this would break everything else.
  2811. But cmfld() has no arguments that let us tell it to do anything different in
  2812. this case.  Changing the API would be a disaster.  The only solution is to add
  2813. an "MINPUT ACTIVE" (minputactive) global variable that tells cmfld() to tell
  2814. setatm() not to break on CR.  Now MINPUT with braced targets containing CR
  2815. and/or LF works in 209, 206, and 201 (but not 208).  ckucmd.c, ckuusr.c,
  2816. ckuus5.c, 15 Mar 2003.
  2817.  
  2818. MINPUT n \fjoin(&a) works OK if all the members of \&a[] are text strings, but
  2819. if they are strings of control chars (as above), they don't get separated by
  2820. the spaces.  For example in:
  2821.  
  2822.   dcl \&a[] = "\4\5" "\6\7" xxx
  2823.   minput 10 \fjoin(&a)
  2824.  
  2825. MINPUT gets two targets: "aaa" and "\4\5 \6\7 xxx".  The bug was in the
  2826. cksplit() call in the \fjoin() case of MINPUT: it needed to specify an
  2827. include set consisting of all the control characters except NUL.  ckuusr.c,
  2828. 16 Mar 2003.
  2829.  
  2830. But there's still a problem:
  2831.  
  2832.   dcl \&a[] = "\4\5\13\10" "\6\7" "xxx"
  2833.  
  2834. creates an array whose first member is "^D^E (one doublequote included).  But
  2835. if braces are used instead, there's no problem.  Same deal as MINPUT: cmfld()
  2836. breaks on CR or LF, thus the end quote is lost.  If I set minputactive for
  2837. DECLARE initializers too, that fixes it.  Is there any reason not to do this?
  2838. Can't think of any (famous last words)...  ckuusr.c, 16 Mar 2003.
  2839.  
  2840. Since it has multiple applications, changed the flag's name from minputactive
  2841. to keepallchars.  ckucmd.c, ckuus[r5].c, 16 Mar 2003.
  2842.  
  2843. \v(exedir) wasn't being set correctly (it included the program name as well
  2844. as the directory).  Fixed in getexedir(): ckuus4.c, 16 Mar 2003.
  2845.  
  2846. SET CARRIER-WATCH <Esc> "auto matic" (spurious space in supplied keyword).
  2847. Cosmetic only; it still worked.  Fixed in setdcd(): ckuus3.c, 16 Mar 2003.
  2848.  
  2849. "directory a b c" listed too many files -- all files whose names END WITH a,
  2850. b, or c, rather than the files whose names WERE a, b, or c.  Diagnosis: The
  2851. filespec is changed into a pattern: {a,b,c}, which is the correct form.  It is
  2852. passed to nzxpand(), which goes through the directory getting filenames and
  2853. sending each one to ckmatch() with the given pattern.  ckmatch() receives the
  2854. correct pattern but then prepends a "*" -- that's not right.  It's not just
  2855. in filename matching either.  The following succeeds when it shouldn't:
  2856.  
  2857.   if match xxxxc {{a,b,c}} <command>
  2858.  
  2859. Changing ckmatch() to not prepend the "*" to each segment fixes the command
  2860. above but breaks lots of others.  Running through the "match" torture-test
  2861. script shows the problem occurs only when the {a,b,c} list is the entire
  2862. pattern, and not embedded within a larger pattern.  Testing for this case
  2863. fixed the problem.  ckmatch(): ckclib.c, 16 Mar 2003.
  2864.  
  2865. Fixed FTP MODTIME to not print anything if QUIET ON.  ckcftp.c, 16 Mar 2003.
  2866.  
  2867. Picked up a new ckuath.c from Jeff, not sure what the changes are. 16 Mar 2003.
  2868.  
  2869. Did a few regular and secure builds to make sure I didn't wreck anything.
  2870.  
  2871. Changed version number to 209 (final).  ckcmai.c, 16 Mar 2003.
  2872.  
  2873. Jason Heskett found another bug: if you define a macro FOO inside the
  2874. definition of another macro BAR, and FOO's definition includes an odd number
  2875. of doublequotes (such as 1), FOO's definition absorbs the rest of BAR's
  2876. definition.  Example:
  2877.  
  2878.   def TEST {
  2879.     .foo = {X"}
  2880.     sho mac foo
  2881.   }
  2882.   do test
  2883.   sho mac foo
  2884.  
  2885. Results in:
  2886.  
  2887.   foo = {X"}, sho mac foo
  2888.  
  2889. Diagnosis: the TEST definition becomes:
  2890.  
  2891.   def TEST .foo = {X"}, sho mac foo
  2892.  
  2893. and the macro reader is erroneously treating the doublequote as an open
  2894. quote, and then automatically closes the quote at the end of the definition.
  2895. The error is that a doublequote should be significant only at the beginning of
  2896. a field.  But the macro reader isn't a command parser; it doesn't know what
  2897. a field is -- it's just looking for commas and skipping over quoted ones.
  2898. First we have to fix an oversight: SET COMMAND DOUBLEQUOTING OFF should have
  2899. worked here, but it wasn't tested in this case.  Fixed in getncm(): ckuus5.c,
  2900. 17 Mar 2003.
  2901.  
  2902. There are only certain cases where it makes sense to treat doublequotes as
  2903. significant:
  2904.  
  2905.  . An open quote must be at the beginning or preceded by a space.
  2906.  . A close quote is only at the end or else followed by a space.
  2907.  
  2908. This too was fixed in getncm(): ckuus5.c, 17 Mar 2003.
  2909.  
  2910. A fix from Jeff SSL/TLS FTP data decoding.  ckcftp.c, 18 Mar 2003.
  2911.  
  2912. Tried building C-Kermit on a Cray Y-MP with UNICOS 9.0.  "int suspend",
  2913. declared in ckcmai.c and used in many modules, conflicts with:
  2914.  
  2915.   unistd.h:extern int suspend __((int _Category, int _Id));
  2916.  
  2917. The "=Dsuspend=xsuspend" trick doesn't work for this; there is no way around
  2918. the conflict other than to rename the variable: ckcmai.c, ckutio.c,
  2919. ckuus[35xy].c.  26 Mar 2003.  VMS and K95 not affected.
  2920.  
  2921. OK that gets us past ckcmai.c...  Then in ckutio.c I had to add a new #ifdef
  2922. around the LFDEVNO setting, because the Cray didn't have mkdev.h.  Could not
  2923. find a Cray-specific manifest symbol, so I made a new makefile target (cray9)
  2924. that sets this symbol.  Having done this I have no idea what kind of lockfile
  2925. would be created, but I also doubt if anybody dials out from a Cray.  The
  2926. binary should run a C90, J90, or Y-MP.  makefile, 26 Mar 2003.
  2927.  
  2928. Added a target for SCO OSR5.0.7.  makefile, ckuver.h, 30 Mar 2003.
  2929.  
  2930. Changed since 208:
  2931. makefile ckuver.h ckcmai.c ckclib.c ckcftp.c ckucmd.c ckuus*.c ckutio.c.
  2932.  
  2933. ---8.0.209---
  2934.  
  2935. ***********************
  2936.