diff options
author | Aris Adamantiadis <aris@0xbadc0de.be> | 2011-07-19 22:16:28 +0200 |
---|---|---|
committer | Aris Adamantiadis <aris@0xbadc0de.be> | 2011-07-19 22:16:28 +0200 |
commit | da954c2c5ee85bcbe2f5ad9f507a6306b0f5f8b9 (patch) | |
tree | b13cc18e78ff7a0549974b4823678f189fe82b6a /src | |
parent | dc9ac022f5590272cc7a3dc18726802ffdc73c8f (diff) | |
download | libssh-da954c2c5ee85bcbe2f5ad9f507a6306b0f5f8b9.tar.gz libssh-da954c2c5ee85bcbe2f5ad9f507a6306b0f5f8b9.tar.xz libssh-da954c2c5ee85bcbe2f5ad9f507a6306b0f5f8b9.zip |
Fixes the ssh_log issue on ssh_bind handles.
Diffstat (limited to 'src')
-rw-r--r-- | src/bind.c | 6 | ||||
-rw-r--r-- | src/callbacks.c | 2 | ||||
-rw-r--r-- | src/client.c | 4 | ||||
-rw-r--r-- | src/error.c | 9 | ||||
-rw-r--r-- | src/keyfiles.c | 14 | ||||
-rw-r--r-- | src/log.c | 64 | ||||
-rw-r--r-- | src/messages.c | 8 | ||||
-rw-r--r-- | src/options.c | 16 | ||||
-rw-r--r-- | src/server.c | 4 | ||||
-rw-r--r-- | src/session.c | 2 |
10 files changed, 78 insertions, 51 deletions
@@ -150,7 +150,7 @@ ssh_bind ssh_bind_new(void) { ZERO_STRUCTP(ptr); ptr->bindfd = SSH_INVALID_SOCKET; ptr->bindport= 22; - ptr->log_verbosity = 0; + ptr->common.log_verbosity = 0; return ptr; } @@ -359,7 +359,7 @@ int ssh_bind_accept(ssh_bind sshbind, ssh_session session) { } } - session->log_verbosity = sshbind->log_verbosity; + session->common.log_verbosity = sshbind->common.log_verbosity; ssh_socket_free(session->socket); session->socket = ssh_socket_new(session); @@ -375,7 +375,7 @@ int ssh_bind_accept(ssh_bind sshbind, ssh_session session) { session->dsa_key = dsa; session->rsa_key = rsa; -return SSH_OK; + return SSH_OK; } diff --git a/src/callbacks.c b/src/callbacks.c index bb42b4b..5a61180 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -37,7 +37,7 @@ int ssh_set_callbacks(ssh_session session, ssh_callbacks cb) { leave_function(); return SSH_ERROR; } - session->callbacks = cb; + session->common.callbacks = cb; leave_function(); return 0; } diff --git a/src/client.c b/src/client.c index 426dd2b..78f417c 100644 --- a/src/client.c +++ b/src/client.c @@ -41,8 +41,8 @@ #include "libssh/misc.h" #define set_status(session, status) do {\ - if (session->callbacks && session->callbacks->connect_status_function) \ - session->callbacks->connect_status_function(session->callbacks->userdata, status); \ + if (session->common.callbacks && session->common.callbacks->connect_status_function) \ + session->common.callbacks->connect_status_function(session->common.callbacks->userdata, status); \ } while (0) /** diff --git a/src/error.c b/src/error.c index e2d02ce..46d6382 100644 --- a/src/error.c +++ b/src/error.c @@ -24,6 +24,7 @@ #include <stdio.h> #include <stdarg.h> #include "libssh/priv.h" +#include "libssh/session.h" /** * @defgroup libssh_error The SSH error functions. @@ -48,13 +49,13 @@ * @param ... The arguments for the format string. */ void ssh_set_error(void *error, int code, const char *descr, ...) { - struct error_struct *err = error; + struct ssh_common_struct *err = error; va_list va; va_start(va, descr); - vsnprintf(err->error_buffer, ERROR_BUFFERLEN, descr, va); + vsnprintf(err->error.error_buffer, ERROR_BUFFERLEN, descr, va); va_end(va); - err->error_code = code; - ssh_log(error,SSH_LOG_RARE,"Error : %s",err->error_buffer); + err->error.error_code = code; + ssh_log_common(err,SSH_LOG_RARE,"Error : %s",err->error.error_buffer); } /** diff --git a/src/keyfiles.c b/src/keyfiles.c index 6d8ced6..0540a5d 100644 --- a/src/keyfiles.c +++ b/src/keyfiles.c @@ -995,7 +995,7 @@ ssh_private_key privatekey_from_base64(ssh_session session, const char *b64_pkey ssh_log(session, SSH_LOG_RARE, "Trying to read privkey type=%s, passphase=%s, authcb=%s", type ? type == SSH_KEYTYPE_DSS ? "ssh-dss" : "ssh-rsa": "unknown", passphrase ? "true" : "false", - session->callbacks && session->callbacks->auth_function ? "true" : "false"); + session->common.callbacks && session->common.callbacks->auth_function ? "true" : "false"); if (type == 0) { type = privatekey_type_from_string(b64_pkey); @@ -1008,9 +1008,9 @@ ssh_private_key privatekey_from_base64(ssh_session session, const char *b64_pkey case SSH_KEYTYPE_DSS: #ifdef HAVE_LIBGCRYPT if (passphrase == NULL) { - if (session->callbacks && session->callbacks->auth_function) { - auth_cb = session->callbacks->auth_function; - auth_ud = session->callbacks->userdata; + if (session->common.callbacks && session->common.callbacks->auth_function) { + auth_cb = session->common.callbacks->auth_function; + auth_ud = session->common.callbacks->userdata; valid = b64decode_dsa_privatekey(b64_pkey, &dsa, auth_cb, auth_ud, "Passphrase for private key:"); @@ -1052,9 +1052,9 @@ ssh_private_key privatekey_from_base64(ssh_session session, const char *b64_pkey case SSH_KEYTYPE_RSA: #ifdef HAVE_LIBGCRYPT if (passphrase == NULL) { - if (session->callbacks && session->callbacks->auth_function) { - auth_cb = session->callbacks->auth_function; - auth_ud = session->callbacks->userdata; + if (session->common.callbacks && session->common.callbacks->auth_function) { + auth_cb = session->common.callbacks->auth_function; + auth_ud = session->common.callbacks->userdata; valid = b64decode_rsa_privatekey(b64_pkey, &rsa, auth_cb, auth_ud, "Passphrase for private key:"); } else { /* authcb */ @@ -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); } } diff --git a/src/messages.c b/src/messages.c index 656da77..bbd9d1f 100644 --- a/src/messages.c +++ b/src/messages.c @@ -1156,9 +1156,9 @@ SSH_PACKET_CALLBACK(ssh_packet_global_request){ ssh_log(session, SSH_LOG_PROTOCOL, "Received SSH_MSG_GLOBAL_REQUEST %s %d %s:%d", request, want_reply, bind_addr, bind_port); - if(ssh_callbacks_exists(session->callbacks, global_request_function)) { + if(ssh_callbacks_exists(session->common.callbacks, global_request_function)) { ssh_log(session, SSH_LOG_PROTOCOL, "Calling callback for SSH_MSG_GLOBAL_REQUEST %s %d %s:%d", request, want_reply, bind_addr, bind_port); - session->callbacks->global_request_function(session, msg, session->callbacks->userdata); + session->common.callbacks->global_request_function(session, msg, session->common.callbacks->userdata); } else { ssh_message_reply_default(msg); } @@ -1178,8 +1178,8 @@ SSH_PACKET_CALLBACK(ssh_packet_global_request){ ssh_log(session, SSH_LOG_PROTOCOL, "Received SSH_MSG_GLOBAL_REQUEST %s %d %s:%d", request, want_reply, bind_addr, bind_port); - if(ssh_callbacks_exists(session->callbacks, global_request_function)) { - session->callbacks->global_request_function(session, msg, session->callbacks->userdata); + if(ssh_callbacks_exists(session->common.callbacks, global_request_function)) { + session->common.callbacks->global_request_function(session, msg, session->common.callbacks->userdata); } else { ssh_message_reply_default(msg); } diff --git a/src/options.c b/src/options.c index d111f72..fa6c4d6 100644 --- a/src/options.c +++ b/src/options.c @@ -139,12 +139,12 @@ int ssh_options_copy(ssh_session src, ssh_session *dest) { } new->fd = src->fd; new->port = src->port; - new->callbacks = src->callbacks; + new->common.callbacks = src->common.callbacks; new->timeout = src->timeout; new->timeout_usec = src->timeout_usec; new->ssh2 = src->ssh2; new->ssh1 = src->ssh1; - new->log_verbosity = src->log_verbosity; + new->common.log_verbosity = src->common.log_verbosity; new->compressionlevel = src->compressionlevel; return 0; @@ -549,12 +549,12 @@ int ssh_options_set(ssh_session session, enum ssh_options_e type, } else { int *x = (int *) value; - session->log_verbosity = *x & 0xffff; + session->common.log_verbosity = *x & 0xffff; } break; case SSH_OPTIONS_LOG_VERBOSITY_STR: if (value == NULL) { - session->log_verbosity = 0 & 0xffff; + session->common.log_verbosity = 0 & 0xffff; } else { q = strdup(value); if (q == NULL) { @@ -567,7 +567,7 @@ int ssh_options_set(ssh_session session, enum ssh_options_e type, } SAFE_FREE(q); - session->log_verbosity = i & 0xffff; + session->common.log_verbosity = i & 0xffff; } break; case SSH_OPTIONS_CIPHERS_C_S: @@ -1120,12 +1120,12 @@ int ssh_bind_options_set(ssh_bind sshbind, enum ssh_bind_options_e type, return -1; } else { int *x = (int *) value; - sshbind->log_verbosity = *x & 0xffff; + sshbind->common.log_verbosity = *x & 0xffff; } break; case SSH_BIND_OPTIONS_LOG_VERBOSITY_STR: if (value == NULL) { - sshbind->log_verbosity = 0; + sshbind->common.log_verbosity = 0; } else { q = strdup(value); if (q == NULL) { @@ -1138,7 +1138,7 @@ int ssh_bind_options_set(ssh_bind sshbind, enum ssh_bind_options_e type, } SAFE_FREE(q); - sshbind->log_verbosity = i & 0xffff; + sshbind->common.log_verbosity = i & 0xffff; } break; case SSH_BIND_OPTIONS_DSAKEY: diff --git a/src/server.c b/src/server.c index e693fe9..9877ed8 100644 --- a/src/server.c +++ b/src/server.c @@ -59,8 +59,8 @@ #include "libssh/messages.h" #define set_status(session, status) do {\ - if (session->callbacks && session->callbacks->connect_status_function) \ - session->callbacks->connect_status_function(session->callbacks->userdata, status); \ + if (session->common.callbacks && session->common.callbacks->connect_status_function) \ + session->common.callbacks->connect_status_function(session->common.callbacks->userdata, status); \ } while (0) static int dh_handshake_server(ssh_session session); diff --git a/src/session.c b/src/session.c index 968c089..ab12e0d 100644 --- a/src/session.c +++ b/src/session.c @@ -86,7 +86,7 @@ ssh_session ssh_new(void) { session->alive = 0; session->auth_methods = 0; ssh_set_blocking(session, 1); - session->log_indent = 0; + session->common.log_indent = 0; session->maxchannel = FIRST_CHANNEL; /* options */ |