svn commit: r247562 - stable/9/usr.sbin/tcpdrop
John Baldwin
jhb at FreeBSD.org
Fri Mar 1 19:01:41 UTC 2013
Author: jhb
Date: Fri Mar 1 19:01:40 2013
New Revision: 247562
URL: http://svnweb.freebsd.org/changeset/base/247562
Log:
MFC 246129:
Allow the address and ports to be separated by a colon or period rather
than a space to permit directly pasting the output of commands such as
netstat and sockstat on the command line.
Modified:
stable/9/usr.sbin/tcpdrop/tcpdrop.8
stable/9/usr.sbin/tcpdrop/tcpdrop.c
Directory Properties:
stable/9/usr.sbin/tcpdrop/ (props changed)
Modified: stable/9/usr.sbin/tcpdrop/tcpdrop.8
==============================================================================
--- stable/9/usr.sbin/tcpdrop/tcpdrop.8 Fri Mar 1 18:49:14 2013 (r247561)
+++ stable/9/usr.sbin/tcpdrop/tcpdrop.8 Fri Mar 1 19:01:40 2013 (r247562)
@@ -17,7 +17,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 24, 2009
+.Dd January 30, 2013
.Dt TCPDROP 8
.Os
.Sh NAME
@@ -62,6 +62,9 @@ will be dropped.
.Pp
Addresses and ports may be specified by name or numeric value.
Both IPv4 and IPv6 address formats are supported.
+.Pp
+The addresses and ports may be separated by periods or colons
+instead of spaces.
.Sh EXIT STATUS
.Ex -std
.Sh EXAMPLES
Modified: stable/9/usr.sbin/tcpdrop/tcpdrop.c
==============================================================================
--- stable/9/usr.sbin/tcpdrop/tcpdrop.c Fri Mar 1 18:49:14 2013 (r247561)
+++ stable/9/usr.sbin/tcpdrop/tcpdrop.c Fri Mar 1 19:01:40 2013 (r247562)
@@ -50,6 +50,7 @@ struct host_service {
static bool tcpdrop_list_commands = false;
+static char *findport(const char *);
static struct xinpgen *getxpcblist(const char *);
static void sockinfo(const struct sockaddr *, struct host_service *);
static bool tcpdrop(const struct sockaddr *, const struct sockaddr *);
@@ -65,6 +66,7 @@ static void usage(void);
int
main(int argc, char *argv[])
{
+ char *lport, *fport;
bool dropall;
int ch;
@@ -93,15 +95,43 @@ main(int argc, char *argv[])
exit(0);
}
- if (argc != 4 || tcpdrop_list_commands)
+ if ((argc != 2 && argc != 4) || tcpdrop_list_commands)
usage();
- if (!tcpdropbyname(argv[0], argv[1], argv[2], argv[3]))
+ if (argc == 2) {
+ lport = findport(argv[0]);
+ fport = findport(argv[1]);
+ if (lport == NULL || lport[1] == '\0' || fport == NULL ||
+ fport[1] == '\0')
+ usage();
+ *lport++ = '\0';
+ *fport++ = '\0';
+ if (!tcpdropbyname(argv[0], lport, argv[1], fport))
+ exit(1);
+ } else if (!tcpdropbyname(argv[0], argv[1], argv[2], argv[3]))
exit(1);
exit(0);
}
+static char *
+findport(const char *arg)
+{
+ char *dot, *colon;
+
+ /* A strrspn() or strrpbrk() would be nice. */
+ dot = strrchr(arg, '.');
+ colon = strrchr(arg, ':');
+ if (dot == NULL)
+ return (colon);
+ if (colon == NULL)
+ return (dot);
+ if (dot < colon)
+ return (colon);
+ else
+ return (dot);
+}
+
static struct xinpgen *
getxpcblist(const char *name)
{
@@ -237,7 +267,7 @@ tcpdropbyname(const char *lhost, const c
error = getaddrinfo(fhost, fport, &hints, &foreign);
if (error != 0) {
freeaddrinfo(local); /* XXX gratuitous */
- errx(1, "getaddrinfo: %s port %s: %s", lhost, lport,
+ errx(1, "getaddrinfo: %s port %s: %s", fhost, fport,
gai_strerror(error));
}
@@ -318,6 +348,8 @@ usage(void)
{
fprintf(stderr,
"usage: tcpdrop local-address local-port foreign-address foreign-port\n"
+" tcpdrop local-address:local-port foreign-address:foreign-port\n"
+" tcpdrop local-address.local-port foreign-address.foreign-port\n"
" tcpdrop [-l] -a\n");
exit(1);
}
More information about the svn-src-stable-9
mailing list