00001 #ifndef __ACC_CAPABILITY__
00002 #define __ACC_CAPABILITY__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include <stdlib.h>
00034 #include <string.h>
00035 #include <strings.h>
00036
00037 #include "XrdAcc/XrdAccPrivs.hh"
00038
00039
00040
00041
00042
00043 class XrdAccCapability
00044 {
00045 public:
00046 void Add(XrdAccCapability *newcap) {next = newcap;}
00047
00048 XrdAccCapability *Next() {return next;}
00049
00050
00051
00052
00053
00054 int Privs( XrdAccPrivCaps &pathpriv,
00055 const char *pathname,
00056 const int pathlen,
00057 const unsigned long pathhash,
00058 const char *pathsub=0);
00059
00060 int Privs( XrdAccPrivCaps &pathpriv,
00061 const char *pathname,
00062 const int pathlen,
00063 const char *pathsub=0)
00064 {extern unsigned long XrdOucHashVal2(const char *,int);
00065 return Privs(pathpriv, pathname, pathlen,
00066 XrdOucHashVal2(pathname,(int)pathlen),pathsub);}
00067
00068 int Privs( XrdAccPrivCaps &pathpriv,
00069 const char *pathname,
00070 const char *pathsub=0)
00071 {extern unsigned long XrdOucHashVal2(const char *,int);
00072 int pathlen = strlen(pathname);
00073 return Privs(pathpriv, pathname, pathlen,
00074 XrdOucHashVal2(pathname, pathlen), pathsub);}
00075
00076 int Subcomp(const char *pathname, const int pathlen,
00077 const char *pathsub, const int sublen);
00078
00079 XrdAccCapability(char *pathval, XrdAccPrivCaps &privval);
00080
00081 XrdAccCapability(XrdAccCapability *taddr)
00082 {next = 0; ctmp = taddr;
00083 pkey = 0; path = 0; plen = 0; pins = 0; prem = 0;
00084 }
00085
00086 ~XrdAccCapability();
00087 private:
00088 XrdAccCapability *next;
00089 XrdAccCapability *ctmp;
00090
00091
00092
00093 XrdAccPrivCaps priv;
00094 unsigned long pkey;
00095 char *path;
00096 int plen;
00097 int pins;
00098 int prem;
00099 };
00100
00101
00102
00103
00104
00105 class XrdAccCapName
00106 {
00107 public:
00108 void Add(XrdAccCapName *cnp) {next = cnp;}
00109
00110 XrdAccCapability *Find(const char *name);
00111
00112 XrdAccCapName(char *name, XrdAccCapability *cap)
00113 {next = 0; CapName = strdup(name); CNlen = strlen(name);
00114 C_List = cap;
00115 }
00116 ~XrdAccCapName();
00117 private:
00118 XrdAccCapName *next;
00119 char *CapName;
00120 int CNlen;
00121 XrdAccCapability *C_List;
00122 };
00123 #endif