113e3f4d6SMark Murray /* 213e3f4d6SMark Murray * Copyright (c) 1989, 1993 313e3f4d6SMark Murray * The Regents of the University of California. All rights reserved. 413e3f4d6SMark Murray * 513e3f4d6SMark Murray * Redistribution and use in source and binary forms, with or without 613e3f4d6SMark Murray * modification, are permitted provided that the following conditions 713e3f4d6SMark Murray * are met: 813e3f4d6SMark Murray * 1. Redistributions of source code must retain the above copyright 913e3f4d6SMark Murray * notice, this list of conditions and the following disclaimer. 1013e3f4d6SMark Murray * 2. Redistributions in binary form must reproduce the above copyright 1113e3f4d6SMark Murray * notice, this list of conditions and the following disclaimer in the 1213e3f4d6SMark Murray * documentation and/or other materials provided with the distribution. 1313e3f4d6SMark Murray * 3. All advertising materials mentioning features or use of this software 1413e3f4d6SMark Murray * must display the following acknowledgement: 1513e3f4d6SMark Murray * This product includes software developed by the University of 1613e3f4d6SMark Murray * California, Berkeley and its contributors. 1713e3f4d6SMark Murray * 4. Neither the name of the University nor the names of its contributors 1813e3f4d6SMark Murray * may be used to endorse or promote products derived from this software 1913e3f4d6SMark Murray * without specific prior written permission. 2013e3f4d6SMark Murray * 2113e3f4d6SMark Murray * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2213e3f4d6SMark Murray * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2313e3f4d6SMark Murray * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2413e3f4d6SMark Murray * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2513e3f4d6SMark Murray * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2613e3f4d6SMark Murray * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2713e3f4d6SMark Murray * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2813e3f4d6SMark Murray * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2913e3f4d6SMark Murray * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3013e3f4d6SMark Murray * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3113e3f4d6SMark Murray * SUCH DAMAGE. 3213e3f4d6SMark Murray */ 3313e3f4d6SMark Murray 3413e3f4d6SMark Murray /* a *lot* of ugly global definitions that really should be removed... 3513e3f4d6SMark Murray */ 3613e3f4d6SMark Murray 3713e3f4d6SMark Murray #include "telnetd.h" 3813e3f4d6SMark Murray 394137ff4cSJacques Vidrine RCSID("$Id: global.c,v 1.13 2001/07/19 16:00:42 assar Exp $"); 4013e3f4d6SMark Murray 4113e3f4d6SMark Murray /* 4213e3f4d6SMark Murray * Telnet server variable declarations 4313e3f4d6SMark Murray */ 4413e3f4d6SMark Murray char options[256]; 4513e3f4d6SMark Murray char do_dont_resp[256]; 4613e3f4d6SMark Murray char will_wont_resp[256]; 4713e3f4d6SMark Murray int linemode; /* linemode on/off */ 4813e3f4d6SMark Murray int flowmode; /* current flow control state */ 4913e3f4d6SMark Murray int restartany; /* restart output on any character state */ 5013e3f4d6SMark Murray #ifdef DIAGNOSTICS 5113e3f4d6SMark Murray int diagnostic; /* telnet diagnostic capabilities */ 5213e3f4d6SMark Murray #endif /* DIAGNOSTICS */ 5313e3f4d6SMark Murray int require_otp; 5413e3f4d6SMark Murray 5513e3f4d6SMark Murray slcfun slctab[NSLC + 1]; /* slc mapping table */ 5613e3f4d6SMark Murray 5713e3f4d6SMark Murray char *terminaltype; 5813e3f4d6SMark Murray 5913e3f4d6SMark Murray /* 6013e3f4d6SMark Murray * I/O data buffers, pointers, and counters. 6113e3f4d6SMark Murray */ 6213e3f4d6SMark Murray char ptyobuf[BUFSIZ+NETSLOP], *pfrontp, *pbackp; 6313e3f4d6SMark Murray 6413e3f4d6SMark Murray char netibuf[BUFSIZ], *netip; 6513e3f4d6SMark Murray 6613e3f4d6SMark Murray char netobuf[BUFSIZ+NETSLOP], *nfrontp, *nbackp; 6713e3f4d6SMark Murray char *neturg; /* one past last bye of urgent data */ 6813e3f4d6SMark Murray 6913e3f4d6SMark Murray int pcc, ncc; 7013e3f4d6SMark Murray 7113e3f4d6SMark Murray int ourpty, net; 7213e3f4d6SMark Murray int SYNCHing; /* we are in TELNET SYNCH mode */ 7313e3f4d6SMark Murray 7413e3f4d6SMark Murray /* 7513e3f4d6SMark Murray * The following are some clocks used to decide how to interpret 7613e3f4d6SMark Murray * the relationship between various variables. 7713e3f4d6SMark Murray */ 7813e3f4d6SMark Murray 7913e3f4d6SMark Murray struct clocks_t clocks; 8013e3f4d6SMark Murray 8113e3f4d6SMark Murray 8213e3f4d6SMark Murray /* whether to log unauthenticated login attempts */ 8313e3f4d6SMark Murray int log_unauth; 8413e3f4d6SMark Murray 8513e3f4d6SMark Murray /* do not print warning if connection is not encrypted */ 8613e3f4d6SMark Murray int no_warn; 8713e3f4d6SMark Murray 8813e3f4d6SMark Murray /* 8913e3f4d6SMark Murray * This function appends data to nfrontp and advances nfrontp. 9013e3f4d6SMark Murray */ 9113e3f4d6SMark Murray 9213e3f4d6SMark Murray int 9313e3f4d6SMark Murray output_data (const char *format, ...) 9413e3f4d6SMark Murray { 9513e3f4d6SMark Murray va_list args; 964137ff4cSJacques Vidrine int remaining, ret; 9713e3f4d6SMark Murray 9813e3f4d6SMark Murray va_start(args, format); 9913e3f4d6SMark Murray remaining = BUFSIZ - (nfrontp - netobuf); 10013e3f4d6SMark Murray ret = vsnprintf (nfrontp, 10113e3f4d6SMark Murray remaining, 10213e3f4d6SMark Murray format, 10313e3f4d6SMark Murray args); 1044137ff4cSJacques Vidrine nfrontp += min(ret, remaining-1); 10513e3f4d6SMark Murray va_end(args); 10613e3f4d6SMark Murray return ret; 10713e3f4d6SMark Murray } 108