Hi John,

I attached my changes as a patch. It should not break an existing SKS
installation and it should be easy to compile it for Debian with just a
few easy changes in settings.ml and adding the needed paths to sksconf.
(Changes for the example sksconf for Debian included.)

Then I removed all those "lazy" instructions. I have no idea why they
were used and they just caused trouble here and it works great without them.

Additionally, "Lazy.force" was uses several times, but it is not
thread-safe:
http://caml.inria.fr/pub/docs/manual-ocaml/libref/Lazy.html

Please let me know what you think about my changes.


Cheers
Jens

--- sks-1.1.3/build.ml  2012-04-11 04:03:25.000000000 +0200
+++ sks-1.1.4/build.ml  2012-05-06 03:15:50.000000000 +0200
@@ -31,8 +31,8 @@
     Keydb.withtxn = false;
     Keydb.cache_bytes = !Settings.cache_bytes;
     Keydb.pagesize = !Settings.pagesize;
-    Keydb.dbdir = Lazy.force Settings.dbdir;
-    Keydb.dumpdir = Lazy.force Settings.dumpdir;
+    Keydb.dbdir = !Settings.dbdir;
+    Keydb.dumpdir = !Settings.dumpdir;
   }
 
   module Keydb = Keydb.Safe
@@ -86,11 +86,11 @@
   let run () = 
     set_logfile "build";
 
-    if Sys.file_exists (Lazy.force Settings.dbdir) then (
+    if Sys.file_exists (!Settings.dbdir) then (
       printf "KeyDB directory already exists.  Exiting.\n";
       exit (-1)
     );
-    Unix.mkdir (Lazy.force Settings.dbdir) 0o700; 
+    Unix.mkdir (!Settings.dbdir) 0o700; 
 
     Keydb.open_dbs settings;
     Keydb.set_meta ~key:"filters" ~data:"yminsky.dedup";

--- sks-1.1.3/clean_keydb.ml    2012-04-11 04:03:25.000000000 +0200
+++ sks-1.1.4/clean_keydb.ml    2012-05-06 03:14:58.000000000 +0200
@@ -44,8 +44,8 @@
     Keydb.withtxn = !Settings.transactions;
     Keydb.cache_bytes = !Settings.cache_bytes;
     Keydb.pagesize = !Settings.pagesize;
-    Keydb.dbdir = Lazy.force Settings.dbdir;
-    Keydb.dumpdir = Lazy.force Settings.dumpdir;
+    Keydb.dbdir = !Settings.dbdir;
+    Keydb.dumpdir = !Settings.dumpdir;
   } 
 
   (** we need full keydb access because we're playing directly with

--- sks-1.1.3/common.ml 2012-04-11 04:03:25.000000000 +0200
+++ sks-1.1.4/common.ml 2012-05-05 21:58:17.000000000 +0200
@@ -85,7 +85,7 @@
 
 let set_logfile extension =
   if !Settings.filelog then
-    let fname = (Filename.concat !Settings.basedir extension) ^ ".log" in
+    let fname = (Filename.concat !Settings.logdir extension) ^ ".log" in
     stored_logfile_name := Some fname;
     logfile := open_out_gen [ Open_wronly; Open_creat; Open_append; ]
       0o600 fname;
@@ -213,8 +213,8 @@
 let recon_address = !Settings.recon_address
 let http_port = !Settings.hkp_port
 let http_address = !Settings.hkp_address
-let db_command_name = Filename.concat !Settings.basedir "db_com_sock"
-let recon_command_name = Filename.concat !Settings.basedir "recon_com_sock"
+let db_command_name = Filename.concat !Settings.rundir "db_com_sock"
+let recon_command_name = Filename.concat !Settings.rundir "recon_com_sock"
 
 let db_command_addr = Unix.ADDR_UNIX db_command_name
 let recon_command_addr = Unix.ADDR_UNIX recon_command_name

--- sks-1.1.3/dbserver.ml       2012-04-11 04:03:25.000000000 +0200
+++ sks-1.1.4/dbserver.ml       2012-05-06 03:20:23.000000000 +0200
@@ -42,8 +42,8 @@
     Keydb.withtxn = !Settings.transactions;
     Keydb.cache_bytes = !Settings.cache_bytes;
     Keydb.pagesize = !Settings.pagesize;
-    Keydb.dbdir = Lazy.force Settings.dbdir;
-    Keydb.dumpdir = Lazy.force Settings.dumpdir;
+    Keydb.dbdir = !Settings.dbdir;
+    Keydb.dumpdir = !Settings.dumpdir;
   }
   module Keydb = Keydb.Safe
 
