1d97fcfceSRobert Watson /* 2d97fcfceSRobert Watson * Copyright (c) 1999, 2000, 2001, 2002 Robert N. M. Watson 3d97fcfceSRobert Watson * All rights reserved. 4d97fcfceSRobert Watson * 5d97fcfceSRobert Watson * This software was developed by Robert Watson for the TrustedBSD Project. 6d97fcfceSRobert Watson * 7d97fcfceSRobert Watson * Redistribution and use in source and binary forms, with or without 8d97fcfceSRobert Watson * modification, are permitted provided that the following conditions 9d97fcfceSRobert Watson * are met: 10d97fcfceSRobert Watson * 1. Redistributions of source code must retain the above copyright 11d97fcfceSRobert Watson * notice, this list of conditions and the following disclaimer. 12d97fcfceSRobert Watson * 2. Redistributions in binary form must reproduce the above copyright 13d97fcfceSRobert Watson * notice, this list of conditions and the following disclaimer in the 14d97fcfceSRobert Watson * documentation and/or other materials provided with the distribution. 15d97fcfceSRobert Watson * 3. The names of the authors may not be used to endorse or promote 16d97fcfceSRobert Watson * products derived from this software without specific prior written 17d97fcfceSRobert Watson * permission. 18d97fcfceSRobert Watson * 19d97fcfceSRobert Watson * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 20d97fcfceSRobert Watson * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21d97fcfceSRobert Watson * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22d97fcfceSRobert Watson * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 23d97fcfceSRobert Watson * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24d97fcfceSRobert Watson * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25d97fcfceSRobert Watson * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26d97fcfceSRobert Watson * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27d97fcfceSRobert Watson * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28d97fcfceSRobert Watson * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29d97fcfceSRobert Watson * SUCH DAMAGE. 30d97fcfceSRobert Watson * 31d97fcfceSRobert Watson * $FreeBSD$ 32d97fcfceSRobert Watson */ 33d97fcfceSRobert Watson 34d97fcfceSRobert Watson #include <sys/types.h> 35d97fcfceSRobert Watson #include <sys/mac.h> 36d97fcfceSRobert Watson 37d97fcfceSRobert Watson #include <errno.h> 38d97fcfceSRobert Watson #include <stdlib.h> 39d97fcfceSRobert Watson 40d97fcfceSRobert Watson mac_t 41d97fcfceSRobert Watson mac_get_file(const char *path_p) 42d97fcfceSRobert Watson { 43d97fcfceSRobert Watson struct mac *label; 44d97fcfceSRobert Watson int error; 45d97fcfceSRobert Watson 46d97fcfceSRobert Watson label = (mac_t) malloc(sizeof(*label)); 47d97fcfceSRobert Watson if (label == NULL) { 48d97fcfceSRobert Watson errno = ENOMEM; 49d97fcfceSRobert Watson return (NULL); 50d97fcfceSRobert Watson } 51d97fcfceSRobert Watson 52d97fcfceSRobert Watson error = __mac_get_file(path_p, label); 53d97fcfceSRobert Watson if (error) { 54d97fcfceSRobert Watson mac_free(label); 55d97fcfceSRobert Watson return (NULL); 56d97fcfceSRobert Watson } 57d97fcfceSRobert Watson 58d97fcfceSRobert Watson return (label); 59d97fcfceSRobert Watson } 60d97fcfceSRobert Watson 61d97fcfceSRobert Watson mac_t 62d97fcfceSRobert Watson mac_get_fd(int fd) 63d97fcfceSRobert Watson { 64d97fcfceSRobert Watson struct mac *label; 65d97fcfceSRobert Watson int error; 66d97fcfceSRobert Watson 67d97fcfceSRobert Watson label = (mac_t) malloc(sizeof(*label)); 68d97fcfceSRobert Watson if (label == NULL) { 69d97fcfceSRobert Watson errno = ENOMEM; 70d97fcfceSRobert Watson return (NULL); 71d97fcfceSRobert Watson } 72d97fcfceSRobert Watson 73d97fcfceSRobert Watson error = __mac_get_fd(fd, label); 74d97fcfceSRobert Watson if (error) { 75d97fcfceSRobert Watson mac_free(label); 76d97fcfceSRobert Watson return (NULL); 77d97fcfceSRobert Watson } 78d97fcfceSRobert Watson 79d97fcfceSRobert Watson return (label); 80d97fcfceSRobert Watson } 81d97fcfceSRobert Watson 82d97fcfceSRobert Watson mac_t 83d97fcfceSRobert Watson mac_get_proc() 84d97fcfceSRobert Watson { 85d97fcfceSRobert Watson struct mac *label; 86d97fcfceSRobert Watson int error; 87d97fcfceSRobert Watson 88d97fcfceSRobert Watson label = (mac_t) malloc(sizeof(*label)); 89d97fcfceSRobert Watson if (label == NULL) { 90d97fcfceSRobert Watson errno = ENOMEM; 91d97fcfceSRobert Watson return (NULL); 92d97fcfceSRobert Watson } 93d97fcfceSRobert Watson 94d97fcfceSRobert Watson error = __mac_get_proc(label); 95d97fcfceSRobert Watson if (error) { 96d97fcfceSRobert Watson mac_free(label); 97d97fcfceSRobert Watson return (NULL); 98d97fcfceSRobert Watson } 99d97fcfceSRobert Watson 100d97fcfceSRobert Watson return (label); 101d97fcfceSRobert Watson } 102