int main(int argc, char **argv) { SshStream stdio_stream; SshSigner signer; char config_filename[512]; char *temp_name; #ifdef SLEEP_AFTER_STARTUP sleep(30); #endif /* SLEEP_AFTER_STARTUP */ /* Get program name (without path). */ if ((temp_name = strrchr(argv[0], '/')) != NULL) progname = ssh_xstrdup(temp_name + 1); else progname = ssh_xstrdup(argv[0]); /* XXX there should be a way to give command-line parameters to this program, but, they should only be used if the uid is the same as euid. */ ssh_event_loop_initialize(); signer = ssh_xcalloc(1, sizeof(*signer)); #ifdef SIGNER_QUIET signer->quiet = TRUE; #else /* SIGNER_QUIET */ signer->quiet = FALSE; #endif /* SIGNER_QUIET */ ssh_debug_register_callbacks(signer_ssh_fatal, signer_ssh_warning, signer_ssh_debug, (void *)signer); #ifdef SIGNER_DEBUG ssh_debug_set_global_level(5); #endif /* SIGNER_DEBUG */ /* Act as server. */ signer->config = ssh_server_create_config(); SSH_TRACE(2, ("public key file: %s", signer->config->public_host_key_file)); SSH_TRACE(2, ("private key file: %s", signer->config->host_key_file)); SSH_TRACE(2, ("randomseed file: %s", signer->config->random_seed_file)); /* Initialize user context with euid. This is used to dig up the hostkey and such. */ signer->effective_user_data = ssh_user_initialize_with_uid(geteuid(), FALSE); signer->random_state = ssh_randseed_open(signer->effective_user_data, signer->config); /* XXX what about alternative config files? This should be possible to configure somehow. An option for configure is probably a good idea. */ snprintf(config_filename, sizeof(config_filename), "%s/%s", SSH_SERVER_DIR, SSH_SERVER_CONFIG_FILE); if (!ssh_config_read_file(signer->effective_user_data, signer->config, NULL, config_filename, NULL)) ssh_warning("%s: Failed to read config file %s", argv[0], config_filename); stdio_stream = ssh_stream_fd_wrap2(fileno(stdin), fileno(stdout), TRUE); signer->wrapper = ssh_packet_wrap(stdio_stream, signer_received_packet, signer_received_eof, signer_can_send, signer); ssh_event_loop_run(); return 0; }
int main(int argc, char* argv[]) { t_tcpc_context pcontext = 0; SshGetOptData pgetoptdata = 0; int i; SSH_TRACE(SSH_D_MY, ("%s", "main")); pcontext = ssh_xmalloc(sizeof (*pcontext)); memset(pcontext, 0, sizeof (*pcontext)); pgetoptdata = ssh_xmalloc(sizeof (*pgetoptdata)); memset(pgetoptdata, 0, sizeof (*pgetoptdata)); ssh_getopt_init_data(pgetoptdata); pcontext->pport_or_service = "23242"; while ((i = ssh_getopt(argc, argv, "p:h:d:D:G:t:", pgetoptdata)) != -1) { switch (i) { case 'p': pcontext->pport_or_service = ssh_xstrdup(pgetoptdata->arg); break; case 'h': pcontext->phost_name_or_address = ssh_xstrdup(pgetoptdata->arg); break; case 'd': pcontext->pdata = ssh_xstrdup(pgetoptdata->arg); break; case 'D': ssh_debug_set_module_level(SSH_DEBUG_MODULE, atoi(pgetoptdata->arg)); break; case 'G': ssh_debug_set_global_level(atoi(pgetoptdata->arg)); break; case 't': pcontext->timeout = atoi(pgetoptdata->arg); break; default: SSH_NOTREACHED; break; } } ssh_xfree(pgetoptdata); ssh_event_loop_initialize(); pcontext->pbuffer = ssh_buffer_allocate(); if (pcontext->phost_name_or_address) { ssh_tcp_connect(pcontext->phost_name_or_address, pcontext->pport_or_service, NULL, t_tcpc_tcp_callback, pcontext); } else { pcontext->ptcplistener = ssh_tcp_make_listener(SSH_IPADDR_ANY_IPV4, pcontext->pport_or_service, NULL, t_tcpc_tcp_callback, pcontext); } ssh_event_loop_run(); ssh_name_server_uninit(); ssh_event_loop_uninitialize(); ssh_buffer_free(pcontext->pbuffer); ssh_xfree(pcontext); ssh_util_uninit(); return 0; }