summaryrefslogtreecommitdiff
path: root/libtrivfs
diff options
context:
space:
mode:
authorMichael I. Bushnell <mib@gnu.org>1994-02-18 21:04:22 +0000
committerMichael I. Bushnell <mib@gnu.org>1994-02-18 21:04:22 +0000
commit02a2fb99f76fcfb62c8bc2f3047f07261cd43f8d (patch)
tree49ce7cbc748831877fb9bd504debc3dc9bae9ecd /libtrivfs
parent2d53eeb7159ea6549e18136a1eef097ecdb164d6 (diff)
Initial revision
Diffstat (limited to 'libtrivfs')
-rw-r--r--libtrivfs/fsys-getroot.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/libtrivfs/fsys-getroot.c b/libtrivfs/fsys-getroot.c
new file mode 100644
index 00000000..7820aec9
--- /dev/null
+++ b/libtrivfs/fsys-getroot.c
@@ -0,0 +1,53 @@
+/*
+ Copyright (C) 1993, 1994 Free Software Foundation
+
+This file is part of the GNU Hurd.
+
+The GNU Hurd is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+The GNU Hurd is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the GNU Hurd; see the file COPYING. If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+/* Written by Michael I. Bushnell. */
+
+#include "priv.h"
+
+error_t
+trivfs_S_fsys_getroot (mach_port_t fsys,
+ int flags,
+ uid_t *uids, u_int nuids,
+ uid_t *gids, u_int ngids,
+ mach_port_t *newpt,
+ mach_msg_type_name_t *newpttype)
+{
+ struct protid *cred;
+ int i;
+
+ assert (!trivfs_support_read && !trivfs_support_write
+ && !trivfs_support_exec);
+
+ if (flags & (O_READ|O_WRITE|O_EXEC))
+ return EACCES;
+
+ cred = ports_allocate_port (sizeof (struct protid), PT_PROTID);
+ cred->isroot = 0;
+ for (i = 0; i < nuids; i++)
+ if (uids[i] == 0)
+ cred->isroot = 1;
+ io_restrict_auth (trivfs_underlying_node, &cred->realnod,
+ uids, nuids, gids, ngids);
+ *newpt = ports_get_right (cred);
+ *newpttype = MACH_MSG_TYPE_MAKE_SEND;
+ return 0;
+}
+
+