Add option to bind to a specified address

This commit is contained in:
Michael Sawyer 2000-05-19 17:54:04 +00:00
parent fd3594dc7f
commit 4e0dc7b50c
2 changed files with 25 additions and 3 deletions

View file

@ -36,7 +36,7 @@ extern ISC_LIST(dig_lookup_t) lookup_list;
extern ISC_LIST(dig_server_t) server_list;
extern ISC_LIST(dig_searchlist_t) search_list;
extern isc_boolean_t have_ipv6, show_details,
extern isc_boolean_t have_ipv6, show_details, specified_source,
usesearch, qr;
extern in_port_t port;
extern unsigned int timeout;
@ -57,6 +57,7 @@ extern char fixeddomain[MXNAME];
extern isc_boolean_t twiddle;
#endif
extern int exitcode;
extern isc_sockaddr_t bind_address;
isc_boolean_t short_form = ISC_FALSE, printcmd = ISC_TRUE;
@ -537,6 +538,7 @@ parse_args(isc_boolean_t is_batchfile, int argc, char **argv) {
dig_lookup_t *lookup = NULL;
char *batchname = NULL;
char batchline[MXNAME];
char address[MXNAME];
FILE *fp = NULL;
int bargc;
char *bargv[16];
@ -926,6 +928,18 @@ parse_args(isc_boolean_t is_batchfile, int argc, char **argv) {
rv++;
rc--;
}
} else if (strncmp(rv[0], "-b", 2) == 0) {
if (rv[0][2]!=0) {
strncpy(address, &rv[0][2],
MXRD);
} else {
strncpy(address, rv[1],
MXRD);
rv++;
rc--;
}
get_address(address, 0, &bind_address);
specified_source = ISC_TRUE;
} else if (strncmp(rv[0], "-h", 2) == 0) {
show_usage();
exit (exitcode);

View file

@ -24,7 +24,6 @@
* functions in most applications.
*/
#include <config.h>
#include <stdlib.h>
@ -53,7 +52,7 @@ ISC_LIST(dig_lookup_t) lookup_list;
ISC_LIST(dig_server_t) server_list;
ISC_LIST(dig_searchlist_t) search_list;
isc_boolean_t have_ipv6 = ISC_FALSE,
isc_boolean_t have_ipv6 = ISC_FALSE, specified_source = ISC_FALSE,
free_now = ISC_FALSE, show_details = ISC_FALSE, usesearch=ISC_TRUE,
qr = ISC_FALSE;
#ifdef TWIDDLE
@ -66,6 +65,7 @@ isc_taskmgr_t *taskmgr = NULL;
isc_task_t *task = NULL;
isc_timermgr_t *timermgr = NULL;
isc_socketmgr_t *socketmgr = NULL;
isc_sockaddr_t bind_address;
char *rootspace[BUFSIZE];
isc_buffer_t rootbuf;
int sendcount = 0;
@ -1500,6 +1500,10 @@ do_lookup_tcp(dig_lookup_t *lookup) {
isc_sockaddr_pf(&query->sockaddr),
isc_sockettype_tcp, &query->sock) ;
check_result(result, "isc_socket_create");
if (specified_source) {
result = isc_socket_bind(query->sock, &bind_address);
check_result(result, "isc_socket_bind");
}
result = isc_socket_connect(query->sock, &query->sockaddr,
task, connect_done, query);
check_result (result, "isc_socket_connect");
@ -1529,6 +1533,10 @@ do_lookup_udp(dig_lookup_t *lookup) {
isc_sockaddr_pf(&query->sockaddr),
isc_sockettype_udp, &query->sock) ;
check_result(result, "isc_socket_create");
if (specified_source) {
result = isc_socket_bind(query->sock, &bind_address);
check_result(result, "isc_socket_bind");
}
}
send_udp(lookup);