X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fd_fusemount.c;h=5c29c983576fb66090165a5544ade5ab950bf48f;hb=153c335cbebbd3ba11fa7fd56fabfcb9eb895b95;hp=6280244593f87fb48c0187c080e0bfb1e5410aac;hpb=0d530384a33a9573b650f4f86d8198af7bedd9ac;p=vsys-scripts.git diff --git a/fd_fusemount.c b/fd_fusemount.c index 6280244..5c29c98 100644 --- a/fd_fusemount.c +++ b/fd_fusemount.c @@ -1,23 +1,29 @@ #include #include +#include #include #include #include +#include #include "fdpass.h" unsigned int rcvbuf = 16*1024*1024; unsigned int arg_length = 128; +unsigned int mountflags = MS_NODEV | MS_NOSUID; + +FILE *logfd; void receive_argument(int control_channel_fd, char *source) { int received; - received=recv(control_channel_fd, source, arg_length); + received=recv(control_channel_fd, source, arg_length, 0); if (received 1023) { + printf ("Got control_channel_fd = %d\n", control_channel_fd); + exit(1); + } + receive_argument(control_channel_fd, source); receive_argument(control_channel_fd, target); receive_argument(control_channel_fd, filesystemtype); receive_argument(control_channel_fd, data); - - magic_fd = get_magic_fd (data); - if (magic_fd < 3) { - printf("Got fd %d in fusemount\n",magic_fd); + mount_fd = receive_fd (control_channel_fd); + + if (mount_fd < 2) { + printf("mount_fd = %d\n", mount_fd); exit(1); } + set_magic_fd(data, mount_fd); + + check_source(source); + check_target(target); + check_fstype(filesystemtype); + + sprintf(slice_target,"/vservers/%s/%s", slice_name, target); + + fprintf(logfd, "Mount fd: %d Source: %s slice_target: %s fstype: %s mountflags: %d data: %s\n", mount_fd, source, slice_target, filesystemtype, mountflags, data); + + if (!mount(source, slice_target, filesystemtype, mountflags, data)) { + send_fd(control_channel_fd, mount_fd); + } + else { + printf ("Error executing mount\n"); + exit(1); + } + close(logfd); + return 0; }