common: Change simple_query to ignore status messages.
[gnupg.git] / g13 / be-encfs.c
index 06e8792..f59f4d9 100644 (file)
@@ -30,6 +30,7 @@
 #include "keyblob.h"
 #include "be-encfs.h"
 #include "runner.h"
+#include "../common/sysutils.h"
 #include "../common/exechelp.h"
 
 
@@ -53,14 +54,14 @@ struct encfs_parm_s
 typedef struct encfs_parm_s *encfs_parm_t;
 
 
-static gpg_error_t 
+static gpg_error_t
 send_cmd_bin (runner_t runner, const void *data, size_t datalen)
 {
   return runner_send_line (runner, data, datalen);
 }
 
 
-static gpg_error_t 
+static gpg_error_t
 send_cmd (runner_t runner, const char *string)
 {
   log_debug ("sending command  -->%s<--\n", string);
@@ -73,16 +74,16 @@ static void
 run_umount_helper (const char *mountpoint)
 {
   gpg_error_t err;
-  const char pgmname[] = "/usr/bin/fusermount";
+  const char pgmname[] = FUSERMOUNT;
   const char *args[3];
-  
+
   args[0] = "-u";
   args[1] = mountpoint;
   args[2] = NULL;
 
   err = gnupg_spawn_process_detached (pgmname, args, NULL);
   if (err)
-    log_error ("failed to run `%s': %s\n",
+    log_error ("failed to run '%s': %s\n",
                pgmname, gpg_strerror (err));
 }
 
@@ -100,7 +101,7 @@ handle_status_line (runner_t runner, const char *line,
     {
       for (line +=8; *line && spacep (line); line++)
         ;
-      log_info ("got status `%s'\n", line);
+      log_info ("got status '%s'\n", line);
       if (!strcmp (line, "fuse_main_start"))
         {
           /* Send a special error code back to let the caller know
@@ -114,7 +115,7 @@ handle_status_line (runner_t runner, const char *line,
     {
       for (line +=8; *line && spacep (line); line++)
         ;
-      log_info ("got prompt `%s'\n", line);
+      log_info ("got prompt '%s'\n", line);
       if (!strcmp (line, "create_root_dir"))
         err = send_cmd (runner, cmd == ENCFS_CMD_CREATE? "y":"n");
       else if (!strcmp (line, "create_mount_point"))
@@ -126,13 +127,13 @@ handle_status_line (runner_t runner, const char *line,
             {
               size_t n;
               const void *value;
-          
+
               value = find_tuple (tuples, KEYBLOB_TAG_ENCKEY, &n);
               if (!value)
                 err = gpg_error (GPG_ERR_INV_SESSION_KEY);
               else if ((err = send_cmd_bin (runner, value, n)))
                 {
-                  if (gpg_err_code (err) == GPG_ERR_BUG 
+                  if (gpg_err_code (err) == GPG_ERR_BUG
                       && gpg_err_source (err) == GPG_ERR_SOURCE_DEFAULT)
                     err = gpg_error (GPG_ERR_INV_SESSION_KEY);
                 }
@@ -254,7 +255,7 @@ run_encfs_tool (ctrl_t ctrl, enum encfs_cmds cmd,
       goto leave;
     }
 
-  pgmname = "/usr/bin/encfs";
+  pgmname = ENCFS;
   idx = 0;
   argv[idx++] = "-f";
   if (opt.verbose)
@@ -270,7 +271,7 @@ run_encfs_tool (ctrl_t ctrl, enum encfs_cmds cmd,
                                 outbound[0], -1, inbound[1], &pid);
   if (err)
     {
-      log_error ("error spawning `%s': %s\n", pgmname, gpg_strerror (err));
+      log_error ("error spawning '%s': %s\n", pgmname, gpg_strerror (err));
       goto leave;
     }
   close (outbound[0]); outbound[0] = -1;
@@ -291,7 +292,7 @@ run_encfs_tool (ctrl_t ctrl, enum encfs_cmds cmd,
     goto leave;
 
   *r_id = runner_get_rid (runner);
-  log_info ("running `%s' in the background\n", pgmname);
+  log_info ("running '%s' in the background\n", pgmname);
 
  leave:
   if (inbound[0] != -1)
@@ -304,7 +305,8 @@ run_encfs_tool (ctrl_t ctrl, enum encfs_cmds cmd,
     close (outbound[1]);
   if (pid != (pid_t)(-1))
     {
-      gnupg_wait_process (pgmname, pid, NULL);
+      gnupg_wait_process (pgmname, pid, 1, NULL);
+      gnupg_release_process (pid);
     }
   runner_release (runner);
   encfs_handler_cleanup (parm);
@@ -336,7 +338,7 @@ be_encfs_get_detached_name (const char *fname, char **r_name, int *r_isdir)
 
 
 /* Create a new session key and append it as a tuple to the memory
-   buffer MB.  
+   buffer MB.
 
    The EncFS daemon takes a passphrase from stdin and internally
    mangles it by means of some KDF from OpenSSL.  We want to store a
@@ -364,7 +366,7 @@ be_encfs_create_new_keys (membuf_t *mb)
      good compromise between security and performance.  The
      anticipated usage of this tool is the quite often creation of new
      containers and thus this should not deplete the system's entropy
-     tool too much.  */ 
+     tool too much.  */
   gcry_randomize (buffer, 32+8, GCRY_STRONG_RANDOM);
   for (i=j=0; i < 32; i++)
     {
@@ -414,20 +416,20 @@ be_encfs_create_container (ctrl_t ctrl, const char *fname, tupledesc_t tuples,
       err = gpg_error_from_syserror ();
       goto leave;
     }
-  if (!mkdtemp (mountpoint))
+  if (!gnupg_mkdtemp (mountpoint))
     {
       err = gpg_error_from_syserror ();
-      log_error (_("can't create directory `%s': %s\n"),
-                 "/tmp/g13-XXXXXX", gpg_strerror (err));
+      log_error (_("can't create directory '%s': %s\n"),
+                 "/tmp/.#g13_XXXXXX", gpg_strerror (err));
       goto leave;
     }
 
   err = run_encfs_tool (ctrl, ENCFS_CMD_CREATE, containername, mountpoint,
                         tuples, r_id);
-  
+
   /* In any case remove the temporary mount point.  */
   if (rmdir (mountpoint))
-    log_error ("error removing temporary mount point `%s': %s\n",
+    log_error ("error removing temporary mount point '%s': %s\n",
                mountpoint, gpg_strerror (gpg_error_from_syserror ()));
 
 
@@ -441,7 +443,7 @@ be_encfs_create_container (ctrl_t ctrl, const char *fname, tupledesc_t tuples,
 /* Mount the container described by the filename FNAME and the keyblob
    information in TUPLES.  On success the runner id is stored at R_ID. */
 gpg_error_t
-be_encfs_mount_container (ctrl_t ctrl, 
+be_encfs_mount_container (ctrl_t ctrl,
                           const char *fname, const char *mountpoint,
                           tupledesc_t tuples, unsigned int *r_id)
 {
@@ -462,7 +464,7 @@ be_encfs_mount_container (ctrl_t ctrl,
 
   err = run_encfs_tool (ctrl, ENCFS_CMD_MOUNT, containername, mountpoint,
                         tuples, r_id);
-  
+
  leave:
   xfree (containername);
   return err;