]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
Use non-zero exit code in chronyc to report errors
authorMiroslav Lichvar <mlichvar@redhat.com>
Thu, 12 Nov 2009 15:43:34 +0000 (16:43 +0100)
committerMiroslav Lichvar <mlichvar@redhat.com>
Thu, 12 Nov 2009 15:43:34 +0000 (16:43 +0100)
client.c

index 3f843a5c847c391c76cf369724cf96b9f46087ff..bef845842388b036cb657f303f5b16401449eb95 100644 (file)
--- a/client.c
+++ b/client.c
@@ -74,12 +74,6 @@ static int on_terminal = 0;
 
 static int no_dns = 0;
 
-/* ================================================== */
-/* Forward prototypes */
-
-static void process_cmd_manual_list(const char *line);
-static void process_cmd_manual_delete(const char *line);
-
 /* ================================================== */
 /* Ought to extract some code from util.c to make
    a new set of utilities that can be linked into either
@@ -600,12 +594,6 @@ process_cmd_manual(CMD_Request *msg, const char *line)
     msg->data.manual.option = htonl(1);
   } else if (!strncmp(p, "reset", 5)) {
     msg->data.manual.option = htonl(2);
-  } else if (!strncmp(p, "list", 4)) {
-    process_cmd_manual_list(p);
-    return 0;
-  } else if (!strncmp(p, "delete", 6)) {
-    process_cmd_manual_delete(p+6);
-    return 0;
   } else {
     return 0;
   }
@@ -1453,7 +1441,8 @@ request_reply(CMD_Request *request, CMD_Reply *reply, int requested_reply, int v
     }
   }
   
-  if (status != STT_SUCCESS) {
+  if (status != STT_SUCCESS &&
+      status != STT_ACCESSALLOWED && status != STT_ACCESSDENIED) {
     return 0;
   } 
 
@@ -1534,7 +1523,7 @@ check_for_verbose_flag(char *line)
 
 /* ================================================== */
 
-static void
+static int
 process_cmd_sources(char *line)
 {
   CMD_Request request;
@@ -1633,15 +1622,19 @@ process_cmd_sources(char *line)
           printf(" +/- ");
           print_microseconds(latest_meas_err);
           printf("\n");
+      } else {
+        return 0;
       }
     }
+  } else {
+    return 0;
   }
-
+  return 1;
 }
 
 /* ================================================== */
 
-static void
+static int
 process_cmd_sourcestats(char *line)
 {
   CMD_Request request;
@@ -1705,15 +1698,19 @@ process_cmd_sourcestats(char *line)
           printf("  %10.3f  %10.3f  ", resid_freq_ppm, skew_ppm);
           print_microseconds(sd_us);
           printf("\n");
+      } else {
+        return 0;
       }
     }
+  } else {
+    return 0;
   }
-
+  return 1;
 }
 
 /* ================================================== */
 
-static void
+static int
 process_cmd_tracking(char *line)
 {
   CMD_Request request;
@@ -1771,11 +1768,13 @@ process_cmd_tracking(char *line)
     printf("Skew            : %.3f ppm\n", skew_ppm);
     printf("Root delay      : %.6f seconds\n", root_delay);
     printf("Root dispersion : %.6f seconds\n", root_dispersion);
+    return 1;
   }
+  return 0;
 }
 /* ================================================== */
 
-static void
+static int
 process_cmd_rtcreport(char *line)
 {
   CMD_Request request;
@@ -1805,7 +1804,9 @@ process_cmd_rtcreport(char *line)
     printf("\n");
     printf("RTC is fast by     : %12.6f seconds\n", coef_seconds_fast);
     printf("RTC gains time at  : %9.3f ppm\n", coef_gain_rate_ppm);
+    return 1;
   }
+  return 0;
 }
 
 /* ================================================== */
@@ -2011,7 +2012,7 @@ cleanup:
 
 /* New implementation of clients command */
 
-static void
+static int
 process_cmd_clients(char *line)
 {
   CMD_Request request;
@@ -2091,20 +2092,19 @@ process_cmd_clients(char *line)
             goto finished;
           }
     } else {
-      return;
+      return 0;
     }
   } while (1); /* keep going until all subnets have been expanded,
                   down to single nodes */
 
 finished:
