bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 6/6] procfs: provide magic retry response for /proc/self


From: Justus Winter
Subject: [PATCH 6/6] procfs: provide magic retry response for /proc/self
Date: Sun, 21 Sep 2014 12:12:36 +0200

* 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/paths.h     |  1 +
 procfs/main.c    | 24 ------------------------
 procfs/main.h    |  1 -
 procfs/rootdir.c | 22 +++-------------------
 4 files changed, 4 insertions(+), 44 deletions(-)

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 6f0604a..6517664 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,9 @@ 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 (_HURD_MAGIC "\0proc/self"),
     .ops = {
-      .make_node = rootdir_symlink_make_node,
-      .exists = rootdir_fakeself_exists,
+      .make_node = rootdir_make_translated_node,
     }
   },
   {
-- 
2.1.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]