X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Ftools%2Fsysdb%2Fmain.c;h=6e75ef9b6c7687484848739fda8eeeaf3c85a233;hp=05c5b9fb6d6ce6f6d57cb45f04666dff37e775a7;hb=5e20183e0a2264e0aed972ceff913374ab970248;hpb=e512851481132ca3f18ed3e2c8ea8802b915cd52 diff --git a/src/tools/sysdb/main.c b/src/tools/sysdb/main.c index 05c5b9f..6e75ef9 100644 --- a/src/tools/sysdb/main.c +++ b/src/tools/sysdb/main.c @@ -185,7 +185,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, CONNECTION_QUERY, + if (sdb_client_send(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); @@ -194,7 +194,7 @@ execute_commands(sdb_client_t *client, sdb_llist_t *commands) } /* Wait for server replies. We might get any number of log messages - * but eventually see the reply to the query, which is either OK or + * but eventually see the reply to the query, which is either DATA or * ERROR. */ while (42) { status = sdb_command_print_reply(client); @@ -203,12 +203,20 @@ execute_commands(sdb_client_t *client, sdb_llist_t *commands) break; } - if ((status == CONNECTION_OK) || (status == CONNECTION_ERROR)) + if ((status == SDB_CONNECTION_DATA) + || (status == SDB_CONNECTION_ERROR)) break; + if (status == SDB_CONNECTION_OK) { + /* pre 0.4 versions used OK instead of DATA */ + sdb_log(SDB_LOG_WARNING, "Received unexpected OK status from " + "server in response to a QUERY (expected DATA); " + "assuming we're talking to an old server"); + break; + } } - if (status) - break; + if ((status != SDB_CONNECTION_OK) && (status != SDB_CONNECTION_DATA)) + break; /* error */ } sdb_llist_iter_destroy(iter); @@ -302,7 +310,9 @@ main(int argc, char **argv) int status = execute_commands(input.client, commands); sdb_llist_destroy(commands); sdb_client_destroy(input.client); - exit(status); + if ((status != SDB_CONNECTION_OK) && (status != SDB_CONNECTION_DATA)) + exit(1); + exit(0); } sdb_log(SDB_LOG_INFO, "SysDB client "SDB_CLIENT_VERSION_STRING @@ -328,6 +338,12 @@ main(int argc, char **argv) sdb_input_init(&input); 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); + } + if (hist_file[0] != '\0') { errno = 0; if (write_history(hist_file)) {