Loading...
sys/openx_np.c Libc-1725.40.4 /dev/null
--- Libc/Libc-1725.40.4/sys/openx_np.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 2004 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
- */
-#include <sys/types.h>
-#include <sys/acl.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-
-enum {OPENX, MKFIFOX, MKDIRX};
-
-extern int __open_extended(const char *, int, uid_t, gid_t, int, struct kauth_filesec *);
-extern int __mkfifo_extended(const char *, uid_t, gid_t, int, struct kauth_filesec *);
-extern int __mkdir_extended(const char *, uid_t, gid_t, int, struct kauth_filesec *);
-
-static int
-_mkfilex_np(int opcode, const char *path, int flags, filesec_t fsec)
-{
-	uid_t owner = KAUTH_UID_NONE;
-	gid_t group = KAUTH_GID_NONE;
-	mode_t mode = 0;
-	size_t size = 0;
-	int fsacl_used = 0;
-	struct kauth_filesec *fsacl = NULL;
-	struct kauth_filesec static_filesec;
-
-	/* handle extended security data */
-	if (fsec != NULL) {
-		/* fetch basic parameters */
-		if ((filesec_get_property(fsec, FILESEC_OWNER, &owner) != 0) && (errno != ENOENT))
-			return(-1);
-		if ((filesec_get_property(fsec, FILESEC_GROUP, &group) != 0) && (errno != ENOENT))
-			return(-1);
-		if ((filesec_get_property(fsec, FILESEC_MODE, &mode) != 0) && (errno != ENOENT))
-			return(-1);
-
-		/* try to fetch the ACL */
-		if (((filesec_get_property(fsec, FILESEC_ACL_RAW, &fsacl) != 0) ||
-			(filesec_get_property(fsec, FILESEC_ACL_ALLOCSIZE, &size) != 0)) &&
-		    (errno != ENOENT))
-			return(-1);
-
-		/* only valid for chmod */
-		if (fsacl == _FILESEC_REMOVE_ACL) {
-			errno = EINVAL;
-			return(-1);
-		}
-
-		/* no ACL, use local filesec */
-		if (fsacl == NULL) {
-			bzero(&static_filesec, sizeof(static_filesec));
-			fsacl = &static_filesec;
-			fsacl->fsec_magic = KAUTH_FILESEC_MAGIC;
-			fsacl->fsec_entrycount = KAUTH_FILESEC_NOACL;
-		} else {
-			fsacl_used = 1;
-		}
-
-		/* grab the owner and group UUID if present */
-		if (filesec_get_property(fsec, FILESEC_UUID, &fsacl->fsec_owner) != 0) {
-			if (errno != ENOENT)
-				return(-1);
-			bzero(&fsacl->fsec_owner, sizeof(fsacl->fsec_owner));
-		} else {
-			fsacl_used = 1;
-		}
-		if (filesec_get_property(fsec, FILESEC_GRPUUID, &fsacl->fsec_group) != 0) {
-			if (errno != ENOENT)
-				return(-1);
-			bzero(&fsacl->fsec_group, sizeof(fsacl->fsec_group));
-		} else {
-			fsacl_used = 1;
-		}
-
-		/* after all this, if we didn't find anything that needs it, don't pass it in */
-		if (!fsacl_used)
-			fsacl = NULL;
-	}
-
-	switch (opcode) {
-	case OPENX:
-		return(__open_extended(path, flags, owner, group, mode, fsacl));
-	case MKFIFOX:
-		return(__mkfifo_extended(path, owner, group, mode, fsacl));
-	case MKDIRX:
-		return(__mkdir_extended(path, owner, group, mode, fsacl));
-	}
-	/* should never get here */
-	errno = EINVAL;
-	return(-1);
-}
-
-int
-openx_np(const char *path, int flags, filesec_t fsec)
-{
-	/* optimise for the simple case */
-	if (!(flags & O_CREAT) || (fsec == NULL))
-		return(open(path, flags));
-	return(_mkfilex_np(OPENX, path, flags, fsec));
-}
-
-int
-mkfifox_np(const char *path, filesec_t fsec)
-{
-	return(_mkfilex_np(MKFIFOX, path, 0, fsec));
-}
-
-int
-mkdirx_np(const char *path, filesec_t fsec)
-{
-	return(_mkfilex_np(MKDIRX, path, 0, fsec));
-}