Date: Sun, 09 Dec 2001 19:19:43 +0000 From: Dima Dorfman <dima@trit.org> To: chris@FreeBSD.ORG Cc: Igor M Podlesny <poige@morning.ru>, freebsd-hackers@FreeBSD.ORG Subject: Re: jail.c.patch (allowing to use hostnames when invoking jail(8)) Message-ID: <20011209191948.6AB703E3A@bazooka.trit.org> In-Reply-To: <20011125112748.B511@holly.calldei.com>; from chris@FreeBSD.ORG on "Sun, 25 Nov 2001 11:27:48 -0600"
next in thread | previous in thread | raw e-mail | index | archive | help
Chris Costello <chris@FreeBSD.ORG> wrote: > On Saturday, November 24, 2001, Igor M Podlesny wrote: > > i = inet_aton(argv[3], &in); > > - if (!i) > > - errx(1, "Couldn't make sense of ip-number\n"); > > + if (!i) { > > + /* check if it is resolveable */ > > + struct hostent *hp; > > + hp = gethostbyname(argv[3]); > > + if (hp == NULL) { > > + errx(1, "Couldn't make sense of the jail address\n"); > > + } > > + else { > > + char **p = hp->h_addr_list; > > + if (p[1] != NULL) { > > + errx(1, "Jail should have only one ip-address associated with!\n"); > > + } > > + else { > > + memcpy(&in.s_addr, p[0], sizeof(in.s_addr)); > > + } > > + } > > + } > > I'd rewrite the above (`i = inet_aton' all the way down) as > > hp = gethostbyname(argv[3]); > if (hp == NULL) { > errx(1, "%s: %s", argv[3], hstrerror(h_errno)); > } > in = *(struct in_addr *)hp->h_addr_list[0]; > > This makes the call to inet_aton() unnecessary (and really > shortens the code!). As discussed off-list, this is a good idea. Attached is the final patch that I plan to commit unless I hear objections. Please review. Thanks. Index: jail.8 =================================================================== RCS file: /ref/cvsf/src/usr.sbin/jail/jail.8,v retrieving revision 1.30 diff -u -r1.30 jail.8 --- jail.8 2001/09/03 15:42:10 1.30 +++ jail.8 2001/12/09 19:14:30 @@ -43,7 +43,7 @@ .Nm .Ar path .Ar hostname -.Ar ip-number +.Ar hostname .Ar command .Ar ... .Sh DESCRIPTION Index: jail.c =================================================================== RCS file: /ref/cvsf/src/usr.sbin/jail/jail.c,v retrieving revision 1.7 diff -u -r1.7 jail.c --- jail.c 2001/06/24 20:28:19 1.7 +++ jail.c 2001/12/09 19:14:11 @@ -17,6 +17,7 @@ #include <arpa/inet.h> #include <err.h> +#include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -25,12 +26,13 @@ int main(int argc, char **argv) { + struct hostent *hp; struct jail j; int i; struct in_addr in; if (argc < 5) - errx(1, "Usage: %s path hostname ip-number command ...\n", + errx(1, "Usage: %s path hostname hostname command ...\n", argv[0]); i = chdir(argv[1]); if (i) @@ -39,9 +41,11 @@ j.version = 0; j.path = argv[1]; j.hostname = argv[2]; + hp = gethostbyname(argv[3]); + if (hp == NULL) + errx(1, "gethostbyname(%s): %s", argv[3], hstrerror(h_errno)); i = inet_aton(argv[3], &in); - if (!i) - errx(1, "Couldn't make sense of ip-number\n"); + in = *(struct in_addr *)hp->h_addr; j.ip_number = ntohl(in.s_addr); i = jail(&j); if (i) To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20011209191948.6AB703E3A>