diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-01-07 16:00:06 +0100 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-01-17 18:24:59 +0100 |
commit | 40b354e4cc67f1fedf9d4c2ce8d050a9ac68a643 (patch) | |
tree | aad90feaa87a67a3874314583a90f4199fc620ea /auth | |
parent | 2d371a0b01054843f294a6c5ff401bd2093604a4 (diff) |
auth: remove implicit assumption about the bootstrap process
The current code assumes that it can speak the startup protocol over
its bootstrap port.
* auth/auth.c (main): Generalize by trying to use `/servers/startup'
before falling back to the bootstrap port.
Diffstat (limited to 'auth')
-rw-r--r-- | auth/auth.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/auth/auth.c b/auth/auth.c index a7a188a2..d5ef5876 100644 --- a/auth/auth.c +++ b/auth/auth.c @@ -25,6 +25,7 @@ #include <pthread.h> #include <hurd.h> #include <hurd/startup.h> +#include <hurd/paths.h> #include <hurd/ports.h> #include <hurd/ihash.h> #include <idvec.h> @@ -482,6 +483,7 @@ main (int argc, char **argv) { error_t err; mach_port_t boot; + mach_port_t startup; process_t proc; mach_port_t hostpriv, masterdev; struct authhandle *firstauth; @@ -518,10 +520,21 @@ main (int argc, char **argv) _hurd_port_set (&_hurd_ports[INIT_PORT_PROC], proc); _hurd_proc_init (argv, NULL, 0); + startup = file_name_lookup (_SERVERS_STARTUP, 0, 0); + if (! MACH_PORT_VALID (startup)) + { + error (0, errno, "%s", _SERVERS_STARTUP); + /* Fall back to using the bootstrap port as before. */ + startup = boot; + } + /* Init knows intimately that we will be ready for messages as soon as this returns. */ - startup_essential_task (boot, mach_task_self (), MACH_PORT_NULL, "auth", + startup_essential_task (startup, mach_task_self (), MACH_PORT_NULL, "auth", hostpriv); + + if (startup != boot) + mach_port_deallocate (mach_task_self (), startup); mach_port_deallocate (mach_task_self (), boot); mach_port_deallocate (mach_task_self (), hostpriv); |