summaryrefslogtreecommitdiff
path: root/debian/patches/mount-fix0001-utils-mount-start-translators-with-stderr-closed.patch
blob: 8efdbc36f1e94e9948d49f92b39e9945ec3266f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
From 234568d0c683d35362a17dd44b76472c405fbd86 Mon Sep 17 00:00:00 2001
From: Justus Winter <justus@gnupg.org>
Date: Mon, 22 Feb 2016 19:18:05 +0100
Subject: [PATCH hurd] utils/mount: start translators with stderr closed

Apparently some users of 'mount' do not cope with any output being
generated from the spawned translator.

* utils/mount.c (do_mount): Start translators with stderr closed.
---
 utils/mount.c | 33 ++++++++++++++++++++++++++++++---
 1 file changed, 30 insertions(+), 3 deletions(-)

diff --git a/utils/mount.c b/utils/mount.c
index c5736ba..5fa35bc 100644
--- a/utils/mount.c
+++ b/utils/mount.c
@@ -420,9 +420,36 @@ do_mount (struct fs *fs, int remount)
       }
 
       explain ("settrans -a");
-      err = fshelp_start_translator (open_node, NULL, fsopts,
-				     fsopts, fsopts_len, timeout,
-				     &active_control);
+      {
+	mach_port_t ports[INIT_PORT_MAX];
+	mach_port_t fds[STDERR_FILENO + 1];
+	int ints[INIT_INT_MAX];
+	int i;
+
+	for (i = 0; i < INIT_PORT_MAX; i++)
+	  ports[i] = MACH_PORT_NULL;
+	for (i = 0; i < STDERR_FILENO + 1; i++)
+	  fds[i] = MACH_PORT_NULL;
+	memset (ints, 0, INIT_INT_MAX * sizeof(int));
+
+	ports[INIT_PORT_CWDIR] = getcwdir ();
+	ports[INIT_PORT_CRDIR] = getcrdir ();
+	ports[INIT_PORT_AUTH] = getauth ();
+
+	err = fshelp_start_translator_long (open_node, NULL,
+					    fsopts, fsopts, fsopts_len,
+					    fds, MACH_MSG_TYPE_COPY_SEND,
+					    STDERR_FILENO + 1,
+					    ports, MACH_MSG_TYPE_COPY_SEND,
+					    INIT_PORT_MAX,
+					    ints, INIT_INT_MAX,
+					    geteuid (),
+					    timeout, &active_control);
+	for (i = 0; i < INIT_PORT_MAX; i++)
+	  mach_port_deallocate (mach_task_self (), ports[i]);
+	for (i = 0; i <= STDERR_FILENO; i++)
+	  mach_port_deallocate (mach_task_self (), fds[i]);
+      }
       /* If ERR is due to a problem opening the translated node, we print
 	 that name, otherwise, the name of the translator.  */
       if (open_err)
-- 
2.1.4