Formerly ../hurd/alloc-fd.c.~6~
[kopensolaris-gnu/glibc.git] / hurd / hurdinit.c
index ff241c2..f4a2987 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1993 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
@@ -16,12 +16,17 @@ License along with the GNU C Library; see the file COPYING.LIB.  If
 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
 Cambridge, MA 02139, USA.  */
 
-#include <hurd.h>
 #include <sys/stat.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <unistd.h>
+#include <hurd.h>
+#include <hurd/port.h>
+
 
+struct hurd_port *_hurd_ports;
+unsigned int _hurd_nports;
+mode_t _hurd_umask;
 
 void _hurd_proc_init (char **argv);
 
@@ -31,7 +36,7 @@ void _hurd_proc_init (char **argv);
    PORTARRAY and INTARRAY are vm_deallocate'd.  */
 
 void
-_hurd_init (char **argv,
+_hurd_init (int flags, char **argv,
            mach_port_t *portarray, size_t portarraysize,
            int *intarray, size_t intarraysize)
 {
@@ -70,9 +75,18 @@ _hurd_init (char **argv,
     _hurd_umask = CMASK;
 
   /* All done with init ints and ports.  */
-  __vm_deallocate (__mach_task_self (), intarray, intarraysize * sizeof (int));
   __vm_deallocate (__mach_task_self (),
-                  portarray, portarraysize * sizeof (mach_port_t));
+                  (vm_address_t) intarray,
+                  intarraysize * sizeof (int));
+  __vm_deallocate (__mach_task_self (),
+                  (vm_address_t) portarray,
+                  portarraysize * sizeof (mach_port_t));
+
+  if (flags & EXEC_SECURE)
+    /* XXX if secure exec, elide environment variables
+       which the library uses and could be security holes.
+       CORESERVER, COREFILE
+       */ ;
 }
 \f
 /* The user can do "int _hide_arguments = 1;" to make
@@ -85,8 +99,8 @@ int _hide_arguments, _hide_environment;
 void
 _hurd_proc_init (char **argv)
 {
-  mach_port_t oldmsg, oldtask;
-  int dealloc;
+  mach_port_t oldmsg;
+  struct hurd_userlink ulink;
   process_t procserver;
 
 #ifdef notyet
@@ -99,25 +113,25 @@ _hurd_proc_init (char **argv)
   /* The signal thread is now prepared to receive messages.
      It is safe to give the port to the proc server.  */
 
-  procserver = _hurd_port_get (&_hurd_ports[INIT_PORT_PROC], &dealloc);
+  procserver = _hurd_port_get (&_hurd_ports[INIT_PORT_PROC], &ulink);
 
+#ifdef notyet
   /* Give the proc server our message port.  */
   __proc_setmsgport (procserver, _hurd_msgport, &oldmsg);
+  if (oldmsg != MACH_PORT_NULL)
+    /* Deallocate the old msg port we replaced.  */
+    __mach_port_deallocate (__mach_task_self (), oldmsg);
+#endif
 
   /* Tell the proc server where our args and environment are.  */
   __proc_setprocargs (procserver,
-                     _hide_arguments ? 0 : argv,
-                     _hide_environment ? 0 : __environ);
+                     _hide_arguments ? 0 : (vm_address_t) argv,
+                     _hide_environment ? 0 : (vm_address_t) __environ);
 
-  _hurd_port_free (&_hurd_ports[INIT_PORT_PROC], &dealloc, procserver);
+  _hurd_port_free (&_hurd_ports[INIT_PORT_PROC], &ulink, procserver);
 
 #ifdef notyet
   /* Initialize proc server-assisted fault recovery for the signal thread.  */
   _hurdsig_fault_init ();
 #endif
-
-  if (oldmsg != MACH_PORT_NULL)
-    __mach_port_deallocate (__mach_task_self (), oldmsg);
-  if (oldtask != MACH_PORT_NULL)
-    __mach_port_deallocate (__mach_task_self (), oldtask);
 }