/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- *
- * "Portions Copyright (c) 1999 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 1.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.apple.com/publicsource 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 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);
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)
{
return found;
}
/* Global functions */
-int check_permission()
+int check_permission(void)
{
FILE *fp;
uid_t uid = geteuid();
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
{
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
{
return !check_for_user(fp, pentry->pw_name);
}
- perror("at.deny");
+ else if (errno != ENOENT)
+ warn("at.deny");
}
+ else
+ warn("at.allow");
return 0;
}