From 4eb909e18239465fe59c4861466d26e3cd42fa24 Mon Sep 17 00:00:00 2001 From: Ian Beckwith Date: Sat, 28 Jan 2012 22:56:53 +0000 Subject: [PATCH] 050_ck_patch: pop patch --- .pc/050_ck_patch.patch/.timestamp | 0 .pc/050_ck_patch.patch/ckcmai.c | 3592 ------------------------------------- .pc/applied-patches | 1 - ckcmai.c | 2 +- 4 files changed, 1 insertion(+), 3594 deletions(-) delete mode 100644 .pc/050_ck_patch.patch/.timestamp delete mode 100644 .pc/050_ck_patch.patch/ckcmai.c diff --git a/.pc/050_ck_patch.patch/.timestamp b/.pc/050_ck_patch.patch/.timestamp deleted file mode 100644 index e69de29..0000000 diff --git a/.pc/050_ck_patch.patch/ckcmai.c b/.pc/050_ck_patch.patch/ckcmai.c deleted file mode 100644 index 33504dc..0000000 --- a/.pc/050_ck_patch.patch/ckcmai.c +++ /dev/null @@ -1,3592 +0,0 @@ -#define EDITDATE "10 Apr 2004" /* Update these with each edit */ -#define EDITNDATE "20040410" /* Keep them in sync */ -/* Sat Apr 10 12:05:49 2004 */ - -/* - ckcsym.h is used for for defining symbols that normally would be defined - using -D or -d on the cc command line, for use with compilers that don't - support this feature. Must be before any tests for preprocessor symbols. -*/ -#include "ckcsym.h" -/* - Consolidated program version information (for UNIX also see ckuver.h). - See makever() below for how they are used. -*/ -/* #ifdef COMMENT */ /* Uncomment this for test version */ -#ifndef OS2 -#ifndef BETATEST -#define BETATEST -#endif /* BETATEST */ -#endif /* OS2 */ -/* #endif */ /* COMMENT */ - -#ifdef BETATEST -#ifdef OS2 -#ifdef __DATE__ -#define BETADATE -#endif /* __DATE__ */ -#endif /* OS2 */ -#endif /* BETATEST */ - -#ifndef MAC -/* - Note: initialize ck_s_test to "" if this is not a test version. - Use (*ck_s_test != '\0') to decide whether to print test-related messages. -*/ -#ifndef BETATEST -#ifndef OS2 /* UNIX, VMS, etc... (i.e. C-Kermit) */ -char *ck_s_test = ""; /* "Dev","Alpha","Beta","RC", or "" */ -char *ck_s_tver = ""; /* Test version number or "" */ -#else /* OS2 */ -char *ck_s_test = ""; /* (i.e. K95) */ -char *ck_s_tver = ""; -#endif /* OS2 */ -#else -char *ck_s_test = ""; /* Development */ -char *ck_s_tver = ""; -#endif /* BETATEST */ -#else /* MAC */ -char *ck_s_test = "Pre-Alpha"; /* Mac Kermit is always a test... */ -char *ck_s_tver = ""; -#endif /* MAC */ - -#ifdef BETADATE /* Date of this version or edit */ -char *ck_s_date = __DATE__; /* Compilation date */ -#else -char *ck_s_date = EDITDATE; /* See top */ - -#endif /* BETADATE */ -char *buildid = EDITNDATE; /* See top */ - -#ifdef UNIX -static char sccsid[] = "@(#)C-Kermit 8.0.211"; -#endif /* UNIX */ - -char *ck_s_ver = "8.0.211"; /* C-Kermit version string */ -long ck_l_ver = 800211L; /* C-Kermit version number */ - -#ifdef OS2 -char *ck_s_xver = "2.2.0"; /* Product-specific version string */ -long ck_l_xver = 2200L; /* Product-specific version number */ -#else -#ifdef MAC -char *ck_s_xver = "0.995"; /* Product-specific version string */ -long ck_l_xver = 995L; /* Product-specific version number */ -#else -char *ck_s_xver = ""; /* Don't touch these... */ -long ck_l_xver = 0L; /* they are computed at runtime */ -#endif /* MAC */ -#endif /* OS2 */ - -#ifdef OS2 -#ifdef IKSDONLY -#ifdef NT -char *ck_s_name = "IKS-NT"; -#else /* NT */ -char *ck_s_name = "IKS-OS/2"; -#endif /* NT */ -#else /* IKSDONLY */ -char *ck_s_name = "Kermit 95"; /* Program name */ -#endif /* IKSDONLY */ -#else -#ifdef MAC -char *ck_s_name = "Mac Kermit"; -#else -char *ck_s_name = "C-Kermit"; -#endif /* MAC */ -#endif /* OS2 */ - -char *ck_s_who = ""; /* Where customized, "" = not. */ -char *ck_patch = ""; /* Patch info, if any. */ - -#define CKVERLEN 128 -char versiox[CKVERLEN]; /* Version string buffer */ -char *versio = versiox; /* These are filled in at */ -long vernum, xvernum; /* runtime from above. */ - -#define CKCMAI - -#include "ckcasc.h" /* ASCII character symbols */ -#include "ckcdeb.h" /* Debug & other symbols */ - -char * myname = NULL; /* The name I am called by */ -#ifndef OS2 -char * exedir = NULL; /* Directory I was executed from */ -#endif /* OS2 */ -char * myhome = NULL; /* Home directory override */ - -/* C K C M A I -- C-Kermit Main program */ - -/* - Author: Frank da Cruz (fdc@columbia.edu), - Columbia University Academic Information Systems, New York City. - -COPYRIGHT NOTICE: -*/ - -#ifdef OS2 -char *wiksdcpr[] = { -"Windows Internet Kermit Service Daemon (WIKSD):", -"Copyright (C) 1985, 2004, Trustees of Columbia University in the City of New", -"York. All rights reserved.", -" ", -"PERMISSIONS:", -" ", -" The WIKSD software may be obtained directly, in binary form only, from", -" the Kermit Project at Columbia University by any individual for his or", -" her OWN USE, and by any company or other organization for its own", -" INTERNAL DISTRIBUTION and use, including installation on servers that", -" are accessed by customers or clients, WITHOUT EXPLICIT LICENSE. All", -" other forms of redistribution must be licensed from the Kermit Project", -" at Columbia University. These permissions apply only to the nonsecure", -" version of WIKSD.", -" ", -"DISCLAIMER:", -" ", -" THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE", -" TRUSTEES OF COLUMBIA UNIVERSITY IN THE CITY OF NEW YORK AS TO ITS", -" FITNESS FOR ANY PURPOSE, AND WITHOUT WARRANTY BY THE TRUSTEES OF", -" COLUMBIA UNIVERSITY IN THE CITY OF NEW YORK OF ANY KIND, EITHER", -" EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED", -" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.", -" THE TRUSTEES OF COLUMBIA UNIVERSITY IN THE CITY OF NEW YORK SHALL NOT", -" BE LIABLE FOR ANY DAMAGES, INCLUDING SPECIAL, INDIRECT, INCIDENTAL,", -" OR CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM ARISING OUT OR IN", -" CONNECTION WITH THE USE OF THE SOFTWARE, EVEN IF IT HAS BEEN OR IS", -" HEREAFTER ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. YOU SHALL", -" INDEMNIFY AND HOLD HARMLESS THE TRUSTEES OF COLUMBIA UNIVERSITY IN", -" THE CITY OF NEW YORK, ITS EMPLOYEES AND AGENTS FROM AND AGAINST ANY", -" AND ALL CLAIMS, DEMANDS, LOSS, DAMAGE OR EXPENSE (INCLUDING", -" ATTORNEYS' FEES) ARISING OUT OF YOUR USE OF THIS SOFTWARE.", -" ", -"The above copyright notice, permissions notice, and disclaimer may not be", -"removed, altered, or obscured and shall be included in all copies of the", -"WIKSD software. The Trustees of Columbia University in the City of", -"New York reserve the right to revoke this permission if any of the terms", -"of use set forth above are breached.", -" ", -"For further information, contact the Kermit Project, Columbia University,", -"612 West 115th Street, New York NY 10025-7799, USA; Phone +1 (212) 854 3703,", -"Fax +1 (212) 662 6442, kermit@columbia.edu, http://www.columbia.edu/kermit/", -"" -}; -#endif /* OS2 */ - -char *copyright[] = { - -#ifdef pdp11 -"Copyright (C) 1985, 2004, Trustees of Columbia University, NYC.", -"All rights reserved.", -" ", -#else -#ifdef OS2 -"Copyright (C) 1985, 2004, Trustees of Columbia University in the City of New", -"York. All rights reserved. This software is furnished under license", -"and may not be reproduced without license to do so. This copyright notice", -"must not be removed, altered, or obscured.", -" ", -" THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE", -" TRUSTEES OF COLUMBIA UNIVERSITY IN THE CITY OF NEW YORK AS TO ITS", -" FITNESS FOR ANY PURPOSE, AND WITHOUT WARRANTY BY THE TRUSTEES OF", -" COLUMBIA UNIVERSITY IN THE CITY OF NEW YORK OF ANY KIND, EITHER", -" EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED", -" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.", -" THE TRUSTEES OF COLUMBIA UNIVERSITY IN THE CITY OF NEW YORK SHALL NOT", -" BE LIABLE FOR ANY DAMAGES, INCLUDING SPECIAL, INDIRECT, INCIDENTAL,", -" OR CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM ARISING OUT OR IN", -" CONNECTION WITH THE USE OF THE SOFTWARE, EVEN IF IT HAS BEEN OR IS", -" HEREAFTER ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. YOU SHALL", -" INDEMNIFY AND HOLD HARMLESS THE TRUSTEES OF COLUMBIA UNIVERSITY IN", -" THE CITY OF NEW YORK, ITS EMPLOYEES AND AGENTS FROM AND AGAINST ANY", -" AND ALL CLAIMS, DEMANDS, LOSS, DAMAGE OR EXPENSE (INCLUDING", -" ATTORNEYS' FEES) ARISING OUT OF YOUR USE OF THIS SOFTWARE.", -" ", -#else -"Copyright (C) 1985, 2004,", -" The Trustees of Columbia University in the City of New York.", -" All rights reserved.", -" ", -"PERMISSIONS:", -" ", -"The C-Kermit software may be obtained directly from the Kermit Project at", -"Columbia University (or from any source explicitly licensed by the Kermit", -"Project or implicitly licensed by Clause (A) below) by any individual for", -"his or her OWN USE, and by any company or other organization for its own", -"INTERNAL DISTRIBUTION and use, including installation on servers that are", -"accessed by customers or clients, WITHOUT EXPLICIT LICENSE.", -" ", -"Conditions for REDISTRIBUTION are as follows:", -" ", -"(A) The C-Kermit software, in source and/or binary form, may be", -" included WITHOUT EXPLICIT LICENSE in distributions of OPERATING", -" SYSTEMS that have OSI (Open Source Initiative, www.opensource.org)", -" approved licenses, even if non-Open-Source applications (but not", -" operating systems) are included in the same distribution. Such", -" distributions include, but are not limited to, CD-ROM, FTP site,", -" Web site, or preinstalled software on a new GENERAL-PURPOSE", -" computer, as long as the primary character of the distribution is", -" an Open Source operating system with accompanying utilities. The", -" C-Kermit source code may not be changed without the consent of the", -" Kermit Project, which will not be unreasonably withheld (this is", -" simply a matter of keeping a consistent and supportable code base).", -" ", -"(B) Inclusion of C-Kermit software in whole or in part, in any form, in", -" or with any product not covered by Clause (A), or its distribution", -" by any commercial enterprise to its actual or potential customers", -" or clients except as in Clause (A), requires a license from the", -" Kermit Project, Columbia University; contact kermit@columbia.edu.", -" ", -"The name of Columbia University may not be used to endorse or promote", -"products derived from or including the C-Kermit software without specific", -"prior written permission.", -" ", -"DISCLAIMER:", -" ", -" THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE", -" TRUSTEES OF COLUMBIA UNIVERSITY IN THE CITY OF NEW YORK AS TO ITS", -" FITNESS FOR ANY PURPOSE, AND WITHOUT WARRANTY BY THE TRUSTEES OF", -" COLUMBIA UNIVERSITY IN THE CITY OF NEW YORK OF ANY KIND, EITHER", -" EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED", -" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.", -" THE TRUSTEES OF COLUMBIA UNIVERSITY IN THE CITY OF NEW YORK SHALL NOT", -" BE LIABLE FOR ANY DAMAGES, INCLUDING SPECIAL, INDIRECT, INCIDENTAL,", -" OR CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM ARISING OUT OF OR", -" IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN IF IT HAS BEEN OR IS", -" HEREAFTER ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. YOU SHALL", -" INDEMNIFY AND HOLD HARMLESS THE TRUSTEES OF COLUMBIA UNIVERSITY IN", -" THE CITY OF NEW YORK, ITS EMPLOYEES AND AGENTS FROM AND AGAINST ANY", -" AND ALL CLAIMS, DEMANDS, LOSS, DAMAGE OR EXPENSE (INCLUDING", -" ATTORNEYS' FEES) ARISING OUT OF YOUR USE OF THIS SOFTWARE.", -" ", -"The above copyright notice, permissions notice, and disclaimer may not be", -"removed, altered, or obscured and shall be included in all copies of the", -"C-Kermit software. The Trustees of Columbia University in the City of", -"New York reserve the right to revoke this permission if any of the terms", -"of use set forth above are breached.", -#endif /* OS2 */ -#endif /* pdp11 */ - -#ifdef OS2 -"Portions Copyright (C) 1995, Oy Online Solutions Ltd., Jyvaskyla, Finland.", -#endif /* OS2 */ - -#ifdef CK_AUTHENTICATION -"Portions Copyright (C) 1990, Massachusetts Institute of Technology.", -#ifdef CK_ENCRYPTION -"Portions Copyright (C) 1991, 1993 Regents of the University of California.", -"Portions Copyright (C) 1991, 1992, 1993, 1994, 1995 by AT&T.", -"Portions Copyright (C) 1995, 1997, Eric Young .", -#endif /* CK_ENCRYPTION */ -#ifdef CK_SRP -"Portions Copyright (C) 1997, Stanford University.", -#endif /* CK_SRP */ -#endif /* CK_AUTHENTICATION */ - -#ifndef pdp11 -" ", -"For further information, contact the Kermit Project, Columbia University,", -"612 West 115th Street, New York NY 10025-7799, USA; phone +1 (212) 854 3703,", -"fax +1 (212) 663 8202 or +1 (212) 662 6442, email kermit@columbia.edu,", -"Web http://www.columbia.edu/kermit/ or http://www.kermit-project.org/.", -#endif /* pdp11 */ -""}; - -/* -DOCUMENTATION: - - "Using C-Kermit" by Frank da Cruz and Christine M. Gianone, - Digital Press / Butterworth-Heinemann, Woburn MA, USA. - Second edition (1997), ISBN 1-55558-164-1. - Order from Digital Press: +1 (800) 366-2665 - Or from Columbia University: +1 (212) 854-3703 - -For Kermit 95, also: - - "Kermit 95" by Christine M. Gianone and Frank da Cruz, - Manning Publications, Greenwich CT, USA (1998) - Online. - -ACKNOWLEDGMENTS: - - The Kermit file transfer protocol was developed at the Columbia University - Center for Computing Activities (CUCCA), which was since renamed to Columbia - University Academic Information Systems (AcIS). Kermit is named after - Kermit the Frog, star of the television series THE MUPPET SHOW; the name is - used by permission of Henson Associates, Inc. - - Thanks to at least the following people for their contributions to this - program over the years, and apologies to anyone who was inadvertantly - omitted: - - Chris Adie, Edinburgh U, Scotland (OS/2) - Robert Adsett, University of Waterloo, Canada - Larry Afrin, Clemson U - Russ Allbery, Stanford U - Jeffrey Altman, Columbia University - Greg Andrews, Telebit Corp - Barry Archer, U of Missouri - Robert Andersson, International Systems A/S, Oslo, Norway - Chris Armstrong, Brookhaven National Lab (OS/2) - William Bader, Software Consulting Services, Nazareth, PA - Fuat Baran, Columbia U - Stan Barber, Rice U - Jim Barbour, U of Colorado - Donn Baumgartner, Dell - Nelson Beebe, U of Utah - Gerry Belanger, Cognitronics - Karl Berry, UMB - Mark Berryman, SAIC - Dean W Bettinger, SUNY - Gary Bilkus - Peter Binderup, Denmark - David Bolen, Advanced Networks and Services, Inc. - Marc Boucher, U of Montreal - Charles Brooks, EDN - Bob Brown - Mike Brown, Purdue U - Jack Bryans, California State U at Long Beach - Mark Buda, DEC (VMS) - Fernando Cabral, Padrao iX, Brasilia - Bjorn Carlsson, Stockholm University Computer Centre QZ, Sweden - Bill Catchings, (formerly of) Columbia U - Bob Cattani, Columbia U CS Dept - Davide Cervone, Rochester U - Seth Chaiklin, Denmark - John Chandler, Harvard U / Smithsonian Astronomical Observatory - Bernard Chen, UCLA - Andrew A Chernov, RELCOM Team, Moscow - John L Chmielewski, AT&T, Lisle, IL - Howard Chu, U of Michigan - Bill Coalson, McDonnell Douglas - Bertie Coopersmith, London - Chet Creider, U of Western Ontario - Alan Crosswell, Columbia U - Jeff Damens, (formerly of) Columbia U - Mark Davies, Bath U, UK - Sin-itirou Dezawa, Fujifilm, Japan - Joe R. Doupnik, Utah State U - Frank Dreano, Honeywell - John Dunlap, U of Washington - Alex Dupuy, SMART.COM - David Dyck, John Fluke Mfg Co. - Stefaan A. Eeckels, Eurokom, Luxembourg - Nick Efthymiou - Paul Eggert, Twin Sun, Inc., El Segundo, CA - Bernie Eiben, DEC - Peter Eichhorn, Assyst International - Kristoffer Eriksson, Peridot Konsult AB, Oerebro, Sweden - John R. Evans, IRS, Kansas City - Glenn Everhart, RCA Labs - Charlie Finan, Cray Research - Herm Fischer, Encino, CA (extensive contributions to version 4.0) - Carl Fongheiser, CWRU - Mike Freeman, Bonneville Power Authority - Marcello Frutig, Catholic University, Sao Paulo, Brazil (X.25 support) - Hirofumi Fujii, Japan Nat'l Lab for High Energy Physics, Tokyo (Kanji) - Chuck Fuller, Westinghouse Corporate Computer Services - Andy Fyfe, Caltech - Christine M. Gianone, Columbia U - John Gilmore, UC Berkeley - Madhusudan Giyyarpuram, HP - Rainer Glaschick, Siemens AG, Paderborn - William H. Glass - German Goldszmidt, IBM - Chuck Goodhart, NASA - Alistair Gorman, New Zealand - Richard Gration, ADFA, Australia - Chris Green, Essex U, UK - Alan Grieg, Dundee Tech, Scotland - Yekta Gursel, MIT - Jim Guyton, Rand Corp - Michael Haertel - Bruno Haible - Bob Hain, UMN - Marion Hakanson, ORST - Richard Hamilton - John Hamilston, Iowa State U - Simon Hania, Netherlands - Stan Hanks, Rice U. - Ken Harrenstein, SRI - Eugenia Harris, Data General (AOS/VS) - David Harrison, Kingston Warren Corp - Lucas Hart, Oregon State University - James Harvey, Indiana/Purdue U (VMS) - Rob Healey - Chuck Hedrick, Rutgers U - Ron Heiby, Technical Systems Division, Motorola Computer Group - Steve Hemminger, Tektronix - Christian Hemsing, RWTH Aachen, Germany (OS-9) - Randolph Herber, US DOE, - Andrew Herbert, Monash Univ, Australia - Marcus Herbert, Germany - Mike Hickey, ITI - Dan Hildebrand, QNX Software Systems Inc, Kanata, ON (QNX) - R E Hill - Stephan Hoffman-Emden - Sven Holmstrom, ABB Utilities AB, Sweden - Bill Homer, Cray Research - Ray Hunter, The Wollongong Group - Randy Huntziger, National Library of Medicine - Larry Jacobs, Transarc - Steve Jenkins, Lancaster University, UK - Dave Johnson, Gradient Technologies - Mark B Johnson, Apple Computer - Jyke Jokinen, Tampere University of Technology, Finland (QNX) - Eric F Jones, AT&T - Luke Jones, AT&T - Peter Jones, U of Quebec Montreal - Phil Julian, SAS Institute - Peter Kabal, U of Quebec - Mic Kaczmarczik, U of Texas at Austin - Sergey Kartashoff, Inst. of Precise Mechanics & Computer Equipment, Moscow - Howie Kaye, Columbia U - Rob Kedoin, Linotype Co, Hauppauge, NY (OS/2) - Phil Keegstra - Mark Kennedy, IBM - Terry Kennedy, St Peter's College, Jersey City, NJ (VMS and more) - "Carlo Kid", Technical University of Delft, Netherlands - Tim Kientzle - Paul Kimoto, Cornell U - Douglas Kingston, morgan.com - Lawrence Kirby, Wiltshire, UK - Tom Kloos, Sequent Computer Systems - Jim Knutson, U of Texas at Austin - John T. Kohl (BSDI) - Scott Kramer, SRI International, Menlo Park, CA - John Kraynack, US Postal Service - David Kricker, Encore Computer - Thomas Krueger, UWM - Bo Kullmar, ABC Klubben, Stockholm, and Central Bank of Sweden, Kista - R. Brad Kummer, AT&T Bell Labs, Atlanta, GA - John Kunze, UC Berkeley - David Lane, BSSI / BellSouth (Stratus VOS, X.25) - Bob Larson, USC (OS-9) - Bert Laverman, Groningen U, Netherlands - Steve Layton - David Lawyer, UC Irvine - David LeVine, National Semiconductor Corporation - Daniel S. Lewart, UIUC - S.O. Lidie, Lehigh U - Tor Lillqvist, Helsinki U, Finland - David-Michael Lincke, U of St Gallen, Switzerland - Robert Lipe (for SCO makefile entries & advice) - Dean Long - Mike Long, Analog Devices, Norwood MA - Kevin Lowey, U of Saskatchewan (OS/2) - Andy Lowry, Columbia U - James Lummel, Caprica Telecomputing Resources (QNX) - David MacKenzie, Environmental Defense Fund, U of Maryland - John Mackin, University of Sidney, Australia - Martin Maclaren, Bath U, UK - Chris Maio, Columbia U CS Dept - Montserrat Mane, HP, Grenoble, France - Fulvio Marino, Olivetti, Ivrea, Italy - Arthur Marsh, dircsa.org.au - Peter Mauzey, Lucent Technologies - Tye McQueen, Utah State U - Ted Medin - Hellmuth Michaelis, Hanseatischer Computerservice GmbH, Hamburg, Germany - Leslie Mikesell, American Farm Bureau - Todd Miller, Courtesan Consulting - Martin Minow, DEC (VMS) - Pawan Misra, Bellcore - Ken Mizialko, IBM, Manassas, VA - Wolfgang Moeller, DECUS Germany - Ray Moody, Purdue U - Bruce J Moore, Allen-Bradley Co, Highland Heights, OH (Atari ST) - Steve Morley, Convex - Peter Mossel, Columbia U - Tony Movshon, NYU - Lou Muccioli, Swanson Analysis Systems - Dan Murphy - Neal P. Murphy, Harsof Systems, Wonder Lake IL - Gary Mussar - John Nall, FSU - Jack Nelson, U of Pittsburgh - Jim Noble, Planning Research Corporation (Macintosh) - Ian O'Brien, Bath U, UK - Melissa O'Neill, SFU - John Owens - Thomas Pinkl, Health Business Systems Inc. - Michael Pins, Iowa Computer Aided Engineering Network - Andre' Pirard, University of Liege, Belgium - Paul Placeway, Ohio State U - Piet W. Plomp, ICCE, Groningen University, Netherlands - Ken Poulton, HP Labs - Manfred Prange, Oakland U - Christopher Pratt, APV Baker, UK - Frank Prindle, NADC - Tony Querubin, U of Hawaii - Jean-Pierre Radley - Anton Rang - Scott Ribe - Alan Robiette, Oxford University, UK - Michel Robitaille, U of Montreal (Mac) - Huw Rogers, Schweizerische Kreditanstalt, Zuerich - Nigel Roles, Cambridge, England - Kai Uwe Rommel, Technische Universitaet Muenchen (OS/2) - Larry Rosenman (Amiga) - Jay Rouman, U of Michigan - Jack Rouse, SAS Institute (Data General and/or Apollo) - Stew Rubenstein, Harvard U (VMS) - Gerhard Rueckle, FH Darmstadt, Fb. E/Automatisierungstechnik - John Santos, EG&H - Bill Schilit, Columbia U - Ulli Schlueter, RWTH Aachen, Germany (OS-9, etc) - Michael Schmidt, U of Paderborn, Germany - Eric Schnoebelen, Convex - Benn Schreiber, DEC - Dan Schullman, DEC (modems, DIAL command, etc) - John Schultz, 3M - Steven Schultz, Contel (PDP-11) - APPP Scorer, Leeds Polytechnic, UK - Gordon Scott, Micro Focus, Newbury UK - Gisbert W. Selke, WIdO, Bonn, Germany - David Singer, IBM Almaden Research Labs - David Sizeland, U of London Medical School - Fridrik Skulason, Iceland - Rick Sladkey (Linux) - Dave Slate - Bradley Smith, UCLA - Fred Smith, Merk / Computrition - Richard S Smith, Cal State - Ryan Stanisfer, UNT - Bertil Stenstroem, Stockholm University Computer Centre (QZ), Sweden - James Sturdevant, CAP GEMENI AMERICA, Minneapolis - Peter Svanberg, Royal Techn. HS, Sweden - James R. Swenson, Accu-Weather, Inc. - Ted T'so, MIT (Linux) - Andy Tanenbaum, Vrije U, Amsterdam, Netherlands - Glen Thobe - Markku Toijala, Helsinki U of Technology - Teemu Torma, Helsinki U of Technology - Linus Torvalds, Helsinki - Rick Troxel, NIH - Warren Tucker, Tridom Corp, Mountain Park, GA - Dave Tweten, AMES-NAS - G Uddeborg, Sweden - Walter Underwood, Ford Aerospace - Pieter Van Der Linden, Centre Mondial, Paris - Ge van Geldorp, Netherlands - Fred van Kempen, MINIX User Group, Voorhout, Netherlands - Wayne Van Pelt, GE/CRD - Mark Vasoll, Oklahoma State U (V7 UNIX) - Konstantin Vinogradov, ICSTI, Moscow - Paul Vixie, DEC - Bernie Volz, Process Software - Eduard Vopicka, Prague University of Economics, Czech Republic - Dimitri Vulis, CUNY - Roger Wallace, Raytheon - Stephen Walton, Calif State U, Northridge (Amiga) - Jamie Watson, Adasoft, Switzerland (AIX) - Rick Watson, U of Texas (Macintosh) - Scott Weikart (Association for Progressive Communications) - Robert Weiner, Programming Plus, New York City - Lauren Weinstein, Vortex Technlogy - David Wexelblat, AT&T - Clark Wierda, Illuminati Online - Joachim Wiesel, U of Karlsruhe - Lon Willett, U of Utah - Michael Williams, UCLA - Nate Williams, U of Montana - David Wilson - Joellen Windsor, U of Arizona - Patrick Wolfe, Kuck & Associates, Inc. - Gregg Wonderly, Oklahoma State U (V7 UNIX) - Farrell Woods, Concurrent (formerly Masscomp) - Dave Woolley, CAP Communication Systems, London - Jack Woolley, SCT Corp - Frank Wortner - Ken Yap, formerly of U of Rochester - John Zeeff, Ann Arbor, MI -*/ - -#include "ckcker.h" /* Kermit symbols */ -#include "ckcnet.h" /* Network symbols */ - -#ifdef CK_SSL -#include "ck_ssl.h" -#endif /* CK_SSL */ - -#ifndef NOSPL -#include "ckuusr.h" -#endif /* NOSPL */ - -#ifdef OS2ONLY -#define INCL_VIO /* Needed for ckocon.h */ -#include -#undef COMMENT -#endif /* OS2ONLY */ - -#ifdef NT -#include -#include -#include "ckntap.h" -#endif /* NT */ - -#ifndef NOSERVER -/* Text message definitions.. each should be 256 chars long, or less. */ -#ifdef MINIX -char *srvtxt = "\r\n\ -Entering server mode.\r\n\0"; -#else -#ifdef OLDMSG -/* - It seems there was a large installation that was using C-Kermit 5A(165) - or thereabouts, which had deployed thousands of MS-DOS Kermit scripts in - scattered locations that looked for strings in the old server message, - which changed in 5A(183), August 1992. -*/ -char *srvtxt = "\r\n\ -C-Kermit server starting. Return to your local machine by typing\r\n\ -its escape sequence for closing the connection, and issue further\r\n\ -commands from there. To shut down the C-Kermit server, issue the\r\n\ -FINISH or BYE command and then reconnect.\n\ -\r\n\0"; -#else -#ifdef OSK -char *srvtxt = "\r\012\ -Entering server mode. If your local Kermit software is menu driven, use\r\012\ -the menus to send commands to the server. Otherwise, enter the escape\r\012\ -sequence to return to your local Kermit prompt and issue commands from\r\012\ -there. Use SEND and GET for file transfer. Use REMOTE HELP for a list of\r\012\ -other available services. Use BYE or FINISH to end server mode.\r\012\0"; -#else /* UNIX, VMS, AOS/VS, and all others */ -char *srvtxt = "\r\n\ -Entering server mode. If your local Kermit software is menu driven, use\r\n\ -the menus to send commands to the server. Otherwise, enter the escape\r\n\ -sequence to return to your local Kermit prompt and issue commands from\r\n\ -there. Use SEND and GET for file transfer. Use REMOTE HELP for a list of\r\n\ -other available services. Use BYE or FINISH to end server mode.\r\n\0"; -#endif /* OSK */ -#endif /* OLDMSG */ -#endif /* MINIX */ -#else /* server mode disabled */ -char *srvtxt = ""; -#endif /* NOSERVER */ - -int initflg = 0; /* sysinit() has executed... */ -int howcalled = I_AM_KERMIT; /* How I was called */ -int hmtopline = 0; -int quitting = 0; /* I'm in the act of quitting */ - -#ifdef IKSDCONF -char * iksdconf = IKSDCONF; /* IKSD configuration file */ -int iksdcf = 0; /* Has IKSD c.f. been processed? */ -#endif /* IKSDCONF */ - -int srvcdmsg = 0; /* [Server] CD message */ -char * cdmsgfile[8] = { NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL }; -char * cdmsgstr = NULL; -char * ckcdpath = NULL; - -#ifdef NLCHAR /* Text-file line terminator */ -CHAR feol = NLCHAR; -#else -CHAR feol = 0; -#endif /* NLCHAR */ - -int fblksiz = DBLKSIZ; /* File blocksize */ -int frecl = DLRECL; /* File record length */ -int frecfm = XYFF_S; /* File record format (default = stream) */ -int forg = XYFO_S; /* File organization (sequential) */ -int fcctrl = XYFP_N; /* File carriage control (ctrl chars) */ -int filecase = FILECASE; /* Case matters in filenames */ -int stathack = 1; /* Fast directory lookups by default */ - -char uidbuf[UIDBUFLEN] = { NUL, NUL }; /* User ID buffer */ -int cfilef = 0; /* Application ("kerbang") file flag */ -char cmdfil[CKMAXPATH + 1] = { NUL, NUL }; /* Application file name */ -int haveurl = 0; /* URL given on command line */ - -#ifndef NOXFER -/* Multi-protocol support */ - -struct ck_p ptab[NPROTOS] = { /* Initialize the Kermit part ... */ - { "Kermit", - DRPSIZ, /* Receive packet size */ - DSPSIZ, /* Send packet size */ - 0, /* Send-packet-size-set flag */ - DFWSIZ, /* Window size */ - -#ifdef NEWDEFAULTS - PX_CAU, /* Control char unprefixing... */ -#else - PX_ALL, -#endif /* NEWDEFAULTS */ - -#ifdef VMS /* Default filename collision action */ - XYFX_X, /* REPLACE for VAX/VMS */ -#else - XYFX_B, /* BACKUP for everybody else */ -#endif /* VMS */ - -#ifdef OS2 /* Flag for file name conversion */ - XYFN_L, /* Literal for OS2 */ -#else - XYFN_C, /* Converted for others */ -#endif /* OS2 */ - - PATH_OFF, /* Send pathnames OFF */ - PATH_AUTO, /* Receive pathnames AUTO */ - NULL, /* Host receive initiation string (binary) */ - NULL, /* Host receive initiation string (text) */ - NULL, /* Host server string */ - NULL, /* External protocol send command (binary) */ - NULL, /* External protocol send command (text) */ - NULL, /* External protocol receive command (bin) */ - NULL } /* External protocol receive command (txt) */ -#ifdef CK_XYZ -, -{"XMODEM", 128,128,-1,-1, 1,-1,-1,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL}, -{"XMODEM-CRC",128,128,-1,-1, -1,-1,-1,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL}, -{"YMODEM", -1, -1,-1,-1, -1,-1,-1,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL}, -{"YMODEM-g", -1, -1,-1,-1, -1,-1,-1,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL}, -{"ZMODEM", -1, -1,-1,-1,PX_WIL,-1,-1,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL}, -{"Other", -1, -1,-1,-1, -1,-1,-1,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL} -#endif /* CK_XYZ */ -}; - -/* Declarations for Send-Init Parameters */ - -int spsiz = DSPSIZ, /* Current packet size to send */ - spmax = DSPSIZ, /* Biggest packet size we can send */ - lastspmax = DSPSIZ, /* Send-packet size last used */ - spsizr = DSPSIZ, /* Send-packet size requested */ - spsizf = 0, /* Flag to override size negotiation */ - rpsiz = DRPSIZ, /* Biggest we want to receive */ - urpsiz = DRPSIZ, /* User-requested receive pkt size */ - maxrps = MAXRP, /* Maximum incoming long packet size */ - maxsps = MAXSP, /* Maximum outbound l.p. size */ - maxtry = MAXTRY, /* Maximum retries per packet */ - wslots = 1, /* Window size currently in use */ - wslotr = DFWSIZ, /* Window size from SET WINDOW */ - wslotn = 1, /* Window size negotiated in S-pkt */ - timeouts = 0, /* For statistics reporting */ - spackets = 0, /* ... */ - rpackets = 0, /* ... */ - retrans = 0, /* ... */ - crunched = 0, /* ... */ - wmax = 0, /* ... */ - wcur = 0, /* ... */ - srvidl = 0, /* Server idle timeout */ - srvdis = 1, /* Server file xfer display */ - srvtim = DSRVTIM, /* Server command wait timeout */ - srvping = 1, /* Server keepalive */ -/* - timint is the timeout interval I use when waiting for a packet. - pkttim is the SET RECEIVE TIMEOUT value, sent to the other Kermit. - rtimo is the SET SEND TIMEOUT value. rtimo is the initial value of - timint. timint is changed by the value in the incoming negotiation - packet unless a SET SEND TIMEOUT command was given. -*/ - timint = DMYTIM, /* Timeout interval I use */ - pkttim = URTIME, /* Timeout I want you to use */ - rtimo = DMYTIM, /* Normal packet wait timeout */ - timef = 0, /* Flag to override what you ask */ -#ifdef CK_TIMERS - rttflg = 1, /* Use dynamic round-trip timers */ -#else - rttflg = 0, /* Use fixed timer */ -#endif /* CK_TIMERS */ - mintime = 1, /* Minimum timeout */ - maxtime = 0, /* Maximum timeout */ - - npad = MYPADN, /* How much padding to send */ - mypadn = MYPADN, /* How much padding to ask for */ - bctr = DFBCT, /* Block check type requested */ - bctu = 1, /* Block check type used */ - bctl = 1, /* Block check length */ - c_save = -1, /* Block check saving and restoring */ - ss_save = -1, /* Slow-start saving and restoring */ - ebq = MYEBQ, /* 8th bit prefix */ - ebqflg = 0, /* 8th-bit quoting flag */ - rqf = -1, /* Flag used in 8bq negotiation */ - rq = 0, /* Received 8bq bid */ - sq = 'Y', /* Sent 8bq bid */ - rpt = 0, /* Repeat count */ - rptq = MYRPTQ, /* Repeat prefix */ - rptflg = 0, /* Repeat processing flag */ - rptena = 1, /* Repeat processing enabled */ - xfrcan = 1, /* Transfer cancellation enabled */ - xfrint = 1, /* Transfer interruption enabled */ - xfrchr = 3, /* Transfer cancel char = Ctrl-C */ - xfrnum = 3, /* Need three of them by default */ - g_xfrxla = -1; - char * xfrmsg = NULL; /* Message for f.t. display screen */ -#endif /* NOXFER */ - -#ifdef NOCSETS -int xfrxla = 0; /* Character-set translation */ -#else -int xfrxla = 1; /* enabled or disabled */ -#endif /* NOCSETS */ - -#ifndef NOXFER -int epktflg = 0; /* E-PACKET command active */ - -int capas = 9, /* Position of Capabilities */ - lpcapb = 2, /* Long Packet capability */ - lpcapr = 1, /* requested */ - lpcapu = 0, /* used */ - swcapb = 4, /* Sliding Window capability */ - swcapr = 1, /* requested (allowed) */ - swcapu = 0, /* used */ - atcapb = 8, /* Attribute capability */ - atcapr = 1, /* requested */ - atcapu = 0, /* used */ - rscapb = 16, /* RESEND capability */ - rscapr = 1, /* requested by default */ - rscapu = 0, /* used */ - lscapb = 32, /* Locking Shift capability */ - lscapr = 1, /* requested by default */ - lscapu = 0; /* used */ - -/* Flags for whether to use particular attributes */ - -int atenci = 1, /* Encoding in */ - atenco = 1, /* Encoding out */ - atdati = 1, /* Date in */ - atdato = 1, /* Date out */ - atdisi = 1, /* Disposition in/out */ - atdiso = 1, - atleni = 1, /* Length in/out (both kinds) */ - atleno = 1, - atblki = 1, /* Blocksize in/out */ - atblko = 1, - attypi = 1, /* File type in/out */ - attypo = 1, - atsidi = 1, /* System ID in/out */ - atsido = 1, - atsysi = 1, /* System-dependent parameters in/out */ - atsyso = 1; - -int dispos = 0; /* Disposition */ - -#ifdef CK_PERMS -int atlpri = 1, - atlpro = 1, - atgpri = 1, - atgpro = 1; -#endif /* CK_PERMS */ - -int atfrmi = 1, /* Record Format in/out */ - atfrmo = 1; - -#ifdef STRATUS -int atcrei = 1, /* Creator ID in/out */ - atcreo = 1, - atacti = 1, /* Account in/out */ - atacto = 1; -#endif /* STRATUS */ - -int sprmlen = -1; /* Send/Receive protocol parameter */ -int rprmlen = -1; /* string length limits */ -int sendipkts = 1; /* Send I packets */ - -CHAR padch = MYPADC, /* Padding character to send */ - mypadc = MYPADC, /* Padding character to ask for */ - seol = MYEOL, /* End-Of-Line character to send */ - eol = MYEOL, /* End-Of-Line character to look for */ - ctlq = CTLQ, /* Control prefix in incoming data */ - myctlq = CTLQ, /* Outbound control character prefix */ - myrptq = MYRPTQ; /* Repeat prefix I want to use */ - -int rptmin = 3; /* Repeat-count minimum */ - -int usepipes = 0, /* Used for xfer to/from pipes */ - g_usepipes = -1; - -char * filefile = NULL; /* File containing list of filenames */ -/* CD message filename list */ - -char whoareu[16] = { NUL, NUL }; /* System ID of other Kermit */ -int sysindex = -1; /* and index to its system ID struct */ -int myindex = -1; -int wearealike = 0; /* 2 Kermits have compatible sysids */ -char * cksysid = /* My system ID */ -#ifdef UNIX - "U1" -#else -#ifdef VMS - "D7" -#else -#ifdef OSK - "UD" -#else -#ifdef AMIGA - "L3" -#else -#ifdef MAC - "A3" -#else -#ifdef OS2 -#ifdef NT - "UN" -#else /* NT */ - "UO" -#endif /* NT */ -#else /* OS2 */ -#ifdef datageneral - "F3" -#else -#ifdef GEMDOS - "K2" -#else -#ifdef STRATUS - "MV" -#else - "" -#endif /* STRATUS */ -#endif /* GEMDOS */ -#endif /* datageneral */ -#endif /* OS2 */ -#endif /* MAC */ -#endif /* AMIGA */ -#endif /* OSK */ -#endif /* VMS */ -#endif /* UNIX */ - ; - -int oopts = -1; /* O-Packet Options */ -int omode = -1; /* O-Packet Transfer Mode */ -int oname = -1; /* O-Packet Filename Options */ -int opath = -1; /* O-Packet Pathname Options */ - -struct zattr iattr; /* Incoming file attributes */ - -#ifdef VMS -/* VMS labeled file default options - name only. */ -int lf_opts = LBL_NAM; -#else -#ifdef OS2 -/* OS/2 labeled file default options, all attributes but archived. */ -unsigned long int lf_opts = LBL_EXT|LBL_HID|LBL_RO|LBL_SYS; -#else -int lf_opts = 0; -#endif /* OS2 */ -#endif /* VMS */ - -/* Packet-related variables */ - -int pktnum = 0, /* Current packet number */ - sndtyp = 0, /* Type of packet just sent */ - rcvtyp = 0, /* Type of packet just received */ - rsn, /* Received packet sequence number */ - rln, /* Received packet length */ - size, /* Current size of output pkt data */ - osize, /* Previous output packet data size */ - maxsize, /* Max size for building data field */ - spktl = 0, /* Length packet being sent */ - rpktl = 0, /* Length of packet just received */ - pktpaus = 0, /* Interpacket pause interval, msec */ - rprintf, /* REMOTE PRINT flag */ - rmailf, /* MAIL flag */ - xferstat = -1, /* Status of last transaction */ - filestatus = 0; /* Status of last file transfer */ - -CHAR pktmsgbuf[PKTMSGLEN+1]; -CHAR *epktmsg = pktmsgbuf; - -#ifdef pdp11 -int srvcmdlen = MAXRP; /* srvcmd buffer length */ -#else -#ifdef DYNAMIC -int srvcmdlen = MAXRP; -#else -int srvcmdlen = 0; -#endif /* DYNAMIC */ -#endif /* pdp11 */ - -CHAR -#ifdef pdp11 - srvcmdbuf[MAXRP+4], - *srvcmd = srvcmdbuf, -#else -#ifdef DYNAMIC - *srvcmd = (CHAR *)0, /* Where to decode server command */ -#else - srvcmdbuf[MAXRP+4], - *srvcmd = srvcmdbuf, -#endif /* DYNAMIC */ -#endif /* pdp11 */ - padbuf[96], /* Buffer for send-padding */ - *recpkt, - *rdatap, /* Pointer to received packet data */ - *data = (CHAR *)0, /* Pointer to send-packet data */ - *srvptr, /* Pointer to srvcmd */ - mystch = SOH, /* Outbound packet-start character */ - stchr = SOH; /* Incoming packet-start character */ - -/* File-related variables */ - -#ifndef NOMSEND /* Multiple SEND */ -struct filelist * filehead = NULL; /* SEND list */ -struct filelist * filetail = NULL; -struct filelist * filenext = NULL; -int addlist = 0; -#endif /* NOMSEND */ - -char filnam[CKMAXPATH + 1]; /* Name of current file. */ -char ofilnam[CKMAXPATH + 1]; /* Original name. */ - -int pipesend = 0; /* Nonzero if sending from pipe */ -#ifdef PIPESEND -char * sndfilter = NULL; /* Send and receive filters */ -char * rcvfilter = NULL; -#endif /* PIPESEND */ - -char ** sndarray = NULL; /* SEND /ARRAY pointer and range */ -#ifndef NOSPL -int sndxlo = -1, sndxhi = -1, sndxin = -1; -#endif /* NOSPL */ -#endif /* NOXFER */ - -#ifndef NOSERVER -int ngetpath = 0; /* GET search path */ -int fromgetpath = 0; -char * getpath[MAXGETPATH]; -char * x_user = NULL; /* Server login information */ -char * x_passwd = NULL; -char * x_acct = NULL; -#endif /* NOSERVER */ - -int x_login = 0; /* Login required */ -int x_logged = 0; /* User is logged in */ - -extern int timelimit; - -#ifdef CK_LOGIN -int logintimo = 300; /* Login timeout */ -char * userfile = NULL; /* Forbidden user file */ -#endif /* CK_LOGIN */ -#ifdef IKSD -char * anonfile = NULL; /* Anonymous login init file */ -char * anonroot = NULL; /* Anonymous file-system root */ -int iks_timo = 300; /* 5 minutes idle timo */ -int iks_retry = 3; /* 3 attempts at login */ -#endif /* IKSD */ - -#ifdef CKSYSLOG -extern VOID zsyslog(); -extern int ckxlogging, ckxsyslog; -#endif /* CKSYSLOG */ - -int nzxopts = 0; /* Options for nzxpand() */ -int nfils = 0; /* Number of files in file group */ -long fsize = 0L; /* Size of current file */ -#ifdef UNIX -int wildxpand = 0; /* Who expands wildcards */ -#else /* UNIX */ -#ifdef STRATUS -int wildxpand = 1; -#endif /* STRATUS */ -#endif /* UNIX */ -#ifdef UNIXOROSK -int matchdot = 0; /* Whether to match dot files */ -#else -int matchdot = 1; -#endif /* UNIXOROSK */ -int matchfifo = 0; /* Whether to match FIFO "files" */ -int clfils = 0; /* Flag for command-line files */ -int stayflg = 0; /* Flag for "stay", i.e. "-S" */ -int xfinish = 0; /* Flag for FINISH = EXIT */ -long ztusec = -1L; /* Used with ztime() */ -long ztmsec = -1L; /* Ditto */ - -/* Communication device / connection variables */ - -char ttname[TTNAMLEN+1]; /* Name of communication device */ - -#ifdef MAC -int connected = 0; /* True if connected */ -int startconnected; /* initial state of connected */ -#endif /* MAC */ - -long speed = -1L; /* Communication device speed */ -int wasclosed = 0; /* Connection was just closed */ -int whyclosed = WC_REMO; /* why it was closed */ -int qnxportlock = 0; /* QNX port locking on/off */ - -#ifndef CLSONDISC -#define CLSONDISC 0 -#endif /* CLSONDISC */ - -int cxflow[CXT_MAX+1]; /* See initflow() */ - -#ifndef NOSHOW -char * floname[] = { /* Flow control names */ - "none", "xon/xoff", "rts/cts", "dtr/cd", "etx/ack", "string", - "xxx1", "xxx2", "dtr/cts", "keep", "auto" -}; -int nfloname = (sizeof(floname) / sizeof(char *)); - -char * cxname[] = { /* Connection type names */ - "remote", "direct-serial", "modem", "tcp/ip", "x.25", "decnet", - "lat", "netbios", "named-pipe", "ssh", "pipe" -}; -int ncxname = (sizeof(cxname) / sizeof(char *)); -#endif /* NOSHOW */ - -int parity = DEFPAR, /* Parity specified, 0,'e','o',etc */ - hwparity = 0, /* Hardware parity for serial port */ - stopbits = -1, /* Stop bits for serial port */ - clsondisc = CLSONDISC, /* Serial port close on disconnect */ - autopar = 0, /* Automatic parity change flag */ - sosi = 0, /* Shift-In/Out flag */ - flow = 0, /* Flow control (see initflow()) */ - autoflow = 1, /* Automatic flow control */ - turn = 0, /* Line turnaround handshake flag */ - turnch = XON, /* Line turnaround character */ - duplex = 0, /* Duplex, full by default */ - escape = DFESC, /* Escape character for connect */ - ckdelay = DDELAY, /* Initial delay before sending */ - tnlm = 0; /* Terminal newline mode */ - -/* Networks for SET HOST */ - -#ifdef BIGBUFOK -#define MYHOSTL 1024 -#else -#define MYHOSTL 100 -#endif /* BIGBUFOK */ - -char myhost[MYHOSTL]; /* Local host name */ -int network = 0; /* Network vs serial connection */ -int inserver = 0; /* Running as an Internet server */ -int isguest = 0; /* User is anonymous */ -char * clienthost = NULL; /* Peer host name or address */ -int tcp_incoming = 0; /* Incoming TCP connection? */ - -#ifdef NETCONN -#ifdef TCPSOCKET -int nettype = NET_TCPB; /* Default network type */ -#else -#ifdef SUNX25 -int nettype = NET_SX25; -#else -#ifdef IBMX25 -int nettype = NET_IX25; -#else -#ifdef HPX25 -int nettype = NET_HX25; -#else -#ifdef STRATUSX25 -int nettype = NET_VX25; -#else -#ifdef DECNET -int nettype = NET_DEC; -#else -#ifdef SUPERLAT -int nettype = NET_SLAT; -#else -int nettype = NET_NONE; -#endif /* SUPERLAT */ -#endif /* DECNET */ -#endif /* STRATUSX25 */ -#endif /* HPX25 */ -#endif /* IBMX25 */ -#endif /* SUNX25 */ -#endif /* TCPSOCKET */ -#else /* NETCONN */ -int nettype = NET_NONE; -#endif /* NETCONN */ - -#ifdef ANYX25 -int revcall = 0; /* X.25 reverse call not selected */ -int closgr = -1; /* X.25 closed user group */ -int cudata = 0; /* X.25 call user data not specified */ -char udata[MAXCUDATA]; /* X.25 call user data */ - -#ifdef IBMX25 -/* - I was unable to find any pre-defined MAX values for x25 addresses - the - addresses that I've seen have been around 10-12 characters 32 is probably - enough, 64 is hopefully safe for everyone. -*/ - x25addr_t local_nua = {'\0'}; /* local x.25 address */ - x25addr_t remote_nua = {'\0'}; /* remote x.25 address */ - char x25name[32] = {'\0'}; /* x25 device name, sx25a0 or sx25a1 */ - char x25dev[64] = "/dev/x25pkt"; /* x25 device in /dev */ - int x25port = 0; /* port used for X.25 - AIX only */ -#endif /* IBMX25 */ - -#ifndef IBMX25 -/* - This condition is unrelated to the above IBMX25 condition. - IBM X.25 doesn't have PAD support. -*/ - CHAR padparms[MAXPADPARMS+1]; /* X.3 parameters */ -#endif /* IBMX25 */ -#endif /* ANYX25 */ - -/* Other items */ - -int isinterrupted = 0; /* Used in exception handling */ -int what = W_INIT; /* What I am doing */ -int lastxfer = 0; /* Last transfer (send or receive) */ - -extern int mdmtyp; /* Modem (/network) type */ - -#ifdef NT -extern int StartedFromDialer; -#ifdef NTSIG -extern int TlsIndex; -#endif /* NTSIG */ -#ifdef NTASM -unsigned long ESPToRestore; /* Ditto */ -#endif /* NTASM */ -#endif /* NT */ - -#ifdef OS2PM -int os2pm = 0; /* OS/2 Presentation Manager flag */ -#endif /* OS2PM */ - -/* Terminal screen size, if known, -1 means unknown. */ - -#ifdef OS2 -#include "ckocon.h" -#ifdef KUI -int tt_rows[VNUM] = {24,24,25,1}; /* Rows (height) */ -int tt_cols[VNUM] = {80,80,80,80}; /* Columns (width) */ -int cmd_rows = 24, cmd_cols = 80; /* Command/console screen dimensions */ -#else /* KUI */ -int tt_rows[VNUM] = {-1,24,25,1}; /* Rows (height) */ -int tt_cols[VNUM] = {-1,80,80,80}; /* Columns (width) */ -int cmd_rows = -1, cmd_cols = -1; /* Command/console screen dimensions */ -#endif /* KUI */ -int k95stdio = 0; /* Stdio threads */ -int tt_bell = XYB_AUD | XYB_SYS; /* BELL AUDIBLE (system sounds) */ -#else /* OS2 */ -int tt_rows = -1; /* Rows (height) */ -int tt_cols = -1; /* Columns (width) */ -int cmd_rows = 24, cmd_cols = 80; /* Command/console screen dimensions */ -int tt_bell = XYB_AUD; /* BELL ON */ -#endif /* OS2 */ - -int tt_print = 0; /* Transparent print disabled */ -int tt_escape = 1; /* Escaping back is enabled */ -int tt_scroll = 1; /* Scrolling operations are enabled */ - -int tn_exit = 0; /* Exit on disconnect */ - -int exitonclose = 0; /* Exit on close */ -int exithangup = 1; /* Hangup on exit */ -int haveline = 0; /* SET LINE or SET HOST in effect */ -int tlevel = -1; /* Take-file command level */ -int hints = 1; /* Whether to give hints */ - -#ifdef NOLOCAL -int remonly = 1; /* Remote-mode-only advisory (-R) */ -int nolocal = 1; /* Remote-only strictly enforced */ -#else -int remonly = 0; -int nolocal = 0; -int cx_status = 0; /* CONNECT return status */ -#endif /* NOLOCAL */ - -#ifndef NOSPL -extern int cmdlvl; /* Command level */ -extern int maclvl; /* Macro invocation level */ -#endif /* NOSPL */ - -int protocol = PROTO_K; /* File transfer protocol = Kermit */ - -#ifdef NEWDEFAULTS -int prefixing = PX_CAU; -#else -int prefixing = PX_ALL; -#endif /* NEWDEFAULTS */ - -extern short ctlp[]; /* Control-prefix table */ - -int carrier = CAR_AUT; /* Pay attention to carrier signal */ -int cdtimo = 0; /* Carrier wait timeout */ -int xitsta = GOOD_EXIT; /* Program exit status */ - -#ifdef VMS /* Default filename collision action */ -int fncact = XYFX_X; /* REPLACE for VMS */ -#else -int fncact = XYFX_B; /* BACKUP for everybody else */ -#endif /* VMS */ - -int fncsav = -1; /* For saving & restoring the above */ -int bgset = -1; /* BACKGROUND mode set explicitly */ - -int cmdint = 1; /* Interrupts are allowed */ -#ifdef UNIX -int xsuspend = DFSUSP; /* Whether SUSPEND command, etc, */ -#else /* is to be allowed. */ -int xsuspend = 0; -#endif /* UNIX */ - -/* Statistics variables */ - -long filcnt, /* Number of files in transaction */ - filrej, /* Number of files rejected in transaction */ - flci, /* Characters from line, current file */ - flco, /* Chars to line, current file */ - tlci, /* Chars from line in transaction */ - tlco, /* Chars to line in transaction */ - ffc, /* Chars to/from current file */ - tfc, /* Chars to/from files in transaction */ - cps = 0L, /* Chars/sec last transfer */ - peakcps = 0L, /* Peak chars/sec last transfer */ - ccu, /* Control chars unprefixed in transaction */ - ccp, /* Control chars prefixed in transaction */ - rptn; /* Repeated characters compressed */ - -int tsecs = 0; /* Seconds for transaction */ -int fsecs = 0; /* Per-file timer */ - -#ifdef GFTIMER -CKFLOAT - fpfsecs = 0.0, /* Floating point per-file timer */ - fptsecs = 0.0; /* and per-transaction timer */ -#endif /* GFTIMER */ - -/* Flags */ - -int deblog = 0, /* Debug log is open */ - debok = 1, /* Debug log is not disabled */ - debxlen = 54, /* Default length for debug strings */ - debses = 0, /* Flag for DEBUG SESSION */ - debtim = 0, /* Include timestamp in debug log */ - pktlog = 0, /* Flag for packet logging */ - seslog = 0, /* Session logging */ - dialog = 0, /* DIAL logging */ - tralog = 0, /* Transaction logging */ - tlogfmt = 1, /* Transaction log format (verbose) */ - tlogsep = (int)',', /* Transaction log field separator */ - displa = 0, /* File transfer display on/off */ - stdouf = 0, /* Flag for output to stdout */ - stdinf = 0, /* Flag for input from stdin */ - xflg = 0, /* Flag for X instead of F packet */ - hcflg = 0, /* Doing Host command */ - dest = DEST_D, /* Destination for packet data */ - zchkod = 0, /* zchko() should work for dirs too? */ - zchkid = 0, /* zchki() should work for dirs too? */ - -/* If you change this, also see struct ptab above... */ - -#ifdef OS2 /* Flag for file name conversion */ - fncnv = XYFN_L, /* Default is Literal in OS/2, */ - f_save = XYFN_L, /* (saved copy of same) */ -#else - fncnv = XYFN_C, /* elsewhere Convert them */ - f_save = XYFN_C, /* (ditto) */ -#endif /* OS2 */ - - fnspath = PATH_OFF, /* Send file path */ - fnrpath = PATH_AUTO, /* Receive file path */ - fackpath = 1, /* Send back path in ACK to F */ - binary = XYFT_B, /* Default file transfer mode */ - b_save = XYFT_B, /* Saved file mode */ - eofmethod = 0, /* EOF detection method (length) */ - -#ifdef OS2 - cursor_save = -1, /* Cursor state */ -#endif /* OS2 */ - - xfermode = XMODE_A, /* Transfer mode, manual or auto */ - xfiletype = -1, /* Transfer only text (or binary) */ - recursive = 0, /* Recursive directory traversal */ - nolinks = 2, /* Don't follow symbolic links */ - skipbup = 0, /* Skip backup files when sending */ - sendmode = SM_SEND, /* Which type of SEND operation */ - slostart = 1, /* Slow start (grow packet lengths) */ - cmask = 0377, /* CONNECT (terminal) byte mask */ - fmask = 0377, /* File byte mask */ - ckwarn = 0, /* Flag for file warning */ - quiet = 0, /* Be quiet during file transfer */ - local = 0, /* 1 = local mode, 0 = remote mode */ - cxtype = CXT_REMOTE, /* Connection type */ - server = 0, /* Flag for I Am Server */ - query = 0, /* Flag for Query active */ - justone = 0, /* Server should do Just One command */ - urserver = 0, /* Flag for You Are Server */ - bye_active = 0, /* Flag for BYE command active */ - diractive = 0, /* Flag for DIRECTORY command active */ - cdactive = 0, /* Flag for CD command active */ - cflg = 0, /* Connect before transaction */ - cnflg = 0, /* Connect after transaction */ - cxseen = 0, /* Flag for cancelling a file */ - czseen = 0, /* Flag for cancelling file group */ - fatalio = 0, /* Flag for fatal i/o error */ - discard = 0, /* Flag for file to be discarded */ - keep = SET_AUTO, /* Keep incomplete files = AUTO */ - unkcs = 1, /* Keep file w/unknown character set */ -#ifdef VMS - filepeek = 0, /* Inspection of files */ -#else -#ifdef datgeneral - filepeek = 0, -#else - filepeek = 1, -#endif /* datageneral */ -#endif /* VMS */ - nakstate = 0, /* In a state where we can send NAKs */ - dblchar = -1, /* Character to double when sending */ - moving = 0, /* MOVE = send, then delete */ - reliable = SET_AUTO, /* Nonzero if transport is reliable */ - xreliable = -1, - setreliable = 0, - urclear = 0, /* Nonzero for clear channel to you */ - clearrq = SET_AUTO, /* SET CLEARCHANEL value */ - cleared = 0, - streaming = 0, /* Nonzero if streaming is active */ - streamok = 0, /* Nonzero if streaming negotiated */ - streamrq = SET_AUTO, /* SET STREAMING value */ - streamed = -1; /* Whether we streamed last time */ - -char * snd_move = NULL; /* Move file after sending it */ -char * snd_rename = NULL; /* Rename file after sending it */ -char * rcv_move = NULL; /* Move file after receiving it */ -char * rcv_rename = NULL; /* Rename file after receiving it */ - -char * g_snd_move = NULL; -char * g_snd_rename = NULL; -char * g_rcv_move = NULL; -char * g_rcv_rename = NULL; - -long sendstart = 0L; /* SEND start position */ -long calibrate = 0L; /* Nonzero if calibration run */ - -#ifdef CK_TRIGGER -char *tt_trigger[TRIGGERS] = { NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL }; -CHAR *tt_trmatch[TRIGGERS] = { NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL }; -char *triggerval = NULL; -#endif /* CK_TRIGGER */ - -int ckxlogging = 0; /* Flag for syslogging active */ -int ikdbopen = 0; /* Flag for IKSD database active */ -int dbinited = 0; /* Flag for IKSDB record init'd */ -#ifndef CKSYSLOG -int ckxsyslog = 0; /* Logging level 0 */ -#else -#ifdef SYSLOGLEVEL -int ckxsyslog = SYSLOGLEVEL; /* Logging level specified */ -#else -int ckxsyslog = SYSLG_DF; /* Default logging level */ -#endif /* SYSLOGLEVEL */ -#endif /* CKSYSLOG */ - -#ifndef NOHELP -#ifndef NOCMDL -_PROTOTYP( VOID iniopthlp, (void) ); /* Command-line help initializer */ -#endif /* NOCMDL */ -#endif /* NOHELP */ - -_PROTOTYP( VOID getexedir, (void) ); -_PROTOTYP( int putnothing, (char) ); - -#ifdef IKSD -_PROTOTYP( VOID doiksdinit, (void) ); -_PROTOTYP( VOID iksdinit, (void) ); -_PROTOTYP( VOID doiklog, (void) ); -_PROTOTYP( int dbinit, (void) ); -#endif /* IKSD */ - -/* Variables passed from command parser to protocol module */ - -#ifndef NOSPL -#ifndef NOICP -#ifdef CK_APC -_PROTOTYP( VOID apconect, (void) ); -#endif /* CK_APC */ -#ifdef OS2 -extern int initvik; -#endif /* OS2 */ -#endif /* NOICP */ -#endif /* NOSPL */ -char *clcmds = NULL; /* Pointer to command-line commands */ - -#ifndef NOSETKEY -extern KEY *keymap; -extern MACRO *macrotab; -#endif /* NOSETKEY */ - -#ifndef NOPUSH -int nopush = 0; /* PUSH enabled */ -#else -int nopush = 1; /* PUSH disabled */ -#endif /* NOPUSH */ - -CHAR sstate = (CHAR) 0; /* Starting state for automaton */ -CHAR zstate = (CHAR) 0; /* For remembering sstate */ -char * printername = NULL; /* NULL if printer not redirected */ -int printpipe = 0; /* For SET PRINTER */ -int noprinter = 0; - -#ifndef NOXFER -char *cmarg = ""; /* Pointer to command data */ -char *cmarg2 = ""; /* Pointer to 2nd command data */ -char **cmlist; /* Pointer to file list in argv */ - -#ifdef CK_AUTODL /* Autodownload */ -int autodl = 1; /* Enabled by default */ -#else -int autodl = 0; /* (or if not implemented). */ -#endif /* CK_AUTODL */ -int adl_err = 1; /* 1 = stop on error */ -#ifdef KUI -int adl_ask = 1; /* 1 = file dialog on autodownload */ -#else -int adl_ask = 0; /* 0 = no file dialog */ -#endif /* KUI */ -#ifdef OS2 /* AUTODOWNLOAD parameters */ -int adl_kmode = ADL_PACK, /* Match Packet to signal download */ - adl_zmode = ADL_PACK; -char * adl_kstr = NULL; /* KERMIT Download String */ -char * adl_zstr = NULL; /* ZMODEM Download String */ -#endif /* OS2 */ - -int remfile = 0, rempipe = 0, remappd = 0; /* REMOTE output redirection */ -char * remdest = NULL; - -#ifndef NOSERVER -/* - Server services: - 0 = disabled - 1 = enabled in local mode - 2 = enabled in remote mode - 3 = enabled in both local and remote modes - only as initial (default) values. -*/ -int en_xit = 2; /* EXIT */ -int en_cwd = 3; /* CD/CWD */ -int en_cpy = 3; /* COPY */ -int en_del = 2; /* DELETE */ -int en_mkd = 3; /* MKDIR */ -int en_rmd = 2; /* RMDIR */ -int en_dir = 3; /* DIRECTORY */ -int en_fin = 3; /* FINISH */ -int en_get = 3; /* GET */ -#ifndef NOPUSH -int en_hos = 2; /* HOST enabled */ -#else -int en_hos = 0; /* HOST disabled */ -#endif /* NOPUSH */ -int en_ren = 3; /* RENAME */ -int en_sen = 3; /* SEND */ -int en_set = 3; /* SET */ -int en_spa = 3; /* SPACE */ -int en_typ = 3; /* TYPE */ -int en_who = 3; /* WHO */ -#ifdef datageneral -/* Data General AOS/VS can't do this */ -int en_bye = 0; /* BYE */ -#else -int en_bye = 2; /* PCs in local mode... */ -#endif /* datageneral */ -int en_asg = 3; /* ASSIGN */ -int en_que = 3; /* QUERY */ -int en_ret = 2; /* RETRIEVE */ -int en_mai = 3; /* MAIL */ -int en_pri = 3; /* PRINT */ -int en_ena = 3; /* ENABLE */ -#else -int en_xit = 0, en_cwd = 0, en_cpy = 0, en_del = 0, en_mkd = 0, en_rmd = 0, - en_dir = 0, en_fin = 0, en_get = 0, en_hos = 0, en_ren = 0, en_sen = 0, - en_set = 0, en_spa = 0, en_typ = 0, en_who = 0, en_bye = 0, en_asg = 0, - en_que = 0, en_ret = 0, en_mai = 0, en_pri = 0, en_ena = 0; -#endif /* NOSERVER */ -#endif /* NOXFER */ - -/* Miscellaneous */ - -char **xargv; /* Global copies of argv */ -int xargc; /* and argc */ -int xargs; /* an immutable copy of argc */ -char *xarg0; /* and of argv[0] */ -char *pipedata; /* Pointer to -P (pipe) data */ - -extern char *dftty; /* Default tty name from ck?tio.c */ -extern int dfloc; /* Default location: remote/local */ -extern int dfprty; /* Default parity */ -extern int dfflow; /* Default flow control */ - -#ifdef TNCODE -extern int tn_deb; -#endif /* TNCODE */ -/* - Buffered file input and output buffers. See getpkt() in ckcfns.c - and zoutdump() in the system-dependent file i/o module (usually ck?fio.c). -*/ -#ifndef DYNAMIC -/* Now we allocate them dynamically, see getiobs() below. */ -char zinbuffer[INBUFSIZE], zoutbuffer[OBUFSIZE]; -#endif /* DYNAMIC */ -char *zinptr, *zoutptr; -int zincnt, zoutcnt; -int zobufsize = OBUFSIZE; -int zofbuffer = 1; -int zofblock = 1; - -#ifdef SESLIMIT -int seslimit = 0; -#endif /* SESLIMIT */ - -#ifdef CK_AUTHENTICATION -#include "ckuath.h" -#endif /* CK_AUTHENTICATION */ - -_PROTOTYP( int getiobs, (VOID) ); - -/* M A I N -- C-Kermit main program */ - -#include - -#ifndef NOCCTRAP -#include -#include "ckcsig.h" -ckjmpbuf cmjbuf; -#ifdef GEMDOS /* Special for Atari ST */ -cc_clean(); /* This can't be right? */ -#endif /* GEMDOS */ -#endif /* NOCCTRAP */ - -#ifndef NOXFER -/* Info associated with a system ID */ - -struct sysdata sysidlist[] = { /* Add others as needed... */ - { "0", "anonymous", 0, NUL, 0, 0, 0 }, - { "A1", "Apple II", 0, NUL, 0, 0, 3 }, /* fix this */ - { "A3", "Macintosh", 1, ':', 0, 2, 1 }, - { "D7", "VMS", 0, ']', 1, 0, 0 }, - { "DA", "RSTS/E", 0, ']', 1, 0, 3 }, /* (i think...) */ - { "DB", "RT11", 0, NUL, 1, 0, 3 }, /* (maybe...) */ - { "F3", "AOS/VS", 1, ':', 0, 0, 2 }, - { "I1", "VM/CMS", 0, NUL, 0, 0, 0 }, - { "I2", "MVS/TSO", 0, NUL, 0, 0, 0 }, - { "I4", "MUSIC", 0, NUL, 0, 0, 0 }, - { "I7", "CICS", 0, NUL, 0, 0, 0 }, - { "I9", "MVS/ROSCOE", 0, NUL, 0, 0, 0 }, - { "K2", "Atari ST", 1, '\\', 1, 0, 3 }, - { "L3", "Amiga", 1, '/', 1, 0, 2 }, - { "MV", "Stratus VOS", 1, '>', 0, 1, 0 }, - { "N3", "Apollo Aegis", 1, '/', 0, 3, 2 }, - { "U1", "UNIX", 1, '/', 0, 3, 2 }, - { "U8", "MS-DOS", 1, '\\', 1, 0, 3 }, - { "UD", "OS-9", 1, '/', 0, 3, 2 }, - { "UN", "Windows-32", 1, '\\', 1, 2, 3 }, - { "UO", "OS/2", 1, '\\', 1, 2, 3 } -}; -static int nxxsysids = (sizeof(sysidlist) / sizeof(struct sysdata)); - -/* Given a Kermit system ID code, return the associated name string */ -/* and some properties of the filenames... */ - -char * -getsysid(s) char * s; { /* Get system-type name */ - int i; - if (!s) return(""); - for (i = 0; i < nxxsysids; i++) - if (!strcmp(sysidlist[i].sid_code,s)) - return(sysidlist[i].sid_name); - return(s); -} - -int -getsysix(s) char *s; { /* Get system-type index */ - int i; - if (!s) return(-1); - for (i = 0; i < nxxsysids; i++) - if (!strcmp(sysidlist[i].sid_code,s)) - return(i); - return(-1); -} -#endif /* NOXFER */ - -/* Tell if a pathname is absolute (versus relative) */ -/* This should be parceled out to each of the ck*fio.c modules... */ -int -isabsolute(path) char * path; { - int rc = 0; - int x; - if (!path) - return(0); - if (!*path) - return(0); - x = (int) strlen(path); - debug(F111,"isabsolute",path,x); -#ifdef VMS - rc = 0; - x = ckindex("[",path,0,0,0); /* 1-based */ - if (!x) - x = ckindex("<",path,0,0,0); - debug(F111,"isabsolute left bracket",path,x); - if (!x) { - x = ckindex(":",path,-1,1,1); - if (x) - debug(F111,"isabsolute logical",path,x); - } - if (x > 0) - if (path[x] != '.') /* 0-based */ - rc = 1; -#else -#ifdef UNIX - if (*path == '/' -#ifdef DTILDE - || *path == '~' -#endif /* DTILDE */ - ) - rc = 1; -#else -#ifdef OS2 - if (*path == '/' || *path == '\\') - rc = 1; - else if (isalpha(*path) && x > 2) - if (*(path+1) == ':' && (*(path +2) == '/' || *(path+2) == '\\')) - rc = 1; -#else -#ifdef AMIGA - if (*path == '/' -#ifdef DTILDE - || *path == '~' -#endif /* DTILDE */ - ) - rc = 1; -#else -#ifdef OSK - if (*path == '/' -#ifdef DTILDE - || *path == '~' -#endif /* DTILDE */ - ) - rc = 1; -#else -#ifdef datageneral - if (*path == ':') - rc = 1; -#else -#ifdef MAC - rc = 0; /* Fill in later... */ -#else -#ifdef STRATUS - rc = 0; /* Fill in later... */ -#else -#ifdef GEMDOS - if (*path == '/' || *path == '\\') - rc = 1; - else if (isalpha(*path) && x > 1) - if (*(path+1) == ':') - rc = 1; -#endif /* GEMDOS */ -#endif /* STRATUS */ -#endif /* MAC */ -#endif /* datageneral */ -#endif /* OSK */ -#endif /* AMIGA */ -#endif /* OS2 */ -#endif /* UNIX */ -#endif /* VMS */ - debug(F101,"isabsolute rc","",rc); - return(rc); -} - -/* See if I have direct access to the keyboard */ - -int -is_a_tty(n) int n; { -#ifdef UNIX - extern int ttfdflg; - if (ttfdflg > 0) - return(1); -#endif /* UNIX */ -#ifdef KUI - return 1; -#else /* KUI */ -#ifdef NT - if (isWin95()) - return(1); - else - return(_isatty(n)); -#else -#ifdef IKSD - if (inserver) - return(1); - else -#endif /* IKSD */ - return(isatty(n)); -#endif /* NT */ -#endif /* KUI */ -} - -#ifndef NOXFER -VOID -initxlist() { - extern char * sndexcept[], * rcvexcept[]; - int i; - for (i = 0; i < NSNDEXCEPT; i++) { - sndexcept[i] = NULL; - rcvexcept[i] = NULL; - } -} -#endif /* NOXFER */ - -/* Initialize flow control table */ - -VOID -initflow() { /* Default values for flow control */ -#ifdef VMS /* for each kind of connection. */ - /* The VMS telnet terminal driver treats "none" as request to lose chars */ - cxflow[CXT_REMOTE] = FLO_XONX; /* Remote mode... */ -#else -#ifdef HPUX - /* Ditto for HP-UX */ - cxflow[CXT_REMOTE] = FLO_XONX; /* Remote mode... */ -#else - /* The temptation is to make this one FLO_KEEP but don't!!! */ - /* It totally wrecks binary-file transfer when coming in via Telnet. */ - /* In UNIX at least... */ - cxflow[CXT_REMOTE] = FLO_NONE; -#endif /* HPUX */ -#endif /* VMS */ - -#ifdef VMS - cxflow[CXT_DIRECT] = FLO_XONX; /* Direct serial connections... */ -#else - cxflow[CXT_DIRECT] = FLO_NONE; -#endif /* VMS */ - -#ifdef CK_RTSCTS - cxflow[CXT_MODEM] = FLO_RTSC; /* Modem connections... */ -#else -#ifdef VMS - cxflow[CXT_MODEM] = FLO_XONX; -#else - cxflow[CXT_MODEM] = FLO_NONE; -#endif /* VMS */ -#endif /* CK_RTSCTS */ - -#ifdef VMS - cxflow[CXT_TCPIP] = FLO_XONX; /* TCP/IP connections... */ -#else - cxflow[CXT_TCPIP] = FLO_NONE; -#endif /* VMS */ - - cxflow[CXT_SSH] = FLO_NONE; - cxflow[CXT_X25] = FLO_NONE; /* Other kinds of networks... */ - cxflow[CXT_DECNET] = FLO_XONX; - cxflow[CXT_LAT] = FLO_XONX; - cxflow[CXT_NETBIOS] = FLO_NONE; - cxflow[CXT_NPIPE] = FLO_NONE; - cxflow[CXT_PIPE] = FLO_NONE; - flow = cxflow[cxtype]; /* Initial flow setting. */ - debug(F101,"initflow","",flow); -} - -#ifndef NOXFER -/* Initialize file transfer protocols */ - -VOID -initproto(y, upbstr, uptstr, srvstr, sndbstr, sndtstr, rcvbstr, rcvtstr) - int y; - char * upbstr, * uptstr, * srvstr, * sndbstr, * sndtstr, * rcvbstr, - * rcvtstr; -/* initproto */ { - - if (upbstr) /* Convert null strings */ - if (!*upbstr) /* to null pointers */ - upbstr = NULL; - - if (uptstr) /* Convert null strings */ - if (!*uptstr) /* to null pointers */ - uptstr = NULL; - - if (sndbstr) - if (!*sndbstr) - sndbstr = NULL; - - if (sndtstr) - if (!*sndtstr) - sndtstr = NULL; - - if (rcvbstr) - if (!*rcvbstr) - rcvbstr = NULL; - - if (rcvtstr) - if (!*rcvtstr) - rcvtstr = NULL; - - if (srvstr) - if (!*srvstr) - srvstr = NULL; - - protocol = y; /* Set protocol */ - - if (ptab[protocol].rpktlen > -1) - urpsiz = ptab[protocol].rpktlen; - if (ptab[protocol].spktflg > -1) - spsizf = ptab[protocol].spktflg; - if (ptab[protocol].spktlen > -1) { - spsiz = ptab[protocol].spktlen; - debug(F101,"initproto spsiz","",spsiz); - if (spsizf) { - spsizr = spmax = spsiz; - debug(F101,"initproto spsizr","",spsizr); - } - } - if (ptab[protocol].winsize > -1) - wslotr = ptab[protocol].winsize; - if (ptab[protocol].prefix > -1) - prefixing = ptab[protocol].prefix; - if (ptab[protocol].fnca > -1) - fncact = ptab[protocol].fnca; - if (ptab[protocol].fncn > -1) - fncnv = ptab[protocol].fncn; - if (ptab[protocol].fnsp > -1) - fnspath = ptab[protocol].fnsp; - if (ptab[protocol].fnrp > -1) - fnrpath = ptab[protocol].fnrp; - - makestr(&(ptab[protocol].h_b_init),upbstr); - makestr(&(ptab[protocol].h_t_init),uptstr); - makestr(&(ptab[protocol].h_x_init),srvstr); - makestr(&(ptab[protocol].p_b_scmd),sndbstr); - makestr(&(ptab[protocol].p_t_scmd),sndtstr); - makestr(&(ptab[protocol].p_b_rcmd),rcvbstr); - makestr(&(ptab[protocol].p_t_rcmd),rcvtstr); -} -#endif /* NOXFER */ - -#ifndef NOCMDL -VOID -#ifdef CK_ANSIC -docmdline(void * threadinfo) -#else /* CK_ANSIC */ -docmdline(threadinfo) VOID * threadinfo; -#endif /* CK_ANSIC */ -{ -#ifdef NTSIG - setint(); - if (threadinfo) { /* Thread local storage... */ - TlsSetValue(TlsIndex,threadinfo); - debug( F100, "docmdline called with threadinfo block", "", 0 ); - } else - debug( F100, "docmdline threadinfo is NULL","",0); -#endif /* NTSIG */ -#ifdef CK_LOGIN -#ifdef NT -#ifdef IKSD - if (inserver) - setntcreds(); -#endif /* IKSD */ -#endif /* NT */ -#endif /* CK_LOGIN */ - proto(); /* Take any requested action, then */ - if (!quiet) /* put cursor back at left margin, */ - conoll(""); -#ifndef NOLOCAL - if (cnflg) { /* Re-connect if requested */ - cnflg = 0; - doconect(0,0); - if (ttchk() < 0) - dologend(); - } -#endif /* NOLOCAL */ - -#ifdef NTSIG - ckThreadEnd(threadinfo); -#endif /* NTSIG */ - return; -} - -void -ikslogin() { - if (sstelnet -#ifdef IKSD - || inserver /* Internet server */ -#endif /* IKSD */ - ) { - char *s; - extern int fdispla; /* File-transfer display format */ - extern char * ikprompt; /* IKSD prompt */ - -#ifdef IKSD -#ifdef CK_LOGIN - if (inserver) { - x_login = 1; /* Login required */ - x_logged = 0; /* Not logged in yet */ - cmsetp(ikprompt); /* Set up IKSD's prompt */ -#ifndef NOSERVER - en_mai = 0; /* MAIL is disabled */ - en_who = 0; /* REMOTE WHO is disabled */ - en_hos = 0; /* REMOTE HOST is disabled */ - en_pri = 0; /* PRINT is disabled */ -#endif /* NOSERVER */ - } else { - x_login = 0; /* Login not required */ - x_logged = 1; /* Already logged in */ - } -#endif /* CK_LOGIN */ -#endif /* IKSD */ - nolocal = 1; /* SET LINE/HOST not allowed */ - fdispla = XYFD_N; /* No file-transfer display */ -#ifdef NETCONN - clienthost = ckgetpeer(); /* Get client's hostname */ - debug(F110,"ikslogin clienthost",clienthost,0); -#endif /* NETCONN */ - ztime(&s); /* Get current date and time */ - -#ifdef CK_LOGIN -#ifdef CK_AUTHENTICATION - if (x_login) { - x_logged = ck_tn_auth_valid(); /* Did Telnet Auth succeed? */ - debug(F111,"ikslogin","x_logged",x_logged); - -#ifdef NT - /* On Windows 9x, we do not have the ability in */ - /* zvuser() at present to determine if the name */ - /* approved in a Kerberos principal is really a */ - /* an account in the Windows Access Control List */ - if (isWin95() && x_logged == AUTH_VALID - && (ck_tn_authenticated() != AUTHTYPE_NTLM) -#ifdef CK_SRP - && (ck_tn_authenticated() != AUTHTYPE_SRP) -#endif /* CK_SRP */ - ) { - auth_finished(AUTH_USER); - x_logged = AUTH_USER; - printf("WARNING:\r\n"); - printf( -" The Telnet authentication method used cannot provide for automated\r\n"); - printf( -" login to Windows 95 or Windows 98. A password must be entered\r\n"); - printf( -" locally to validate your userid. Telnet authentication (and encryption)\r\n" - ); - printf( -" can be used to validate the host (and protect the privacy of your password.)\ -\r\n" - ); - } -#endif /* NT */ - - if (x_logged == AUTH_VALID) { -#ifdef CK_SSL - if ((ssl_active_flag || tls_active_flag) && - (!TELOPT_U(TELOPT_AUTHENTICATION) || - ck_tn_authenticated() == AUTHTYPE_NULL || - ck_tn_authenticated() == AUTHTYPE_AUTO) - ) { -#ifdef SSL_KRB5 - if (tls_is_krb5(0)) { - printf("Authenticated using Kerberos 5\r\n"); -#ifdef CKSYSLOG - if (ckxsyslog >= SYSLG_LI && ckxlogging) { - extern char szUserNameAuthenticated[]; - cksyslog(SYSLG_LI, 1, "AUTH_VALID", - "Kerberos 5", - szUserNameAuthenticated - ); - } -#endif /* CKSYSLOG */ - } else -#endif /* SSL_KRB5 */ - { - printf("Authenticated using X.509 certificate\r\n"); -#ifdef CKSYSLOG - if (ckxsyslog >= SYSLG_LI && ckxlogging) { - extern char szUserNameAuthenticated[]; - cksyslog(SYSLG_LI, 1, "AUTH_VALID", - "X.509 certificate", - szUserNameAuthenticated - ); - } -#endif /* CKSYSLOG */ - } - } else -#endif /* CK_SSL */ - { - printf("Authenticated using %s\r\n", - AUTHTYPE_NAME(ck_tn_authenticated())); -#ifdef CKSYSLOG - if (ckxsyslog >= SYSLG_LI && ckxlogging) { - extern char szUserNameAuthenticated[]; - cksyslog(SYSLG_LI, 1, "AUTH_VALID", - AUTHTYPE_NAME(ck_tn_authenticated()), - szUserNameAuthenticated - ); - } -#endif /* CKSYSLOG */ - } - zvuser(uidbuf); - if (zvpass("") == 0) - x_logged = 0; - } else if (x_logged == AUTH_USER && !strcmp(uidbuf,"anonymous")) { - extern char szUserNameAuthenticated[]; - zvuser(uidbuf); - debug(F110,"szUserNameAuthenticated", - szUserNameAuthenticated,0); - if (zvpass(szUserNameAuthenticated) == 0) { - /* Anonymous login failed. Force a username prompt. */ - x_logged = 0; - uidbuf[0] = '\0'; - } else { -#ifdef CK_SSL - if ((ssl_active_flag || tls_active_flag) && - (!TELOPT_U(TELOPT_AUTHENTICATION) || - ck_tn_authenticated() == AUTHTYPE_NULL || - ck_tn_authenticated() == AUTHTYPE_AUTO)) { - printf("Authenticated using X.509 certificate\r\n"); -#ifdef CKSYSLOG - if (ckxsyslog >= SYSLG_LI && ckxlogging) { - extern char szUserNameAuthenticated[]; - cksyslog(SYSLG_LI, 1, "AUTH_USER", - "X.509 certificate", - szUserNameAuthenticated - ); - } -#endif /* CKSYSLOG */ - } else -#endif /* CK_SSL */ - { - printf("Authenticated using %s\r\n", - AUTHTYPE_NAME(ck_tn_authenticated()) - ); -#ifdef CKSYSLOG - if (ckxsyslog >= SYSLG_LI && ckxlogging) { - cksyslog(SYSLG_LI, 1, "AUTH_USER", - AUTHTYPE_NAME(ck_tn_authenticated()), - szUserNameAuthenticated - ); - } -#endif /* CKSYSLOG */ - } - } - } else { -#ifdef CKSYSLOG - if (ckxsyslog >= SYSLG_LI && ckxlogging && - x_logged == AUTH_USER) { - extern char szUserNameAuthenticated[]; - cksyslog(SYSLG_LI, 1, "AUTH_USER", - AUTHTYPE_NAME(ck_tn_authenticated()), - szUserNameAuthenticated - ); - } -#endif /* CKSYSLOG */ - x_logged = 0; - if (!strcmp("(unknown)",uidbuf) -#ifdef NT - || !stricmp("administrator",uidbuf) -#ifdef UNIX - || !strcmp("root",uidbuf) -#else -#ifdef Plan9 - || !strcmp("root",uidbuf) -#else -#ifdef OSK - || !strcmp("root",uidbuf) -#endif /* OSK */ -#endif /* Plan9 */ -#endif /* UNIX */ -#endif /* NT */ - ) - uidbuf[0] = '\0'; - } - } -#endif /* CK_AUTHENTICATION */ -#endif /* CK_LOGIN */ - -#ifdef IKSD - if (inserver) - printf("\r\nInternet Kermit Service ready at %s%s\r\n",s,versio); - else -#endif /* IKSD */ - printf("\r\nC-Kermit ready at %s%s\r\n",s,versio); - if (*myhost) - printf("%s\r\n", myhost); - printf("\r\n"); - } -#ifdef CK_LOGIN -#ifdef IKSD - if (inserver) { - int i; - extern int arg_x; /* Flag for '-x' on command line */ -#ifndef NOSPL - extern struct mtab *mactab; /* For ON_LOGIN macro. */ - extern int nmac; -#endif /* NOSPL */ - - debug(F110,"MAIN clienthost",clienthost,0); - srvidl = timelimit = logintimo; /* For interactive login */ - rtimer(); /* Reset timer */ - for (i = 0; i < iks_retry && !x_logged; i++) { /* Count retries */ - if (gtimer() > logintimo) - break; -#ifdef TNCODE - tn_wait("login loop"); - tn_push(); -#endif /* TNCODE */ - debug(F101,"MAIN LOGIN try","",i); - what = W_NOTHING; /* Because proto() changes this */ - -#ifdef IKS_OPTION - debug(F111,"MAIN LOGIN", - "TELOPT_SB(TELOPT_KERMIT).kermit.me_start", - TELOPT_SB(TELOPT_KERMIT).kermit.me_start - ); - /* Kermit server negotiated */ - if (TELOPT_SB(TELOPT_KERMIT).kermit.me_start) { - debug(F101,"IKSD starting in server mode","",0); - arg_x = 1; /* Enter server mode */ - sstate = 'x'; -#ifdef IKSDPOPBACK - justone = 1; /* Execute one command at a time. */ -#endif /* IKSDPOPBACK */ - proto(); /* Enter protocol if requested. */ -#ifdef NTSIG - ck_ih(); -#endif /* NTSIG */ - if (x_logged) /* Logged in */ - break; - } else { /* Not in client/server mode */ -#endif /* IKS_OPTION */ - debug(F101,"IKSD starting with Username prompt","",0); - x_logged = ckxlogin((CHAR *)uidbuf,NULL,NULL,1); - if (sstate) { /* Received a packet at prompt */ -#ifdef IKSDPOPBACK - justone = 1; /* Go handle it */ -#endif /* IKSDPOPBACK */ - proto(); - } - if (!x_logged) { /* In case we are at the prompt... */ - printf("Access denied.\n"); - uidbuf[0] = '\0'; /* Forget the name if we have one */ - } -#ifdef IKS_OPTION - } -#endif /* IKS_OPTION */ - } - srvidl = timelimit = iks_timo; /* Reset command timelimit */ - debug(F101,"MAIN LOGIN","",x_logged); - if (!x_logged) { /* Logins failed. */ - if (TELOPT_SB(TELOPT_KERMIT).kermit.me_start) - errpkt((CHAR *)"Login Timeout"); - msleep(500); - doexit(BAD_EXIT,0); - } - what = W_NOTHING; /* Stay in known state */ -#ifndef NOSERVER - if (isguest) { - en_pri = 0; /* No printing for anonymous users */ - en_mai = 0; /* No email for anonymous users */ - en_mkd = 0; /* Or directory creation */ - en_rmd = 0; /* Or directory removal */ - en_ena = 0; /* Or ENABLing DISABLEd items */ - } -#endif /* NOSERVER */ - -#ifndef NOSPL -/* - If a macro named "on_login" is defined, execute it. Also remove it from the - macro table so the user cannot see what it does. Execute it as part of the - iksd.conf file. -*/ - if (nmac) { /* Any macros defined? */ - int k; /* Yes */ - char * cmd = "on_login"; /* MSVC 2.x compiler error */ - k = mlook(mactab,cmd,nmac); /* Look up "on_exit" */ - if (k >= 0) { /* If found, */ -#ifdef IKSDCONF - int saved = iksdcf; - iksdcf = 0; -#endif /* IKSDCONF */ - if (dodo(k,"",0) > -1) /* set it up, */ - parser(1); /* execute it */ -#ifdef IKSDCONF - iksdcf = saved; -#endif /* IKSDCONF */ - delmac(cmd,1); /* and delete it */ - } - } -#endif /* NOSPL */ - } /* if (inserver) */ -#else /* CK_LOGIN */ - if (inserver) - srvidl = timelimit = iks_timo; /* Set idle limits for IKS */ -#endif /* CK_LOGIN */ -#endif /* IKSD */ -} - -VOID -#ifdef CK_ANSIC -failcmdline(void * foo) -#else /* CK_ANSIC */ -failcmdline(foo) VOID * foo; -#endif /* CK_ANSIC */ -{ -#ifdef GEMDOS - cc_clean(); -#endif /* GEMDOS */ -#ifndef NOLOCAL - if (cnflg) doconect(0,0); /* connect again if requested. */ - if (ttchk() < 0) - dologend(); -#endif /* NOLOCAL */ -} -#endif /* NOCMDL */ - -#ifndef NOICP -VOID -#ifdef CK_ANSIC -dotakeini(void * threadinfo) /* Execute init file. */ -#else /* CK_ANSIC */ -dotakeini(threadinfo) VOID * threadinfo; /* Execute init file. */ -#endif /* CK_ANSIC */ -/* dotakeini */ { -#ifdef NTSIG - setint(); - if (threadinfo) { /* Thread local storage... */ - TlsSetValue(TlsIndex,threadinfo); - debug(F100, "dotakeini called with threadinfo block","", 0); - } else - debug(F100, "dotakeini - threadinfo is NULL", "", 0); -#endif /* NTSIG */ -#ifdef CK_LOGIN -#ifdef NT -#ifdef IKSD - if (inserver) - setntcreds(); -#endif /* IKSD */ -#endif /* NT */ -#endif /* CK_LOGIN */ - cmdini(); /* Sets tlevel */ - - debug(F111,"dotakeini","inserver",inserver); - debug(F111,"dotakeini","sstelnet",sstelnet); - -#ifdef COMMENT -/* Wrong place for this... */ -#ifndef NOXFER -#ifdef CK_FAST - dofast(); /* By now FAST defaults should be OK */ -#endif /* CK_FAST */ -#endif /* NOXFER */ -#endif /* COMMENT */ - - doinit(); /* Now do the initialization file */ - debug(F101,"main executing init file","",tlevel); - while (tlevel > -1) { - sstate = (CHAR) parser(1); /* Execute one command at a time. */ - if (sstate) proto(); /* Enter protocol if requested. */ -#ifdef NTSIG - ck_ih(); -#endif /* NTSIG */ - } - debug(F101,"main exits init file","",tlevel); - -#ifdef NTSIG - ckThreadEnd(threadinfo); -#endif /* NTSIG */ - return; -} - -VOID -#ifdef CK_ANSIC -failtakeini(void * threadinfo) -#else /* CK_ANSIC */ -failtakeini(threadinfo) VOID * threadinfo; -#endif /* CK_ANSIC */ -/* failtakeini */ { -#ifdef GEMDOS - cc_clean(); /* Atari: Clean up after ^C-trap. */ -#endif /* GEMDOS */ - if (!cfilef) { - conoll("Interrupt during initialization or command-line processing."); - conoll("C-Kermit quitting..."); - } - doexit(BAD_EXIT,-1); /* Exit with bad status. */ -} - -VOID -#ifdef CK_ANSIC -doicp(void * threadinfo) -#else /* CK_ANSIC */ -doicp(threadinfo) VOID * threadinfo; -#endif /* CK_ANSIC */ -/* doicp */ { -#ifdef NTSIG - setint(); - if (threadinfo) { /* Thread local storage... */ - if (!TlsSetValue(TlsIndex,threadinfo)) - debug(F101,"doicp TlsSetValue failed","",GetLastError()); - debug(F101, "doicp a threadinfo block - TlsIndex", "", TlsIndex); - } else { - debug(F100, "doicp received a null threadinfo", "", 0); - } -#endif /* NTSIG */ -#ifdef CK_LOGIN -#ifdef NT -#ifdef IKSD - if (inserver) - setntcreds(); -#endif /* IKSD */ -#endif /* NT */ -#endif /* CK_LOGIN */ -#ifdef MAC - while (1) { - extern char *lfiles; /* Fake pointer cast */ - - if (connected) { - debug(F100, "doicp: calling macparser", "", 0); - sstate = newparser(1, 1, 0L); - - /* ignore null command state */ - if (sstate == 'n') - sstate = '\0'; - - if (sstate) - proto(); - } else { - /* - * process take files the finder gave us. - */ - if ((tlevel == -1) && lfiles) - startlfile(); - - debug(F100, "doicp: calling parser", "", 0); - sstate = (CHAR) parser(0); - if (sstate == 'c') /* if MAC connect */ - sstate = 0; - if (sstate) - proto(); - } - } -#else /* Not MAC */ - -#ifndef NOSPL -/* - If interactive commands were given on the command line (using the - -C "command, command, ..." option), assign them to a macro called - "cl_commands", then execute the macro and leave it defined for - subsequent re-execution if desired. -*/ - if (clcmds) { /* Check for -C commands */ - int x; - x = addmac("cl_commands",clcmds); /* Put macro in table */ - if (x > -1) { /* If successful, */ - dodo(x,NULL,CF_CMDL); /* set up for macro execution */ - while (maclvl > -1) { /* Loop getting macro commands. */ - sstate = (CHAR) parser(1); - if (sstate) proto(); /* Enter protocol if requested. */ -#ifdef NTSIG - ck_ih(); -#endif /* NTSIG */ - } - } - debug(F100,"doicp calling herald","",0); - herald(); - } -#endif /* NOSPL */ - while(1) { /* Loop getting commands. */ - sstate = (CHAR) parser(0); - if (sstate) proto(); /* Enter protocol if requested. */ -#ifdef NTSIG - ck_ih(); -#endif /* NTSIG */ - } -#ifdef NTSIG - ckThreadEnd(threadinfo); -#endif /* NTSIG */ -#endif /* MAC */ -} - -VOID -#ifdef CK_ANSIC -failicp(void * threadinfo) -#else /* CK_ANSIC */ -failicp(threadinfo) VOID * threadinfo; -#endif /* CK_ANSIC */ -{ -#ifdef GEMDOS - cc_clean(); -#endif /* GEMDOS */ - fixcmd(); /* Pop command stacks, etc. */ - clcmds = NULL; - debug(F100,"ckcmai got interrupt","",0); -} -#endif /* NOICP */ - -#ifndef NOICP -VOID -#ifdef CK_ANSIC -docmdfile(void * threadinfo) /* Execute application file */ -#else /* CK_ANSIC */ -docmdfile(threadinfo) VOID * threadinfo; -#endif /* CK_ANSIC */ -/* docmdfile */ { -#ifdef NTSIG - concb((char)escape); - setint(); - if (threadinfo) { /* Thread local storage... */ - TlsSetValue(TlsIndex,threadinfo); - debug(F100, "docmdfile called with threadinfo block","", 0); - } else debug(F100, "docmdfile - threadinfo is NULL", "", 0); -#endif /* NTSIG */ -#ifdef CK_LOGIN -#ifdef IKSD -#ifdef NT - if (inserver) - setntcreds(); -#endif /* NT */ -#endif /* IKSD */ -#endif /* CK_LOGIN */ - debug(F110,"main cmdfil",cmdfil,0); -#ifndef NOSPL - addmac("\\%0",cmdfil); -#endif /* NOSPL */ - dotake(cmdfil); /* execute it */ - while (tlevel > -1) { /* until it runs out. */ - sstate = parser(1); /* Loop getting commands. */ - if (sstate) proto(); /* Enter protocol if requested. */ -#ifdef NTSIG - ck_ih(); -#endif /* NTSIG */ - } - cfilef = 1; /* Remember we did this */ - -#ifdef NTSIG - ckThreadEnd(threadinfo); -#endif /* NTSIG */ - return; -} - -VOID -#ifdef CK_ANSIC -failcmdfile(void * threadinfo) -#else /* CK_ANSIC */ -failcmdfile(threadinfo) VOID * threadinfo; -#endif /* CK_ANSIC */ -/* failcmdfile */ { -#ifdef GEMDOS - cc_clean(); /* Atari: Clean up after ^C-trap. */ -#endif /* GEMDOS */ - if (!cfilef) { - conoll("Interrupt during initialization or command-line processing."); - conoll("C-Kermit quitting..."); - } - doexit(BAD_EXIT,-1); /* Exit with bad status. */ -} -#endif /* NOICP */ - -#ifndef NOXFER -VOID -setprefix(z) int z; { /* Initial control-char prefixing */ -#ifdef CK_SPEED - int i, val; - - prefixing = z; - ptab[protocol].prefix = prefixing; - debug(F101,"setprefix","",prefixing); - switch (z) { - case PX_ALL: /* All */ -#ifdef COMMENT - /* Don't let Clear-Channel be dependent on prefixing */ - clearrq = 0; /* Turn off clearchannel, fall thru */ -#endif /* COMMENT */ - case PX_NON: /* None */ - val = (z == PX_ALL) ? 1 : 0; - for (i = -#ifdef UNPREFIXZERO - 0 -#else - 1 -#endif /* UNPREFIXZERO */ - ; i < 32; i++) - ctlp[i] = val; - for (i = 127; i < 160; i++) ctlp[i] = val; - ctlp[(unsigned)255] = val; - if (z == PX_NON) { /* These are never safe */ - if (network) { /* Assume network = telnet or rlogin */ - ctlp[CR] = 1; /* Prefix CR because of NVT rules */ - ctlp[XON] = ctlp[XOFF] = 1; /* Because of Telnet server */ - ctlp[127] = ctlp[255] = 1; /* Telnet IAC */ - ctlp[mystch] = ctlp[mystch+128] = 1; /* Kermit packet start */ - } else { - ctlp[CR] = ctlp[255] = ctlp[mystch] = ctlp[mystch+128] = 1; - if (flow == FLO_XONX) /* Xon/Xoff forces prefixing */ - ctlp[XON] = ctlp[XOFF] = ctlp[XON+128] = ctlp[XOFF+128] = 1; - } - } - break; - - case PX_CAU: /* Cautious or Minimal */ -#ifdef COMMENT - /* Don't let CLEAR-CHANNEL be dependent on Prefixing */ - clearrq = 0; /* Turn off clearchannel */ -#endif /* COMMENT */ - case PX_WIL: /* Minimal ("wild") */ - ctlp[0] = 1; /* Does not include 0 */ - for (i = 1; i < 32; i++) - ctlp[i] = 0; - for (i = 127; i < 160; i++) - ctlp[i] = 0; - ctlp[mystch] = ctlp[mystch+128] = 1; /* Kermit start of packet */ - if (seol != 13) - ctlp[seol] = ctlp[seol+128] = 1; /* Kermit end */ - ctlp[13] = ctlp[141] = 1; /* In case of TELNET (NVT rules) */ - ctlp[(unsigned)255] = 1; /* Ditto */ - - /* ^D, ^J, ^M, or ^U followed by tilde trigger Rlogin escape */ - - ctlp[4] = ctlp[4+128] = 1; /* In case of RLOGIN */ - ctlp[10] = ctlp[10+128] = 1; /* In case of RLOGIN */ - ctlp[21] = ctlp[21+128] = 1; /* In case of RLOGIN */ - - if (flow == FLO_XONX || /* Xon/Xoff forces prefixing these */ - prefixing == PX_CAU || /* So does CAUTIOUS */ - network) /* Networks too... */ - ctlp[XON] = ctlp[XOFF] = ctlp[XON+128] = ctlp[XOFF+128] = 1; - if (prefixing == PX_CAU) { /* Cautious - add some more */ -#ifdef UNPREFIXZERO - ctlp[0] = 1; -#endif /* UNPREFIXZERO */ - ctlp[3] = ctlp[16] = 1; /* ^C, DLE */ - ctlp[14] = ctlp[15] = 1; /* SO/SI */ - ctlp[24] = ctlp[25] = 1; /* VMS might need these */ - ctlp[26] = ctlp[26+128] = 1; /* UNIX suspend */ - ctlp[28] = ctlp[29] = ctlp[30] = 1; /* Assorted esc chars */ - ctlp[131] = ctlp[141] = ctlp[144] = 1; /* and 8-bit versions */ - ctlp[(unsigned)255] = ctlp[156] = ctlp[157] = ctlp[158] = 1; - } - break; - } -#endif /* CK_SPEED */ -} -#endif /* NOXFER */ - -VOID -makever() { /* Make version string from pieces */ - int x, y; -#ifndef OS2 -#ifndef MAC - ck_s_xver = ck_s_ver; /* Fill in C-Kermit version number */ - ck_l_xver = ck_l_ver; /* for UNIX, VMS, etc. */ -#endif /* MAC */ -#endif /* OS2 */ - x = strlen(ck_s_name); - y = strlen(ck_s_xver); - if (y + x + 1 < CKVERLEN) { - ckmakmsg(versio,CKVERLEN,ck_s_name," ",ck_s_xver,NULL); - } else { - ckstrncpy(versio,"C-Kermit",CKVERLEN); - return; - } - x += y + 1; - if (*ck_s_who) { - y = strlen(ck_s_who); - if (CKVERLEN < x + y + 1) - return; - ckstrncat(versio,"-",CKVERLEN); - ckstrncat(versio,ck_s_who,CKVERLEN); - } - x += y + 1; - y = strlen(ck_s_test); - if (y > 0 && y + x + 1 < CKVERLEN) { - ckstrncat(versio," ",CKVERLEN); - ckstrncat(versio,ck_s_test,CKVERLEN); - x += y + 1; - y = strlen(ck_s_tver); - if (y > 0 && y + x + 1 < CKVERLEN) { - ckstrncat(versio,".",CKVERLEN); - ckstrncat(versio,ck_s_tver,CKVERLEN); - x += y + 1; - } - } - y = strlen(ck_s_date); - if (y > 0 && y + x + 2 < CKVERLEN) { - ckstrncat(versio,", ",CKVERLEN); - ckstrncat(versio,ck_s_date,CKVERLEN); - } - vernum = ck_l_ver; - xvernum = ck_l_xver; - debug(F110,"Kermit version",versio,0); -} - -union ck_short shortbytes; /* For determining byte order */ -int byteorder = 0; /* 0 = Big Endian; 1 = Little Endian */ -int bigendian = 1; -/* NOTE: MUST BE 0 or 1 - nothing else */ - -#ifndef NOSPL -#define SCRIPTLEN 10240 -#endif /* NOSPL */ - -#ifdef NETCONN -#ifndef NOCMDL -#ifndef NOURL -VOID -dourl() { - int rc = 0; - char * port = NULL; - extern int ttnproto; - extern struct urldata g_url; - -#ifdef COMMENT - /* NOTE: debug() doesn't work yet - must use printf's */ - printf("URL: %s\n",g_url.sav ? g_url.sav : "(none)"); - printf("Type: %s\n",g_url.svc ? g_url.svc : "(none)"); - printf("User: %s\n",g_url.usr ? g_url.usr : "(none)"); - printf("Pass: %s\n",g_url.psw ? g_url.psw : "(none)"); - printf("Host: %s\n",g_url.hos ? g_url.hos : "(none)"); -/* printf("Port: %s\n",g_url.por ? g_url.por : "(none)"); */ - printf("Path: %s\n",g_url.pth ? g_url.pth : "(none)"); -#endif /* COMMENT */ - - if (!ckstrcmp(g_url.svc,"iksd",-1,0) || - !ckstrcmp(g_url.svc,"kermit",-1,0)) { - extern char pwbuf[]; - extern int pwflg; -#ifdef OS2 - extern int pwcrypt; -#endif /* OS2 */ - - if (!g_url.hos) { - printf("?Incomplete IKSD URL\n"); - doexit(BAD_EXIT,1); - } - if (!g_url.usr) - makestr(&g_url.usr,"anonymous"); - if (!g_url.psw) { - char * tmpbuf = NULL; - if (!(tmpbuf = (char *)malloc(1024))) - fatal("dourl: out of memory"); - if (!ckstrcmp(g_url.usr,"anonymous",-1,0)) { - ckmakmsg(tmpbuf,1024,uidbuf,"@",myhost,NULL); - makestr(&g_url.psw,tmpbuf); - } else { - readpass(" Password:",tmpbuf,1024); - makestr(&g_url.psw,tmpbuf); - } - free(tmpbuf); - } - port = "kermit"; - ttnproto = NP_TELNET; - nettype = NET_TCPB; - mdmtyp = -nettype; - local = -1; - ckstrncpy(uidbuf,g_url.usr,UIDBUFLEN); - if (g_url.psw) { - ckstrncpy(pwbuf,g_url.psw,PWBUFL); - pwflg = 1; -#ifdef OS2 - pwcrypt = 0; -#endif /* OS2 */ - } - ckmakmsg(ttname, - TTNAMLEN, - g_url.hos, - ":", - g_url.por ? g_url.por : port, - NULL - ); - rc = ttopen(ttname,&local,mdmtyp,0); - if (rc > -1) { - network = 1; - exitonclose = 1; -#ifdef CKLOGDIAL - dolognet(); -#endif /* CKLOGDIAL */ - } else { - printf("?Connection failed: %s\n",g_url.sav); - doexit(BAD_EXIT,1); - } - /* Also need to check here for secure authentication already done */ - -#ifdef NOSPL - cflg = 1; -#else - { - char * script = NULL; - if (!(script = (char *)malloc(SCRIPTLEN))) - fatal("dourl: out of memory"); - if (!g_url.pth) { /* Write the appropriate script */ - cflg = 1; - ckmakxmsg(script,SCRIPTLEN, - "if not eq {\\v(authstate)} {user} ", - "if not eq {\\v(authstate)} {valid} { ", - "remote login ", /* No path */ - g_url.usr, /* Just log in and CONNECT */ - " ", - g_url.psw, - ", if fail exit 1 {IKSD login failed} }", - ", connect", - NULL,NULL,NULL,NULL); - /* printf("CLCMDS 1: %s\n",script); */ - } else { - /* does the path specify a file or a directory? */ - int len = strlen(g_url.pth); - if (ISDIRSEP(g_url.pth[len-1])) { - ckmakxmsg(script,SCRIPTLEN, /* Directory name given */ - "if not eq {\\v(authstate)} {user} \ -if not eq {\\v(authstate)} {valid} { remote login ", - g_url.usr, - " ", - g_url.psw, - ", if fail exit 1 {IKSD login failed} }", - ", set macro error on", - ", set xfer displ brief", - ", set xfer bell off", - ", remote cd ", - g_url.pth, - ", lineout directory", - ", connect" - ); - /* printf("CLCMDS 2: %s\n",script); */ - } else { - ckmakxmsg(script,SCRIPTLEN, /* Path given, try to GET */ - "if not eq {\\v(authstate)} {user} \ -if not eq {\\v(authstate)} {valid} { remote login ", - g_url.usr, - " ", - g_url.psw, - ", if fail exit 1 {IKSD login failed} }", - ", set xfer displ brief", - ", set xfer bell off", - ", get ", - g_url.pth, - ", .rc := \\v(status)", - ", if open connection bye", - ", exit \\m(rc)" - ); - /* printf("CLCMDS 2: %s\n",script); */ - } - } - clcmds = script; /* Make this our -C cmdline macro */ - /* printf("HAVEURL=%d\n",haveurl); */ - } -#endif /* NOSPL */ - } else { - if (ckstrcmp(g_url.svc,"telnet",-1,0) && -#ifdef SSHBUILTIN - ckstrcmp(g_url.svc,"ssh",-1,0) && -#endif /* SSHBUILTIN */ - ckstrcmp(g_url.svc,"ftp",-1,0)) { - printf("?Sorry, %s URLs not supported\n", - g_url.svc ? g_url.svc : ""); - doexit(BAD_EXIT,1); - } - } -} -#endif /* NOCMDL */ -#endif /* NETCONN */ -#endif /* NOURL */ - -/* - main()... - - If you get complaints about "main: return type is not blah", - define MAINTYPE on the CC command line, e.g. "CFLAGS=-DMAINTYPE=blah" - (where "blah" is int, long, or whatever). - - If the complaint is "Attempt to return a value from a function of type void" - then add -DMAINISVOID. -*/ -#ifndef MAINTYPE -#ifndef MAINISVOID -#define MAINTYPE int -#endif /* MAINISVOID */ -#endif /* MAINTYPE */ - -#ifdef MAINISVOID -#ifndef MAINTYPE -#define MAINTYPE void -#endif /* MAINTYPE */ -#endif /* MAINISVOID */ - -#ifdef aegis -/* On the Apollo, intercept main to insert a cleanup handler */ -int -ckcmai(argc,argv) int argc; char **argv; -#else -#ifdef MAC /* Macintosh */ -int -main (void) -#else -#ifdef __GNUC__ /* GCC compiler */ -int -main(argc,argv) int argc; char **argv; -#else -#ifdef __DECC /* DEC Alpha with DEC C compiler */ -#ifdef __ALPHA -int -main(argc,argv) int argc; char **argv; -#else /* DEC C compiler, not Alpha */ -#define MAINISVOID -VOID -main(argc,argv) int argc; char **argv; -#endif /* __ALPHA */ -#else -#ifdef STRATUS /* Stratus VOS */ -int -main(argc,argv) int argc; char **argv; -#else /* K-95 */ -#ifdef OS2 -#ifdef KUI -#define MAINISVOID -void -Main( int argc, char ** argv ) -#else /* KUI */ -#define MAINISVOID -VOID -main(argc,argv) int argc; char **argv; -#endif /* KUI */ -#else /* Not K95 */ -MAINTYPE /* All others... */ -main(argc,argv) int argc; char **argv; -#endif /* OS2 */ -#endif /* STRATUS */ -#endif /* __DECC */ -#endif /* __GNUC__ */ -#endif /* MAC */ -#endif /* aegis */ - -/* main */ { - - char *p; - -#ifndef NOSETKEY - int i; -#endif /* NOSETKEY */ - -#ifdef datageneral - short *pfha = 016000000036; /* Get around LANG_RT problem */ - *pfha = (short) 0; /* No user protection fault handler */ -#endif /* datageneral */ - -/* Do some initialization */ - -#ifndef MAC - xargc = xargs = argc; /* Make global copies of argc */ - xargv = argv; /* ...and argv. */ - xarg0 = argv[0]; -#ifdef NT - setOSVer(); -#endif /* NT */ - zstrip(argv[0],&p); /* Get name we were invoked with */ - makestr(&myname,p); - if (!ckstrcmp(myname,"telnet",-1,0)) howcalled = I_AM_TELNET; -#ifdef CK_KERBEROS - else if (!ckstrcmp(myname,"ktelnet",-1,0)) howcalled = I_AM_TELNET; -#endif /* CK_KERBEROS */ - else if (!ckstrcmp(myname,"rlogin",-1,0)) howcalled = I_AM_RLOGIN; - else if (!ckstrcmp(myname,"iksd",-1,0)) howcalled = I_AM_IKSD; -#ifdef NEWFTP - else if (!ckstrcmp(myname,"ftp",-1,0)) howcalled = I_AM_FTP; -#endif /* NEWFTP */ -#ifndef NOHTTP - else if (!ckstrcmp(myname,"http",-1,0)) howcalled = I_AM_HTTP; -#endif /* NOHTTP */ -#ifdef OS2 - else if (!ckstrcmp(myname,"telnet.exe",-1,0)) howcalled = I_AM_TELNET; -#ifdef SSHBUILTIN - else if (!ckstrcmp(myname,"ssh",-1,0)) howcalled = I_AM_SSH; - else if (!ckstrcmp(myname,"ssh.exe",-1,0)) howcalled = I_AM_SSH; -#endif /* SSHBUILTIN */ -#ifdef CK_KERBEROS - else if (!ckstrcmp(myname,"ktelnet.exe",-1,0)) howcalled = I_AM_TELNET; -#endif /* CK_KERBEROS */ - else if (!ckstrcmp(myname,"rlogin.exe",-1,0)) howcalled = I_AM_RLOGIN; -#ifdef NT - else if (!ckstrcmp(myname,"iksdnt",-1,0)) howcalled = I_AM_IKSD; - else if (!ckstrcmp(myname,"iksdnt.exe",-1,0)) howcalled = I_AM_IKSD; -#endif /* NT */ -#ifdef NEWFTP - else if (!ckstrcmp(myname,"ftp.exe",-1,0)) howcalled = I_AM_FTP; -#endif /* NEWFTP */ -#ifndef NOHTTP - else if (!ckstrcmp(myname,"http.exe",-1,0)) howcalled = I_AM_HTTP; -#endif /* NOHTTP */ -#endif /* OS2 */ - else if (!ckstrcmp(myname,"kermit-sshsub",-1,0)) howcalled = I_AM_SSHSUB; - -#ifndef NOICP - cmdini(); /* Must come before prescan */ - debug(F100,"main cmdini() done","",0); -#endif /* NOICP */ - prescan(0); /* Pre-Check for debugging, etc */ -#endif /* MAC */ - debug(F101,"MAIN feol","",feol); - makever(); /* Put together version strings */ -#ifndef NOSETKEY /* Allocate & initialize the keymap */ - /* This code has been moved to before sysinit() for K95G */ - if (!(keymap = (KEY *) malloc(sizeof(KEY)*KMSIZE))) - fatal("main: no memory for keymap"); - if (!(macrotab = (MACRO *) malloc(sizeof(MACRO)*KMSIZE))) - fatal("main: no memory for macrotab"); - for (i = 0; i < KMSIZE; i++) { - keymap[i] = (KEY) i; - macrotab[i] = NULL; - } -#endif /* NOSETKEY */ - - shortbytes.x_short = 0xABCD; /* Get Endianness */ - if (shortbytes.x_char[0] == 0xCD) { /* 0 = Big Endian */ - byteorder = 1; /* 1 = Little Endian */ - bigendian = 0; /* (for clarity in programming) */ - } else { - byteorder = 0; /* Big Endian */ - bigendian = 1; - } - if (sysinit() < 0) /* System-dependent initialization. */ - fatal("Can't initialize!"); - else - initflg = 1; /* Remember we did. */ - debug(F111,"ckcmai myname",myname,howcalled); - -#ifdef UNIX - getexedir(); /* Compute exedir variable */ -#endif /* UNIX */ - -#ifdef CKSYSLOG -#ifdef SYSLOGLEVEL -/* - If built with -DSYSLOGLEVEL on cc command line, this means we always - do syslogging at the indicated level. -*/ - zsyslog(); /* Open syslog */ -#else /* SYSLOGLEVEL */ -#ifdef IKSD - if (inserver) - zsyslog(); /* Open syslog */ -#endif /* IKSD */ -#endif /* SYSLOGLEVEL */ -#endif /* CKSYSLOG */ - -#ifdef CK_KERBEROS - ini_kerb(); /* Initialize Kerberos data */ -#endif /* CK_KERBEROS */ -#ifdef CK_SSL - ssl_once_init(); -#endif /* CK_SSL */ -#ifdef TNCODE - tn_set_modes(); /* Init Telnet Option tables */ -#endif /* TNCODE */ - -#ifdef CK_TTGWSIZ /* Initialize screen dimensions */ -#ifdef OS2 - ttgcwsz(); -#else /* OS2 */ - if (ttgwsiz() > 0) { - if (tt_rows > 0 && tt_cols > 0) { - cmd_rows = tt_rows; - cmd_cols = tt_cols; - } - } -#endif /* OS2 */ -#endif /* CK_TTGWSIZ */ - -#ifndef OS2 -#ifdef TCPSOCKET -#ifdef CK_SOCKS - SOCKSinit(argv[0]); /* Internet relay package... */ -#endif /* CK_SOCKS */ -#endif /* TCPSOCKET */ -#endif /* OS2 */ - - initflow(); /* Initialize flow-control table */ - -#ifndef NOICP -#ifdef CKFLOAT - initfloat(); /* Deduce floating-point precision */ -#endif /* CKFLOAT */ -#endif /* NOICP */ - -#ifndef NOXFER - initxlist(); /* Init exception lists */ - -#ifdef CK_XYZ /* Initialize protocols... */ - -#ifdef XYZ_INTERNAL /* XYZMODEM are internal ... */ - -#ifdef COMMENT - /* Can't do this for XMODEM because if filename contains a "C" etc... */ - initproto(PROTO_X, "rx %s","rx %s", NULL, NULL, NULL, NULL, NULL); - initproto(PROTO_XC,"rc %s","rc %s", NULL, NULL, NULL, NULL, NULL); -#else /* COMMENT */ - initproto(PROTO_X, NULL, NULL, NULL, NULL, NULL, NULL, NULL); - initproto(PROTO_XC,NULL, NULL, NULL, NULL, NULL, NULL, NULL); -#endif /* COMMENT */ - initproto(PROTO_Y, "rb","rb", NULL, NULL, NULL, NULL, NULL); - initproto(PROTO_G, "rb","rb", NULL, NULL, NULL, NULL, NULL); - initproto(PROTO_Z, "rz","rz", NULL, NULL, NULL, NULL, NULL); - initproto(PROTO_K,"kermit -ir","kermit -r","kermit -x",NULL,NULL,NULL,NULL); - /* Kermit Must be last */ - -#else /* XYZMODEM are external protocols ... */ - - /* s1 s2 s3 s4 s5 s6 s7 */ - initproto(PROTO_X, "rx %s","rx %s",NULL,"sx %s","sx -a %s","rx %s", "rx %s"); - initproto(PROTO_XC,"rc %s","rc %s",NULL,"sx %s","sx -a %s","rc %s", "rc %s"); - initproto(PROTO_Y, "rb", "rb", NULL,"sb %s","sb -a %s","rb", "rb" ); - initproto(PROTO_G, "rb", "rb", NULL,"sb %s","sb -a %s","rb", "rb" ); - initproto(PROTO_Z, "rz", "rz", NULL,"sz %s","sz -a %s","rz", "rz" ); - initproto(PROTO_K, "kermit -ir","kermit -r","kermit -x",NULL,NULL,NULL,NULL); - /* Kermit must be last */ - -#endif /* XYZ_INTERNAL */ - -#else /* No XYZMODEM support */ - - initproto(PROTO_K,"kermit -ir","kermit -r","kermit -x",NULL,NULL,NULL,NULL); - -#endif /* CK_XYZ */ -#endif /* NOXFER */ - - connoi(); /* Console interrupts off */ - -#ifndef NOXFER -#ifdef OS2 - /* Initialize Kermit and Zmodem Auto-Download Strings */ - adl_kstr = strdup("KERMIT READY TO SEND..."); - adl_zstr = strdup("rz\r"); -#endif /* OS2 */ - -#ifdef PATTERNS - initpat(); /* Initialize filename patterns */ -#endif /* PATTERNS */ -#endif /* NOXFER */ - -#ifndef NOCSETS - initcsets(); /* Initialize character sets */ -#endif /* NOCSETS */ - -#ifndef NOICP -#ifdef DFCDMSG - makestr(&cdmsgstr,DFCDMSG); - makelist(cdmsgstr,cdmsgfile,8); /* Initialize CD message filenames */ -#endif /* DFCDMSG */ -#endif /* NOICP */ - - sstate = 0; /* No default start state. */ -#ifdef DYNAMIC - if (getiobs() < 0) - fatal("Can't allocate i/o buffers!"); -#endif /* DYNAMIC */ - -#ifndef NOSPL -#ifndef NORANDOM - { - char stackdata[256]; - unsigned int c = 1234, n; - /* try to make a random unsigned int to feed srand() */ -#ifndef VMS - /* time.h and MultiNet do not get along */ - c = time(NULL); -#endif /* VMS */ - c *= getpid(); - /* Referenced before set... DELIBERATELY */ - for (n = 0; n < sizeof(stackdata); n++) /* IGNORE WARNING */ - c += stackdata[n]; /* DELIBERATELY USED BEFORE SET */ - srand((unsigned int)c); - } -#endif /* NORANDOM */ -#endif /* NOSPL */ - - ckhost(myhost,MYHOSTL); /* Name of local host */ - debug(F110,"main ckhost",myhost,0); -#ifdef IKSD - if (!inserver) { -#endif /* IKSD */ - ckstrncpy(ttname,dftty,TTNAMLEN); /* Set up default tty name. */ - local = nolocal ? 0 : dfloc; /* And whether it's local or remote. */ - parity = dfprty; /* Set initial parity, */ -#ifndef NOXFER - myindex = getsysix(cksysid); /* System index */ -#endif /* NOXFER */ - if (local) if (ttopen(ttname,&local,0,0) < 0) { -#ifndef OS2 - conol("Can't open device: "); - conoll(ttname); -#endif /* OS2 */ - local = 0; - ckstrncpy(ttname,CTTNAM,TTNAMLEN); - } - setflow(); /* Set appropriate flow control */ - speed = ttgspd(); /* Get transmission speed. */ -#ifdef IKSD - } -#endif /* IKSD */ - -#ifdef ANYX25 /* All X.25 implementations */ -#ifndef IBMX25 /* except IBM have PAD support */ - initpad(); /* Initialize X.25 PAD */ -#endif /* IBMX25 */ -#endif /* ANYX25 */ - -#ifndef NOXFER - if (inibufs(SBSIZ,RBSIZ) < 0) /* Allocate packet buffers */ - fatal("Can't allocate packet buffers!"); -#ifndef NOCKSPEED - setprefix(prefixing); /* Set up control char prefixing */ -#endif /* NOCKSPEED */ -#endif /* NOXFER */ - -#ifndef NOICP - if (sstelnet -#ifdef IKSD - || inserver -#endif /* IKSD */ - ) { - int on = 1, x = 0; - extern int ckxech, ttnet, ttnproto, cmdmsk; -#ifdef SO_SNDBUF - extern int tcp_sendbuf; -#endif -#ifdef SO_RCVBUF - extern int tcp_recvbuf; -#endif -#ifdef SO_KEEPALIVE - extern int tcp_keepalive; -#endif -#ifdef SO_LINGER - extern int tcp_linger, tcp_linger_tmo; -#endif /* SO_LINGER */ -#ifdef SO_DONTROUTE - extern int tcp_dontroute; -#endif /* SO_DONTROUTE */ -#ifdef TCP_NODELAY - extern int tcp_nodelay; -#endif /* TCP_NODELAY */ -#ifdef IKSD - extern int iklogopen; -#endif /* IKSD */ - extern int ttmdm; - -#ifdef UNIX - if (isatty(0)) - fatal("Internet Kermit Service cannot be started at a terminal."); -#endif /* UNIX */ - - reliable = xreliable = SET_ON; /* IKSD has reliable connection */ -#ifndef VMS - flow = 0; /* No flow control needed */ -#endif /* VMS */ - bgset = 0; /* Not in background */ - nopush = 1; /* No external processes */ - parity = 0; /* 8 bits ... */ - cmdmsk = 0xff; /* all the way */ - cmask = 0xff; - -#ifdef IKSD - if (inserver) { /* If IKSD */ - doiksdinit(); /* Execute IKSD configuration file */ - while (tlevel > -1) - parser(1); /* (Ignore any file-xfer commands) */ - iksdcf = 1; /* IKSD c.f. has been processed */ - } - if (!iklogopen) (VOID) doiklog(); /* Open Kermit-specific log */ -#endif /* IKSD */ - -#ifdef UNIX - setbuf(stdout,NULL); /* Don't buffer the output */ - ckstrncpy(ttname,"0",TTNAMLEN); /* not "/dev/tty"... */ -#endif /* UNIX */ - local = 0; /* We are in remote mode */ - ckxech = 1; /* We will echo */ -#ifdef OS2 - nettype = NET_TCPB; /* So ttopen() treats the connection */ - mdmtyp = -nettype; /* as a network */ -#endif /* OS2 */ - debug(F100,"main about to call ttopen() inserver","",0); - if (ttopen(ttname,&local,mdmtyp,0) < 0) { /* Open comm channel */ - fatal("can't initialize i/o"); - } -#ifdef OS2 - local = 0; - network = 1; /* Does use networking code */ -#else /* OS2 */ - network = 0; /* Does not use networking code */ -#endif /* OS2 */ - ttmdm = -1; /* Does not use a modem */ - sstelnet = 1; /* Do server-side Telnet negotations */ - debug(F111,"MAIN","sstelnet",sstelnet); - ttnet = NET_TCPB; /* Network type is TCP sockets */ - ttnproto = NP_TELNET; /* Netword protocol is Telnet */ -#ifdef IKSDB - dbinit(); /* Initialize database record */ -#endif /* IKSDB */ -#ifndef OS2 -#ifdef CK_AUTHENTICATION - /* Before initializating Telnet/Rlogin negotiations, init Kerberos */ - ck_auth_init(ckgetpeer(),"","",0); -#endif /* CK_AUTHENTICATION */ - -#ifdef NON_BLOCK_IO - on = 1; - x = socket_ioctl(0,FIONBIO,&on); - debug(F101,"main FIONBIO","",x); -#endif /* NON_BLOCK_IO */ -#ifdef SO_OOBINLINE - on = 1; - x = setsockopt(0, SOL_SOCKET, SO_OOBINLINE, (char *)&on, sizeof(on)); - debug(F101,"main SO_OOBINLINE","",x); -#endif /* SO_OOBINLINE */ - -#ifndef NOTCPOPTS -#ifndef datageneral -#ifdef SOL_SOCKET -#ifdef TCP_NODELAY - no_delay(0,tcp_nodelay); -#endif /* TCP_NODELAY */ -#ifdef SO_KEEPALIVE - keepalive(0,tcp_keepalive); -#endif /* SO_KEEPALIVE */ -#ifdef SO_LINGER - ck_linger(0,tcp_linger, tcp_linger_tmo); -#endif /* SO_LINGER */ -#ifdef SO_DONTROUTE - dontroute(0,tcp_dontroute); -#endif /* SO_DONTROUTE */ -#ifdef SO_SNDBUF - sendbuf(0,tcp_sendbuf); -#endif /* SO_SNDBUF */ -#ifdef SO_RCVBUF - recvbuf(0,tcp_recvbuf); -#endif /* SO_RCVBUF */ -#endif /* SOL_SOCKET */ -#endif /* datageneral */ -#endif /* NOTCPOPTS */ - -#ifdef CK_SSL - if (ck_ssleay_is_installed()) { - if (!ssl_tn_init(SSL_SERVER)) { - if (bio_err != NULL) { - BIO_printf(bio_err,"do_ssleay_init() failed\r\n"); - ERR_print_errors(bio_err); - } else { - fflush(stderr); - fprintf(stderr,"do_ssleay_init() failed\r\n"); - ERR_print_errors_fp(stderr); - } - switch (ttnproto) { - case NP_SSL: - case NP_TLS: - case NP_SSL_TELNET: - case NP_TLS_TELNET: - doexit(BAD_EXIT,1); - } - /* otherwise we will continue to accept the connection */ - /* without SSL or TLS support unless required. */ - if ( TELOPT_DEF_S_ME_MODE(TELOPT_START_TLS) != TN_NG_MU ) - TELOPT_DEF_S_ME_MODE(TELOPT_START_TLS) = TN_NG_RF; - if ( TELOPT_DEF_S_U_MODE(TELOPT_START_TLS) != TN_NG_MU ) - TELOPT_DEF_S_U_MODE(TELOPT_START_TLS) = TN_NG_RF; - if ( TELOPT_DEF_C_ME_MODE(TELOPT_START_TLS) != TN_NG_MU ) - TELOPT_DEF_C_ME_MODE(TELOPT_START_TLS) = TN_NG_RF; - if ( TELOPT_DEF_C_U_MODE(TELOPT_START_TLS) != TN_NG_MU ) - TELOPT_DEF_C_U_MODE(TELOPT_START_TLS) = TN_NG_RF; - } else { - if ( ck_ssl_incoming(0) < 0 ) { - doexit(BAD_EXIT,1); - } - } - } -#endif /* CK_SSL */ - -#ifdef TNCODE - tn_ini(); /* Start Telnet negotiation now */ -#endif /* TNCODE */ -#endif /* OS2 */ - } - debug(F101,"main argc after prescan()","",argc); - - /* Now process any relevant environment variables */ - -#ifndef NODIAL - getdialenv(); /* Dialing */ -#ifdef NETCONN - ndinit(); /* Initialize network directory info */ - getnetenv(); /* Network directories */ -#endif /* NETCONN */ -#endif /* NODIAL */ - -#ifndef NOXFER -#ifdef CK_FAST - dofast(); /* By now FAST defaults should be OK */ -#endif /* CK_FAST */ -#endif /* NOXFER */ - -#ifndef NOCMDL - ikslogin(); /* IKSD Login and other stuff */ -#ifdef IKSD -#ifdef NT - if ( inserver ) - setntcreds(); -#endif /* NT */ -#endif /* IKSD */ -#endif /* NOCMDL */ - - if (howcalled == I_AM_SSHSUB) { - reliable = 1; /* We say the connection is reliable */ - xreliable = 1; /* And that we said it was */ - setreliable = 1; /* And pretend the "user" did too */ - xfinish = 1; /* For REMOTE HELP response */ - mdmtyp = 0; /* For ttopen() */ - ckstrncpy(ttname,"0",TTNAMLEN+1); /* Use file descriptor 0 */ - local = 0; /* And force remote mode */ - ttopen(ttname,&local,mdmtyp,0); /* Open the "connection" */ - sstate = 'x'; /* Initial state is Server */ - proto(); /* Enter protocol */ - doexit(GOOD_EXIT,xitsta); /* Exit when done */ - } - debug(F111,"howcalled",myname,howcalled); - -#ifdef NOCCTRAP - dotakeini(0); -#else /* NOCCTRAP */ - debug(F100,"main about to cc_execute","",0); - setint(); - cc_execute( ckjaddr(cmjbuf), dotakeini, failtakeini ); -#endif /* NOCCTRAP */ - - debug(F111,"main 2 cfilef",cmdfil,cfilef); - if (cmdfil[0]) { /* If we got one (see prescan())... */ -#ifdef NOCCTRAP - docmdfile(0); /* execute it. */ -#else /* NOCCTRAP */ - setint(); - cc_execute( ckjaddr(cmjbuf), docmdfile, failcmdfile ); -#endif /* NOCCTRAP */ - } -#ifndef OS2 /* Preserve name so we can delete it */ - *cmdfil = '\0'; /* Done, nullify the file name */ -#endif /* OS2 */ -#endif /* NOICP */ - -#ifndef NOCMDL -/* Look for a UNIX-style command line... */ - - what = W_NOTHING; - - debug(F101,"main argc","",argc); -#ifndef NOHELP - iniopthlp(); /* Initialize cmdline arg help */ -#endif /* NOHELP */ - if ( -#ifdef COMMENT - !cfilef && -#endif /* COMMENT */ - argc > 1) { /* Command line arguments? */ - sstate = (CHAR) cmdlin(); /* Yes, parse. */ -#ifdef NETCONN -#ifndef NOURL - if (haveurl) { /* Was a URL given? */ - dourl(); /* if so, do it. */ - } -#endif /* NOURL */ -#endif /* NETCONN */ -#ifndef NOXFER - zstate = sstate; /* Remember sstate around protocol */ - debug(F101,"main zstate","",zstate); -#endif /* NOXFER */ - -#ifndef NOLOCAL - if (cflg) { /* Connect first if requested */ - doconect(0,0); - if (ttchk() < 0) - dologend(); - cflg = 0; - } -#endif /* NOLOCAL */ - -#ifndef NOXFER - if (sstate) { -#ifndef NOLOCAL - if (displa) concb((char)escape); /* (for console "interrupts") */ -#endif /* NOLOCAL */ -#ifdef NOCCTRAP - docmdline(1); -#else /* NOCCTRAP */ - setint(); - cc_execute( ckjaddr(cmjbuf), docmdline, failcmdline ); -#endif /* NOCCTRAP */ - } -#endif /* NOXFER */ - -#ifndef NOICP -/* - If a command-line action argument was given and -S ("stay") was not given, - exit now. -*/ - if ((cflg || cnflg || zstate) && !stayflg) -#endif /* NOICP */ - doexit(GOOD_EXIT,xitsta); /* Exit with good status */ - -#ifndef NOLOCAL -#ifndef NOICP - if (local) { -#ifdef NETCONN - if ((cflg || cnflg) && tn_exit && ttchk() < 0) - doexit(GOOD_EXIT,xitsta); /* Exit with good status */ -#endif /* NETCONN */ - if (exitonclose && !network && - (carrier != CAR_OFF && (ttgmdm() & BM_DCD) == 0)) - doexit(GOOD_EXIT,xitsta); /* Exit with good status */ - if (exitonclose && network && ttchk() < 0) - doexit(GOOD_EXIT,xitsta); /* Exit with good status */ - } -#endif /* NOICP */ -#endif /* NOLOCAL */ - } -#endif /* NOCMDL */ - -#ifdef NOICP /* No interactive command parser */ -#ifndef NOCMDL - else { - - /* Command-line-only version */ - fatal("?No command-line options given - type 'kermit -h' for help"); - } -#else /* Neither one! */ - sstate = 'x'; - justone = 0; - proto(); /* So go into server mode */ - doexit(GOOD_EXIT,xitsta); /* exit with good status */ - -#endif /* NOCMDL */ -#else /* not NOICP */ -/* - If no action requested on command line, or if -S ("stay") was included, - enter the interactive command parser. -*/ - if (!clcmds) - herald(); /* Display program herald. */ - -#ifdef NOCCTRAP - debug(F100,"main NOCCTRAP setting interrupt trap","",0); - setint(); /* Set up command interrupt traps */ - doicp(NULL); -#else /* NOCCTRAP */ - while (1) { - debug(F100,"main setting interrupt trap","",0); - setint(); /* Set up command interrupt traps */ - if (!cc_execute(ckjaddr(cmjbuf), doicp, failicp)) - break; - } -#endif /* NOCCTRAP */ -#endif /* NOICP */ -#ifndef MAINISVOID - return(1); -#endif /* MAINISVOID */ -} - -#ifdef DYNAMIC -/* Allocate file i/o buffers */ - -char *zinbuffer = NULL, *zoutbuffer = NULL; - -int -getiobs() { - zinbuffer = (char *)malloc(INBUFSIZE); - if (!zinbuffer) return(-1); - zoutbuffer = (char *)malloc(zobufsize); - debug(F101,"zoutbuffer malloc","",zobufsize); - if (!zoutbuffer) return(-1); - debug(F100,"getiobs ok","",0); - return(0); -} -#endif /* DYNAMIC */ diff --git a/.pc/applied-patches b/.pc/applied-patches index bdc5957..6b6c6e7 100644 --- a/.pc/applied-patches +++ b/.pc/applied-patches @@ -2,4 +2,3 @@ 020_man-hyphen-quoting.patch 030_fix-if-else.patch 040_pam-password-prompting.patch -050_ck_patch.patch diff --git a/ckcmai.c b/ckcmai.c index d0567e1..33504dc 100644 --- a/ckcmai.c +++ b/ckcmai.c @@ -97,7 +97,7 @@ char *ck_s_name = "C-Kermit"; #endif /* OS2 */ char *ck_s_who = ""; /* Where customized, "" = not. */ -char *ck_patch = "3"; /* Patch info, if any. */ +char *ck_patch = ""; /* Patch info, if any. */ #define CKVERLEN 128 char versiox[CKVERLEN]; /* Version string buffer */ -- 2.11.0