master
xSmurf 10 years ago
parent ac66ebb47f
commit b35a9cc8a6

@ -15,9 +15,9 @@ int enter_mount_namespace(void) {
fprintf(stderr, "E Must run as root\n"); fprintf(stderr, "E Must run as root\n");
return -1; return -1;
} }
// Do some minimal verification to check that oz-daemon is the parent // Do some minimal verification to check that oz-daemon is the parent
pid_t ppid = getppid(); pid_t ppid = getppid();
//ppid = 10252;
if (checkProcessName(ppid, "oz-daemon") != 0) { if (checkProcessName(ppid, "oz-daemon") != 0) {
fprintf(stderr, "E unable to verify that oz-daemon is parent\n"); fprintf(stderr, "E unable to verify that oz-daemon is parent\n");
return -1; return -1;

@ -1,6 +1,13 @@
// +build linux,!gccgo // +build linux,!gccgo
package mount package mount
/*
As per the setns documentation, it is impossible to enter a
mount namespace from a multithreaded process.
One MUST insure that opening the namespace happens when the process
has only one thread. This is impossible from golang, as such we call
this C function as a constructor to ensure that it is executed
before the go scheduler launches other threads.
*/
// extern int enter_mount_namespace(void); // extern int enter_mount_namespace(void);
/* /*
#include <stdlib.h> #include <stdlib.h>
@ -83,6 +90,7 @@ func cleanPath(spath, homedir string) (string, error) {
func mount(fpath string, readonly bool, fsys *fs.Filesystem, log *logging.Logger) { func mount(fpath string, readonly bool, fsys *fs.Filesystem, log *logging.Logger) {
//log.Notice("Adding file `%s`.", fpath) //log.Notice("Adding file `%s`.", fpath)
// TODO: Check if target is empty directory (and not a mountpoint) and allow the bind in that case
if _, err := os.Stat(fpath); err != nil { if _, err := os.Stat(fpath); err != nil {
log.Error("%v", err) log.Error("%v", err)
os.Exit(1) os.Exit(1)

Loading…
Cancel
Save