blob: 65e624aca3d929eb8c6ab1ad42194af5891f88ad [file] [log] [blame]
#include <config.h>
#if STDC_HEADERS
# include <stdlib.h>
# include <string.h>
#endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
#include <sys/types.h>
#include <stdio.h>
#if TIME_WITH_SYS_TIME
# ifdef WIN32
# include <sys/timeb.h>
# else
# include <sys/time.h>
# endif
# include <time.h>
#else
# if HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
#if HAVE_WINSOCK_H
# include <winsock.h>
#endif
#include "asn1.h"
#include "acl.h"
static struct aclEntry *List = NULL, *ScanPtr = NULL;
struct aclEntry *
acl_getEntry(int target,
int subject,
int resources)
{
struct aclEntry *ap;
/* cache here */
for(ap = List; ap; ap = ap->next){
if (target == ap->aclTarget && subject == ap->aclSubject
&& resources == ap->aclResources)
return ap;
}
return NULL;
}
void
acl_scanInit (void)
{
ScanPtr = List;
}
struct aclEntry *
acl_scanNext (void)
{
struct aclEntry *returnval;
returnval = ScanPtr;
if (ScanPtr != NULL)
ScanPtr = ScanPtr->next;
return returnval;
}
struct aclEntry *
acl_createEntry(int target,
int subject,
int resources)
{
struct aclEntry *ap;
ap = (struct aclEntry *)malloc(sizeof(struct aclEntry));
memset(ap, 0, sizeof(struct aclEntry));
ap->aclTarget = target;
ap->aclSubject = subject;
ap->aclResources = resources;
ap->reserved = (struct aclEntry *)malloc(sizeof(struct aclEntry));
memset(ap->reserved, 0, sizeof(struct aclEntry));
ap->next = List;
List = ap;
return ap;
}
void
acl_destroyEntry(int target,
int subject,
int resources)
{
struct aclEntry *ap, *lastap = NULL;
if (List->aclTarget == target && List->aclSubject == subject
&& List->aclResources == resources){
ap = List;
List = List->next;
} else {
for(ap = List; ap; ap = ap->next){
if (ap->aclTarget == target
&& ap->aclSubject == subject
&& ap->aclResources == resources)
break;
lastap = ap;
}
if (!ap)
return;
lastap->next = ap->next;
}
if (ap->reserved)
free((char *)ap->reserved);
free(ap);
return;
}