int ntpq_doquerylist( struct ntpq_varlist *vlist, int op, associd_t associd, int auth, u_short *rstatus, int *dsize, const char **datap ) { return doquerylist((struct varlist *)vlist, op, associd, auth, rstatus, dsize, datap); }
/* * dolist - send a request with the given list of variables */ static int dolist( struct varlist *vlist, associd_t associd, int op, int type, FILE *fp ) { const char *datap; int res; int dsize; u_short rstatus; int quiet; /* * if we're asking for specific variables don't include the * status header line in the output. */ if (old_rv) quiet = 0; else quiet = (vlist->name != NULL); res = doquerylist(vlist, op, associd, 0, &rstatus, &dsize, &datap); if (res != 0) return 0; if (numhosts > 1) (void) fprintf(fp, "server=%s ", currenthost); if (dsize == 0) { if (associd == 0) (void) fprintf(fp, "No system%s variables returned\n", (type == TYPE_CLOCK) ? " clock" : ""); else (void) fprintf(fp, "No information returned for%s association %u\n", (type == TYPE_CLOCK) ? " clock" : "", associd); return 1; } if (!quiet) fprintf(fp,"associd=%d ",associd); printvars(dsize, datap, (int)rstatus, type, quiet, fp); return 1; }
/* * writevar - send a write variables request with the specified variables */ static void writevar( struct parse *pcmd, FILE *fp ) { const char *datap; int res; associd_t associd; int type; int dsize; u_short rstatus; struct varlist tmplist[MAXLIST]; /* HMS: uval? */ if (pcmd->argval[0].uval == 0) associd = 0; else if ((associd = checkassocid(pcmd->argval[0].uval)) == 0) return; memset((char *)tmplist, 0, sizeof(tmplist)); doaddvlist(tmplist, pcmd->argval[1].string); res = doquerylist(tmplist, CTL_OP_WRITEVAR, associd, 1, &rstatus, &dsize, &datap); doclearvlist(tmplist); if (res != 0) return; if (numhosts > 1) fprintf(fp, "server=%s ", currenthost); if (dsize == 0) fprintf(fp, "done! (no data returned)\n"); else { fprintf(fp,"associd=%d ",associd); type = (0 == associd) ? TYPE_SYS : TYPE_PEER; printvars(dsize, datap, (int)rstatus, type, 0, fp); } return; }
/* * writelist - send a write variables request with the variables on the list */ static void writelist( struct parse *pcmd, FILE *fp ) { const char *datap; int res; associd_t associd; int dsize; u_short rstatus; if (pcmd->nargs == 0) { associd = 0; } else { /* HMS: Do we really want uval here? */ if (pcmd->argval[0].uval == 0) associd = 0; else if ((associd = checkassocid(pcmd->argval[0].uval)) == 0) return; } res = doquerylist(g_varlist, CTL_OP_WRITEVAR, associd, 1, &rstatus, &dsize, &datap); if (res != 0) return; if (numhosts > 1) (void) fprintf(fp, "server=%s ", currenthost); if (dsize == 0) (void) fprintf(fp, "done! (no data returned)\n"); else { (void) fprintf(fp,"associd=%d ",associd); printvars(dsize, datap, (int)rstatus, (associd != 0) ? TYPE_PEER : TYPE_SYS, 0, fp); } return; }
/* * dogetpeers - given an association ID, read and print the spreadsheet * peer variables. */ static int dogetpeers( struct varlist *pvl, associd_t associd, FILE *fp, int af ) { const char *datap; int res; int dsize; u_short rstatus; #ifdef notdef res = doquerylist(pvl, CTL_OP_READVAR, associd, 0, &rstatus, &dsize, &datap); #else /* * Damn fuzzballs */ res = doquery(CTL_OP_READVAR, associd, 0, 0, NULL, &rstatus, &dsize, &datap); #endif if (res != 0) return 0; if (dsize == 0) { if (numhosts > 1) fprintf(stderr, "server=%s ", currenthost); fprintf(stderr, "***No information returned for association %u\n", associd); return 0; } return doprintpeers(pvl, associd, (int)rstatus, dsize, datap, fp, af); }