From f7e6d6034193fdd91fe9b617e03c7f539fb40891 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Fillod=2C=20F8CFE?= Date: Sun, 21 Sep 2008 20:32:08 +0000 Subject: [PATCH] restrict listening IP address git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@2399 7ae35d74-ebe9-4afe-98af-79ac388436b8 --- tests/rigctld.8 | 3 +++ tests/rigctld.c | 21 ++++++++++++++++++--- tests/rotctld.8 | 5 ++++- tests/rotctld.c | 21 ++++++++++++++++++--- 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/tests/rigctld.8 b/tests/rigctld.8 index 1e5819246..4f3a24668 100644 --- a/tests/rigctld.8 +++ b/tests/rigctld.8 @@ -97,6 +97,9 @@ Use -L option for a list. .B \-t, --port=number Use \fInumber\fP as the TCP listening port. The default is 4532. .TP +.B \-T, --listen-addr=IPADDR +Use \fIIPADDR\fP as the listening IP address. The default is ANY. +.TP .B \-l, --list List all model numbers defined in \fBHamlib\fP and exit. .TP diff --git a/tests/rigctld.c b/tests/rigctld.c index 558b9d60c..f1fe399e9 100644 --- a/tests/rigctld.c +++ b/tests/rigctld.c @@ -4,7 +4,7 @@ * This program test/control a radio using Hamlib. * It takes commands from network connection. * - * $Id: rigctld.c,v 1.7 2008-09-17 20:36:34 fillods Exp $ + * $Id: rigctld.c,v 1.8 2008-09-21 20:32:07 fillods Exp $ * * * This program is free software; you can redistribute it and/or @@ -68,7 +68,7 @@ * NB: do NOT use -W since it's reserved by POSIX. * TODO: add an option to read from a file */ -#define SHORT_OPTIONS "m:r:p:d:P:D:s:c:lC:t:LuovhV" +#define SHORT_OPTIONS "m:r:p:d:P:D:s:c:lC:t:T:LuovhV" static struct option long_options[] = { {"model", 1, 0, 'm'}, @@ -80,6 +80,7 @@ static struct option long_options[] = {"serial-speed", 1, 0, 's'}, {"civaddr", 1, 0, 'c'}, {"port", 1, 0, 't'}, + {"listen-addr", 1, 0, 'T'}, {"list", 0, 0, 'l'}, {"set-conf", 1, 0, 'C'}, {"show-conf",0, 0, 'L'}, @@ -105,6 +106,7 @@ int interactive = 1; /* no cmd because of daemon */ int prompt= 0 ; /* Daemon mode for rigparse return string */ int portno = 4532; +uint32_t src_addr = INADDR_ANY; #define MAXCONFLEN 128 @@ -129,6 +131,7 @@ int main (int argc, char *argv[]) int sock_listen; struct sockaddr_in serv_addr; int reuseaddr = 1; + int a0,a1,a2,a3; while(1) { int c; @@ -242,6 +245,17 @@ int main (int argc, char *argv[]) } portno = atoi(optarg); break; + case 'T': + if (!optarg) { + usage(); /* wrong arg count */ + exit(1); + } + if (4 != sscanf(optarg, "%d.%d.%d.%d", &a0,&a1,&a2,&a3)) { + usage(); /* wrong arg count */ + exit(1); + } + src_addr = (a0<<24)|(a1<<16)|(a2<<8)|a3; + break; case 'o': vfo_mode++; break; @@ -343,7 +357,7 @@ int main (int argc, char *argv[]) serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(portno); - serv_addr.sin_addr.s_addr = INADDR_ANY; + serv_addr.sin_addr.s_addr = htonl(src_addr); if (setsockopt(sock_listen, SOL_SOCKET, SO_REUSEADDR, @@ -482,6 +496,7 @@ void usage(void) " -s, --serial-speed=BAUD set serial speed of the serial port\n" " -c, --civaddr=ID set CI-V address, decimal (for Icom rigs only)\n" " -t, --port=NUM set TCP listening port, default %d\n" + " -T, --listen-addr=IPADDR set listening IP address, default ANY\n" " -C, --set-conf=PARM=VAL set config parameters\n" " -L, --show-conf list all config parameters\n" " -l, --list list all model numbers and exit\n" diff --git a/tests/rotctld.8 b/tests/rotctld.8 index 32a17c726..83c3b4823 100644 --- a/tests/rotctld.8 +++ b/tests/rotctld.8 @@ -2,7 +2,7 @@ .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) -.TH ROTCTLD "8" "Septembre 12, 2008" "Hamlib" "Rotator Control Daemon" +.TH ROTCTLD "8" "Septembre 21, 2008" "Hamlib" "Rotator Control Daemon" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -74,6 +74,9 @@ Use -L option for a list. .B \-t, --port=number Use \fInumber\fP as the TCP listening port. The default is 4533. .TP +.B \-T, --listen-addr=IPADDR +Use \fIIPADDR\fP as the listening IP address. The default is ANY. +.TP .B \-l, --list List all model numbers defined in \fBHamlib\fP and exit. .TP diff --git a/tests/rotctld.c b/tests/rotctld.c index 1d59b94a1..9a6f1a34f 100644 --- a/tests/rotctld.c +++ b/tests/rotctld.c @@ -4,7 +4,7 @@ * This program test/control a rotator using Hamlib. * It takes commands from network connection. * - * $Id: rotctld.c,v 1.3 2008-09-17 20:36:34 fillods Exp $ + * $Id: rotctld.c,v 1.4 2008-09-21 20:32:08 fillods Exp $ * * * This program is free software; you can redistribute it and/or @@ -76,13 +76,14 @@ void usage(); * NB: do NOT use -W since it's reserved by POSIX. * TODO: add an option to read from a file */ -#define SHORT_OPTIONS "m:r:s:C:t:LvhVl" +#define SHORT_OPTIONS "m:r:s:C:t:T:LvhVl" static struct option long_options[] = { {"model", 1, 0, 'm'}, {"rot-file", 1, 0, 'r'}, {"serial-speed", 1, 0, 's'}, {"port", 1, 0, 't'}, + {"listen-addr", 1, 0, 'T'}, {"list", 0, 0, 'l'}, {"set-conf", 1, 0, 'C'}, {"show-conf",0, 0, 'L'}, @@ -96,6 +97,7 @@ int interactive = 1; /* no cmd because of daemon */ int prompt= 0 ; /* Daemon mode for rigparse return string */ int portno = 4533; +uint32_t src_addr = INADDR_ANY; #define MAXCONFLEN 128 @@ -116,6 +118,7 @@ int main (int argc, char *argv[]) int sock_listen; struct sockaddr_in serv_addr; int reuseaddr = 1; + int a0,a1,a2,a3; while(1) { int c; @@ -170,6 +173,17 @@ int main (int argc, char *argv[]) } portno = atoi(optarg); break; + case 'T': + if (!optarg) { + usage(); /* wrong arg count */ + exit(1); + } + if (4 != sscanf(optarg, "%d.%d.%d.%d", &a0,&a1,&a2,&a3)) { + usage(); /* wrong arg count */ + exit(1); + } + src_addr = (a0<<24)|(a1<<16)|(a2<<8)|a3; + break; case 'v': verbose++; break; @@ -243,7 +257,7 @@ int main (int argc, char *argv[]) serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(portno); - serv_addr.sin_addr.s_addr = INADDR_ANY; + serv_addr.sin_addr.s_addr = htonl(src_addr); if (setsockopt(sock_listen, SOL_SOCKET, SO_REUSEADDR, @@ -376,6 +390,7 @@ void usage() " -r, --rot-file=DEVICE set device of the rotator to operate on\n" " -s, --serial-speed=BAUD set serial speed of the serial port\n" " -t, --port=NUM set TCP listening port, default %d\n" + " -T, --listen-addr=IPADDR set listening IP address, default ANY\n" " -C, --set-conf=PARM=VAL set config parameters\n" " -L, --show-conf list all config parameters\n" " -l, --list list all model numbers and exit\n"