wip: more examples
This commit is contained in:
parent
7c30e3f974
commit
8798317ddc
23
examples/dir_descriptor.c
Normal file
23
examples/dir_descriptor.c
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#include <fcntl.h>
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int dirfd;
|
||||||
|
|
||||||
|
if ((dirfd = open("/tmp", __O_DIRECTORY)) < 0)
|
||||||
|
perror("opendir");
|
||||||
|
if (openat(dirfd, "filethatdoesexist", O_RDONLY) < 0)
|
||||||
|
perror("openat0");
|
||||||
|
if (chroot("/tmp"))
|
||||||
|
perror("chroot");
|
||||||
|
if (open("/etc/passwd", O_RDONLY) < 0)
|
||||||
|
perror("open");
|
||||||
|
if (openat(dirfd, "../etc/passwd", O_RDONLY) < 0)
|
||||||
|
perror("openat1");
|
||||||
|
if (openat(dirfd, "filethatdoesexist", O_RDONLY) < 0)
|
||||||
|
perror("openat2");
|
||||||
|
}
|
||||||
|
|
42
examples/unshare_mount_passwd.c
Normal file
42
examples/unshare_mount_passwd.c
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#define _GNU_SOURCE
|
||||||
|
#include <sched.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#define BUF_SIZE 1024
|
||||||
|
|
||||||
|
void print_file(int fd);
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
if ((fd = open("/etc/passwd", O_RDONLY)) < 0)
|
||||||
|
perror("open");
|
||||||
|
print_file(fd);
|
||||||
|
if (close(fd))
|
||||||
|
perror("close");
|
||||||
|
|
||||||
|
if (unshare(CLONE_NEWNS))
|
||||||
|
perror("unshare");
|
||||||
|
printf("----- unshared -----\n");
|
||||||
|
|
||||||
|
if ((fd = open("/etc/passwd", O_RDONLY)) < 0)
|
||||||
|
perror("open");
|
||||||
|
print_file(fd);
|
||||||
|
if (close(fd))
|
||||||
|
perror("close");
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_file(int fd) {
|
||||||
|
char buf[BUF_SIZE];
|
||||||
|
int bytes_read;
|
||||||
|
|
||||||
|
while ((bytes_read = read(fd, buf, BUF_SIZE)) > 0)
|
||||||
|
if (write(1, buf, bytes_read) < 0)
|
||||||
|
perror("write");
|
||||||
|
|
||||||
|
if (bytes_read == -1)
|
||||||
|
perror("read");
|
||||||
|
}
|
||||||
|
|
20
examples/unshare_user.c
Normal file
20
examples/unshare_user.c
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#define _GNU_SOURCE
|
||||||
|
#include <sched.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
if (unshare(CLONE_NEWUSER))
|
||||||
|
perror("unshare");
|
||||||
|
if ((fd = open("/proc/self/uid_map", O_WRONLY)) == -1)
|
||||||
|
perror("open");
|
||||||
|
if (write(fd, "0 0 4294967295\n", 15) == -1)
|
||||||
|
perror("write");
|
||||||
|
if (execl("/bin/bash", "/bin/bash", NULL))
|
||||||
|
perror("execl");
|
||||||
|
}
|
||||||
|
|
Reference in New Issue
Block a user