Tagging module vsys - vsys-0.7-9
[vsys.git] / backend.ml
index 7d00cfd..4d24326 100644 (file)
@@ -58,8 +58,13 @@ class backendHandler dir_root (frontend_lst: frontendHandler list) =
        let s = Unix.stat fqp in
          List.iter 
            (fun frontend->
-              frontend#mkdir (mk_rel_path fqp) (s.st_perm);
-              Dirwatcher.add_watch fqp [S_Create;S_Delete] (Some(func)))
+              try begin 
+                frontend#mkdir (mk_rel_path fqp) (s.st_perm);
+                Dirwatcher.add_watch fqp [S_Create;S_Delete] func 
+              end
+              with _ ->
+                fprintf logfd "Could not create %s. Looks like a slice shot itself in the foot\n" fqp;flush logfd;
+           )
            slice_list
 
      (** Somebody copied in a new script *)
@@ -79,7 +84,7 @@ class backendHandler dir_root (frontend_lst: frontendHandler list) =
              with _ -> None
            in
              match next_item with
-               | None -> cur_filter
+               | None -> close_in acl_file;cur_filter
                | Some(item) -> 
                    Hashtbl.add cur_filter item true;
                    read_acl cur_filter
@@ -88,12 +93,14 @@ class backendHandler dir_root (frontend_lst: frontendHandler list) =
        with _ ->
          None
 
+     method is_acl fname = Str.string_match acl_file_regexp fname 0
+
      (** Gets called every time there's an inotify event at the backend 
        @param dirname Name of the backend directory
        @param evlist Description of what happened
        @param fname Name of the file that the event applies to
      *)
-     method handle_dir_event dirname evlist fname = 
+     method handle_dir_event dirname evlist fname = 
        let fqp = String.concat "/" [dirname;fname] in
          if ((Str.string_match file_regexp fname 0) && not (Str.string_match acl_file_regexp fname 0)) then  
            begin
@@ -147,7 +154,9 @@ class backendHandler dir_root (frontend_lst: frontendHandler list) =
        let cont = ref true in
          while (!cont) do
            try 
-             let curfile = readdir dir_handle  in
+             let curfile = readdir dir_handle in
+               if (not (this#is_acl curfile)) then
+                 begin
              let fqp = String.concat "/" [dir;curfile] in
              let acl_fqp = String.concat "." [fqp;"acl"] in
              let acl_filter = this#make_filter acl_fqp in
@@ -156,7 +165,7 @@ class backendHandler dir_root (frontend_lst: frontendHandler list) =
                  | None -> frontend_lst 
                  | Some(filter) -> List.filter (fun fe->Hashtbl.mem filter (fe#get_slice_name ())) frontend_lst 
              in
-               if (Str.string_match file_regexp curfile 0 && not (Str.string_match acl_file_regexp curfile 0)) then
+               if (Str.string_match file_regexp curfile 0) then
                  let s = Unix.stat fqp in
                    begin
                      match s.st_kind with
@@ -166,14 +175,15 @@ class backendHandler dir_root (frontend_lst: frontendHandler list) =
                        | S_REG ->
                            this#new_script slice_list fqp
                        | _ ->
-                           printf "Don't know what to do with %s\n" curfile;flush Pervasives.stdout
+                           fprintf logfd "Don't know what to do with %s\n" curfile;flush logfd
                    end
-           with 
-               _->cont:=false;()
+                 end
+           with _
+               ->cont:=false;()
          done 
      in
        begin
          build_initial_tree dir_root;
-         Dirwatcher.add_watch dir_root [S_Create;S_Delete] (Some(this#handle_dir_event));
+         Dirwatcher.add_watch dir_root [S_Create;S_Delete] (this#handle_dir_event);
        end
    end