From e70562b7b93e79372e230738038c62cf80436088 Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Wed, 19 May 2004 17:27:00 +0000 Subject: Proper preparing of kvm for jail --- srcx/jkill.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'srcx/jkill.c') diff --git a/srcx/jkill.c b/srcx/jkill.c index 4311ed8..953095e 100644 --- a/srcx/jkill.c +++ b/srcx/jkill.c @@ -84,15 +84,17 @@ static void usage_jail(const char* name); int main(int argc, char* argv[]) { - int r, jid; - int ret = 0; + struct xprison* sxp = NULL; + struct xprison* xp = NULL; + size_t len; + int jid, r, ret = 0; pid_t child; /* * When running in a jail we do things slightly * differently, and accept different args */ - if(running_in_jail()) + if(running_in_jail() != 0) { parse_jail_opts(argc, argv); @@ -114,17 +116,23 @@ int main(int argc, char* argv[]) argc -= optind; argv += optind; + len = get_jail_sysctl(&sxp); + /* For each jail */ for(; argc > 0; argc--, argv++) { - jid = translate_jail_name(argv[0]); - if(jid == -1) + xp = find_jail(str, len, sxp); + + if(xp == NULL) { warnx("unknown jail host name: %s", argv[0]); ret = 1; continue; } + /* This makes sure we can use kvm funcs in jail */ + kvm_prepare_jail(xp); + /* * We fork and the child goes into the jail and * does the dirty work. Unless in debug mode where @@ -141,6 +149,11 @@ int main(int argc, char* argv[]) /* The child */ case 0: #endif + jid = xp->pri_id; + + /* Always free jail info before going into jail */ + free_jail_sysctl(len, sxp); + if(jail_attach(jid) == -1) err(1, "couldn't attach to jail"); @@ -164,6 +177,7 @@ int main(int argc, char* argv[]) argv++; } + free_jail_sysctl(len, sxp); return ret; } } @@ -304,7 +318,7 @@ static int kill_jail(const char* jail) int cmdargs = JAIL_RUN_CONSOLE; /* Open the kernel interface */ - kd = open_kvm_handle(jail, errbuf); + kd = kvm_openfiles(_PATH_DEVNULL, _PATH_DEVNULL, NULL, O_RDONLY, errbuf); if(kd == NULL) errx(1, "couldn't connect to kernel: %s", errbuf); -- cgit v1.2.3