diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2014-05-06 08:51:52 +0200 |
---|---|---|
committer | Fabiano FidĂȘncio <fidencio@redhat.com> | 2015-10-12 13:47:09 +0200 |
commit | bf071a0d38d6e358e14f887dd4e99a43b1bfd69c (patch) | |
tree | 562dbf1a665dbb74ec88466868e25d40a81d698e | |
parent | 68f062edffffaef25be5df906b48d36eb0746dac (diff) | |
download | libssh-bf071a0d38d6e358e14f887dd4e99a43b1bfd69c.tar.gz libssh-bf071a0d38d6e358e14f887dd4e99a43b1bfd69c.tar.xz libssh-bf071a0d38d6e358e14f887dd4e99a43b1bfd69c.zip |
WIP sshd server
-rw-r--r-- | tests/torture.c | 103 | ||||
-rw-r--r-- | tests/torture.h | 2 |
2 files changed, 103 insertions, 2 deletions
diff --git a/tests/torture.c b/tests/torture.c index 2ac5297b..ff801a52 100644 --- a/tests/torture.c +++ b/tests/torture.c @@ -280,7 +280,8 @@ static const char torture_ed25519_testkey_pp[]= "-----END OPENSSH PRIVATE KEY-----\n"; #define TORTURE_SOCKET_DIR "/tmp/test_socket_wrapper_XXXXXX" -#define TORTURE_SSHD_PIDFILE "sshd.pid" +#define TORTURE_SSHD_PIDFILE "sshd/sshd.pid" +#define TORTURE_SSHD_CONFIG "sshd/sshd_config" #define TORTURE_PCAP_FILE "socket_trace.pcap" static int verbosity = 0; @@ -789,6 +790,14 @@ void torture_setup_socket_dir(void **state) snprintf(s->srv_pidfile, len, "%s/%s", p, TORTURE_SSHD_PIDFILE); + /* config file */ + len = strlen(p) + 1 + strlen(TORTURE_SSHD_CONFIG) + 1; + + s->srv_config = malloc(len); + assert_non_null(s->srv_config); + + snprintf(s->srv_config, len, "%s/%s", p, TORTURE_SSHD_CONFIG); + setenv("SOCKET_WRAPPER_DIR", p, 1); setenv("SOCKET_WRAPPER_DEFAULT_IFACE", "170", 1); setenv("SOCKET_WRAPPER_PCAP_FILE", s->pcap_file, 1); @@ -796,6 +805,96 @@ void torture_setup_socket_dir(void **state) *state = s; } +static void torture_setup_create_sshd_config(void **state) +{ + struct torture_state *s = *state; + char dsa_hostkey[1024]; + char rsa_hostkey[1024]; + char ecdsa_hostkey[1024]; + char sshd_config[1024]; + char sshd_path[1024]; + int rc; + + snprintf(sshd_path, + sizeof(sshd_path), + "%s/sshd", + s->socket_dir); + + rc = mkdir(sshd_path, 0755); + assert_return_code(rc, errno); + + snprintf(dsa_hostkey, + sizeof(dsa_hostkey), + "%s/sshd/ssh_host_dsa_key", + s->socket_dir); + torture_write_file(dsa_hostkey, torture_get_testkey(SSH_KEYTYPE_DSS, 0, 0)); + + snprintf(rsa_hostkey, + sizeof(rsa_hostkey), + "%s/sshd/ssh_host_rsa_key", + s->socket_dir); + torture_write_file(rsa_hostkey, torture_get_testkey(SSH_KEYTYPE_RSA, 0, 0)); + + snprintf(ecdsa_hostkey, + sizeof(ecdsa_hostkey), + "%s/sshd/ssh_host_ecdsa_key", + s->socket_dir); + torture_write_file(ecdsa_hostkey, + torture_get_testkey(SSH_KEYTYPE_ECDSA, 521, 0)); + + assert_non_null(s->socket_dir); + + snprintf(sshd_config, sizeof(sshd_config), + "Port 22\n" + "ListenAddress 127.0.0.10\n" + "HostKey %s\n" + "HostKey %s\n" + "HostKey %s\n" + "\n" + "LogLevel DEBUG1\n" + "Subsystem sftp /usr/lib/ssh/sftp-server\n" + "\n" + "PasswordAuthentication yes\n" + "KbdInteractiveAuthentication yes\n" + "PubkeyAuthentication yes\n" + "\n" + "UsePrivilegeSeparation no\n" + "\n" + "AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES\n" + "AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT\n" + "AcceptEnv LC_IDENTIFICATION LC_ALL LC_LIBSSH\n" + "\n" + "PidFile %s\n", + dsa_hostkey, + rsa_hostkey, + ecdsa_hostkey, + s->srv_pidfile); + + torture_write_file(s->srv_config, sshd_config); +} + +void torture_setup_sshd_server(void **state) +{ + struct torture_state *s; + char sshd_start_cmd[1024]; + int rc; + + torture_setup_socket_dir(state); + torture_setup_create_sshd_config(state); + + /* Set the default interface for the server */ + setenv("SOCKET_WRAPPER_DEFAULT_IFACE", "10", 1); + + s = *state; + + snprintf(sshd_start_cmd, sizeof(sshd_start_cmd), + "/usr/sbin/sshd -f %s -E %s/sshd/sshd.log", + s->srv_config, s->socket_dir); + + rc = system(sshd_start_cmd); + assert_return_code(rc, errno); +} + void torture_teardown_socket_dir(void **state) { struct torture_state *s = *state; @@ -803,7 +902,7 @@ void torture_teardown_socket_dir(void **state) int rc; if (env != NULL && env[0] == '1') { - fprintf(stderr, ">>> Skipping cleanup of %s\n", s->socket_dir); + fprintf(stderr, "[ TORTURE ] >>> Skipping cleanup of %s\n", s->socket_dir); } else { rc = torture_rmdirs(s->socket_dir); if (rc < 0) { diff --git a/tests/torture.h b/tests/torture.h index 9c4e8f23..071fa76c 100644 --- a/tests/torture.h +++ b/tests/torture.h @@ -64,6 +64,7 @@ struct torture_state { char *socket_dir; char *pcap_file; char *srv_pidfile; + char *srv_config; }; #ifndef ZERO_STRUCT @@ -108,6 +109,7 @@ const char *torture_server_address(int domain); int torture_server_port(void); void torture_setup_socket_dir(void **state); +void torture_setup_sshd_server(void **state); void torture_teardown_socket_dir(void **state); |