From faa916c08a33b508648932f43696446fcdde9419 Mon Sep 17 00:00:00 2001 From: Mats Erik Andersson Date: Fri, 6 May 2011 20:09:08 +0200 Subject: [PATCH 1/2] ftp: Commands for address family selection. --- ChangeLog | 8 ++++++++ ftp/cmds.c | 36 ++++++++++++++++++++++++++++++++++++ ftp/cmdtab.c | 6 ++++++ ftp/extern.h | 3 +++ 4 files changed, 53 insertions(+), 0 deletions(-) diff --git a/ChangeLog b/ChangeLog index f4a39a6..5e1a6db 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2011-05-06 Mats Erik Andersson + * ftp/extern.h (setipany,setipv4,setipv6): New prototypes. + * ftp/cmdtab.c (ipanyhelp,ipv4help,ipv6help): New help texts. + (cmdtab): Register commands `ipany', `ipv4', and `ipv6'. + * ftp/cmds.c (status): Report address family. + (setipany,setipv4,setipv6): New functions. + +2011-05-06 Mats Erik Andersson + * src/syslogd.c (fprintlog): Deallocate pointers F_HNAME or F_FNAME when F_TYPE is invalidated as F_UNUSED. (cfline): Likewise. diff --git a/ftp/cmds.c b/ftp/cmds.c index 39b6294..4a97f26 100644 --- a/ftp/cmds.c +++ b/ftp/cmds.c @@ -1053,6 +1053,9 @@ status (int argc, char **argv) printf ("Connected to %s.\n", hostname); else printf ("Not connected.\n"); + printf ("Connection addressing: %s\n", + (usefamily == AF_UNSPEC) ? "any" + : (usefamily == AF_INET6) ? "IPv6" : "IPv4"); if (!proxy) { pswitch (1); @@ -1158,6 +1161,39 @@ setverbose (int argc, char **argv) } /* + * Allow any address family. + */ +void +setipany (int argc, char **argv) +{ + usefamily = AF_UNSPEC; + printf ("Selecting addresses: %s.\n", "any"); + code = usefamily; +} + +/* + * Restrict to IPv4 addresses. + */ +void +setipv4 (int argc, char **argv) +{ + usefamily = AF_INET; + printf ("Selecting addresses: %s.\n", "IPv4"); + code = usefamily; +} + +/* + * Restrict to IPv6 addresses. + */ +void +setipv6 (int argc, char **argv) +{ + usefamily = AF_INET6; + printf ("Selecting addresses: %s.\n", "IPv6"); + code = usefamily; +} + +/* * Toggle use of EPRT/EPRT for IPv4. */ void diff --git a/ftp/cmdtab.c b/ftp/cmdtab.c index 8910cf0..65d2096 100644 --- a/ftp/cmdtab.c +++ b/ftp/cmdtab.c @@ -80,6 +80,9 @@ char globhelp[] = "toggle metacharacter expansion of local file names"; char hashhelp[] = "toggle printing `#' for each buffer transferred"; char helphelp[] = "print local help information"; char idlehelp[] = "get (set) idle timer on remote side"; +char ipanyhelp[] = "allow all address families"; +char ipv4help[] = "select only IPv4 addresses"; +char ipv6help[] = "select only IPv6 addresses"; char lcdhelp[] = "change local working directory"; char lshelp[] = "list contents of remote directory"; char macdefhelp[] = "define a macro"; @@ -154,6 +157,9 @@ static struct cmd cmdtab[] = { {"help", helphelp, 0, 0, 1, help}, {"idle", idlehelp, 0, 1, 1, site_idle}, {"image", binaryhelp, 0, 1, 1, setbinary}, + {"ipany", ipanyhelp, 0, 0, 0, setipany}, + {"ipv4", ipv4help, 0, 0, 0, setipv4}, + {"ipv6", ipv6help, 0, 0, 0, setipv6}, {"lcd", lcdhelp, 0, 0, 0, lcd}, {"ls", lshelp, 1, 1, 1, ls}, {"macdef", macdefhelp, 0, 0, 0, macdef}, diff --git a/ftp/extern.h b/ftp/extern.h index 1c4719f..39bff6f 100644 --- a/ftp/extern.h +++ b/ftp/extern.h @@ -132,6 +132,9 @@ void setform (int, char **); void setftmode (int, char **); void setglob (int, char **); void sethash (int, char **); +void setipany (int, char **); +void setipv4 (int, char **); +void setipv6 (int, char **); void setnmap (int, char **); void setntrans (int, char **); void setpassive (int, char **); -- 1.7.4.4