aboutsummaryrefslogtreecommitdiff
path: root/sutils/clookup.c
diff options
context:
space:
mode:
Diffstat (limited to 'sutils/clookup.c')
-rw-r--r--sutils/clookup.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/sutils/clookup.c b/sutils/clookup.c
index e39ddd64..0107799c 100644
--- a/sutils/clookup.c
+++ b/sutils/clookup.c
@@ -1,6 +1,6 @@
/* Careful filename lookup
- Copyright (C) 1996 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1998, 1999, 2000 Free Software Foundation, Inc.
Written by Miles Bader <miles@gnu.ai.mit.edu>
@@ -25,18 +25,18 @@
#include <string.h>
#include <errno.h>
#include <fcntl.h>
+#include <sys/mman.h>
#include <hurd.h>
#include <hurd/lookup.h>
#include <hurd/id.h>
#include <hurd/fsys.h>
-extern int __getuids (int num, gid_t *buf); /* XXX */
/* This function is like file_name_lookup, but tries hard to avoid starting
any passive translators. If a node with an unstarted passive translator
is encountered, ENXIO is returned in ERRNO; other errors are as for
file_name_lookup. Note that checking for an active translator currently
- requires fetching the control port, which is a priveleged operation. */
+ requires fetching the control port, which is a privileged operation. */
file_t
file_name_lookup_carefully (const char *name, int flags, mode_t mode)
{
@@ -94,8 +94,7 @@ file_name_lookup_carefully (const char *name, int flags, mode_t mode)
if (ptrans != _ptrans)
/* Deallocate out-of-line memory from file_get_translator. */
- vm_deallocate (mach_task_self (),
- (vm_address_t)ptrans, ptrans_len);
+ munmap (ptrans, ptrans_len);
err = file_get_translator_cntl (*node, &fsys);
if (! err)
@@ -107,10 +106,11 @@ file_name_lookup_carefully (const char *name, int flags, mode_t mode)
{
file_t old_node = *node;
err = fsys_getroot (fsys,
- unauth_dir, MACH_MSG_TYPE_MOVE_SEND,
+ unauth_dir, MACH_MSG_TYPE_COPY_SEND,
uids, num_uids, gids, num_gids,
flags & ~O_NOTRANS, retry,
retry_name, node);
+ mach_port_deallocate (mach_task_self (), unauth_dir);
if (! err)
mach_port_deallocate (mach_task_self (), old_node);
}
@@ -143,11 +143,11 @@ file_name_lookup_carefully (const char *name, int flags, mode_t mode)
}
/* Fetch uids for use with fsys_getroot. */
- num_uids = __getuids (0, 0);
+ num_uids = geteuids (0, 0);
if (num_uids < 0)
return errno;
uids = alloca (num_uids * sizeof (uid_t));
- num_uids = __getuids (num_uids, uids);
+ num_uids = geteuids (num_uids, uids);
if (num_uids < 0)
return errno;
@@ -159,11 +159,11 @@ file_name_lookup_carefully (const char *name, int flags, mode_t mode)
num_gids = getgroups (num_gids, gids);
if (num_gids < 0)
return errno;
-
+
/* Look things up ... */
- err = __hurd_file_name_lookup (&_hurd_ports_use, &__getdport, lookup,
- name, flags, mode & ~_hurd_umask,
- &node);
+ err = hurd_file_name_lookup (&_hurd_ports_use, &getdport, lookup,
+ name, flags, mode & ~getumask (),
+ &node);
return err ? (__hurd_fail (err), MACH_PORT_NULL) : node;
}