2
0
mirror of https://github.com/xcat2/xNBA.git synced 2025-01-05 19:15:05 +00:00

Add debugging for CNAME records.

Allow routines to be called by nmb.c
This commit is contained in:
Michael Brown 2005-05-01 11:30:26 +00:00
parent 3ae7a3d1f0
commit bcedad4708
2 changed files with 38 additions and 5 deletions

View File

@ -2,8 +2,9 @@
#define DNS_RESOLVER_H
#include "stdint.h"
#include "nic.h"
#include "in.h"
#include "ip.h"
#include "udp.h"
/*
* Constants
@ -76,6 +77,16 @@ struct dns_rr_info_a {
struct dns_rr_info_cname {
struct dns_rr_info;
char cname[0];
};
} __attribute__ (( packed ));
/*
* Functions in dns.c (used by nmb.c)
*
*/
extern struct dns_header * dns_query ( struct dns_query *query,
unsigned int query_len,
struct sockaddr_in *nameserver );
extern struct dns_rr_info * dns_find_rr ( struct dns_query *query,
struct dns_header *reply );
#endif /* DNS_RESOLVER_H */

View File

@ -145,8 +145,8 @@ static inline const char * dns_skip_name ( const char *name ) {
* query. Returns a pointer to the RR, or NULL if no answer found.
*
*/
static struct dns_rr_info * dns_find_rr ( struct dns_query *query,
struct dns_header *reply ) {
struct dns_rr_info * dns_find_rr ( struct dns_query *query,
struct dns_header *reply ) {
int i, cmp;
const char *p = ( ( char * ) reply ) + sizeof ( struct dns_header );
@ -192,6 +192,23 @@ static inline char * dns_make_name ( char *dest, const char *name ) {
return dest;
}
/*
* Produce a printable version of a DNS name. Used only for debugging.
*
*/
static inline char * dns_unmake_name ( char *name ) {
char *p;
unsigned int len;
p = name;
while ( ( len = *p ) ) {
*(p++) = '.';
p += len;
}
return name + 1;
}
/*
* Decompress a DNS name.
*
@ -281,10 +298,15 @@ static int dns_resolv ( struct in_addr *addr, const char *name ) {
( struct dns_rr_info_cname * ) rr_info;
char *cname = rr_info_cname->cname;
DBG ( "DNS found CNAME\n" );
query_info = ( void * )
dns_decompress_name ( query.payload,
cname, reply );
DBG ( "DNS found CNAME %s\n",
dns_unmake_name ( query.payload ) );
DBG ( "", /* Reconstruct name */
dns_make_name ( query.payload,
query.payload + 1 ) );
query_info->qtype = htons ( DNS_TYPE_A );
query_info->qclass = htons ( DNS_CLASS_IN );