File: jail_uml.c

package info (click to toggle)
uml-utilities 20040406-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 704 kB
  • ctags: 398
  • sloc: ansic: 3,169; perl: 929; makefile: 203; exp: 129; sh: 92
file content (48 lines) | stat: -rw-r--r-- 757 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
#include <unistd.h>
#include <errno.h>

static void Usage(void)
{
  fprintf(stderr, "Usage : jail_uml jail-directory uid "
	  "uml-command-line ...\n");
  exit(1);
}

int main(int argc, char **argv)
{
  char *dir, *end;
  int uid;

  if(geteuid() != 0){
    fprintf(stderr, "jail_uml must be run as root\n");
    exit(1);
  }

  if(argc < 3) Usage();
  dir = argv[1];
  uid = strtoul(argv[2], &end, 0);
  if(*end != '\0') Usage();
  argc -= 3;
  argv += 3;

  if(chdir(dir)){
    perror("chdir");
    exit(1);
  }

  if(chroot(".")){
    perror("chroot");
    exit(1);
  }

  if(setuid(uid)){
    perror("setuid");
    exit(1);
  }

  execv(argv[0], argv);
  fprintf(stderr, "execve of %s failed : ", argv[0]);
  perror("");
  exit(1);
}