Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 21 May 2016 15:49:06 -0600
From:      James Gritton <jamie@freebsd.org>
To:        freebsd-jail@freebsd.org
Cc:        =?UTF-8?Q?=E6=A2=85=E5=87=B1?= <freekai@outlook.com>
Subject:   Re: cannot freebsd jail by c
Message-ID:  <9898baf72b32a2feada28638e09a3c2f@gritton.org>
In-Reply-To: <BLU403-EAS3867596492B5EB1C262E8B2AB4C0@phx.gbl>
References:  <BLU403-EAS3867596492B5EB1C262E8B2AB4C0@phx.gbl>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2016-05-21 08:52, 梅凱 wrote:
> This is my part c code:
> 
> 
> 11 int main()
> 12 {
> 13     in_addr_t addr_t=inet_addr("192.168.2.1");
> 14
> 15     struct in_addr in_addr=inet_makeaddr(addr_t,AF_INET);
> 16
> 17
> 18     struct jail j={
> 19         .version=JAIL_API_VERSION,
> 20         .path="./jail_test",
> 21         .hostname="myjail",
> 22         .ip4s=addr_t,
> 23         .ip6s=0,
> 24         .ip4=&in_addr,
> 25         .ip6=NULL
> 26     };
> 27
> 28     errno=0;
> 29     int rs=jail(&j);
> 30     if(0==rs){
> 31         printf("create jail ok!!!\r\n");
> 32         return 0;
> 33     }
> 34
> 35     switch(errno){
> 36         case EPERM:
> 37             printf("eperm\r\n");
> 38             break;
> 39         case EFAULT:
> 40             printf("efault\r\n");
> 41             break;
> 42         case EINVAL:
> 43             printf("einval\r\n");
> 44             break;
> 45         case EAGAIN:
> 46             printf("eagain\r\n");
> 47             break;
> 48         default:
> 49             printf("---------------\r\n");
> 50             break;
> 51     }
> 52     return 0;
> 53 }
> 
> Unfortunately,the errno return EINVAL,it means “The version number of
> the argument is not correct.”,why?

Actually, jail(2) can give EINVAL not only for the reason listed, but 
also for some of the reasons mentioned under jail_set.  Really, it means 
just some value was wrong.

In this case there were two errors.  You passed addr_t in .ip4s, but 
that's supposed to be the number of addresses and not the address itself 
- pass 1 instead.  Also, the path of "./jail_test" won't work; it needs 
to be a full pathname instead.  Fix those two and the jail will create 
correctly.

- Jamie



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