summaryrefslogtreecommitdiff
path: root/usr.bin/ssh/log-client.c
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>1999-09-26 20:53:39 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>1999-09-26 20:53:39 +0000
commit8c922cd518cd36a281ce7cb57136ab3daff4af36 (patch)
tree3e941e108cbcb7ced11e67bd3d01c5e04dfa6283 /usr.bin/ssh/log-client.c
parent51e6206503f4e208e20bee340a0992c2dbccf1fa (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.c137
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. */