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
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 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.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
#include "strv.h"
#include "util.h"
+#include "path-util.h"
#include "namespace.h"
#include "missing.h"
assert(inaccessible_dir);
assert(private_dir);
- if (!(where = strappend(root_dir, p->path)))
+ where = strappend(root_dir, p->path);
+ if (!where)
return -ENOMEM;
switch (p->mode) {
assert_not_reached("Unknown mode");
}
- if ((r = mount(what, where, NULL, MS_BIND|MS_REC, NULL)) >= 0) {
+ r = mount(what, where, NULL, MS_BIND|MS_REC, NULL);
+ if (r >= 0) {
log_debug("Successfully mounted %s to %s", what, where);
/* The bind mount will always inherit the original
/* Avoid exponential growth of trees */
if (r >= 0 && path_equal(p->path, "/"))
- r = mount(NULL, where, NULL, MS_REMOUNT|MS_BIND|MS_UNBINDABLE|flags, NULL);
+ r = mount(NULL, where, NULL, MS_REMOUNT|MS_BIND|flags, NULL);
if (r < 0) {
r = -errno;
strv_length(writable) +
strv_length(readable) +
strv_length(inaccessible) +
- (private_tmp ? 2 : 1);
+ (private_tmp ? 3 : 1);
- if (!(paths = new(Path, n)))
+ paths = new(Path, n);
+ if (!paths)
return -ENOMEM;
p = paths;
p->path = "/tmp";
p->mode = PRIVATE;
p++;
+
+ p->path = "/var/tmp";
+ p->mode = PRIVATE;
+ p++;
}
p->path = "/";
goto fail;
}
- for (p = paths; p < paths + n; p++)
- if ((r = apply_mount(p, root_dir, inaccessible_dir, private_dir, flags)) < 0)
+ for (p = paths; p < paths + n; p++) {
+ r = apply_mount(p, root_dir, inaccessible_dir, private_dir, flags);
+ if (r < 0)
goto undo_mounts;
+ }
memcpy(old_root_dir, tmp_dir, sizeof(tmp_dir)-1);
if (!mkdtemp(old_root_dir)) {
if (remove_tmp)
rmdir(tmp_dir);
- free(paths);
+ free(paths);
return r;
}