@@ -51,7 +51,7 @@
      code for the DB. *)
 
   let withtxn = !Settings.transactions 
-  let dbdir = Lazy.force Settings.dbdir
+  let dbdir = Settings.dbdir
   let () = 
     if not withtxn then 
       failwith "Running sks_db without transactions is no longer supported."
@@ -390,7 +390,7 @@
 
   let convert_web_fname fname =
     if verify_web_fname fname then
-      Filename.concat !Settings.basedir (Filename.concat "web" fname)
+      Filename.concat !Settings.webdir fname
     else raise (Wserver.Misc_error "Malformed requst")
 
   let supported_extensions = 

--- sks-1.1.3/fastbuild.ml      2012-04-11 04:03:25.000000000 +0200
+++ sks-1.1.4/fastbuild.ml      2012-05-06 03:17:01.000000000 +0200
@@ -34,15 +34,15 @@
     Keydb.withtxn = false;
     Keydb.cache_bytes = !Settings.cache_bytes;
     Keydb.pagesize = !Settings.pagesize;
-    Keydb.dbdir = Lazy.force Settings.dbdir;
-    Keydb.dumpdir = Lazy.force Settings.dumpdir;
+    Keydb.dbdir = !Settings.dbdir;
+    Keydb.dumpdir = !Settings.dumpdir;
   }
 
   module Keydb = Keydb.Unsafe
 
   let n = match !Settings.n with 0 -> 1 | x -> x
   let maxkeys = n * 15000 
-  let dumpdir = Lazy.force Settings.dumpdir
+  let dumpdir = !Settings.dumpdir
 
   let lsdir dir = 
     let dirhandle = Unix.opendir dir in
@@ -147,12 +147,12 @@
   let run () = 
     set_logfile "fastbuild";
 
