]> git.ipfire.org Git - pakfire.git/commitdiff
build: Create a jail for each build
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 8 Aug 2022 15:29:18 +0000 (15:29 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 8 Aug 2022 15:29:18 +0000 (15:29 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/build.c

index 5041f4aca37387408e28763bdbed9d9dce65839f..3c0d9b76de82bf7450f0a0091c230809de879f43 100644 (file)
@@ -54,6 +54,9 @@ struct pakfire_build {
 
        // cgroup
        struct pakfire_cgroup* cgroup;
+
+       // Jail
+       struct pakfire_jail* jail;
 };
 
 static const char* stages[] = {
@@ -784,6 +787,9 @@ static void pakfire_build_free(struct pakfire_build* build) {
        if (build->cgroup)
                pakfire_cgroup_unref(build->cgroup);
 
+       if (build->jail)
+               pakfire_jail_unref(build->jail);
+
        pakfire_unref(build->pakfire);
        free(build);
 }
@@ -836,6 +842,23 @@ static int pakfire_build_setup_cgroup(struct pakfire_build* build) {
        return 0;
 }
 
+/*
+       Sets up a new jail for this build
+*/
+static int pakfire_build_setup_jail(struct pakfire_build* build) {
+       int r;
+
+       // Create a new jail
+       r = pakfire_jail_create(&build->jail, build->pakfire, 0);
+       if (r) {
+               ERROR(build->pakfire, "Could not create jail for build %s: %m\n", build->_id);
+               return r;
+       }
+
+       // Done
+       return 0;
+}
+
 PAKFIRE_EXPORT int pakfire_build_create(struct pakfire_build** build,
                struct pakfire* pakfire, const char* id, int flags) {
        int r;
@@ -864,6 +887,11 @@ PAKFIRE_EXPORT int pakfire_build_create(struct pakfire_build** build,
        if (r)
                goto ERROR;
 
+       // Create jail
+       r = pakfire_build_setup_jail(b);
+       if (r)
+               goto ERROR;
+
        *build = b;
        return 0;