]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
* [Bug 1799] ntpq mrv crash.
authorDave Hart <hart@ntp.org>
Sat, 29 Jan 2011 23:06:16 +0000 (23:06 +0000)
committerDave Hart <hart@ntp.org>
Sat, 29 Jan 2011 23:06:16 +0000 (23:06 +0000)
* [Bug 1801] ntpq mreadvar requires prior association caching.

bk: 4d449d68MXa5ABkrdUwI1MB3D1SPew

ChangeLog
ntpq/ntpq-subs.c

index fe758c91d89d8417d82e1d9cbde283f21be1466d..482b0df9e45c69671b4c65f297bd01b8e5637093 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,9 @@
+* [Bug 1799] ntpq mrv crash.
+* [Bug 1801] ntpq mreadvar requires prior association caching.
 (4.2.7p127) 2011/01/28 Released by Harlan Stenn <stenn@ntp.org>
 * [Bug 1797] Restore stale timestamp check from the RANGEGATE cleanup.
 (4.2.7p126) 2011/01/27 Released by Harlan Stenn <stenn@ntp.org>
-* Fix unexposed fencepost error in COUNTOF().
+* Fix unexposed fencepost error in format_time_fraction().
 * Add more unit tests for timeval_tostr() and timespec_tostr().
 (4.2.7p125) 2011/01/26 Released by Harlan Stenn <stenn@ntp.org>
 * [Bug 1794] ntpq -c rv missing clk_wander information.
index 552629d3facbc7c5dd66d05ab4297510174b8d08..35371a98a5e259fbe08c94ad8266c2a7195301d9 100644 (file)
@@ -38,7 +38,8 @@ static        void    readvar         (struct parse *, FILE *);
 static void    writevar        (struct parse *, FILE *);
 static void    clocklist       (struct parse *, FILE *);
 static void    clockvar        (struct parse *, FILE *);
-static int     findassidrange  (u_int32, u_int32, int *, int *);
+static int     findassidrange  (u_int32, u_int32, int *, int *,
+                                FILE *);
 static void    mreadlist       (struct parse *, FILE *);
 static void    mreadvar        (struct parse *, FILE *);
 static void    printassoc      (int, FILE *);
@@ -123,16 +124,16 @@ struct xcmd opcmds[] = {
          { "assocID", "name=value,[...]", "", "" },
          "write system or peer variables" },
        { "mreadlist",  mreadlist,  { NTP_UINT, NTP_UINT, NO, NO },
-         { "assocID", "assocID", "", "" },
+         { "assocIDlow", "assocIDhigh", "", "" },
          "read the peer variables in the variable list for multiple peers" },
        { "mrl",    mreadlist,  { NTP_UINT, NTP_UINT, NO, NO },
-         { "assocID", "assocID", "", "" },
+         { "assocIDlow", "assocIDhigh", "", "" },
          "read the peer variables in the variable list for multiple peers" },
        { "mreadvar",   mreadvar,   { NTP_UINT, NTP_UINT, OPT|NTP_STR, NO },
-         { "assocID", "assocID", "name=value[,...]", "" },
+         { "assocIDlow", "assocIDhigh", "name=value[,...]", "" },
          "read peer variables from multiple peers" },
        { "mrv",    mreadvar,   { NTP_UINT, NTP_UINT, OPT|NTP_STR, NO },
-         { "assocID", "assocID", "name=value[,...]", "" },
+         { "assocIDlow", "assocIDhigh", "name=value[,...]", "" },
          "read peer variables from multiple peers" },
        { "clocklist",  clocklist,  { OPT|NTP_UINT, NO, NO, NO },
          { "assocID", "", "", "" },
@@ -905,10 +906,11 @@ clockvar(
  */
 static int
 findassidrange(
-       u_int32 assid1,
-       u_int32 assid2,
-       int *from,
-       int *to
+       u_int32 assid1,
+       u_int32 assid2,
+       int *   from,
+       int *   to,
+       FILE *  fp
        )
 {
        associd_t       assids[2];
@@ -916,6 +918,10 @@ findassidrange(
        u_int           i;
        size_t          a;
 
+
+       if (0 == numassoc)
+               dogetassoc(fp);
+
        assids[0] = checkassocid(assid1);
        if (0 == assids[0])
                return 0;
@@ -962,16 +968,15 @@ mreadlist(
        int from;
        int to;
 
-       /* HMS: uval? */
        if (!findassidrange(pcmd->argval[0].uval, pcmd->argval[1].uval,
-                               &from, &to))
+                           &from, &to, fp))
                return;
 
        for (i = from; i <= to; i++) {
                if (i != from)
-                       (void) fprintf(fp, "\n");
-               if (!dolist(g_varlist, (int)assoc_cache[i].assid,
-                               CTL_OP_READVAR, TYPE_PEER, fp))
+                       fprintf(fp, "\n");
+               if (!dolist(g_varlist, assoc_cache[i].assid,
+                           CTL_OP_READVAR, TYPE_PEER, fp))
                        return;
        }
        return;
@@ -993,9 +998,8 @@ mreadvar(
        struct varlist tmplist[MAXLIST];
        struct varlist *pvars;
 
-       /* HMS: uval? */
        if (!findassidrange(pcmd->argval[0].uval, pcmd->argval[1].uval,
-                               &from, &to))
+                               &from, &to, fp))
                return;
 
        if (pcmd->nargs >= 3) {
@@ -1009,11 +1013,14 @@ mreadvar(
        for (i = from; i <= to; i++) {
                if (i != from)
                        fprintf(fp, "\n");
-               if (!dolist(pvars, (int)assoc_cache[i].assid,
-                           CTL_OP_READVAR, TYPE_PEER, fp))
+               if (!dolist(pvars, assoc_cache[i].assid, CTL_OP_READVAR,
+                           TYPE_PEER, fp))
                        break;
        }
-       doclearvlist(tmplist);
+
+       if (pvars == tmplist)
+               doclearvlist(tmplist);
+
        return;
 }