From 01e94689a240dcd60b5e6dfbe8133894f9a9deba Mon Sep 17 00:00:00 2001
From: Roland McGrath <roland@gnu.org>
Date: Sun, 5 May 2002 03:27:13 +0000
Subject: 2002-05-04  Roland McGrath  <roland@frob.com>

	* io-restrict-auth.c (diskfs_S_io_restrict_auth): Use
	iohelp_restrict_iouser.
---
 libdiskfs/io-restrict-auth.c | 68 +++++---------------------------------------
 1 file changed, 7 insertions(+), 61 deletions(-)

(limited to 'libdiskfs/io-restrict-auth.c')

diff --git a/libdiskfs/io-restrict-auth.c b/libdiskfs/io-restrict-auth.c
index 8f8a97bd..1c1c6251 100644
--- a/libdiskfs/io-restrict-auth.c
+++ b/libdiskfs/io-restrict-auth.c
@@ -1,5 +1,5 @@
-/* 
-   Copyright (C) 1994,95,96,2001 Free Software Foundation
+/*
+   Copyright (C) 1994,95,96,2001, 2002 Free Software Foundation
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -18,16 +18,6 @@
 #include "priv.h"
 #include "io_S.h"
 
-/* Tell if the array LIST (of size N) contains a member equal to QUERY. */
-static inline int
-listmember (int *list, int query, int n)
-{
-  int i;
-  for (i = 0; i < n; i++)
-    if (list[i] == query)
-      return 1;
-  return 0;
-}
 
 /* Implement io_restrict_auth as described in <hurd/io.defs>. */
 kern_return_t
@@ -39,61 +29,17 @@ diskfs_S_io_restrict_auth (struct protid *cred,
 			   gid_t *gids,
 			   u_int ngids)
 {
-  error_t err = 0;
-  struct idvec *uvec, *gvec;
+  error_t err;
   struct iouser *user;
   struct protid *newpi;
   int i;
-  
+
   if (!cred)
     return EOPNOTSUPP;
 
-  if (idvec_contains (cred->user->uids, 0))
-    /* CRED has root access, and so may use any ids.  */
-    {
-      err = iohelp_create_complex_iouser (&user, uids, nuids, gids, ngids);
-      if (err)
-        return err;
-    }
-  else
-    {
-      uvec = make_idvec ();
-      if (! uvec)
-        return ENOMEM;
-
-      gvec = make_idvec ();
-      if (! gvec)
-        {
-	  idvec_free (uvec);
-	  return ENOMEM;
-	}
-  
-      /* Otherwise, use any of the requested ids that CRED already has.  */
-      for (i = 0; i < cred->user->uids->num; i++)
-	if (listmember (uids, cred->user->uids->ids[i], nuids))
-	  {
-	    err = idvec_add (uvec, cred->user->uids->ids[i]);
-	    if (err)
-	      goto out;
-	  }
-      for (i = 0; i < cred->user->gids->num; i++)
-	if (listmember (gids, cred->user->gids->ids[i], ngids))
-	  {
-	    idvec_add (gvec, cred->user->gids->ids[i]);
-	    if (err)
-	      goto out;
-	  }
-
-      err = iohelp_create_iouser (&user, uvec, gvec);
-
-      if (err)
-        {
-        out:
-	  idvec_free (uvec);
-	  idvec_free (gvec);
-	  return err;
-	}
-    }
+  err = iohelp_restrict_iouser (&user, cred->user, uids, nuids, gids, ngids);
+  if (err)
+    return err;
 
   mutex_lock (&cred->po->np->lock);
   err = diskfs_create_protid (cred->po, user, &newpi);
-- 
cgit v1.2.3