diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1999-09-26 20:53:39 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1999-09-26 20:53:39 +0000 |
commit | 8c922cd518cd36a281ce7cb57136ab3daff4af36 (patch) | |
tree | 3e941e108cbcb7ced11e67bd3d01c5e04dfa6283 /usr.bin/ssh/log-client.c | |
parent | 51e6206503f4e208e20bee340a0992c2dbccf1fa (diff) |
i bet a lot of people didn't know what ssh 1.2.16 had a nice license.
well, except for the patent issues. someone in sweden (forget their
name at the moment) cleaned out most of the patented code, and now
this code removes rsa code. when this is done, it will link against
libssl, but the work isn't completely done yet. then we need to bring
this up to modern days, featurewise.
Diffstat (limited to 'usr.bin/ssh/log-client.c')
-rw-r--r-- | usr.bin/ssh/log-client.c | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/usr.bin/ssh/log-client.c b/usr.bin/ssh/log-client.c new file mode 100644 index 00000000000..651f991e3f1 --- /dev/null +++ b/usr.bin/ssh/log-client.c @@ -0,0 +1,137 @@ +/* + +log-client.c + +Author: Tatu Ylonen <ylo@cs.hut.fi> + +Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland + All rights reserved + +Created: Mon Mar 20 21:13:40 1995 ylo + +Client-side versions of debug(), log(), etc. These print to stderr. + +*/ + +#include "includes.h" +RCSID("$Id: log-client.c,v 1.1 1999/09/26 20:53:36 deraadt Exp $"); + +#include "xmalloc.h" +#include "ssh.h" + +static int log_debug = 0; +static int log_quiet = 0; + +void log_init(char *av0, int on_stderr, int debug, int quiet, + SyslogFacility facility) +{ + log_debug = debug; + log_quiet = quiet; +} + +void log(const char *fmt, ...) +{ + va_list args; + + if (log_quiet) + return; + va_start(args, fmt); + vfprintf(stderr, fmt, args); + fprintf(stderr, "\n"); + va_end(args); +} + +void debug(const char *fmt, ...) +{ + va_list args; + if (log_quiet || !log_debug) + return; + va_start(args, fmt); + vfprintf(stderr, fmt, args); + fprintf(stderr, "\n"); + va_end(args); +} + +void error(const char *fmt, ...) +{ + va_list args; + if (log_quiet) + return; + va_start(args, fmt); + vfprintf(stderr, fmt, args); + fprintf(stderr, "\n"); + va_end(args); +} + +struct fatal_cleanup +{ + struct fatal_cleanup *next; + void (*proc)(void *); + void *context; +}; + +static struct fatal_cleanup *fatal_cleanups = NULL; + +/* Registers a cleanup function to be called by fatal() before exiting. */ + +void fatal_add_cleanup(void (*proc)(void *), void *context) +{ + struct fatal_cleanup *cu; + + cu = xmalloc(sizeof(*cu)); + cu->proc = proc; + cu->context = context; + cu->next = fatal_cleanups; + fatal_cleanups = cu; +} + +/* Removes a cleanup frunction to be called at fatal(). */ + +void fatal_remove_cleanup(void (*proc)(void *context), void *context) +{ + struct fatal_cleanup **cup, *cu; + + for (cup = &fatal_cleanups; *cup; cup = &cu->next) + { + cu = *cup; + if (cu->proc == proc && cu->context == context) + { + *cup = cu->next; + xfree(cu); + return; + } + } + fatal("fatal_remove_cleanup: no such cleanup function: 0x%lx 0x%lx\n", + (unsigned long)proc, (unsigned long)context); +} + +/* Function to display an error message and exit. This is in this file because + this needs to restore terminal modes before exiting. See log-client.c + for other related functions. */ + +void fatal(const char *fmt, ...) +{ + va_list args; + struct fatal_cleanup *cu, *next_cu; + static int fatal_called = 0; + + if (!fatal_called) + { + fatal_called = 1; + + /* Call cleanup functions. */ + for (cu = fatal_cleanups; cu; cu = next_cu) + { + next_cu = cu->next; + (*cu->proc)(cu->context); + } + } + + va_start(args, fmt); + vfprintf(stderr, fmt, args); + fprintf(stderr, "\n"); + va_end(args); + exit(255); +} + +/* fatal() is in ssh.c so that it can properly reset terminal modes. */ |