X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=frontend.ml;h=9d444c3c7242c654a79478f7c33518631dbbd095;hb=9ec649e8f697ffba675a6a2b7b959e89f80f4eab;hp=1c46b2cdb751e6501f8caf6faba5c9a714db896a;hpb=acbdd1601fcfb161089d326e7e32b74b76f441e3;p=vsys.git diff --git a/frontend.ml b/frontend.ml index 1c46b2c..9d444c3 100644 --- a/frontend.ml +++ b/frontend.ml @@ -4,14 +4,19 @@ open Printf open Unix open Globals open Directfifowatcher +open Unixsocketwatcher (** frontendhandler class: Methods to create and unlink pipes and directories @param root_dir vsys directory inside a slice @param slice_name actual slice name - set with care, since the acl functionality refers to these names *) class frontendHandler (root_dir,slice_name) = object(this) - method get_slice_name () = slice_name + (** regex indicating that the script passes fds around *) + val fd_regex = Str.regexp "^fd_" + + method is_fd_passer fname = Str.string_match fd_regex fname 0 + method get_slice_name () = slice_name (** A new script was copied into the backend, make a corresponding entry in the frontend. @param rp Relative path of the entry in the backend @@ -21,13 +26,27 @@ object(this) let realperm = perm land (lnot 0o111) in match rp with Relpath(rel) -> let fqp = String.concat "/" [root_dir;rel] in - let res = Directfifowatcher.mkentry fqp abspath realperm slice_name in - match res with - | Success -> - (* We don't want to get triggered when the .in descriptor is - * opened *) - Directfifowatcher.openentry rp root_dir fqp (abspath,slice_name); - | _ -> () + if (this#is_fd_passer rel) then + let res = Unixsocketwatcher.mkentry fqp abspath realperm slice_name in + begin + match res with + | Success -> + Unixsocketwatcher.openentry root_dir fqp (abspath, slice_name) + | _ -> + logprint "Could not create entry %s" abspath + end + else + let res = Directfifowatcher.mkentry fqp abspath realperm slice_name in + begin + match res with + | Success -> + Directfifowatcher.openentry root_dir fqp (abspath,slice_name) + | _ -> + logprint "Could not create entry %s" abspath + end + + + (** A new directory was created at the backend, make a corresponding directory at the frontend. Refer to mkentry for parameters *) @@ -63,7 +82,7 @@ object(this) Unix.unlink fqp_in; Unix.unlink fqp_out with _ -> - fprintf logfd "Hm. %s disappeared. Looks like slice %s shot itself in the foot\n" fqp (this#get_slice_name ());flush logfd + logprint "Hm. %s disappeared. Looks like slice %s shot itself in the foot\n" fqp (this#get_slice_name ()) method rmdir rp = match rp with Relpath(rel) -> @@ -72,7 +91,7 @@ object(this) try Unix.rmdir fqp with _ -> - fprintf logfd "Hm. %s disappeared or not empty. Looks like slice %s shot itself in the foot\n" fqp (this#get_slice_name ());flush logfd + logprint "Hm. %s disappeared or not empty. Looks like slice %s shot itself in the foot\n" fqp (this#get_slice_name ()) initializer (