---
+* [Bug 1665] is_anycast() u_int32_t should be u_int32.
* ntpsnmpd, libntpq warning cleanup.
---
defined(IN6_IFF_ANYCAST)
struct in6_ifreq ifr6;
int fd;
- u_int32_t flags6;
+ u_int32 flags6;
if (psau->sa.sa_family != AF_INET6)
return ISC_FALSE;
int ntpq_queryhost(unsigned short VARSET, unsigned short association, char *resultbuf, int maxlen)
{
- char *datap;
+ const char *datap;
int res;
int dsize;
u_short rstatus;
* 0 (zero) if an error occured
****************************************************************************/
- int ntpq_read_assoc_peervars( int associd, char *resultbuf, int maxsize )
+int
+ntpq_read_assoc_peervars(
+ int 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];
- char *datap;
- int res;
- int dsize;
- u_short rstatus;
- l_fp rec;
- l_fp ts;
- char value[NTPQ_BUFLEN];
-
-
- res = doquery(CTL_OP_READVAR, associd, 0, 0, (char *)0, &rstatus,
- &dsize, &datap);
-
- if (res != 0)
- return 0;
-
- get_systime(&ts);
-
- if (dsize == 0) {
- if (numhosts > 1)
- (void) fprintf(stderr, "server=%s ", currenthost);
- (void) fprintf(stderr,
- "***No information returned for association %d\n",
- associd);
- return 0;
- } else {
- if ( dsize > maxsize )
- dsize = maxsize;
- memcpy(resultbuf,datap,dsize);
- resultbuf[dsize]=0x0;
-
- ntpq_getvar(resultbuf, dsize, "rec", value, sizeof (value) );
+ res = doquery(CTL_OP_READVAR, associd, 0, 0, NULL, &rstatus,
+ &dsize, &datap);
- if (!decodets(value, &rec))
- L_CLR(&rec);
+ if (res != 0)
+ return 0;
- memcpy(resultbuf,value,maxsize);
- resultbuf[dsize]=0x0;
- dsize=strlen(resultbuf);
-
+ get_systime(&ts);
- }
- return dsize;
+ 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 dsize;
}
char * resultbuf,
size_t maxsize)
{
-
char * datap;
int res;
int i_dsize;
* 0 (zero) if an error occured
****************************************************************************/
-int ntpq_read_assoc_clockvars( int associd, char *resultbuf, int maxsize )
+int
+ntpq_read_assoc_clockvars(
+ int associd,
+ char * resultbuf,
+ int maxsize
+ )
{
+ const char *datap;
+ int res;
+ int dsize;
+ u_short rstatus;
- char *datap;
- int res;
- int dsize;
- u_short rstatus;
-
- res = ntpq_doquerylist(ntpq_varlist, CTL_OP_READCLOCK, associd, 0, &rstatus, &dsize, &datap);
-
- if (res != 0)
- return 0;
-
- if (dsize == 0) {
- if (numhosts > 1) /* no information returned from server */
- return 0;
- } else {
- if ( dsize > maxsize )
- dsize = maxsize;
+ res = ntpq_doquerylist(ntpq_varlist, CTL_OP_READCLOCK, associd,
+ 0, &rstatus, &dsize, &datap);
+ if (res != 0)
+ return 0;
- memcpy(resultbuf,datap,dsize);
- }
+ if (dsize == 0) {
+ if (numhosts > 1) /* no information returned from server */
+ return 0;
+ } else {
+ if (dsize > maxsize)
+ dsize = maxsize;
+ memcpy(resultbuf, datap, dsize);
+ }
- return dsize;
+ return dsize;
}
extern int ntpq_openhost(char *);
extern int ntpq_closehost(void);
extern int ntpq_queryhost(unsigned short VARSET, unsigned short association, char *resultbuf, int maxlen);
-extern size_t ntpq_getvar(char *resultbuf, size_t datalen,
+extern size_t ntpq_getvar(const char *resultbuf, size_t datalen,
const char *varname, char *varvalue,
size_t maxlen);
extern int ntpq_stripquotes ( char *resultbuf, char *srcbuf, int datalen, int maxlen );
#ifndef _LIBNTPQSUBSC
extern int ntpq_dogetassoc(void);
extern char ntpq_decodeaddrtype(sockaddr_u *sock);
-extern int ntpq_doquerylist(struct ntpq_varlist *, int , int , int , u_short *, int *, char **datap );
+extern int ntpq_doquerylist(struct ntpq_varlist *, int , int , int , u_short *, int *, const char **datap );
#endif
/* Function Prototypes */
int ntpq_dogetassoc(void);
char ntpq_decodeaddrtype(sockaddr_u *sock);
-int ntpq_doquerylist(struct varlist *, int , int , int , u_short *, int *, char **datap );
+int ntpq_doquerylist(struct varlist *, int , int , int , u_short *, int *, const char **datap);
/* the following functions are required internally by a number of libntpq functions
return decodeaddrtype(sock);
}
-int ntpq_doquerylist(struct varlist *vlist, int op, int associd, int auth, u_short *rstatus, int *dsize, char **datap )
+int
+ntpq_doquerylist(
+ struct varlist *vlist,
+ int op,
+ int associd,
+ int auth,
+ u_short *rstatus,
+ int *dsize,
+ const char **datap
+ )
{
- return doquerylist(vlist, op, associd, auth, rstatus, dsize, &*datap );
+ return doquerylist(vlist, op, associd, auth, rstatus, dsize,
+ datap);
}
*/
static int checkassocid (u_int32);
static struct varlist *findlistvar (struct varlist *, char *);
-static void doaddvlist (struct varlist *, char *);
-static void dormvlist (struct varlist *, char *);
+static void doaddvlist (struct varlist *, const char *);
+static void dormvlist (struct varlist *, const char *);
static void doclearvlist (struct varlist *);
static void makequerydata (struct varlist *, int *, char *);
static int doquerylist (struct varlist *, int, int, int,
- u_short *, int *, char **);
+ u_short *, int *, const char **);
static void doprintvlist (struct varlist *, FILE *);
static void addvars (struct parse *, FILE *);
static void rmvars (struct parse *, FILE *);
static void pstatus (struct parse *, FILE *);
static long when (l_fp *, l_fp *, l_fp *);
static char * prettyinterval (char *, size_t, long);
-static int doprintpeers (struct varlist *, int, int, int, char *, FILE *, int);
+static int doprintpeers (struct varlist *, int, int, int, const char *, FILE *, int);
static int dogetpeers (struct varlist *, int, FILE *, int);
static void dopeers (int, FILE *, int);
static void peers (struct parse *, FILE *);
static void
doaddvlist(
struct varlist *vlist,
- char *vars
+ const char *vars
)
{
register struct varlist *vl;
static void
dormvlist(
struct varlist *vlist,
- char *vars
+ const char *vars
)
{
register struct varlist *vl;
int auth,
u_short *rstatus,
int *dsize,
- char **datap
+ const char **datap
)
{
char data[CTL_MAX_DATA_LEN];
FILE *fp
)
{
- char *datap;
+ const char *datap;
int res;
int dsize;
u_short rstatus;
FILE *fp
)
{
- char *datap;
+ const char *datap;
int res;
int associd;
int dsize;
FILE *fp
)
{
- char *datap;
+ const char *datap;
int res;
int associd;
int dsize;
FILE *fp
)
{
- char *datap;
+ const char *datap;
int res;
int dsize;
u_short rstatus;
numassoc = 0;
while (dsize > 0) {
- assoc_cache[numassoc].assid = ntohs(*((u_short *)datap));
+ assoc_cache[numassoc].assid = ntohs(*((const u_short *)datap));
datap += sizeof(u_short);
- assoc_cache[numassoc].status = ntohs(*((u_short *)datap));
+ assoc_cache[numassoc].status = ntohs(*((const u_short *)datap));
datap += sizeof(u_short);
if (++numassoc >= MAXASSOC)
break;
FILE *fp
)
{
- char *datap;
+ const char *datap;
int res;
int dsize;
u_short rstatus;
if (0 == dsize)
fprintf(fp, "(no response message, curiously)");
- else {
- datap[dsize] = '\0';
- fprintf(fp, "%s", datap);
- }
+ else
+ fprintf(fp, "%.*s", dsize, datap);
}
FILE *fp
)
{
- char *datap;
+ const char *datap;
int res;
int associd;
int dsize;
int associd,
int rstatus,
int datalen,
- char *data,
+ const char *data,
FILE *fp,
int af
)
int af
)
{
- char *datap;
+ const char *datap;
int res;
int dsize;
u_short rstatus;
char *cfgcmd;
u_short rstatus;
int rsize;
- char *rdata;
+ const char *rdata;
+ char *resp;
int res;
int col;
int i;
cfgcmd = pcmd->argval[0].string;
- if (debug > 2) {
- printf("In Config\n");
- printf("Keyword = %s\n", pcmd->keyword);
- printf("Command = %s\n", cfgcmd);
- }
+ if (debug > 2)
+ fprintf(stderr,
+ "In Config\n"
+ "Keyword = %s\n"
+ "Command = %s\n", pcmd->keyword, cfgcmd);
res = doquery(CTL_OP_CONFIGURE, 0, 1, strlen(cfgcmd), cfgcmd,
&rstatus, &rsize, &rdata);
if (rsize > 0 && '\n' == rdata[rsize - 1])
rsize--;
- rdata[rsize] = '\0';
+
+ resp = emalloc(rsize + 1);
+ memcpy(resp, rdata, rsize);
+ resp[rsize] = '\0';
col = -1;
- if (1 == sscanf(rdata, "column %d syntax error", &col)
+ if (1 == sscanf(resp, "column %d syntax error", &col)
&& col >= 0 && (size_t)col <= strlen(cfgcmd) + 1) {
if (interactive) {
printf("______"); /* "ntpq> " */
putchar('_');
printf("^\n");
}
- printf("%s\n", rdata);
+ printf("%s\n", resp);
+ free(resp);
}
{
u_short rstatus;
int rsize;
- char *rdata;
+ const char *rdata;
int res;
FILE *config_fd;
char config_cmd[MAXLINE];
int i;
int retry_limit;
- if (debug > 2) {
- printf("In Config\n");
- printf("Keyword = %s\n", pcmd->keyword);
- printf("Filename = %s\n", pcmd->argval[0].string);
- }
+ if (debug > 2)
+ fprintf(stderr,
+ "In Config\n"
+ "Keyword = %s\n"
+ "Filename = %s\n", pcmd->keyword,
+ pcmd->argval[0].string);
config_fd = fopen(pcmd->argval[0].string, "r");
if (NULL == config_fd) {
rsize--;
if (rsize > 0 && '\r' == rdata[rsize - 1])
rsize--;
- rdata[rsize] = '\0';
- printf("Line No: %d %s: %s", i, rdata, config_cmd);
+ printf("Line No: %d %.*s: %s", i, rsize, rdata,
+ config_cmd);
}
printf("Done sending file\n");
fclose(config_fd);
static int openhost (const char *);
static int sendpkt (void *, size_t);
-static int getresponse (int, int, u_short *, int *, char **, int);
+static int getresponse (int, int, u_short *, int *, const char **, int);
static int sendrequest (int, int, int, int, char *);
static char * tstflags (u_long);
#ifndef BUILD_AS_LIB
static void error (const char *, const char *, const char *);
static u_long getkeyid (const char *);
static void atoascii (const char *, size_t, char *, size_t);
-static void cookedprint (int, int, char *, int, int, FILE *);
-static void rawprint (int, int, char *, int, int, FILE *);
+static void cookedprint (int, int, const char *, int, int, FILE *);
+static void rawprint (int, int, const char *, int, int, FILE *);
static void startoutput (void);
static void output (FILE *, char *, char *);
static void endoutput (FILE *);
int associd,
u_short *rstatus,
int *rsize,
- char **rdata,
+ const char **rdata,
int timeo
)
{
/*
* Loop until we have an error or a complete response. Nearly all
- * aths to loop again use continue.
+ * code paths to loop again use continue.
*/
for (;;) {
if (numfrags == 0)
- tvo = tvout;
+ tvo = tvout;
else
- tvo = tvsout;
+ tvo = tvsout;
FD_SET(sockfd, &fds);
- n = select(sockfd+1, &fds, (fd_set *)0, (fd_set *)0, &tvo);
+ n = select(sockfd + 1, &fds, NULL, NULL, &tvo);
if (n == -1) {
warning("select fails", "", "");
*/
if (numfrags == 0) {
if (timeo)
- (void) fprintf(stderr,
- "%s: timed out, nothing received\n",
- currenthost);
+ fprintf(stderr,
+ "%s: timed out, nothing received\n",
+ currenthost);
return ERR_TIMEOUT;
} else {
if (timeo)
- (void) fprintf(stderr,
+ fprintf(stderr,
"%s: timed out with incomplete data\n",
currenthost);
if (debug) {
- printf("Received fragments:\n");
+ fprintf(stderr,
+ "ERR_INCOMPLETE: Received fragments:\n");
for (n = 0; n < numfrags; n++)
- printf("%4d %d\n", offsets[n],
- counts[n]);
- if (seenlastfrag)
- printf("last fragment received\n");
- else
- printf("last fragment not received\n");
+ fprintf(stderr,
+ "%2d: %5d %5d\t%3d octets\n",
+ n, offsets[n],
+ offsets[n] +
+ counts[n],
+ counts[n]);
+ fprintf(stderr,
+ "last fragment %sreceived\n",
+ (seenlastfrag)
+ ? ""
+ : "not ");
}
return ERR_INCOMPLETE;
}
/*
* Copy the data into the data buffer.
*/
- memmove((char *)pktdata + offset, (char *)rpkt.data, count);
+ memcpy((char *)pktdata + offset, rpkt.data, count);
/*
* If we've seen the last fragment, look for holes in the sequence.
}
if (n == numfrags) {
*rsize = offsets[numfrags-1] + counts[numfrags-1];
+ if (debug)
+ fprintf(stderr,
+ "%d packets reassembled into response\n",
+ numfrags);
return 0;
}
}
/*
- * doquery - send a request and process the response
+ * show_error_msg - display the error text for a mode 6 error response.
+ */
+void
+show_error_msg(
+ int m6resp,
+ associd_t associd
+ )
+{
+ if (numhosts > 1)
+ fprintf(stderr, "server=%s ", currenthost);
+
+ switch(m6resp) {
+
+ case CERR_BADFMT:
+ fprintf(stderr,
+ "***Server reports a bad format request packet\n");
+ break;
+
+ case CERR_PERMISSION:
+ fprintf(stderr,
+ "***Server disallowed request (authentication?)\n");
+ break;
+
+ case CERR_BADOP:
+ fprintf(stderr,
+ "***Server reports a bad opcode in request\n");
+ break;
+
+ case CERR_BADASSOC:
+ fprintf(stderr,
+ "***Association ID %d unknown to server\n",
+ associd);
+ break;
+
+ case CERR_UNKNOWNVAR:
+ fprintf(stderr,
+ "***A request variable unknown to the server\n");
+ break;
+
+ case CERR_BADVALUE:
+ fprintf(stderr,
+ "***Server indicates a request variable was bad\n");
+ break;
+
+ case ERR_UNSPEC:
+ fprintf(stderr,
+ "***Server returned an unspecified error\n");
+ break;
+
+ case ERR_TIMEOUT:
+ fprintf(stderr, "***Request timed out\n");
+ break;
+
+ case ERR_INCOMPLETE:
+ fprintf(stderr,
+ "***Response from server was incomplete\n");
+ break;
+
+ case ERR_TOOMUCH:
+ fprintf(stderr,
+ "***Buffer size exceeded for returned data\n");
+ break;
+
+ default:
+ fprintf(stderr,
+ "***Server returns unknown error code %d\n",
+ m6resp);
+ }
+}
+
+/*
+ * doquery - send a request and process the response, displaying
+ * error messages for any error responses.
*/
int
doquery(
int opcode,
- int associd,
+ associd_t associd,
+ int auth,
+ int qsize,
+ char *qdata,
+ u_short *rstatus,
+ int *rsize,
+ const char **rdata
+ )
+{
+ return doqueryex(opcode, associd, auth, qsize, qdata, rstatus,
+ rsize, rdata, FALSE);
+}
+
+
+/*
+ * doqueryex - send a request and process the response, optionally
+ * displaying error messages for any error responses.
+ */
+int
+doqueryex(
+ int opcode,
+ associd_t associd,
int auth,
int qsize,
char *qdata,
u_short *rstatus,
int *rsize,
- char **rdata
+ const char **rdata,
+ int quiet
)
{
int res;
* Check to make sure host is open
*/
if (!havehost) {
- (void) fprintf(stderr, "***No host open, use `host' command\n");
+ fprintf(stderr, "***No host open, use `host' command\n");
return -1;
}
*/
res = sendrequest(opcode, associd, auth, qsize, qdata);
if (res != 0)
- return res;
+ return res;
/*
* Get the response. If we got a standard error, print a message
done = 1;
goto again;
}
- if (numhosts > 1)
- (void) fprintf(stderr, "server=%s ", currenthost);
- switch(res) {
- case CERR_BADFMT:
- (void) fprintf(stderr,
- "***Server reports a bad format request packet\n");
- break;
- case CERR_PERMISSION:
- (void) fprintf(stderr,
- "***Server disallowed request (authentication?)\n");
- break;
- case CERR_BADOP:
- (void) fprintf(stderr,
- "***Server reports a bad opcode in request\n");
- break;
- case CERR_BADASSOC:
- (void) fprintf(stderr,
- "***Association ID %d unknown to server\n",associd);
- break;
- case CERR_UNKNOWNVAR:
- (void) fprintf(stderr,
- "***A request variable unknown to the server\n");
- break;
- case CERR_BADVALUE:
- (void) fprintf(stderr,
- "***Server indicates a request variable was bad\n");
- break;
- case ERR_UNSPEC:
- (void) fprintf(stderr,
- "***Server returned an unspecified error\n");
- break;
- case ERR_TIMEOUT:
- (void) fprintf(stderr, "***Request timed out\n");
- break;
- case ERR_INCOMPLETE:
- (void) fprintf(stderr,
- "***Response from server was incomplete\n");
- break;
- case ERR_TOOMUCH:
- (void) fprintf(stderr,
- "***Buffer size exceeded for returned data\n");
- break;
- default:
- (void) fprintf(stderr,
- "***Server returns unknown error code %d\n", res);
- break;
- }
+ if (!quiet)
+ show_error_msg(res, associd);
+
}
return res;
}
int
nextvar(
int *datalen,
- char **datap,
+ const char **datap,
char **vname,
char **vvalue
)
{
- register char *cp;
- register char *np;
- register char *cpend;
- register char *npend; /* character after last */
+ const char *cp;
+ char *np;
+ const char *cpend;
+ char *npend; /* character after last */
int quoted = 0;
static char name[MAXVARLEN];
static char value[MAXVALLEN];
* Space past commas and white space
*/
while (cp < cpend && (*cp == ',' || isspace((int)*cp)))
- cp++;
+ cp++;
if (cp == cpend)
- return 0;
+ return 0;
/*
* Copy name until we hit a ',', an '=', a '\r' or a '\n'. Backspace
void
printvars(
int length,
- char *data,
+ const char *data,
int status,
int sttype,
int quiet,
rawprint(
int datatype,
int length,
- char *data,
+ const char *data,
int status,
int quiet,
FILE *fp
)
{
- register char *cp;
- register char *cpend;
+ const char *cp;
+ const char *cpend;
/*
* Essentially print the data as is. We reformat unprintables, though.
cookedprint(
int datatype,
int length,
- char *data,
+ const char *data,
int status,
int quiet,
FILE *fp
extern void asciize (int, char *, FILE *);
extern int getnetnum (const char *, sockaddr_u *, char *, int);
extern void sortassoc (void);
-extern int doquery (int, int, int, int, char *, u_short *, int *, char **);
+extern void show_error_msg (int, associd_t);
+extern int doquery (int, associd_t, int, int, char *,
+ u_short *, int *, const char **);
+extern int doqueryex (int, associd_t, int, int, char *,
+ u_short *, int *, const char **, int);
extern char * nntohost (sockaddr_u *);
extern int decodets (char *, l_fp *);
extern int decodeuint (char *, u_long *);
-extern int nextvar (int *, char **, char **, char **);
+extern int nextvar (int *, const char **, char **, char **);
extern int decodetime (char *, l_fp *);
-extern void printvars (int, char *, int, int, int, FILE *);
+extern void printvars (int, const char *, int, int, int, FILE *);
extern int decodeint (char *, long *);
extern int findvar (char *, struct ctl_var *, int code);
extern void makeascii (int, const char *, FILE *);