cannot freebsd jail by c

2016-05-21 Thread 梅凱
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?
___
freebsd-jail@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-jail
To unsubscribe, send any mail to "freebsd-jail-unsubscr...@freebsd.org"

Re: cannot freebsd jail by c

2016-05-21 Thread James Gritton

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
___
freebsd-jail@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-jail
To unsubscribe, send any mail to "freebsd-jail-unsubscr...@freebsd.org"

Re: cannot freebsd jail by c

2016-05-21 Thread 梅凱

___
freebsd-jail@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-jail
To unsubscribe, send any mail to "freebsd-jail-unsubscr...@freebsd.org"