From d2a4a3e52db7fa09e7a321688506b4a21b4f2bb9 Mon Sep 17 00:00:00 2001 From: Brett Gordon Date: Tue, 17 Jan 2017 10:50:19 -0500 Subject: [PATCH] dig: parse and use /etc/resolv.conf --- Applications/netd/dig.c | 42 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/Applications/netd/dig.c b/Applications/netd/dig.c index eceae764..e67f789c 100644 --- a/Applications/netd/dig.c +++ b/Applications/netd/dig.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -35,7 +36,7 @@ struct RRtail{ int fd; char buf[1024]; - +char server[17]; void alarm_handler( int signum ){ return; @@ -144,12 +145,49 @@ print_entry( char **pptr, int no ){ *pptr = ptr; } +/* open up /etc/resolv.conf and read in + fixme: handles only small config files < 512 bytes */ +int readrc( void ){ + char *ws = " \f\n\r\t\v"; + char *ptr; + int ret = 0; + int x; + + fd = open( "/etc/resolv.conf", O_RDONLY ); + if ( fd < 0 ){ + return -1; + } + x = read( fd, buf, 511 ); + if( x < 1 ) + goto reterr; + buf[x] = 0; + ptr = strtok( buf, ws ); + while ( ptr ){ + if ( ! strcmp( ptr, "nameserver" ) ){ + ptr = strtok( NULL, ws ); + if( ptr == NULL ) + goto reterr; + strcpy( server, ptr ); + goto retok; + } + ptr = strtok( NULL, ws ); + } + reterr: + close(fd); + return -1; + retok: + close(fd); + return 0; +} + int main( int argc, char *argv[] ){ struct sockaddr_in addr; int x; int tries = 5; + readrc(); + fd = socket( AF_INET, SOCK_DGRAM, 0); if( fd < 0 ){ perror("socket"); @@ -158,7 +196,7 @@ int main( int argc, char *argv[] ){ addr.sin_family = AF_INET; addr.sin_port = htons( 53 ); - inet_pton( AF_INET, "192.168.1.1", &addr.sin_addr.s_addr ); + inet_pton( AF_INET, server, &addr.sin_addr.s_addr ); if( connect( fd, (struct sockaddr *)&addr, sizeof(addr) ) < 0 ){ perror("connect"); -- 2.34.1