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

📄 cmds.c

📁 This a good VPN source
💻 C
字号:
/* * DNS KEY lookup helper - command implementation * Copyright (C) 2002 Michael Richardson <mcr@freeswan.org> *  * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License * for more details. */#include <stdio.h>#include <string.h>#include <stdlib.h> #include <unistd.h> #include <errno.h>#include <arpa/nameser.h>#include <lwres/netdb.h>#include <time.h>#include <isc/lang.h>#include <isc/magic.h>#include <isc/types.h>#include <isc/result.h>#include <isc/mem.h>#include <isc/buffer.h>#include <isc/region.h>#include <dns/name.h>#include <dns/rdata.h>#include <dns/rdatastruct.h>#include <lwres/netdb.h>#include <lwres/async.h>#include "lwdnsq.h"static void cmd_not_implemented(dnskey_glob *gs, const char *what){  fprintf(gs->cmdproto_out, "0 FATAL unimplemented command \"%s\"\n", what);}void output_transaction_line(dnskey_glob *gs,			     const char *id,			     int ttl,			     const char *cmd,			     const char *data){	time_t t;	t=time(NULL);		/* regularlize time for regression testing */	if(gs->regress) {		t=3145915;	}	if(data) {		fprintf(gs->cmdproto_out,			"%s %ld %d %s %s\n",			id, t, ttl, cmd, data);	} else {		fprintf(gs->cmdproto_out,			"%s %ld %d %s\n",			id, t, ttl, cmd);	}		}	void output_transaction_line_limited(dnskey_glob *gs,				     const char *id,				     int ttl,				     const char *cmd,				     int   max,				     const char *data){	time_t t;	t=time(NULL);		/* regularlize time for regression testing */	if(gs->regress) {		t=3145915;	}	fprintf(gs->cmdproto_out,			"%s %ld %d %s %.*s\n",			id, t, ttl, cmd, max, data);}				    #if 0again:	lwres_getrrsetbyname_xmit(ctx, &las);	timeout.tv_sec = lwres_async_timeout(ctx);	sock = lwres_async_fd(ctx);	FD_ZERO(&readfds);	FD_SET(sock, &readfds);	ret2 = select(sock + 1, &readfds, NULL, NULL, &timeout);		/*	 * What happened with select?	 */	if (ret2 < 0) {		success = LWRES_R_IOERROR;		goto out3;	}	if (ret2 == 0) {		success = LWRES_R_TIMEOUT;		goto out3;	} out:	if (ctx != NULL)		lwres_context_destroy(&ctx); out2:	#endif	void lookup_key(dnskey_glob *gs,		int    argc,		char **argv){	char *id;	char *fqdn;	char simplebuf[80];	/* process arguments */	/* KEY 31459 east.uml.freeswan.org */	if(argc!=3) {		snprintf(simplebuf, sizeof(simplebuf), "wrong number of arguments %d", argc);		output_transaction_line(gs, "0", 0, "FATAL", simplebuf);		return;	}	id=argv[1];	fqdn=argv[2];		lookup_thing(gs, dns_rdatatype_key, "KEY", id, fqdn);}void lookup_key4(dnskey_glob *gs,		 int    argc,		 char **argv){	char *id;	char *ipv4;	struct in_addr in4;	char simplebuf[80];	/* process arguments */	/* KEY 31459 east.uml.freeswan.org */	if(argc != 3) {		snprintf(simplebuf, sizeof(simplebuf), "wrong number of arguments to TXT: %d", argc);		output_transaction_line(gs, "0", 0, "FATAL", simplebuf);		return;	}	id=argv[1];	ipv4=argv[2];	if(inet_pton(AF_INET, ipv4, &in4) <= 0) {		snprintf(simplebuf, sizeof(simplebuf), "invalid IPv4 address: %s", ipv4);		output_transaction_line(gs, "0", 0, "FATAL", simplebuf);		return;	}			snprintf(simplebuf, 80, "%d.%d.%d.%d.in-addr.arpa",		 (in4.s_addr & 0xff000000) >> 24,		 (in4.s_addr & 0xff0000) >> 16,		 (in4.s_addr & 0xff00) >> 8,		 in4.s_addr & 0xff);	lookup_thing(gs, dns_rdatatype_key, "KEY", id, simplebuf);}void lookup_key6(dnskey_glob *gs,		 int    argc,		 char **argv){  cmd_not_implemented(gs, "key6");}void lookup_txt(dnskey_glob *gs,		int    argc,		char **argv){	char *id;	char *fqdn;	char simplebuf[80];	/* process arguments */	/* KEY 31459 east.uml.freeswan.org */	if(argc != 3) {		snprintf(simplebuf, sizeof(simplebuf), "wrong number of arguments to TXT: %d", argc);		output_transaction_line(gs, "0", 0, "FATAL", simplebuf);		return;	}	id=argv[1];	fqdn=argv[2];	lookup_thing(gs, dns_rdatatype_txt, "TXT", id, fqdn);}void lookup_txt4(dnskey_glob *gs,		 int    argc,		 char **argv){	char *id;	char *ipv4;	struct in_addr in4;	char simplebuf[80];	/* process arguments */	/* KEY 31459 east.uml.freeswan.org */	if(argc != 3) {		snprintf(simplebuf, sizeof(simplebuf), "wrong number of arguments to TXT: %d", argc);		output_transaction_line(gs, "0", 0, "FATAL", simplebuf);		return;	}	id=argv[1];	ipv4=argv[2];	if(inet_pton(AF_INET, ipv4, &in4) <= 0) {		snprintf(simplebuf, sizeof(simplebuf), "invalid IPv4 address: %s", ipv4);		output_transaction_line(gs, "0", 0, "FATAL", simplebuf);		return;	}			snprintf(simplebuf, 80, "%d.%d.%d.%d.in-addr.arpa",		 (in4.s_addr & 0xff000000) >> 24,		 (in4.s_addr & 0xff0000) >> 16,		 (in4.s_addr & 0xff00) >> 8,		 in4.s_addr & 0xff);	lookup_thing(gs, dns_rdatatype_txt, "TXT", id, simplebuf);}void lookup_txt6(dnskey_glob *gs,		 int    argc,		 char **argv){  cmd_not_implemented(gs, "txt6");}void lookup_ipseckey(dnskey_glob *gs,		int    argc,		char **argv){  cmd_not_implemented(gs, "ipseckey");}void lookup_ipseckey4(dnskey_glob *gs,		 int    argc,		 char **argv){  cmd_not_implemented(gs, "ipseckey4");}void lookup_ipseckey6(dnskey_glob *gs,		 int    argc,		 char **argv){  cmd_not_implemented(gs, "ipseckey6");}void lookup_oe4(dnskey_glob *gs,		 int    argc,		 char **argv){  cmd_not_implemented(gs, "oe4");}void lookup_oe6(dnskey_glob *gs,		 int    argc,		 char **argv){  cmd_not_implemented(gs, "oe6");}void lookup_a(dnskey_glob *gs,		 int    argc,		 char **argv){  cmd_not_implemented(gs, "a");}void lookup_aaaa(dnskey_glob *gs,		 int    argc,		 char **argv){  cmd_not_implemented(gs, "aaaa");}	/* * $Log: cmds.c,v $ * Revision 1.13  2003/12/04 23:17:56  mcr * 	added "key4" command. * * Revision 1.12  2003/09/19 02:56:11  mcr * 	fixes to make lwdnsq compile with strictest compile flags. * * Revision 1.11  2003/09/03 01:13:24  mcr * 	first attempt at async capable lwdnsq. * * Revision 1.10  2003/05/22 16:33:51  mcr * 	added trailing . to CNAME return and cleaned up "CNAMEFROM" output. * * Revision 1.9  2003/05/14 15:47:39  mcr * 	processing of IP address into pieces was not done with * 	the right order of operations. * * Revision 1.8  2003/02/27 09:27:17  mcr * 	adjusted lwdnsq so that it adheres to contract - TXT records * 	are returned in a single piece. Requires custom decoding. * 	implemented "txt4" lookup type. * * Revision 1.7  2003/01/14 07:53:29  dhr * * - attempt to diagnose lack of lwdnsq * - increase too-small buffer size * * Revision 1.6  2003/01/14 03:01:14  dhr * * improve diagnostics; tidy * * Revision 1.5  2002/12/12 06:03:41  mcr * 	added --regress option to force times to be regular * * Revision 1.4  2002/11/25 18:37:28  mcr * 	added AD- marking of each record that was DNSSEC verified. * * Revision 1.3  2002/11/16 02:53:53  mcr * 	lwdnsq - with new contract added. * * Revision 1.2  2002/11/12 04:33:44  mcr * 	print DNSSEC status as we process CNAMEs. * * Revision 1.1  2002/10/30 02:25:31  mcr * 	renamed version of files from dnskey/ * * Revision 1.4  2002/10/18 23:11:02  mcr * 	if we get ENOENT, then see if we can get a CNAME. If so, then * 	follow it. * 	Be careful when following them to avoid recursion. * * Revision 1.3  2002/10/18 04:08:47  mcr * 	use -ldns routines to decode lwres results and format them nicely. * * Revision 1.2  2002/10/09 20:13:34  mcr * 	first set of real code - lookup KEY records in forward. * * Revision 1.1  2002/09/30 18:55:54  mcr * 	skeleton for dnskey helper program. * * Revision 1.1  2002/09/30 16:50:23  mcr * 	documentation for "dnskey" helper * * Local variables: * c-file-style: "linux" * c-basic-offset: 2 * End: * */

⌨️ 快捷键说明

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