]> git.saurik.com Git - apple/system_cmds.git/blobdiff - at.tproj/perm.c
system_cmds-735.tar.gz
[apple/system_cmds.git] / at.tproj / perm.c
index a2df82096cbc567943df5436816bc95f4121d0fd..82bab872cb093fa4bf4f7e146cc606022728c44a 100644 (file)
@@ -1,28 +1,4 @@
 /*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved.
- * 
- * 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@
- */
-/* 
  *  perm.c - check user permission for at(1)
  *  Copyright (C) 1994  Thomas Koenig
  *
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: src/usr.bin/at/perm.c,v 1.13 2001/12/10 21:13:01 dwmalone Exp $");
+
 /* System Headers */
 
 #include <sys/types.h>
+#include <err.h>
 #include <errno.h>
 #include <pwd.h>
 #include <stddef.h>
 
 /* Local headers */
 
-#include "privs.h"
 #include "at.h"
-#include "pathnames.h"
+#include "panic.h"
+#include "perm.h"
+#include "privs.h"
 
 /* Macros */
 
 
 /* Structures and unions */
 
-/* File scope variables */
-
-static char rcsid[] = "$Id: perm.c,v 1.1.1.2 2000/01/11 02:10:05 wsanchez Exp $";
-
 /* Function declarations */
 
 static int check_for_user(FILE *fp,const char *name);
@@ -83,14 +60,12 @@ static int check_for_user(FILE *fp,const char *name);
 static int check_for_user(FILE *fp,const char *name)
 {
     char *buffer;
-    size_t len;
+    int len;
     int found = 0;
 
-    len = strlen(name);
-    if ((buffer = malloc(sizeof (char) * (len+2))) == NULL) {
-       fprintf(stderr, "malloc error!");
-       exit(EXIT_FAILURE);
-    }
+    len = (int)strlen(name);
+    if ((buffer = malloc(len+2)) == NULL)
+       errx(EXIT_FAILURE, "virtual memory exhausted");
 
     while(fgets(buffer, len+2, fp) != NULL)
     {
@@ -106,7 +81,7 @@ static int check_for_user(FILE *fp,const char *name)
     return found;
 }
 /* Global functions */
-int check_permission()
+int check_permission(void)
 {
     FILE *fp;
     uid_t uid = geteuid();
@@ -116,14 +91,11 @@ int check_permission()
        return 1;
 
     if ((pentry = getpwuid(uid)) == NULL)
-    {
-       perror("Cannot access user database");
-       exit(EXIT_FAILURE);
-    }
+       err(EXIT_FAILURE, "cannot access user database");
 
     PRIV_START
 
-    fp=fopen(_PATH_AT "at.allow","r");
+    fp=fopen(PERM_PATH "at.allow","r");
 
     PRIV_END
 
@@ -131,12 +103,12 @@ int check_permission()
     {
        return check_for_user(fp, pentry->pw_name);
     }
-    else
+    else if (errno == ENOENT)
     {
 
        PRIV_START
 
-       fp=fopen(_PATH_AT "at.deny", "r");
+       fp=fopen(PERM_PATH "at.deny", "r");
 
        PRIV_END
 
@@ -144,7 +116,10 @@ int check_permission()
        {
            return !check_for_user(fp, pentry->pw_name);
        }
-       perror("at.deny");
+       else if (errno != ENOENT)
+           warn("at.deny");
     }
+    else
+       warn("at.allow");
     return 0;
 }