]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
[Bug 2003] libntpq ntpq_read_assoc_peervars() broken.
authorDave Hart <hart@ntp.org>
Wed, 7 Sep 2011 04:29:25 +0000 (04:29 +0000)
committerDave Hart <hart@ntp.org>
Wed, 7 Sep 2011 04:29:25 +0000 (04:29 +0000)
bk: 4e66f325dpwzkKU5XtpEOSZDYZ_GLw

ChangeLog
ntpq/libntpq.c
ntpq/libntpq.h

index 480d74930b46fec6eb9bb869ed0a2bb303858a2e..24e2d55c81a7389c6f0fdfdc081c744f1bdec2e3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,7 @@
 * [Bug 1984] ntp/libisc fails to compile on OS X 10.7 (Lion).
 * [Bug 1985] "logconfig =allall" rejected.
 * [Bug 2001] ntpdc timerstats reports overruns as handled.
+* [Bug 2003] libntpq ntpq_read_assoc_peervars() broken.
 * [Backward Incompatible] sntp: -l/--filelog -> -l/--logfile, to be
   consistent with ntpd.
 * libopts/file.c fix from Bruce Korb (arg-type=file).
index 27a15dc4b500c59fc21601851d7267263896bb4e..fff8e81eab7451fba0c535d7af49bf6e2558a1c2 100644 (file)
@@ -405,51 +405,32 @@ int ntpq_get_assoc_number ( associd_t associd )
 
 int
 ntpq_read_assoc_peervars(
-       associd_t associd,
-       char *resultbuf,
-       int maxsize
+       associd_t       associd,
+       char *          resultbuf,
+       int             maxsize
        )
 {
-       const char *datap;
-       int res;
-       int dsize;
-       u_short rstatus;
-       l_fp rec;
-       l_fp ts;
-       char value[NTPQ_BUFLEN];
-
+       const char *    datap;
+       int             res;
+       int             dsize;
+       u_short         rstatus;
 
        res = doquery(CTL_OP_READVAR, associd, 0, 0, NULL, &rstatus,
                      &dsize, &datap);
-
        if (res != 0)
                return 0;
-
-       get_systime(&ts);
-
-       if (dsize == 0) {
+       if (dsize <= 0) {
                if (numhosts > 1)
                        fprintf(stderr, "server=%s ", currenthost);
                fprintf(stderr,
                        "***No information returned for association %d\n",
                        associd);
-               return 0;
-       } else {
-               if ( dsize > maxsize ) 
-                       dsize = maxsize;
-               memcpy(resultbuf, datap, dsize);
-               resultbuf[dsize] = '\0';
-               ntpq_getvar(resultbuf, dsize, "rec", value,
-                           sizeof(value));
-
-               if (!decodets(value, &rec))
-                       L_CLR(&rec);
 
-               memcpy(resultbuf, value, maxsize);
-               resultbuf[dsize] = '\0';
-               dsize = strlen(resultbuf);
+               return 0;
        }
+       if (dsize > maxsize) 
+               dsize = maxsize;
+       memcpy(resultbuf, datap, dsize);
 
        return dsize;
 }
@@ -483,7 +464,8 @@ ntpq_read_assoc_peervars(
 size_t
 ntpq_read_sysvars(
        char *  resultbuf,
-       size_t  maxsize)
+       size_t  maxsize
+       )
 {
        const char *    datap;
        int             res;
@@ -563,14 +545,14 @@ ntpq_read_sysvars(
  *                     0 (zero) if an error occured and the sysvars
  *                     could not be read
  ****************************************************************************/
- int  ntpq_get_sysvars( void )
+int
+ntpq_get_sysvars(void)
 {
-        sysvarlen = ( ntpq_read_sysvars( sysvars, sizeof(sysvars )) );
-        if ( sysvarlen <= 0 ) {
-            return 0;
-        } else {
-            return 1;
-        }
+       sysvarlen = ntpq_read_sysvars(sysvars, sizeof(sysvars));
+       if (sysvarlen <= 0)
+               return 0;
+       else
+               return 1;
 }
 
 
@@ -621,17 +603,21 @@ int ntpq_get_peervar( const char *varname, char *varvalue, int maxlen)
  *                     0 (zero) if an error occured and the variable set
  *                     could not be read
  ****************************************************************************/
- int  ntpq_get_assoc_peervars( associd_t associd )
+int
+ntpq_get_assoc_peervars(
+       associd_t associd
+       )
 {
-       peervarlen = ntpq_read_assoc_peervars( associd, peervars, 
-                                              sizeof(peervars ) );
-       if ( peervarlen <= 0 ) {
+       peervarlen = ntpq_read_assoc_peervars(associd, peervars, 
+                                             sizeof(peervars));
+       if (peervarlen <= 0) {
                peervar_assoc = 0;
+
                return 0;
-       } else {
-               peervar_assoc = associd;
-               return 1;
        }
+       peervar_assoc = associd;
+
+       return 1;
 }
 
 
@@ -706,32 +692,36 @@ ntpq_read_assoc_clockvars(
  *  NTP_CLOCKTYPE_MULTICAST Multicast server
  * 
  ****************************************************************************/
-int ntpq_get_assoc_clocktype ( associd_t assoc_number )
+int
+ntpq_get_assoc_clocktype(
+       int assoc_index
+       )
 {
-       int type = 0;
-       int i, rc = 0;
-       sockaddr_u dum_store;
-       char value[LENHOSTNAME];
-       char resultbuf[1024];
-
-       if ( assoc_number < 0 || assoc_number > numassoc )
+       associd_t       associd;
+       int             i;
+       int             rc;
+       sockaddr_u      dum_store;
+       char            dstadr[LENHOSTNAME];
+       char            resultbuf[NTPQ_BUFLEN];
+
+       if (assoc_index < 0 || assoc_index >= numassoc)
                return -1;
-       if ( peervar_assoc != assoc_cache[assoc_number].assid ) {
-               i = ntpq_read_assoc_peervars(
-                   assoc_cache[assoc_number].assid, resultbuf,
-                   sizeof(resultbuf));
-               if ( i <= 0 )
-                       return -1;
-               rc = ntpq_getvar(resultbuf, i, "dstadr", value,
-                                LENHOSTNAME );
+
+       associd = assoc_cache[assoc_index].assid;
+       if (associd == peervar_assoc) {
+               rc = ntpq_get_peervar("dstadr", dstadr, sizeof(dstadr));
        } else {
-               rc = ntpq_get_peervar("dstadr",value,LENHOSTNAME);
+               i = ntpq_read_assoc_peervars(associd, resultbuf,
+                                            sizeof(resultbuf));
+               if (i <= 0)
+                       return -1;
+               rc = ntpq_getvar(resultbuf, i, "dstadr", dstadr,
+                                sizeof(dstadr));
        }
 
-       if (0 != rc && decodenetnum(value, &dum_store)) {
-               type = ntpq_decodeaddrtype(&dum_store);
-               return type;
-       }
+       if (0 != rc && decodenetnum(dstadr, &dum_store))
+               return ntpq_decodeaddrtype(&dum_store);
+
        return -1;
 }
 
index e97f4b380edfa918e4b01206c878e9dfd0f92123..164cc58cf83104417791df847fc0f4ca7a7b8122 100644 (file)
@@ -97,7 +97,7 @@ extern int ntpq_get_assoc_number ( associd_t associd );
 extern int ntpq_get_assoc_peervars( associd_t associd );
 extern int ntpq_get_assoc_clockvars( associd_t associd );
 extern int ntpq_get_assoc_allvars( associd_t associd  );
-extern int ntpq_get_assoc_clocktype ( associd_t assoc_number );
+extern int ntpq_get_assoc_clocktype(int assoc_index);
 extern int ntpq_read_assoc_peervars( associd_t associd, char *resultbuf, int maxsize );
 extern int ntpq_read_assoc_clockvars( associd_t associd, char *resultbuf, int maxsize );