aboutsummaryrefslogtreecommitdiff
path: root/src/log.c
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2011-07-19 22:16:28 +0200
committerAris Adamantiadis <aris@0xbadc0de.be>2011-07-19 22:16:28 +0200
commitda954c2c5ee85bcbe2f5ad9f507a6306b0f5f8b9 (patch)
treeb13cc18e78ff7a0549974b4823678f189fe82b6a /src/log.c
parentdc9ac022f5590272cc7a3dc18726802ffdc73c8f (diff)
downloadlibssh-da954c2c5ee85bcbe2f5ad9f507a6306b0f5f8b9.tar.gz
libssh-da954c2c5ee85bcbe2f5ad9f507a6306b0f5f8b9.tar.xz
libssh-da954c2c5ee85bcbe2f5ad9f507a6306b0f5f8b9.zip
Fixes the ssh_log issue on ssh_bind handles.
Diffstat (limited to 'src/log.c')
-rw-r--r--src/log.c64
1 files changed, 45 insertions, 19 deletions
diff --git a/src/log.c b/src/log.c
index 6ec5a8ea..509b8abc 100644
--- a/src/log.c
+++ b/src/log.c
@@ -37,6 +37,33 @@
* @{
*/
+/** @internal
+ * @brief do the actual work of logging an event
+ */
+
+static void do_ssh_log(struct ssh_common_struct *common, int verbosity,
+ const char *buffer){
+ char indent[256];
+ int min;
+ if (common->callbacks && common->callbacks->log_function) {
+ common->callbacks->log_function((ssh_session)common, verbosity, buffer,
+ common->callbacks->userdata);
+ } else if (verbosity == SSH_LOG_FUNCTIONS) {
+ if (common->log_indent > 255) {
+ min = 255;
+ } else {
+ min = common->log_indent;
+ }
+
+ memset(indent, ' ', min);
+ indent[min] = '\0';
+
+ fprintf(stderr, "[func] %s%s\n", indent, buffer);
+ } else {
+ fprintf(stderr, "[%d] %s\n", verbosity, buffer);
+ }
+}
+
/**
* @brief Log a SSH event.
*
@@ -48,32 +75,31 @@
*/
void ssh_log(ssh_session session, int verbosity, const char *format, ...) {
char buffer[1024];
- char indent[256];
- int min;
va_list va;
- if (verbosity <= session->log_verbosity) {
+ if (verbosity <= session->common.log_verbosity) {
va_start(va, format);
vsnprintf(buffer, sizeof(buffer), format, va);
va_end(va);
+ do_ssh_log(&session->common, verbosity, buffer);
+ }
+}
- if (session->callbacks && session->callbacks->log_function) {
- session->callbacks->log_function(session, verbosity, buffer,
- session->callbacks->userdata);
- } else if (verbosity == SSH_LOG_FUNCTIONS) {
- if (session->log_indent > 255) {
- min = 255;
- } else {
- min = session->log_indent;
- }
-
- memset(indent, ' ', min);
- indent[min] = '\0';
+/** @internal
+ * @brief log a SSH event with a common pointer
+ * @param common The SSH/bind session.
+ * @param verbosity The verbosity of the event.
+ * @param format The format string of the log entry.
+ */
+void ssh_log_common(struct ssh_common_struct *common, int verbosity, const char *format, ...){
+ char buffer[1024];
+ va_list va;
- fprintf(stderr, "[func] %s%s\n", indent, buffer);
- } else {
- fprintf(stderr, "[%d] %s\n", verbosity, buffer);
- }
+ if (verbosity <= common->log_verbosity) {
+ va_start(va, format);
+ vsnprintf(buffer, sizeof(buffer), format, va);
+ va_end(va);
+ do_ssh_log(common, verbosity, buffer);
}
}