-    if Sys.file_exists (Lazy.force Settings.dbdir) then (
+    if Sys.file_exists (!Settings.dbdir) then (
       perror "KeyDB directory already exists.  Exiting.";
       eprintf "KeyDB directory already exists.  Exiting.\n";
       exit (-1)
     );
-    Unix.mkdir (Lazy.force Settings.dbdir) 0o700;
+    Unix.mkdir (!Settings.dbdir) 0o700;
 
     Keydb.open_dbs settings;
     Keydb.set_meta ~key:"filters" ~data:"yminsky.dedup"; 

--- sks-1.1.3/getfileopts.ml    2012-04-11 04:03:25.000000000 +0200
+++ sks-1.1.4/getfileopts.ml    2012-05-05 19:34:22.000000000 +0200
@@ -124,14 +124,14 @@
     then (
       parse Sys.argv;
       let from_file_commandline = 
-       fname_convert (Filename.concat !basedir config_fname)
+       fname_convert (Filename.concat !Settings.confdir config_fname)
       in
       parse from_file_commandline
     )
     else (
       parse (Sys.argv <|> (0,!pos));
       let from_file_commandline = 
-       fname_convert (Filename.concat !basedir config_fname)
+       fname_convert (Filename.concat !Settings.confdir config_fname)
       in
       parse from_file_commandline;
       parse (Array.append [|""|] (Sys.argv <|> (!pos + 1,0)))

--- sks-1.1.3/incdump.ml        2012-04-11 04:03:25.000000000 +0200
+++ sks-1.1.4/incdump.ml        2012-05-06 03:20:07.000000000 +0200
@@ -30,8 +30,8 @@
   Keydb.withtxn = !Settings.transactions;
   Keydb.cache_bytes = !Settings.cache_bytes;
   Keydb.pagesize = !Settings.pagesize;
-  Keydb.dbdir = Lazy.force Settings.dbdir;
-  Keydb.dumpdir = Lazy.force Settings.dumpdir;
+  Keydb.dbdir = !Settings.dbdir;
+  Keydb.dumpdir = !Settings.dumpdir;
 }
 
 module Keydb = Keydb.Unsafe

--- sks-1.1.3/mailsync.ml       2012-04-11 04:03:25.000000000 +0200
+++ sks-1.1.4/mailsync.ml       2012-05-06 03:14:32.000000000 +0200
@@ -62,7 +62,7 @@
 
 let demote fname = 
   if Sys.file_exists fname then
-    let destdir = Lazy.force Settings.failed_msgdir in
+    let destdir = !Settings.failed_msgdir in
     if not (Sys.file_exists destdir) then
       Unix.mkdir destdir 0o700;
     Sys.rename fname (Filename.concat destdir (Filename.basename fname))
@@ -74,7 +74,7 @@
 (** read any mails in queue directory, process them, and remove them *)
 let rec load_mailed_keys ~addkey () = 
   plerror 7 "checking for key emails";
-  let files = try lsdir (Lazy.force Settings.msgdir) with Unix.Unix_error _ -> 
[] in
+  let files = try lsdir (!Settings.msgdir) with Unix.Unix_error _ -> [] in
   let ready_files = 
     List.filter ~f:(fun file -> Filename.check_suffix file ".ready") files 
   in

--- sks-1.1.3/membership.ml     2012-04-11 04:03:25.000000000 +0200
+++ sks-1.1.4/membership.ml     2012-05-06 03:12:55.000000000 +0200
@@ -110,7 +110,7 @@
       end
 
 let reload_if_changed () = 
-  let fname = Lazy.force Settings.membership_file in
+  let fname = !Settings.membership_file in
   let (mshp,old_mtime) = !membership in
   match get_mtime fname with
     | None -> 
@@ -136,7 +136,7 @@
          )
 
 let get_names () = 
