From 8bd6fc0a98539e50d96fe4b499be40c06ca63f5e Mon Sep 17 00:00:00 2001 From: anonymous Date: Fri, 27 Jun 2003 22:56:31 +0000 Subject: Initial revision --- src/injail.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100755 src/injail.c (limited to 'src/injail.c') diff --git a/src/injail.c b/src/injail.c new file mode 100755 index 0000000..7d653a6 --- /dev/null +++ b/src/injail.c @@ -0,0 +1,67 @@ +/* +// AUTHOR +// James Quick +// N. Nielsen +// +// LICENSE +// This software is in the public domain. +// +// The software is provided "as is", without warranty of any kind, +// express or implied, including but not limited to the warranties +// of merchantability, fitness for a particular purpose, and +// noninfringement. In no event shall the author(s) be liable for any +// claim, damages, or other liability, whether in an action of +// contract, tort, or otherwise, arising from, out of, or in connection +// with the software or the use or other dealings in the software. +// +// SUPPORT +// Send bug reports to: +// +// injail +// A utility function to determine if a process is running in a FreeBSD jail. +// +// This code was written by James E. Quick mailto:jq@quick.com +// The code may be freely re-used under the terms of the BSD copyright, +// as long as this comment remains intact. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if __FreeBSD_version > 500000 +#define P_FLAG ki_flag +#else +#define P_FLAG kp_proc.p_flag +#endif + +/* int injail() +* Return 1 if running in a jail, 0 if not, -1 on error +* jq 05/28/2002 +*/ +int injail () +{ + int count = 0; + kvm_t* kd = 0; + struct kinfo_proc* kp; + char *memf, *nlistf, *swapf, errbuf[_POSIX2_LINE_MAX]; + int result = -1; + + memf = nlistf = swapf = _PATH_DEVNULL; + kd = kvm_openfiles(nlistf, memf, swapf, O_RDONLY, errbuf); + if(kd) + { + kp = kvm_getprocs(kd, KERN_PROC_PID, getpid(), &count); + if(kp) + result = (kp->P_FLAG & P_JAILED) ? 1 : 0; + kvm_close(kd); + } + + return result; +} -- cgit v1.2.3