From c5e5790661cebdf2b45c7218d238bf18af01f99c Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Mon, 15 Feb 2010 16:12:44 -0500 Subject: [PATCH] viced avoid global pruclient during acl ops acl_Internalize and acl_Externalize used the global pruclient use the ones we use elsewhere in viced FetchAcl/StoreAcl also Change-Id: Ia2b8d29035ed48a6aab8c9df243c9082bfacd201 Reviewed-on: http://gerrit.openafs.org/1314 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/libacl/acl.h | 3 +++ src/libacl/aclprocs.c | 19 ++++++++++++++----- src/viced/afsfileprocs.c | 7 ++++--- src/viced/host.h | 3 ++- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/libacl/acl.h b/src/libacl/acl.h index d3af5a8d1..b591c6f91 100644 --- a/src/libacl/acl.h +++ b/src/libacl/acl.h @@ -16,6 +16,7 @@ #define _ACL_ +#include "afs/ptint.h" #define ACL_VERSION "Version 1" @@ -70,6 +71,8 @@ extern int acl_NewExternalACL(int nEntries, char **r); 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); diff --git a/src/libacl/aclprocs.c b/src/libacl/aclprocs.c index d4041af65..e2dbd3b06 100644 --- a/src/libacl/aclprocs.c +++ b/src/libacl/aclprocs.c @@ -168,9 +168,8 @@ acl_FreeExternalACL(char **r) 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 @@ -202,7 +201,7 @@ acl_Externalize(struct acl_accessList *acl, char **elist) 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); @@ -230,9 +229,14 @@ acl_Externalize(struct acl_accessList *acl, char **elist) 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 @@ -295,7 +299,7 @@ acl_Internalize(char *elist, struct acl_accessList **acl) 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) @@ -332,6 +336,11 @@ acl_Internalize(char *elist, struct acl_accessList **acl) 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) diff --git a/src/viced/afsfileprocs.c b/src/viced/afsfileprocs.c index 00cd17b05..b15372d8d 100644 --- a/src/viced/afsfileprocs.c +++ b/src/viced/afsfileprocs.c @@ -1055,8 +1055,8 @@ RXFetch_AccessList(Vnode * targetptr, Vnode * parentwhentargetnotdir, { 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; @@ -1084,7 +1084,8 @@ RXStore_AccessList(Vnode * targetptr, struct AFSOpaque *AccessList) { 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); diff --git a/src/viced/host.h b/src/viced/host.h index 44e1e1465..73e5dd418 100644 --- a/src/viced/host.h +++ b/src/viced/host.h @@ -252,7 +252,8 @@ extern int addInterfaceAddr_r(struct host *host, afs_uint32 addr, afs_uint16 por 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 /* -- 2.39.5