diff --git a/src/tools/sysdb/main.c b/src/tools/sysdb/main.c
index 228cd530b6098906ae5f709f84aabf91a0c49ee9..1f3975a7949b52491d4b0b2fe37660260e556649 100644 (file)
--- a/src/tools/sysdb/main.c
+++ b/src/tools/sysdb/main.c
#include "utils/llist.h"
#include "utils/strbuf.h"
#include "utils/os.h"
+#include "utils/ssl.h"
#include <errno.h>
+#include <time.h>
#if HAVE_LIBGEN_H
# include <libgen.h>
#include <sys/stat.h>
#include <fcntl.h>
-
+#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-
#include <unistd.h>
#include <sys/types.h>
# endif
#endif /* READLINEs */
-#include <openssl/ssl.h>
-#include <openssl/err.h>
-
#ifndef DEFAULT_SOCKET
# define DEFAULT_SOCKET "unix:"LOCALSTATEDIR"/run/sysdbd.sock"
#endif
" default: %s\n"
" -C CERTFILE client certificate file name\n"
" default: %s\n"
+" -A CAFILE CA certificates file name\n"
+" default: %s\n"
"\n"
"General options:\n"
"\n"
"\nSysDB client "SDB_CLIENT_VERSION_STRING SDB_CLIENT_VERSION_EXTRA", "
PACKAGE_URL"\n", basename(name), user,
- ssl_options.key_file, ssl_options.cert_file);
+ ssl_options.key_file, ssl_options.cert_file, ssl_options.ca_file);
free(user);
exit(status);
} /* exit_version */
static int
-execute_commands(sdb_client_t *client, sdb_llist_t *commands)
+execute_commands(sdb_input_t *input, sdb_llist_t *commands)
{
sdb_llist_iter_t *iter;
int status = 0;
while (sdb_llist_iter_has_next(iter)) {
sdb_object_t *obj = sdb_llist_iter_get_next(iter);
- if (sdb_client_send(client, SDB_CONNECTION_QUERY,
+ if (sdb_client_send(input->client, SDB_CONNECTION_QUERY,
(uint32_t)strlen(obj->name), obj->name) <= 0) {
sdb_log(SDB_LOG_ERR, "Failed to send command '%s' to server",
obj->name);
* but eventually see the reply to the query, which is either DATA or
* ERROR. */
while (42) {
- status = sdb_command_print_reply(client);
+ status = sdb_command_print_reply(input);
if (status < 0) {
sdb_log(SDB_LOG_ERR, "Failed to read reply from server");
break;
sdb_llist_t *commands = NULL;
while (42) {
- int opt = getopt(argc, argv, "H:U:c:C:K:hV");
+ int opt = getopt(argc, argv, "H:U:c:C:K:A:hV");
if (-1 == opt)
break;
case 'K':
ssl_options.key_file = optarg;
break;
+ case 'A':
+ ssl_options.ca_file = optarg;
+ break;
case 'h':
exit_usage(argv[0], 0);
if (! input.user)
exit(1);
- SSL_load_error_strings();
- OpenSSL_add_ssl_algorithms();
+ if (sdb_ssl_init())
+ exit(1);
input.client = sdb_client_create(host);
if (! input.client) {
sdb_input_reset(&input);
exit(1);
}
+ input.input = sdb_strbuf_create(2048);
+ sdb_input_init(&input);
+
canonicalize_ssl_options();
if (sdb_client_set_ssl_options(input.client, &ssl_options)) {
sdb_log(SDB_LOG_ERR, "Failed to apply SSL options");
}
if (commands) {
- int status = execute_commands(input.client, commands);
+ int status;
+ input.interactive = 0;
+ status = execute_commands(&input, commands);
sdb_llist_destroy(commands);
sdb_input_reset(&input);
if ((status != SDB_CONNECTION_OK) && (status != SDB_CONNECTION_DATA))
}
sdb_log(SDB_LOG_INFO, "SysDB client "SDB_CLIENT_VERSION_STRING
- SDB_CLIENT_VERSION_EXTRA" (libsysdbclient %s%s)\n",
+ SDB_CLIENT_VERSION_EXTRA" (libsysdbclient %s%s)",
sdb_client_version_string(), sdb_client_version_extra());
+ sdb_command_print_server_version(&input);
+ printf("\n");
using_history();
}
}
- input.input = sdb_strbuf_create(2048);
- sdb_input_init(&input);
+ signal(SIGPIPE, SIG_IGN);
+ signal(SIGCHLD, SIG_IGN);
+
sdb_input_mainloop();
sdb_client_shutdown(input.client, SHUT_WR);
while (! sdb_client_eof(input.client)) {
/* wait for remaining data to arrive */
- sdb_command_print_reply(input.client);
+ sdb_command_print_reply(&input);
}
if (hist_file[0] != '\0') {
}
sdb_input_reset(&input);
-
- ERR_free_strings();
+ sdb_ssl_shutdown();
return 0;
} /* main */