]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
client: add -e option to indicate end of response
authorMiroslav Lichvar <mlichvar@redhat.com>
Thu, 2 Feb 2023 15:38:11 +0000 (16:38 +0100)
committerMiroslav Lichvar <mlichvar@redhat.com>
Thu, 2 Feb 2023 16:06:46 +0000 (17:06 +0100)
In a non-tty session with chronyc it is not possible to detect the
end of the response without relying on timeouts, or separate responses
to a repeated command if using the -c option.

Add -e option to end each response with a line containing a single dot.

client.c
doc/chronyc.adoc
test/simulation/110-chronyc

index ad731b05412422c0400c4bad9d65218a1c3315d7..414c761052e24e3f63c1b5b3c5396bbcbf11bbfc 100644 (file)
--- a/client.c
+++ b/client.c
@@ -71,6 +71,8 @@ static int source_names = 0;
 
 static int csv_mode = 0;
 
+static int end_dot = 0;
+
 /* ================================================== */
 /* Log a message. This is a minimalistic replacement of the logging.c
    implementation to avoid linking with it and other modules. */
@@ -3303,6 +3305,10 @@ process_line(char *line)
     ret = request_reply(&tx_message, &rx_message, RPY_NULL, 1);
   }
 
+  if (end_dot) {
+    printf(".\n");
+  }
+
   fflush(stderr);
 
   if (fflush(stdout) != 0 || ferror(stdout) != 0) {
@@ -3379,6 +3385,7 @@ print_help(const char *progname)
              "  -n\t\tDon't resolve hostnames\n"
              "  -N\t\tPrint original source names\n"
              "  -c\t\tEnable CSV format\n"
+             "  -e\t\tEnd responses with dot\n"
 #if DEBUG > 0
              "  -d\t\tEnable debug messages\n"
 #endif
@@ -3423,7 +3430,7 @@ main(int argc, char **argv)
   optind = 1;
 
   /* Parse short command-line options */
-  while ((opt = getopt(argc, argv, "+46acdf:h:mnNp:v")) != -1) {
+  while ((opt = getopt(argc, argv, "+46acdef:h:mnNp:v")) != -1) {
     switch (opt) {
       case '4':
       case '6':
@@ -3441,6 +3448,9 @@ main(int argc, char **argv)
         log_min_severity = LOGS_DEBUG;
 #endif
         break;
+      case 'e':
+        end_dot = 1;
+        break;
       case 'h':
         hostnames = optarg;
         break;
index ca261c724ae2026d950bf2b4b38a42a37cc99c80..07b44300782f9fe54f0a8f1e4906ecb78eab613f 100644 (file)
@@ -89,6 +89,10 @@ format. Reverse DNS lookups will be disabled, time will be printed as number of
 seconds since the epoch, and values in seconds will not be converted to other
 units.
 
+*-e*::
+With this option each *chronyc* response will end with a line containing a
+single dot.
+
 *-d*::
 This option enables printing of debugging messages if *chronyc* was compiled
 with debugging support.
index 7ecfcb57fd9ac5106a4b324188bfd87a21ca9dca..2529cec1b0634387b9e071ed34666f7a54482f65 100755 (executable)
@@ -91,6 +91,18 @@ check_chronyd_exit || test_fail
 check_chronyc_output "^C0A87B01,192\.168\.123\.1,2,12623049..\..........,-?0\.0000.....,-?0\.000......,0\.000......,(99|100)\....,-?[0-9]\....,[0-9]\....,0\.000......,0\.000......,[0-9]+\..,Normal$" \
        || test_fail
 
+chronyc_options="-c -e"
+chronyc_conf="sources"
+
+run_test || test_fail
+check_chronyd_exit || test_fail
+
+check_chronyc_output "^#,.,SHM0.*
+\^,.,192\.168\.123\.1.*
+\^,.,192\.168\.123\.2.*
+\.$" \
+       || test_fail
+
 chronyc_options=""
 server_strata=0
 chronyc_start=0.5