-  return;
-
+  return 1;
 }
 
 
 /* ================================================== */
 /* Process the manual list command */
-static void
+static int
 process_cmd_manual_list(const char *line)
 {
   CMD_Request request;
@@ -2129,34 +2129,32 @@ process_cmd_manual_list(const char *line)
             residual = WIRE2REAL(sample->residual);
             printf("%2d %s %10.2f %10.2f %10.2f\n", i, time_to_log_form(when.tv_sec), slewed_offset, orig_offset, residual);
           }
+          return 1;
   }
-
+  return 0;
 }
 
 /* ================================================== */
 
-static void
-process_cmd_manual_delete(const char *line)
+static int
+process_cmd_manual_delete(CMD_Request *msg, const char *line)
 {
   int index;
-  CMD_Request request;
-  CMD_Reply reply;
 
   if (sscanf(line, "%d", &index) != 1) {
     fprintf(stderr, "Bad syntax for manual delete command\n");
-    return;
+    return 0;
 
   }
 
-  request.command = htons(REQ_MANUAL_DELETE);
-  request.data.manual_delete.index = htonl(index);
-
-  request_reply(&request, &reply, RPY_NULL, 1);
+  msg->command = htons(REQ_MANUAL_DELETE);
+  msg->data.manual_delete.index = htonl(index);
+  return 1;
 }
 
 /* ================================================== */
 
-static void
+static int
 process_cmd_settime(char *line)
 {
   struct timeval ts;
@@ -2184,9 +2182,10 @@ process_cmd_settime(char *line)
           new_afreq_ppm = WIRE2REAL(reply.data.manual_timestamp.new_afreq_ppm);
           printf("Clock was %.2f seconds fast.  Frequency change = %.2fppm, new frequency = %.2fppm\n",
               offset, dfreq_ppm, new_afreq_ppm);
+          return 1;
     }
   }
-
+  return 0;
 }
 
 /* ================================================== */
@@ -2207,7 +2206,7 @@ process_cmd_makestep(CMD_Request *msg, char *line)
 
 /* ================================================== */
 
-static void
+static int
 process_cmd_activity(const char *line)
 {
   CMD_Request request;
@@ -2223,21 +2222,24 @@ process_cmd_activity(const char *line)
                 (long) ntohl(reply.data.activity.offline),
                 (long) ntohl(reply.data.activity.burst_online),
                 (long) ntohl(reply.data.activity.burst_offline));
+        return 1;
   }
+  return 0;
 }
 
 /* ================================================== */
 
 static int
