#define _ACL_
+#include "afs/ptint.h"
#define ACL_VERSION "Version 1"
extern int acl_FreeExternalACL(char **r);
extern int acl_Externalize(struct acl_accessList *acl, char **elist);
extern int acl_Internalize(char *elist, struct acl_accessList **acl);
+extern int acl_Externalize_pr(int (*func)(idlist *ids, namelist *names), struct acl_accessList *acl, char **elist);
+extern int acl_Internalize_pr(int (*func)(namelist *names, idlist *ids), char *elist, struct acl_accessList **acl);
extern int acl_Initialize(char *version);
#ifdef _RXGEN_PTINT_
extern int acl_CheckRights(struct acl_accessList *acl, prlist *groups, int *rights);
return (AddToList(&freeList, x));
}
-
int
-acl_Externalize(struct acl_accessList *acl, char **elist)
+acl_Externalize_pr(int (*func)(idlist *ids, namelist *names), struct acl_accessList *acl, char **elist)
{
/* Converts the access list defined by acl into the external access list
* in elist. Non-translatable id's are converted to their ASCII string
j = i;
for (i = acl->total - 1; i >= acl->total - acl->negative; i--, j++)
lids.idlist_val[j] = acl->entries[i].id;
- code = pr_IdToName(&lids, &lnames);
+ code = (*func)(&lids, &lnames);
if (code != 0) {
if (lids.idlist_val)
free(lids.idlist_val);
return (0);
}
+int
+acl_Externalize(struct acl_accessList *acl, char **elist)
+{
+ return acl_Externalize_pr(pr_IdToName, acl, elist);
+}
int
-acl_Internalize(char *elist, struct acl_accessList **acl)
+acl_Internalize_pr(int (*func)(namelist *names, idlist *ids), char *elist, struct acl_accessList **acl)
{
/* Converts the external access list elist into the access list acl.
* Returns 0 on success, -1 if ANY name is not translatable, or if
lids.idlist_len = 0;
lids.idlist_val = 0;
- code = pr_NameToId(&lnames, &lids);
+ code = (*func)(&lnames, &lids);
if (code) {
free(lnames.namelist_val);
if (lids.idlist_val)
return (0);
}
+int
+acl_Internalize(char *elist, struct acl_accessList **acl)
+{
+ return acl_Internalize_pr(pr_NameToId, elist, acl);
+}
int
acl_CheckRights(struct acl_accessList *acl, prlist *groups, int *rights)
{
char *eACL; /* External access list placeholder */
- if (acl_Externalize
- ((targetptr->disk.type ==
+ if (acl_Externalize_pr
+ (hpr_IdToName, (targetptr->disk.type ==
vDirectory ? VVnodeACL(targetptr) :
VVnodeACL(parentwhentargetnotdir)), &eACL) != 0) {
return EIO;
{
struct acl_accessList *newACL; /* PlaceHolder for new access list */
- if (acl_Internalize(AccessList->AFSOpaque_val, &newACL) != 0)
+ if (acl_Internalize_pr(hpr_NameToId, AccessList->AFSOpaque_val, &newACL)
+ != 0)
return (EINVAL);
if ((newACL->size + 4) > VAclSize(targetptr))
return (E2BIG);
extern int removeInterfaceAddr_r(struct host *host, afs_uint32 addr, afs_uint16 port);
extern afs_int32 hpr_Initialize(struct ubik_client **);
extern int hpr_End(struct ubik_client *);
-
+extern int hpr_IdToName(idlist *ids, namelist *names);
+extern int hpr_NameToId(namelist *names, idlist *ids);
#ifdef AFS_DEMAND_ATTACH_FS
/*