⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ntpdc_ops.c

📁 网络时间协议NTP 源码 版本v4.2.0b 该源码用于linux平台下
💻 C
📖 第 1 页 / 共 5 页
字号:
preset(	struct parse *pcmd,	FILE *fp	){	/* 8 is the maximum number of peers which will fit in a packet */	struct conf_unpeer *pl, plist[min(MAXARGS, 8)];	int qitems;	int items;	int itemsize;	char *dummy;	int res;	int sendsize;again:	if (impl_ver == IMPL_XNTPD)		sendsize = sizeof(struct conf_unpeer);	else		sendsize = v4sizeof(struct conf_unpeer);	for (qitems = 0, pl = plist; qitems < min(pcmd->nargs, 8); qitems++) {		if (pcmd->argval[qitems].netnum.ss_family == AF_INET) {			pl->peeraddr = GET_INADDR(pcmd->argval[qitems].netnum);			if (impl_ver == IMPL_XNTPD)				pl->v6_flag = 0;		} else {			if (impl_ver == IMPL_XNTPD_OLD) {				fprintf(stderr,				    "***Server doesn't understand IPv6 addresses\n");				return;			}			pl->peeraddr6 =			    GET_INADDR6(pcmd->argval[qitems].netnum);			pl->v6_flag = 1;		}		pl = (struct conf_unpeer *)((char *)pl + sendsize);	}	res = doquery(impl_ver, REQ_RESET_PEER, 1, qitems,		      sendsize, (char *)plist, &items,		      &itemsize, &dummy, 0, sizeof(struct conf_unpeer));		if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) {		impl_ver = IMPL_XNTPD_OLD;		goto again;	}	if (res == 0)	    (void) fprintf(fp, "done!\n");}/* * readkeys - request the server to reread the keys file *//*ARGSUSED*/static voidreadkeys(	struct parse *pcmd,	FILE *fp	){	int items;	int itemsize;	char *dummy;	int res;again:	res = doquery(impl_ver, REQ_REREAD_KEYS, 1, 0, 0, (char *)0,		      &items, &itemsize, &dummy, 0, sizeof(dummy));		if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) {		impl_ver = IMPL_XNTPD_OLD;		goto again;	}	if (res == 0)	    (void) fprintf(fp, "done!\n");	return;}/* * trustkey - add some keys to the trusted key list */static voidtrustkey(	struct parse *pcmd,	FILE *fp	){	do_trustkey(pcmd, fp, REQ_TRUSTKEY);}/* * untrustkey - remove some keys from the trusted key list */static voiduntrustkey(	struct parse *pcmd,	FILE *fp	){	do_trustkey(pcmd, fp, REQ_UNTRUSTKEY);}/* * do_trustkey - do grunge work of adding/deleting keys */static voiddo_trustkey(	struct parse *pcmd,	FILE *fp,	int req	){	u_long keyids[MAXARGS];	int i;	int items;	int itemsize;	char *dummy;	int ritems;	int res;	ritems = 0;	for (i = 0; i < pcmd->nargs; i++) {		keyids[ritems++] = pcmd->argval[i].uval;	}again:	res = doquery(impl_ver, req, 1, ritems, sizeof(u_long),		      (char *)keyids, &items, &itemsize, &dummy, 0, 		      sizeof(dummy));		if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) {		impl_ver = IMPL_XNTPD_OLD;		goto again;	}	if (res == 0)	    (void) fprintf(fp, "done!\n");	return;}/* * authinfo - obtain and print info about authentication *//*ARGSUSED*/static voidauthinfo(	struct parse *pcmd,	FILE *fp	){	struct info_auth *ia;	int items;	int itemsize;	int res;again:	res = doquery(impl_ver, REQ_AUTHINFO, 0, 0, 0, (char *)NULL,		      &items, &itemsize, (void *)&ia, 0, 		      sizeof(struct info_auth));		if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) {		impl_ver = IMPL_XNTPD_OLD;		goto again;	}	if (res != 0)	    return;	if (!check1item(items, fp))	    return;	if (!checkitemsize(itemsize, sizeof(struct info_auth)))	    return;	(void) fprintf(fp, "time since reset:     %ld\n",	    (u_long)ntohl(ia->timereset));	(void) fprintf(fp, "stored keys:          %ld\n",	    (u_long)ntohl(ia->numkeys));	(void) fprintf(fp, "free keys:            %ld\n",	    (u_long)ntohl(ia->numfreekeys));	(void) fprintf(fp, "key lookups:          %ld\n",	    (u_long)ntohl(ia->keylookups));	(void) fprintf(fp, "keys not found:       %ld\n",	    (u_long)ntohl(ia->keynotfound));	(void) fprintf(fp, "uncached keys:        %ld\n",	    (u_long)ntohl(ia->keyuncached));	(void) fprintf(fp, "encryptions:          %ld\n",	    (u_long)ntohl(ia->encryptions));	(void) fprintf(fp, "decryptions:          %ld\n",	    (u_long)ntohl(ia->decryptions));	(void) fprintf(fp, "expired keys:         %ld\n",	    (u_long)ntohl(ia->expired));}/* * traps - obtain and print a list of traps *//*ARGSUSED*/static voidtraps(	struct parse *pcmd,	FILE *fp	){	int i;	struct info_trap *it;	struct sockaddr_storage trap_addr, local_addr;	int items;	int itemsize;	int res;again:	res = doquery(impl_ver, REQ_TRAPS, 0, 0, 0, (char *)NULL,		      &items, &itemsize, (void *)&it, 0, 		      sizeof(struct info_trap));		if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) {		impl_ver = IMPL_XNTPD_OLD;		goto again;	}	if (res != 0)	    return;	if (!checkitems(items, fp))	    return;	if (!checkitemsize(itemsize, sizeof(struct info_trap)) &&	    !checkitemsize(itemsize, v4sizeof(struct info_trap)))	    return;	for (i = 0; i < items; i++ ) {		if (i != 0)		    (void) fprintf(fp, "\n");		memset((char *)&trap_addr, 0, sizeof(trap_addr));		memset((char *)&local_addr, 0, sizeof(local_addr));		if (it->v6_flag != 0) {			GET_INADDR6(trap_addr) = it->trap_address6;			GET_INADDR6(local_addr) = it->local_address6;			trap_addr.ss_family = AF_INET6;			local_addr.ss_family = AF_INET6;		} else {			GET_INADDR(trap_addr) = it->trap_address;			GET_INADDR(local_addr) = it->local_address;			trap_addr.ss_family = AF_INET;			local_addr.ss_family = AF_INET;		}#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR		trap_addr.ss_len = SOCKLEN(&trap_addr);		local_addr.ss_len = SOCKLEN(&local_addr);#endif		(void) fprintf(fp, "address %s, port %d\n",				stoa(&trap_addr), 				ntohs(it->trap_port));		(void) fprintf(fp, "interface: %s, ",				(it->local_address == 0)				? "wildcard"				: stoa(&local_addr));		if (ntohl(it->flags) & TRAP_CONFIGURED)		    (void) fprintf(fp, "configured\n");		else if (ntohl(it->flags) & TRAP_NONPRIO)		    (void) fprintf(fp, "low priority\n");		else		    (void) fprintf(fp, "normal priority\n");				(void) fprintf(fp, "set for %ld secs, last set %ld secs ago\n",			       (long)ntohl(it->origtime),			       (long)ntohl(it->settime));		(void) fprintf(fp, "sequence %d, number of resets %ld\n",			       ntohs(it->sequence),			       (long)ntohl(it->resets));	}}/* * addtrap - configure a trap */static voidaddtrap(	struct parse *pcmd,	FILE *fp	){	do_addclr_trap(pcmd, fp, REQ_ADD_TRAP);}/* * clrtrap - clear a trap from the server */static voidclrtrap(	struct parse *pcmd,	FILE *fp	){	do_addclr_trap(pcmd, fp, REQ_CLR_TRAP);}/* * do_addclr_trap - do grunge work of adding/deleting traps */static voiddo_addclr_trap(	struct parse *pcmd,	FILE *fp,	int req	){	struct conf_trap ctrap;	int items;	int itemsize;	char *dummy;	int res;	int sendsize;again:	if (impl_ver == IMPL_XNTPD)		sendsize = sizeof(struct conf_trap);	else		sendsize = v4sizeof(struct conf_trap);	if (pcmd->argval[0].netnum.ss_family == AF_INET) {		ctrap.trap_address = GET_INADDR(pcmd->argval[0].netnum);		if (impl_ver == IMPL_XNTPD)			ctrap.v6_flag = 0;	} else {		if (impl_ver == IMPL_XNTPD_OLD) {			fprintf(stderr,			    "***Server doesn't understand IPv6 addresses\n");			return;		}		ctrap.trap_address6 = GET_INADDR6(pcmd->argval[0].netnum);		ctrap.v6_flag = 1;	}	ctrap.local_address = 0;	ctrap.trap_port = htons(TRAPPORT);	ctrap.unused = 0;	if (pcmd->nargs > 1) {		ctrap.trap_port			= htons((u_short)(pcmd->argval[1].uval & 0xffff));		if (pcmd->nargs > 2) {			if (pcmd->argval[2].netnum.ss_family !=			    pcmd->argval[0].netnum.ss_family) {				fprintf(stderr,				    "***Cannot mix IPv4 and IPv6 addresses\n");				return;			}			if (pcmd->argval[2].netnum.ss_family == AF_INET)				ctrap.local_address = GET_INADDR(pcmd->argval[2].netnum);			else				ctrap.local_address6 = GET_INADDR6(pcmd->argval[2].netnum);		}	}	res = doquery(impl_ver, req, 1, 1, sendsize,		      (char *)&ctrap, &items, &itemsize, &dummy, 0, 		      sizeof(struct conf_trap));		if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) {		impl_ver = IMPL_XNTPD_OLD;		goto again;	}	if (res == 0)	    (void) fprintf(fp, "done!\n");	return;}/* * requestkey - change the server's request key (a dangerous request) */static voidrequestkey(	struct parse *pcmd,	FILE *fp	){	do_changekey(pcmd, fp, REQ_REQUEST_KEY);}/* * controlkey - change the server's control key */static voidcontrolkey(	struct parse *pcmd,	FILE *fp	){	do_changekey(pcmd, fp, REQ_CONTROL_KEY);}/* * do_changekey - do grunge work of changing keys */static voiddo_changekey(	struct parse *pcmd,	FILE *fp,	int req	){	u_long key;	int items;	int itemsize;	char *dummy;	int res;	key = htonl((u_int32)pcmd->argval[0].uval);again:	res = doquery(impl_ver, req, 1, 1, sizeof(u_int32),		      (char *)&key, &items, &itemsize, &dummy, 0, 		      sizeof(dummy));		if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) {		impl_ver = IMPL_XNTPD_OLD;		goto again;	}	if (res == 0)	    (void) fprintf(fp, "done!\n");	return;}/* * ctlstats - obtain and print info about authentication *//*ARGSUSED*/static voidctlstats(	struct parse *pcmd,	FILE *fp	){	struct info_control *ic;	int items;	int itemsize;	int res;again:	res = doquery(impl_ver, REQ_GET_CTLSTATS, 0, 0, 0, (char *)NULL,		      &items, &itemsize, (void *)&ic, 0, 		      sizeof(struct info_control));		if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) {		impl_ver = IMPL_XNTPD_OLD;		goto again;	}	if (res != 0)	    return;	if (!check1item(items, fp))	    return;	if (!checkitemsize(itemsize, sizeof(struct info_control)))	    return;	(void) fprintf(fp, "time since reset:       %ld\n",		       (u_long)ntohl(ic->ctltimereset));	(void) fprintf(fp, "requests received:      %ld\n",		       (u_long)ntohl(ic->numctlreq));	(void) fprintf(fp, "responses sent:         %ld\n",		       (u_long)ntohl(ic->numctlresponses));	(void) fprintf(fp, "fragments sent:         %ld\n",		       (u_long)ntohl(ic->numctlfrags));	(void) fprintf(fp, "async messages sent:    %ld\n",		       (u_long)ntohl(ic->numasyncmsgs));	(void) fprintf(fp, "error msgs sent:        %ld\n",		       (u_long)ntohl(ic->numctlerrors));	(void) fprintf(fp, "total bad pkts:         %ld\n",		       (u_long)ntohl(ic->numctlbadpkts));	(void) fprintf(fp, "packet too short:       %ld\n",		       (u_long)ntohl(ic->numctltooshort));	(void) fprintf(fp, "response on input:      %ld\n",		       (u_long)ntohl(ic->numctlinputresp));	(void) fprintf(fp, "fragment on input:      %ld\n",		       (u_long)ntohl(ic->numctlinputfrag));	(void) fprintf(fp, "error set on input:     %ld\n",		       (u_long)ntohl(ic->numctlinputerr));	(void) fprintf(fp, "bad offset on input:    %ld\n",		       (u_long)ntohl(ic->numctlbadoffset));	(void) fprintf(fp, "bad version packets:    %ld\n",		       (u_long)ntohl(ic->numctlbadversion));	(void) fprintf(fp, "data in pkt too short:  %ld\n",		       (u_long)ntohl(ic->numctldatatooshort));	(void) fprintf(fp, "unknown op codes:       %ld\n",		       (u_long)ntohl(ic->numctlbadop));}/* * clockstat - get and print clock status information */static voidclockstat(	struct parse *pcmd,	FILE *fp	){	struct info_clock *cl;	/* 8 is the maximum number of clocks which will fit in a packet */	u_long clist[min(MAXARGS, 8)];	int qitems;	int item

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -