static void torture_log_callback(void **state) { struct test_mock_state t = { .executed = 0, }; (void)state; /* unused */ ssh_set_log_callback(test_mock_ssh_logging_callback); ssh_set_log_userdata(&t); ssh_set_log_level(1); expect_value(test_mock_ssh_logging_callback, priority, 1); expect_string(test_mock_ssh_logging_callback, function, "torture_log_callback"); expect_string(test_mock_ssh_logging_callback, buffer, "torture_log_callback: test"); SSH_LOG(SSH_LOG_WARN, "test"); assert_int_equal(t.executed, 1); } int torture_run_tests(void) { int rc; UnitTest tests[] = { unit_test_setup_teardown(torture_callbacks_size, setup, teardown), unit_test_setup_teardown(torture_callbacks_exists, setup, teardown), unit_test(torture_log_callback), }; ssh_init(); torture_filter_tests(tests); rc=run_tests(tests); ssh_finalize(); return rc; }
static ssh_bind prepare_ssh(const char *keys_dir, int port) { ssh_bind bind; char buffer[PATH_MAX]; int verbosity = SSH_LOG_NOLOG; ssh_set_log_callback(ssh_log_function); bind = ssh_bind_new(); if (!bind) tmate_fatal("Cannot initialize ssh"); ssh_bind_options_set(bind, SSH_BIND_OPTIONS_BINDPORT, &port); ssh_bind_options_set(bind, SSH_BIND_OPTIONS_BANNER, TMATE_SSH_BANNER); ssh_bind_options_set(bind, SSH_BIND_OPTIONS_LOG_VERBOSITY, &verbosity); sprintf(buffer, "%s/ssh_host_rsa_key", keys_dir); ssh_bind_options_set(bind, SSH_BIND_OPTIONS_RSAKEY, buffer); sprintf(buffer, "%s/ssh_host_ecdsa_key", keys_dir); ssh_bind_options_set(bind, SSH_BIND_OPTIONS_ECDSAKEY, buffer); if (ssh_bind_listen(bind) < 0) tmate_fatal("Error listening to socket: %s\n", ssh_get_error(bind)); tmate_notice("Accepting connections on %d", port); return bind; }
static void torture_log_callback(void **state) { struct test_mock_state t = { .executed = 0, }; (void)state; /* unused */ ssh_set_log_callback(test_mock_ssh_logging_callback); ssh_set_log_userdata(&t); ssh_set_log_level(1); expect_value(test_mock_ssh_logging_callback, priority, 1); expect_string(test_mock_ssh_logging_callback, function, "torture_log_callback"); expect_string(test_mock_ssh_logging_callback, buffer, "torture_log_callback: test"); SSH_LOG(SSH_LOG_WARN, "test"); assert_int_equal(t.executed, 1); } static void cb1(ssh_session session, ssh_channel channel, void *userdata){ int *v = userdata; (void) session; (void) channel; *v += 1; }
int ssh_set_callbacks(ssh_session session, ssh_callbacks cb) { if (session == NULL || cb == NULL) { return SSH_ERROR; } if (is_callback_valid(session, cb)) { ssh_set_error(session, SSH_FATAL, "Invalid callback passed in (badly initialized)"); return SSH_ERROR; }; session->common.callbacks = cb; /* LEGACY */ if (ssh_get_log_callback() == NULL && cb->log_function) { ssh_set_log_callback(ssh_legacy_log_callback); ssh_set_log_userdata(session); } return 0; }
static ssh_bind prepare_ssh(const char *keys_dir, const char *bind_addr, int port) { ssh_bind bind; char buffer[PATH_MAX]; int ssh_log_level; ssh_key rsakey = NULL; ssh_key ed25519key = NULL; ssh_log_level = SSH_LOG_WARNING + max(log_get_level() - LOG_NOTICE, 0); ssh_set_log_callback(ssh_log_function); bind = ssh_bind_new(); if (!bind) tmate_fatal("Cannot initialize ssh"); if (bind_addr) ssh_bind_options_set(bind, SSH_BIND_OPTIONS_BINDADDR, bind_addr); ssh_bind_options_set(bind, SSH_BIND_OPTIONS_BINDPORT, &port); ssh_bind_options_set(bind, SSH_BIND_OPTIONS_BANNER, TMATE_SSH_BANNER); ssh_bind_options_set(bind, SSH_BIND_OPTIONS_LOG_VERBOSITY, &ssh_log_level); sprintf(buffer, "%s/ssh_host_rsa_key", keys_dir); ssh_pki_import_privkey_file(buffer, NULL, NULL, NULL, &rsakey); ssh_bind_options_set(bind, SSH_BIND_OPTIONS_IMPORT_KEY, rsakey); sprintf(buffer, "%s/ssh_host_ed25519_key", keys_dir); ssh_pki_import_privkey_file(buffer, NULL, NULL, NULL, &ed25519key); ssh_bind_options_set(bind, SSH_BIND_OPTIONS_IMPORT_KEY, ed25519key); if (ssh_bind_listen(bind) < 0) tmate_fatal("Error listening to socket: %s\n", ssh_get_error(bind)); tmate_notice("Accepting connections on %s:%d", bind_addr ?: "", port); return bind; }
int set_log_callback() { return ssh_set_log_callback(logging_callback); }