X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Ftools%2Fsysdb%2Fmain.c;h=1f3975a7949b52491d4b0b2fe37660260e556649;hb=HEAD;hp=e4922e9b939587c914fd7d28ef172ce0fa4a59fb;hpb=9d80882865895b9eaebc56e878ad5c3c27f8dddb;p=sysdb.git diff --git a/src/tools/sysdb/main.c b/src/tools/sysdb/main.c index e4922e9..1f3975a 100644 --- a/src/tools/sysdb/main.c +++ b/src/tools/sysdb/main.c @@ -41,6 +41,7 @@ #include "utils/ssl.h" #include +#include #if HAVE_LIBGEN_H # include @@ -50,11 +51,10 @@ #include #include - +#include #include #include #include - #include #include @@ -163,7 +163,7 @@ exit_version(void) } /* 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; @@ -177,7 +177,7 @@ execute_commands(sdb_client_t *client, sdb_llist_t *commands) 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); @@ -189,7 +189,7 @@ execute_commands(sdb_client_t *client, sdb_llist_t *commands) * 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; @@ -306,6 +306,9 @@ main(int argc, char **argv) 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"); @@ -321,7 +324,9 @@ main(int argc, char **argv) } 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)) @@ -352,14 +357,15 @@ main(int argc, char **argv) } } - 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') {