pdp11v/usr/src/cmd/uucp/fwdchk.c
/* @(#)fwdchk.c 1.3 */
#include "uucp.h"
/*
* check forwarding file for permission to forward data to
* a specified machine.
* machine -> destination machine
* user -> user who started the transfer
* returns:
* 0 -> ok to forward
* -1 -> forwarding disallowed for all users
* -2 -> forwarding denied to specified user only
* -4 -> bad entry in FWDFILE
*/
fwdchk(machine, user, file)
char *machine, *user;
char *file;
{
FILE *fwdfile;
char buf[BUFSIZ+1];
register char *s, *i;
char *strchr();
int *strlen();
char *strpbrk();
if ((fwdfile = fopen(file, "r")) == NULL)
return(0);
while (fgets(buf, sizeof(buf)-1, fwdfile) != NULL) {
/*
* Any users specified
*/
if ((s = strchr(buf, '!')) != NULL) {
/*
* check for user permission and machine permission to forward
*/
*s++ = '\0';
if (strncmp(buf, machine, SYSNSIZE) == SAME) {
while (*s != '\n') {
if ((i = strpbrk(s,"!\n\0")) != NULL){
if (*i == '!')
*i++ = '\0';
else
if (*i == '\n') {
*i++ = '\0';
*i = '\n';
}else
return(-4);
}
DEBUG(5, "user: %s\n",s);
if (strcmp(user, s) == SAME) {
fclose(fwdfile);
return(0);
}
s = i;
}
fclose(fwdfile);
return(-2);
}else
continue;
}else
/*
* user permission not required - check machine permission to forward
*/
if ((i = strpbrk(buf,"\n\0")) != NULL)
*i='\0';
else
return(-4);
if (strncmp(buf, machine, SYSNSIZE)==SAME) {
fclose(fwdfile);
return(0);
}else
continue;
}
fclose(fwdfile);
return(-1);
}