-  let file = Lazy.force Settings.membership_file in
+  let file = !Settings.membership_file in
   let mshp = 
     if not (Sys.file_exists file) then [||]
     else (
@@ -158,7 +158,7 @@
     | _ -> false
 
 let rec choose () =
-  if Sys.file_exists (Lazy.force Settings.membership_file) then begin
+  if Sys.file_exists (!Settings.membership_file) then begin
     reload_if_changed ();
     let (mshp, _) = !membership in
     let choice = Random.int (Array.length mshp) in
@@ -208,7 +208,7 @@
   protect ~f:run ~finally:(fun () -> close_in file)
 
 let reload_mailsync_if_changed () = 
-  let fname = Lazy.force Settings.mailsync_file in
+  let fname = !Settings.mailsync_file in
   let (msync,old_mtime) = !mailsync_partners in
   match get_mtime fname with
       None -> plerror 2 "%s" 
@@ -218,7 +218,7 @@
 
 let get_mailsync_partners () = 
   let partners = 
-    if Sys.file_exists (Lazy.force Settings.membership_file) then (
+    if Sys.file_exists (!Settings.membership_file) then (
       reload_mailsync_if_changed ();
       let (m,mtime) = !mailsync_partners in
       m

--- sks-1.1.3/merge_keyfiles.ml 2012-04-11 04:03:25.000000000 +0200
+++ sks-1.1.4/merge_keyfiles.ml 2012-05-06 03:18:58.000000000 +0200
@@ -31,8 +31,8 @@
     Keydb.withtxn = false;
     Keydb.cache_bytes = !Settings.cache_bytes;
     Keydb.pagesize = !Settings.pagesize;
-    Keydb.dbdir = Lazy.force Settings.dbdir;
-    Keydb.dumpdir = Lazy.force Settings.dumpdir;
+    Keydb.dbdir = !Settings.dbdir;
+    Keydb.dumpdir = !Settings.dumpdir;
   }
 
   module Keydb = Keydb.Safe
@@ -97,7 +97,7 @@
   let timer = MTimer.create ()
   let run () = 
     set_logfile "merge";
-    if not (Sys.file_exists (Lazy.force Settings.dbdir)) then (
+    if not (Sys.file_exists (!Settings.dbdir)) then (
       printf "No existing KeyDB database.  Exiting.\n";
       exit (-1)
     );

--- sks-1.1.3/pbuild.ml 2012-04-11 04:03:25.000000000 +0200
+++ sks-1.1.4/pbuild.ml 2012-05-06 03:18:07.000000000 +0200
@@ -30,8 +30,8 @@
     Keydb.withtxn = false;
     Keydb.cache_bytes = !Settings.cache_bytes;
     Keydb.pagesize = !Settings.pagesize;
-    Keydb.dbdir = (Lazy.force Settings.dbdir);
-    Keydb.dumpdir = (Lazy.force Settings.dumpdir);
+    Keydb.dbdir = (!Settings.dbdir);
+    Keydb.dumpdir = (!Settings.dumpdir);
   }
 
   module Keydb = Keydb.Safe
@@ -43,7 +43,7 @@
     bitquantum = !Settings.bitquantum;
     treetype = `ondisk;
     max_nodes = !Settings.max_ptree_nodes;
-    dbdir = Lazy.force Settings.ptree_dbdir;
+    dbdir = !Settings.ptree_dbdir;
     cache_bytes = !Settings.ptree_cache_bytes;
     pagesize = !Settings.ptree_pagesize;
   }
@@ -84,7 +84,7 @@
   let run () = 
     set_logfile "pbuild";
 
-    if Sys.file_exists (Lazy.force Settings.ptree_dbdir) then (
+    if Sys.file_exists (!Settings.ptree_dbdir) then (
       printf "PTree directory already exists.  Exiting.\n";
       exit (-1)
     );

--- sks-1.1.3/reconserver.ml    2012-04-11 04:03:26.000000000 +0200
+++ sks-1.1.4/reconserver.ml    2012-05-06 03:20:49.000000000 +0200
@@ -42,7 +42,7 @@
                else if !Settings.disk_ptree 
                then `ondisk else `inmem);
     max_nodes = !Settings.max_ptree_nodes;
-    dbdir = Lazy.force Settings.ptree_dbdir;
+    dbdir = !Settings.ptree_dbdir;
     cache_bytes = !Settings.ptree_cache_bytes;
     pagesize = !Settings.ptree_pagesize;
   }

--- sks-1.1.3/recoverList.ml    2012-04-11 04:03:26.000000000 +0200
+++ sks-1.1.4/recoverList.ml    2012-05-05 19:21:31.000000000 +0200
@@ -79,7 +79,7 @@
 let log_diffs log_fname hashes = 
   if !Settings.log_diffs then
     begin
-      let log_fname = Filename.concat !Settings.basedir log_fname in
+      let log_fname = Filename.concat !Settings.diffdir log_fname in
       let file = open_out log_fname in
       protect ~f:(fun () -> List.iter hashes
          ~f:(fun h -> fprintf file "%s\n" (KeyHash.hexify h)))

--- sks-1.1.3/sampleConfig/debian/sksconf       2012-04-11 04:03:26.000000000 
+0200
+++ sks-1.1.4/sampleConfig/debian/sksconf       2012-05-06 04:25:41.000000000 
+0200
@@ -30,3 +30,17 @@
 
 # Runs database statistics calculation on boot (time and cpu expensive)
 #initial_stat:
+#stat_hour: 5
+
+# debuglevel 4 is default (max debug level is 10)
+#debuglevel: 4
+
+# Debian:
+basedir: /var/lib/sks
+confdir: /etc/sks
+dbdir: /var/lib/sks/DB
+ptree_dbdir: /var/lib/sks/PTree
+webdir: /var/lib/sks/www
+logdir: /var/log/sks
+rundir: /var/run/sks
+diffdir: /var/spool/sks
 
--- sks-1.1.3/settings.ml       2012-04-11 04:03:26.000000000 +0200
+++ sks-1.1.4/settings.ml       2012-05-06 04:15:18.000000000 +0200
@@ -24,6 +24,47 @@
   plus functions for assigning new values.  This is used by the 
   getopt routines to set preferences *)
 
+
+(** Directory settings *)
+
+(** Default: *)
+let basedir = ref "."
+let confdir = ref !basedir
+
+
+(** Debian:
+let basedir = ref "/var/lib/sks"
+let confdir = ref "/etc/sks"
+*)
+
+(** Only use sksconf to change all the following settings! *)
+let rundir = ref !basedir
+let logdir = ref !basedir
+let diffdir = ref !basedir
+
+let base_webdir = "web"
+let base_dbdir = "KDB"
+
+let base_ptree_dbdir = "PTree"
+let base_membership_file = "membership"
+let base_mailsync_file = "mailsync"
+let base_dumpdir = "dump"
+let base_msgdir = "messages"
+let base_failed_msgdir = "failed_messages"
+
+let dbdir = ref (Filename.concat !basedir base_dbdir)
+let ptree_dbdir = ref (Filename.concat !basedir base_ptree_dbdir)
+let webdir = ref (Filename.concat !basedir base_webdir)
+let dumpdir = ref (Filename.concat !basedir base_dumpdir)
+
+let membership_file = ref (Filename.concat !confdir base_membership_file)
+let mailsync_file = ref (Filename.concat !confdir base_mailsync_file)
+
+let msgdir = ref (Filename.concat !diffdir base_msgdir)
+let failed_msgdir = ref (Filename.concat !diffdir base_failed_msgdir)
+
+(***********************************************************************)
+
 let n = ref 0
 let set_n value = n := value
 
@@ -182,7 +223,7 @@
 
 (** whether to send out PKS-style mailsync messages *)
 let send_mailsyncs = ref true
-(** WHether to log hashes of most-recently-found diff *)
+(** whether to log hashes of most-recently-found diff *)
 let log_diffs = ref true
 
 let from_addr = ref None
@@ -197,23 +238,6 @@
        from_addr := Some addr;
        addr
 
-let basedir = ref "."
-
-let base_dbdir = "KDB"
-let base_ptree_dbdir = "PTree"
-let base_membership_file = "membership"
-let base_mailsync_file = "mailsync"
-let base_dumpdir = "dump"
-let base_msgdir = "messages"
-let base_failed_msgdir = "failed_messages"
-
-let dbdir = lazy (Filename.concat !basedir base_dbdir)
-let ptree_dbdir = lazy (Filename.concat !basedir base_ptree_dbdir)
-let membership_file = lazy (Filename.concat !basedir base_membership_file)
-let mailsync_file = lazy (Filename.concat !basedir base_mailsync_file)
-let dumpdir = lazy (Filename.concat !basedir base_dumpdir)
-let msgdir = lazy (Filename.concat !basedir base_msgdir)
-let failed_msgdir = lazy (Filename.concat !basedir base_failed_msgdir)
 
 (*****************************************************************)
 
@@ -246,15 +270,22 @@
      " Pagesize in bytes for prefix tree db");
     ("-ptree_cache", Arg.Int set_ptree_cache_bytes, 
      " Cache size in megs for prefix tree db");
-    ("-baseport",Arg.Int set_base_port, " Set base port number");
-    ("-logfile",Arg.String (fun _ -> ()), " DEPRECATED.  Now ignored.");
-    ("-recon_port",Arg.Int set_recon_port, " Set recon port number");
-    ("-recon_address",Arg.String set_recon_address, " Set recon binding 
address"); 
-    ("-hkp_port",Arg.Int set_hkp_port, " Set hkp port number");
-    ("-hkp_address",Arg.String set_hkp_address, " Set hkp binding address"); 
-    ("-use_port_80",Arg.Set use_port_80, 
+    ("-baseport", Arg.Int set_base_port, " Set base port number");
+    ("-logfile", Arg.String (fun _ -> ()), " DEPRECATED.  Now ignored.");
+    ("-recon_port", Arg.Int set_recon_port, " Set recon port number");
+    ("-recon_address", Arg.String set_recon_address, " Set recon binding 
address"); 
+    ("-hkp_port", Arg.Int set_hkp_port, " Set hkp port number");
+    ("-hkp_address", Arg.String set_hkp_address, " Set hkp binding address"); 
+    ("-use_port_80", Arg.Set use_port_80, 
      " Have the HKP interface listen on port 80, as well as the hkp_port"); 
+    ("-confdir", Arg.Set_string confdir, " Directory of all config files");
     ("-basedir", Arg.Set_string basedir, " Base directory");
+    ("-dbdir", Arg.Set_string dbdir, " Database directory");
+    ("-ptree_dbdir", Arg.Set_string ptree_dbdir, " PTree database directory");
+    ("-webdir", Arg.Set_string webdir, " Webserver directory");
+    ("-logdir", Arg.Set_string logdir, " Directory used for logfiles");
+    ("-rundir", Arg.Set_string rundir, " Run directory");
+    ("-diffdir", Arg.Set_string diffdir, " Diff directory");
     ("-stdoutlog", Arg.Clear filelog, 
      " Send log messages to stdout instead of log file");
     ("-diskptree", Arg.Set disk_ptree, 
@@ -324,6 +355,3 @@
 
 let usage_string = 
   "sks command [-mbar mbar] [-q bitquantum] -debug  (type \"sks help\" for a 
list of commands)"
-
-

--- sks-1.1.3/sksdump.ml        2012-04-11 04:03:26.000000000 +0200
+++ sks-1.1.4/sksdump.ml        2012-05-06 03:19:39.000000000 +0200
@@ -29,8 +29,8 @@
     Keydb.withtxn = !Settings.transactions;
     Keydb.cache_bytes = !Settings.cache_bytes;
     Keydb.pagesize = !Settings.pagesize;
-    Keydb.dbdir = Lazy.force Settings.dbdir;
-    Keydb.dumpdir = Lazy.force Settings.dumpdir;
+    Keydb.dbdir = !Settings.dbdir;
+    Keydb.dumpdir = !Settings.dumpdir;
   }
 
   module Keydb = Keydb.Unsafe

--- sks-1.1.3/tester.ml 2012-04-11 04:03:26.000000000 +0200
+++ sks-1.1.4/tester.ml 2012-05-06 03:10:07.000000000 +0200
@@ -27,8 +27,8 @@
   Keydb.withtxn = !Settings.transactions;
   Keydb.cache_bytes = !Settings.cache_bytes;
   Keydb.pagesize = !Settings.pagesize;
-  Keydb.dbdir = Lazy.force Settings.dbdir;
-  Keydb.dumpdir = Lazy.force Settings.dumpdir;
+  Keydb.dbdir = !Settings.dbdir;
+  Keydb.dumpdir = !Settings.dumpdir;
 }
 
 module Keydb = Keydb.Safe

--- sks-1.1.3/update_subkeys.ml 2012-04-11 04:03:26.000000000 +0200
+++ sks-1.1.4/update_subkeys.ml 2012-05-06 03:21:16.000000000 +0200
@@ -30,8 +30,8 @@
   Keydb.withtxn = !Settings.transactions;
   Keydb.cache_bytes = !Settings.cache_bytes;
   Keydb.pagesize = !Settings.pagesize;
-  Keydb.dbdir = Lazy.force Settings.dbdir;
-  Keydb.dumpdir = Lazy.force Settings.dumpdir;
+  Keydb.dbdir = !Settings.dbdir;
+  Keydb.dumpdir = !Settings.dumpdir;
 } 
 
 (** we need full keydb access because we're playing directly with
_______________________________________________
Sks-devel mailing list
Sks-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/sks-devel

Reply via email to