File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / lib / isc / fsaccess.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:08:38 2012 UTC (12 years, 1 month ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

    1: /*
    2:  * Copyright (C) 2004, 2005, 2007  Internet Systems Consortium, Inc. ("ISC")
    3:  * Copyright (C) 2000, 2001  Internet Software Consortium.
    4:  *
    5:  * Permission to use, copy, modify, and/or distribute this software for any
    6:  * purpose with or without fee is hereby granted, provided that the above
    7:  * copyright notice and this permission notice appear in all copies.
    8:  *
    9:  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
   10:  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
   11:  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
   12:  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
   13:  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
   14:  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
   15:  * PERFORMANCE OF THIS SOFTWARE.
   16:  */
   17: 
   18: /* $Id: fsaccess.c,v 1.1.1.1 2012/05/29 12:08:38 misho Exp $ */
   19: 
   20: /*! \file
   21:  * \brief
   22:  * This file contains the OS-independent functionality of the API.
   23:  */
   24: #include <isc/fsaccess.h>
   25: #include <isc/result.h>
   26: #include <isc/util.h>
   27: 
   28: /*!
   29:  * Shorthand.  Maybe ISC__FSACCESS_PERMISSIONBITS should not even be in
   30:  * <isc/fsaccess.h>.  Could check consistency with sizeof(isc_fsaccess_t)
   31:  * and the number of bits in each function.
   32:  */
   33: #define STEP		(ISC__FSACCESS_PERMISSIONBITS)
   34: #define GROUP		(STEP)
   35: #define OTHER		(STEP * 2)
   36: 
   37: void
   38: isc_fsaccess_add(int trustee, int permission, isc_fsaccess_t *access) {
   39: 	REQUIRE(trustee <= 0x7);
   40: 	REQUIRE(permission <= 0xFF);
   41: 
   42: 	if ((trustee & ISC_FSACCESS_OWNER) != 0)
   43: 		*access |= permission;
   44: 
   45: 	if ((trustee & ISC_FSACCESS_GROUP) != 0)
   46: 		*access |= (permission << GROUP);
   47: 
   48: 	if ((trustee & ISC_FSACCESS_OTHER) != 0)
   49: 		*access |= (permission << OTHER);
   50: }
   51: 
   52: void
   53: isc_fsaccess_remove(int trustee, int permission, isc_fsaccess_t *access) {
   54: 	REQUIRE(trustee <= 0x7);
   55: 	REQUIRE(permission <= 0xFF);
   56: 
   57: 
   58: 	if ((trustee & ISC_FSACCESS_OWNER) != 0)
   59: 		*access &= ~permission;
   60: 
   61: 	if ((trustee & ISC_FSACCESS_GROUP) != 0)
   62: 		*access &= ~(permission << GROUP);
   63: 
   64: 	if ((trustee & ISC_FSACCESS_OTHER) != 0)
   65: 		*access &= ~(permission << OTHER);
   66: }
   67: 
   68: static isc_result_t
   69: check_bad_bits(isc_fsaccess_t access, isc_boolean_t is_dir) {
   70: 	isc_fsaccess_t bits;
   71: 
   72: 	/*
   73: 	 * Check for disallowed user bits.
   74: 	 */
   75: 	if (is_dir)
   76: 		bits = ISC_FSACCESS_READ |
   77: 		       ISC_FSACCESS_WRITE |
   78: 		       ISC_FSACCESS_EXECUTE;
   79: 	else
   80: 		bits = ISC_FSACCESS_CREATECHILD |
   81: 		       ISC_FSACCESS_ACCESSCHILD |
   82: 		       ISC_FSACCESS_DELETECHILD |
   83: 		       ISC_FSACCESS_LISTDIRECTORY;
   84: 
   85: 	/*
   86: 	 * Set group bad bits.
   87: 	 */
   88: 	bits |= bits << STEP;
   89: 	/*
   90: 	 * Set other bad bits.
   91: 	 */
   92: 	bits |= bits << STEP;
   93: 
   94: 	if ((access & bits) != 0) {
   95: 		if (is_dir)
   96: 			return (ISC_R_NOTFILE);
   97: 		else
   98: 			return (ISC_R_NOTDIRECTORY);
   99: 	}
  100: 
  101: 	return (ISC_R_SUCCESS);
  102: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>