Back to index

glibc  2.9
euidaccess.c
Go to the documentation of this file.
00001 /* Test for access to FILE using effective UID and GID.  Hurd version.
00002    Copyright (C) 1991, 1995, 1997, 2006 Free Software Foundation, Inc.
00003    This file is part of the GNU C Library.
00004 
00005    The GNU C Library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009 
00010    The GNU C Library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014 
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with the GNU C Library; if not, write to the Free
00017    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00018    02111-1307 USA.  */
00019 
00020 #include <errno.h>
00021 #include <stddef.h>
00022 #include <unistd.h>
00023 #include <fcntl.h>
00024 #include <hurd.h>
00025 
00026 int
00027 __euidaccess (file, type)
00028      const char *file;
00029      int type;
00030 {
00031   error_t err;
00032   file_t port;
00033   int allowed, flags;
00034 
00035   port = __file_name_lookup (file, 0, 0);
00036   if (port == MACH_PORT_NULL)
00037     return -1;
00038 
00039   /* Find out what types of access we are allowed to this file.  */
00040   err = __file_check_access (port, &allowed);
00041   __mach_port_deallocate (__mach_task_self (), port);
00042   if (err)
00043     return __hurd_fail (err);
00044 
00045   flags = 0;
00046   if (type & R_OK)
00047     flags |= O_READ;
00048   if (type & W_OK)
00049     flags |= O_WRITE;
00050   if (type & X_OK)
00051     flags |= O_EXEC;
00052 
00053   if (flags & ~allowed)
00054     /* We are not allowed all the requested types of access.  */
00055     return __hurd_fail (EACCES);
00056 
00057   return 0;
00058 }
00059 weak_alias (__euidaccess, euidaccess)
00060 weak_alias (__euidaccess, eaccess)