Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 10 Dec 2001 11:27:58 -0800 (PST)
From:      Evan Sarmiento <evms@cs.bu.edu>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   misc/32680: [PATCH] Allows users to start jails by hostname as well as IP address
Message-ID:  <200112101927.fBAJRwG16169@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         32680
>Category:       misc
>Synopsis:       [PATCH] Allows users to start jails by hostname as well as IP address
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Dec 10 11:30:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Evan Sarmiento
>Release:        5.0-CURRENT
>Organization:
>Environment:
FreeBSD vaio 5.0-CURRENT FreeBSD 5.0-CURRENT #14: Wed Nov 28 20:01:56 EST 2001     kaworu@teqnix.sekt7.org:/FreeBSD/FreeBSD-current/src/sys/i386/compile/ARMITAGE  i386

>Description:
When you need to start a jail, you have to specify the IP address
of the jail. This patch allows users to specify the name of the
jail instead of the Ip address if they choose to. For example..

host mrq's ip is 169.69.6.1.

jail /export/mrq mrq 169.69.6.1 /bin/sh /etc/rc
with patch:
jail /export/mrq mrq mrq /bin/sh /etc/rc

Just uses gethostbyname().
>How-To-Repeat:

>Fix:
--- jail.c.orig Sun Jun 24 16:28:19 2001
+++ jail.c      Mon Dec 10 14:21:19 2001
@@ -17,20 +17,20 @@
 #include <arpa/inet.h>

 #include <err.h>
-#include <stdio.h>
+#include <netdb.h>
 #include <stdlib.h>
-#include <string.h>
 #include <unistd.h>

 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 address command ...\n",
                    argv[0]);
        i = chdir(argv[1]);
        if (i)
@@ -40,14 +40,26 @@
        j.path = argv[1];
        j.hostname = argv[2];
        i = inet_aton(argv[3], &in);
-       if (!i)
-               errx(1, "Couldn't make sense of ip-number\n");
+
+       if (!i) {
+         hp = gethostbyname(argv[3]);
+
+         if (hp == NULL)
+          errx(1, "gethostbyname(%s): %s (and) inet_aton(%s): Could not
+           make sense of ip-number", argv[3], hstrerror(h_errno), argv[3] );
+
+         else if (hp)
+          in = *(struct in_addr *)hp->h_addr;
+
+        }
+
        j.ip_number = ntohl(in.s_addr);
        i = jail(&j);
        if (i)
-               err(1, "Imprisonment failed");
+         err(1, "Imprisonment failed");
        i = execv(argv[4], argv + 4);
        if (i)
-               err(1, "execv(%s)", argv[4]);
+         err(1, "execv(%s)", argv[4]);
+
        exit (0);
 }

>Release-Note:
>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200112101927.fBAJRwG16169>