diff options
author | Kay Sievers <kay@vrfy.org> | 2012-04-11 12:30:53 +0200 |
---|---|---|
committer | Kay Sievers <kay@vrfy.org> | 2012-04-11 12:49:00 +0200 |
commit | cc527a4734d636f1ab5a66576cb7e232af3cc261 (patch) | |
tree | e94d4c19af3b29d0310cb5220f795e391b59bf7f /src/shared/cgroup-label.c | |
parent | 6ac405b493feb1041a9f83561323b642d84381a7 (diff) |
split selinux label operations out of cgroup-util, socket-util
This prevents linking of selinux and libdl for another 15 binaries.
Diffstat (limited to 'src/shared/cgroup-label.c')
-rw-r--r-- | src/shared/cgroup-label.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/src/shared/cgroup-label.c b/src/shared/cgroup-label.c new file mode 100644 index 0000000000..f9a42c679e --- /dev/null +++ b/src/shared/cgroup-label.c @@ -0,0 +1,81 @@ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ + +/*** + This file is part of systemd. + + Copyright 2010 Lennart Poettering + + systemd is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + systemd is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <errno.h> +#include <unistd.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> +#include <dirent.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <ftw.h> + +#include "cgroup-util.h" +#include "log.h" +#include "set.h" +#include "macro.h" +#include "util.h" +#include "mkdir.h" + +int cg_create(const char *controller, const char *path) { + char *fs; + int r; + + assert(controller); + assert(path); + + if ((r = cg_get_path(controller, path, NULL, &fs)) < 0) + return r; + + r = mkdir_parents(fs, 0755); + + if (r >= 0) { + if (mkdir(fs, 0755) >= 0) + r = 1; + else if (errno == EEXIST) + r = 0; + else + r = -errno; + } + + free(fs); + + return r; +} + +int cg_create_and_attach(const char *controller, const char *path, pid_t pid) { + int r, q; + + assert(controller); + assert(path); + assert(pid >= 0); + + if ((r = cg_create(controller, path)) < 0) + return r; + + if ((q = cg_attach(controller, path, pid)) < 0) + return q; + + /* This does not remove the cgroup on failure */ + + return r; +} |