-process_line(char *line)
+process_line(char *line, int *quit)
 {
   char *p;
-  int quit;
   int do_normal_submit;
+  int ret;
   CMD_Request tx_message;
   CMD_Reply rx_message;
 
-  quit = 0;
+  *quit = 0;
+  ret = 0;
 
   do_normal_submit = 1;
 
@@ -2247,7 +2249,7 @@ process_line(char *line)
   if (!*p) {
     fflush(stderr);
     fflush(stdout);
-    return quit;
+    return ret;
   };
 
   if (!strncmp(p, "offline", 7)) {
@@ -2272,17 +2274,22 @@ process_line(char *line)
     do_normal_submit = process_cmd_maxupdateskew(&tx_message, p+13);
   } else if (!strncmp(p, "settime", 7)) {
     do_normal_submit = 0;
-    process_cmd_settime(p+7);
+    ret = process_cmd_settime(p+7);
   } else if (!strncmp(p, "local", 5)) {
     do_normal_submit = process_cmd_local(&tx_message, p+5);
+  } else if (!strncmp(p, "manual list", 11)) {
+    do_normal_submit = 0;
+    ret = process_cmd_manual_list(p+11);
+  } else if (!strncmp(p, "manual delete", 13)) {
+    do_normal_submit = process_cmd_manual_delete(&tx_message, p+13);
   } else if (!strncmp(p, "manual", 6)) {
     do_normal_submit = process_cmd_manual(&tx_message, p+6);
   } else if (!strncmp(p, "sourcestats", 11)) {
     do_normal_submit = 0;
-    process_cmd_sourcestats(p+11);
+    ret = process_cmd_sourcestats(p+11);
   } else if (!strncmp(p, "sources", 7)) {
     do_normal_submit = 0;
-    process_cmd_sources(p+7);
+    ret = process_cmd_sources(p+7);
   } else if (!strncmp(p, "rekey", 5)) {
     process_cmd_rekey(&tx_message, p+5);
   } else if (!strncmp(p, "allow all", 9)) {
@@ -2315,7 +2322,7 @@ process_line(char *line)
     process_cmd_writertc(&tx_message, p+7);
   } else if (!strncmp(p, "rtcdata", 7)) {
     do_normal_submit = 0;
-    process_cmd_rtcreport(p);
+    ret = process_cmd_rtcreport(p);
   } else if (!strncmp(p, "trimrtc", 7)) {
     process_cmd_trimrtc(&tx_message, p);
   } else if (!strncmp(p, "cyclelogs", 9)) {
@@ -2325,44 +2332,47 @@ process_line(char *line)
   } else if (!strncmp(p, "doffset", 7)) {
     process_cmd_doffset(&tx_message, p+7);
   } else if (!strncmp(p, "tracking", 8)) {
-    process_cmd_tracking(p+8);
+    ret = process_cmd_tracking(p+8);
     do_normal_submit = 0;
   } else if (!strncmp(p, "clients", 7)) {
-    process_cmd_clients(p+7);
+    ret = process_cmd_clients(p+7);
     do_normal_submit = 0;
   } else if (!strncmp(p, "makestep", 8)) {
     process_cmd_makestep(&tx_message, p+8);
   } else if (!strncmp(p, "activity", 8)) {
-    process_cmd_activity(p+8);
+    ret = process_cmd_activity(p+8);
     do_normal_submit = 0;
   } else if (!strncmp(p, "help", 4)) {
     do_normal_submit = 0;
     give_help();
+    ret = 1;
   } else if (!strncmp(p, "quit", 4)) {
     do_normal_submit = 0;
-    quit = 1;
+    *quit = 1;
+    ret = 1;
   } else if (!strncmp(p, "exit", 4)) {
     do_normal_submit = 0;
-    quit = 1;
+    *quit = 1;
+    ret = 1;
   } else {
     fprintf(stderr, "Unrecognized command\n");
     do_normal_submit = 0;
   }
     
   if (do_normal_submit) {
-    request_reply(&tx_message, &rx_message, RPY_NULL, 1);
+    ret = request_reply(&tx_message, &rx_message, RPY_NULL, 1);
   }
   fflush(stderr);
   fflush(stdout);
-  return quit;
+  return ret;
 }
 
 /* ================================================== */
 
-static void
+static int
 process_args(int argc, char **argv)
 {
-  int total_length, i;
+  int total_length, i, ret, quit;
   char *line;
 
   total_length = 0;
@@ -2377,11 +2387,11 @@ process_args(int argc, char **argv)
   }
   strcat(line, "\n");
 
-  process_line(line);
+  ret = process_line(line, &quit);
 
   free(line);
 
-  return;
+  return ret;
 }
 
 /* ================================================== */
@@ -2405,7 +2415,7 @@ main(int argc, char **argv)
   char *line;
   const char *progname = argv[0];
   const char *hostname = "localhost";
-  int quit = 0;
+  int quit = 0, ret = 1;
   int port = DEFAULT_CANDM_PORT;
 
   /* Parse command line options */
@@ -2450,12 +2460,12 @@ main(int argc, char **argv)
   open_io(hostname, port);
 
   if (argc > 0) {
-    process_args(argc, argv);
+    ret = process_args(argc, argv);
   } else {
     do {
       line = read_line();
       if (line) {
-        quit = process_line(line);
+        ret = process_line(line, &quit);
       }else {
        /* supply the final '\n' when user exits via ^D */
         if( on_terminal ) printf("\n");
@@ -2465,7 +2475,7 @@ main(int argc, char **argv)
 
   close_io();
 
-  return 0;
+  return !ret;
 }