diff options
Diffstat (limited to 'debian/patches/procfs-0007-procfs-provide-magic-retry-response-for-proc-self.patch')
-rw-r--r-- | debian/patches/procfs-0007-procfs-provide-magic-retry-response-for-proc-self.patch | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/debian/patches/procfs-0007-procfs-provide-magic-retry-response-for-proc-self.patch b/debian/patches/procfs-0007-procfs-provide-magic-retry-response-for-proc-self.patch new file mode 100644 index 00000000..74b0bc97 --- /dev/null +++ b/debian/patches/procfs-0007-procfs-provide-magic-retry-response-for-proc-self.patch @@ -0,0 +1,177 @@ +From bb245976b92068ca5239b5b860aa4dbfd70b44a5 Mon Sep 17 00:00:00 2001 +From: Justus Winter <4winter@informatik.uni-hamburg.de> +Date: Sun, 21 Sep 2014 12:03:47 +0200 +Subject: [PATCH 7/7] procfs: provide magic retry response for /proc/self + +* hurd/hurd_types.h: Document the magic retry string `proc/self'. +* hurd/paths.h (_HURD_MAGIC): New macro. +* procfs/main.c: Remove all code related to faking /proc/self. +* procfs/main.h: Likewise. +* procfs/rootdir.c: Likewise. Instead, return the magic retry +response `proc/self' for the `self' node. +--- + hurd/hurd_types.h | 3 +++ + hurd/paths.h | 1 + + procfs/main.c | 24 ------------------------ + procfs/main.h | 1 - + procfs/rootdir.c | 23 ++++------------------- + 5 files changed, 8 insertions(+), 44 deletions(-) + +diff --git a/hurd/hurd_types.h b/hurd/hurd_types.h +index 4341177..f22816d 100644 +--- a/hurd/hurd_types.h ++++ b/hurd/hurd_types.h +@@ -114,6 +114,9 @@ enum retry_type + as for FS_RETRY_NORMAL. + + "/..." means retry "...", but starting from the users root directory. ++ ++ "proc/self/..." means replace `proc/self' with the PID of the current ++ process and then retry as for FS_RETRY_NORMAL. + */ + }; + typedef enum retry_type retry_type; +diff --git a/hurd/paths.h b/hurd/paths.h +index 92875b2..32bc2b4 100644 +--- a/hurd/paths.h ++++ b/hurd/paths.h +@@ -53,6 +53,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + #define _HURD_IFSOCK _HURD "ifsock" /* S_IFSOCK */ + + /* Symbolic names for all non-essential translators. */ ++#define _HURD_MAGIC _HURD "magic" + #define _HURD_MTAB _HURD "mtab" + + #endif /* hurd/paths.h */ +diff --git a/procfs/main.c b/procfs/main.c +index 54e9682..1afc923 100644 +--- a/procfs/main.c ++++ b/procfs/main.c +@@ -34,14 +34,12 @@ + /* Command-line options */ + int opt_clk_tck; + mode_t opt_stat_mode; +-pid_t opt_fake_self; + pid_t opt_kernel_pid; + uid_t opt_anon_owner; + + /* Default values */ + #define OPT_CLK_TCK sysconf(_SC_CLK_TCK) + #define OPT_STAT_MODE 0400 +-#define OPT_FAKE_SELF -1 + #define OPT_KERNEL_PID 2 + #define OPT_ANON_OWNER 0 + +@@ -74,19 +72,6 @@ argp_parser (int key, char *arg, struct argp_state *state) + opt_stat_mode = v; + break; + +- case 'S': +- if (arg) +- { +- v = strtol (arg, &endp, 0); +- if (*endp || ! *arg) +- argp_error (state, "--fake-self: PID must be an integer"); +- else +- opt_fake_self = v; +- } +- else +- opt_fake_self = 1; +- break; +- + case 'k': + v = strtol (arg, &endp, 0); + if (*endp || ! *arg || (signed) opt_kernel_pid < 0) +@@ -98,7 +83,6 @@ argp_parser (int key, char *arg, struct argp_state *state) + case 'c': + opt_clk_tck = 100; + opt_stat_mode = 0444; +- opt_fake_self = 1; + break; + + case 'a': +@@ -146,10 +130,6 @@ struct argp_option common_options[] = { + "You can use this option to override its mode to be more permissive " + "for compatibility purposes. " + "(default: 0400)" }, +- { "fake-self", 'S', "PID", OPTION_ARG_OPTIONAL, +- "Provide a fake \"self\" symlink to the given PID, for compatibility " +- "purposes. If PID is omitted, \"self\" will point to init. " +- "(default: no self link)" }, + { "kernel-process", 'k', "PID", 0, + "Process identifier for the kernel, used to retreive its command " + "line, as well as the global up and idle times. " +@@ -243,9 +223,6 @@ netfs_append_args (char **argz, size_t *argz_len) + FOPT (opt_stat_mode, OPT_STAT_MODE, + "--stat-mode=%o", opt_stat_mode); + +- FOPT (opt_fake_self, OPT_FAKE_SELF, +- "--fake-self=%d", opt_fake_self); +- + FOPT (opt_anon_owner, OPT_ANON_OWNER, + "--anonymous-owner=%d", opt_anon_owner); + +@@ -287,7 +264,6 @@ int main (int argc, char **argv) + + opt_clk_tck = OPT_CLK_TCK; + opt_stat_mode = OPT_STAT_MODE; +- opt_fake_self = OPT_FAKE_SELF; + opt_kernel_pid = OPT_KERNEL_PID; + opt_anon_owner = OPT_ANON_OWNER; + err = argp_parse (&argp, argc, argv, 0, 0, 0); +diff --git a/procfs/main.h b/procfs/main.h +index 4e28b7e..051db95 100644 +--- a/procfs/main.h ++++ b/procfs/main.h +@@ -20,6 +20,5 @@ + /* Startup options */ + extern int opt_clk_tck; + extern mode_t opt_stat_mode; +-extern pid_t opt_fake_self; + extern pid_t opt_kernel_pid; + extern uid_t opt_anon_owner; +diff --git a/procfs/rootdir.c b/procfs/rootdir.c +index d68645e..d63397e 100644 +--- a/procfs/rootdir.c ++++ b/procfs/rootdir.c +@@ -395,19 +395,7 @@ out: + return err; + } + +-static int +-rootdir_fakeself_exists (void *dir_hook, const void *entry_hook) +-{ +- return opt_fake_self >= 0; +-} +- +-static error_t +-rootdir_gc_fakeself (void *hook, char **contents, ssize_t *contents_len) +-{ +- *contents_len = asprintf (contents, "%d", opt_fake_self); +- return 0; +-} +- ++static struct node *rootdir_self_node; + static struct node *rootdir_mounts_node; + + static error_t +@@ -624,13 +612,10 @@ rootdir_translated_node_get_translator (void *hook, char **argz, + static const struct procfs_dir_entry rootdir_entries[] = { + { + .name = "self", +- .hook = & (struct procfs_node_ops) { +- .get_contents = rootdir_gc_fakeself, +- .cleanup_contents = procfs_cleanup_contents_with_free, +- }, ++ .hook = ROOTDIR_DEFINE_TRANSLATED_NODE (&rootdir_self_node, ++ _HURD_MAGIC "\0proc/self"), + .ops = { +- .make_node = rootdir_symlink_make_node, +- .exists = rootdir_fakeself_exists, ++ .make_node = rootdir_make_translated_node, + } + }, + { +-- +2.1.0 + |