This is Unofficial EPICS BASE Doxygen Site
asLib.h
Go to the documentation of this file.
1 /* asLib.h */
2 /*************************************************************************\
3 * Copyright (c) 2009 UChicago Argonne LLC, as Operator of Argonne
4 * National Laboratory.
5 * Copyright (c) 2002 The Regents of the University of California, as
6 * Operator of Los Alamos National Laboratory.
7 * EPICS BASE is distributed subject to a Software License Agreement found
8 * in file LICENSE that is included with this distribution.
9 \*************************************************************************/
10 /* Author: Marty Kraimer Date: 09-27-93*/
11 
12 #ifndef INCasLibh
13 #define INCasLibh
14 
15 #include "libComAPI.h"
16 #include "ellLib.h"
17 #include "errMdef.h"
18 #include "errlog.h"
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 /* 0 - Use (unverified) client provided host name string.
25  * 1 - Use actual client IP address. HAG() are resolved to IPs at ACF load time.
26  */
27 LIBCOM_API extern int asCheckClientIP;
28 
29 typedef struct asgMember *ASMEMBERPVT;
30 typedef struct asgClient *ASCLIENTPVT;
31 typedef int (*ASINPUTFUNCPTR)(char *buf,int max_size);
32 typedef enum{
33  asClientCOAR /*Change of access rights*/
34  /*For now this is all*/
36 
38 
39 /* The following routines are macros with the following syntax
40 long asCheckGet(ASCLIENTPVT asClientPvt);
41 long asCheckPut(ASCLIENTPVT asClientPvt);
42 */
43 #define asCheckGet(asClientPvt) \
44  (!asActive || ((asClientPvt)->access >= asREAD))
45 #define asCheckPut(asClientPvt) \
46  (!asActive || ((asClientPvt)->access >= asWRITE))
47 
48 /* More convenience macros
49 void *asTrapWriteWithData(ASCLIENTPVT asClientPvt,
50  const char *userid, const char *hostid, void *addr,
51  int dbrType, int no_elements, void *data);
52 void asTrapWriteAfter(ASCLIENTPVT asClientPvt);
53 */
54 #define asTrapWriteWithData(asClientPvt, user, host, addr, type, count, data) \
55  ((asActive && (asClientPvt)->trapMask) \
56  ? asTrapWriteBeforeWithData((user), (host), (addr), (type), (count), (data)) \
57  : 0)
58 #define asTrapWriteAfter(pvt) \
59  if (pvt) asTrapWriteAfterWrite(pvt)
60 
61 /* This macro is for backwards compatibility, upgrade any code
62  calling it to use asTrapWriteWithData() instead ASAP:
63 void *asTrapWriteBefore(ASCLIENTPVT asClientPvt,
64  const char *userid, const char *hostid, void *addr);
65 */
66 #define asTrapWriteBefore(asClientPvt, user, host, addr) \
67  asTrapWriteWithData(asClientPvt, user, host, addr, 0, 0, NULL)
68 
69 
70 LIBCOM_API long epicsStdCall asInitialize(ASINPUTFUNCPTR inputfunction);
71 LIBCOM_API long epicsStdCall asInitFile(
72  const char *filename,const char *substitutions);
73 LIBCOM_API long epicsStdCall asInitFP(FILE *fp,const char *substitutions);
74 LIBCOM_API long epicsStdCall asInitMem(const char *acf, const char *substitutions);
75 /*caller must provide permanent storage for asgName*/
76 LIBCOM_API long epicsStdCall asAddMember(
77  ASMEMBERPVT *asMemberPvt,const char *asgName);
78 LIBCOM_API long epicsStdCall asRemoveMember(ASMEMBERPVT *asMemberPvt);
79 /*caller must provide permanent storage for newAsgName*/
80 LIBCOM_API long epicsStdCall asChangeGroup(
81  ASMEMBERPVT *asMemberPvt,const char *newAsgName);
82 LIBCOM_API void * epicsStdCall asGetMemberPvt(ASMEMBERPVT asMemberPvt);
83 LIBCOM_API void epicsStdCall asPutMemberPvt(
84  ASMEMBERPVT asMemberPvt,void *userPvt);
85 /*client must provide permanent storage for user and host*/
86 LIBCOM_API long epicsStdCall asAddClient(
87  ASCLIENTPVT *asClientPvt,ASMEMBERPVT asMemberPvt,
88  int asl,const char *user,char *host);
89 /*client must provide permanent storage for user and host*/
90 LIBCOM_API long epicsStdCall asChangeClient(
91  ASCLIENTPVT asClientPvt,int asl,const char *user,char *host);
92 LIBCOM_API long epicsStdCall asRemoveClient(ASCLIENTPVT *asClientPvt);
93 LIBCOM_API void * epicsStdCall asGetClientPvt(ASCLIENTPVT asClientPvt);
94 LIBCOM_API void epicsStdCall asPutClientPvt(
95  ASCLIENTPVT asClientPvt,void *userPvt);
96 LIBCOM_API long epicsStdCall asRegisterClientCallback(
97  ASCLIENTPVT asClientPvt, ASCLIENTCALLBACK pcallback);
98 LIBCOM_API long epicsStdCall asComputeAllAsg(void);
99 /* following declared below after ASG is declared
100 LIBCOM_API long epicsStdCall asComputeAsg(ASG *pasg);
101 */
102 LIBCOM_API long epicsStdCall asCompute(ASCLIENTPVT asClientPvt);
103 LIBCOM_API int epicsStdCall asDump(
104  void (*memcallback)(ASMEMBERPVT,FILE *),
105  void (*clientcallback)(ASCLIENTPVT,FILE *),int verbose);
106 LIBCOM_API int epicsStdCall asDumpFP(FILE *fp,
107  void (*memcallback)(ASMEMBERPVT,FILE *),
108  void (*clientcallback)(ASCLIENTPVT,FILE *),int verbose);
109 LIBCOM_API int epicsStdCall asDumpUag(const char *uagname);
110 LIBCOM_API int epicsStdCall asDumpUagFP(FILE *fp,const char *uagname);
111 LIBCOM_API int epicsStdCall asDumpHag(const char *hagname);
112 LIBCOM_API int epicsStdCall asDumpHagFP(FILE *fp,const char *hagname);
113 LIBCOM_API int epicsStdCall asDumpRules(const char *asgname);
114 LIBCOM_API int epicsStdCall asDumpRulesFP(FILE *fp,const char *asgname);
115 LIBCOM_API int epicsStdCall asDumpMem(const char *asgname,
116  void (*memcallback)(ASMEMBERPVT,FILE *),int clients);
117 LIBCOM_API int epicsStdCall asDumpMemFP(FILE *fp,const char *asgname,
118  void (*memcallback)(ASMEMBERPVT,FILE *),int clients);
119 LIBCOM_API int epicsStdCall asDumpHash(void);
120 LIBCOM_API int epicsStdCall asDumpHashFP(FILE *fp);
121 
122 LIBCOM_API void * epicsStdCall asTrapWriteBeforeWithData(
123  const char *userid, const char *hostid, void *addr,
124  int dbrType, int no_elements, void *data);
125 
126 LIBCOM_API void epicsStdCall asTrapWriteAfterWrite(void *pvt);
127 
128 #define S_asLib_clientsExist (M_asLib| 1) /*Client Exists*/
129 #define S_asLib_noUag (M_asLib| 2) /*User Access Group does not exist*/
130 #define S_asLib_noHag (M_asLib| 3) /*Host Access Group does not exist*/
131 #define S_asLib_noAccess (M_asLib| 4) /*access security: no access allowed*/
132 #define S_asLib_noModify (M_asLib| 5) /*access security: no modification allowed*/
133 #define S_asLib_badConfig (M_asLib| 6) /*access security: bad configuration file*/
134 #define S_asLib_badCalc (M_asLib| 7) /*access security: bad calculation espression*/
135 #define S_asLib_dupAsg (M_asLib| 8) /*Duplicate Access Security Group */
136 #define S_asLib_InitFailed (M_asLib| 9) /*access security: Init failed*/
137 #define S_asLib_asNotActive (M_asLib|10) /*access security is not active*/
138 #define S_asLib_badMember (M_asLib|11) /*access security: bad ASMEMBERPVT*/
139 #define S_asLib_badClient (M_asLib|12) /*access security: bad ASCLIENTPVT*/
140 #define S_asLib_badAsg (M_asLib|13) /*access security: bad ASG*/
141 #define S_asLib_noMemory (M_asLib|14) /*access security: no Memory */
142 
143 /*Private declarations */
144 LIBCOM_API extern int asActive;
145 
146 /* definition of access rights*/
148 
149 struct gphPvt;
150 
151 /*Base pointers for access security*/
152 typedef struct asBase{
156  struct gphPvt *phash;
157 } ASBASE;
158 
159 LIBCOM_API extern volatile ASBASE *pasbase;
160 
161 /*Defs for User Access Groups*/
162 typedef struct{
164  char *user;
165 } UAGNAME;
166 typedef struct uag{
168  char *name;
169  ELLLIST list; /*list of UAGNAME*/
170 } UAG;
171 /*Defs for Host Access Groups*/
172 typedef struct{
174  char host[1];
175 } HAGNAME;
176 typedef struct hag{
178  char *name;
179  ELLLIST list; /*list of HAGNAME*/
180 } HAG;
181 /*Defs for Access SecurityGroups*/
182 typedef struct {
185 }ASGUAG;
186 typedef struct {
189 }ASGHAG;
190 #define AS_TRAP_WRITE 1
191 typedef struct{
193  asAccessRights access;
194  int level;
195  unsigned long inpUsed; /*bitmap of which inputs are used*/
196  int result; /*Result of calc converted to TRUE/FALSE*/
197  char *calc;
198  void *rpcl;
199  ELLLIST uagList; /*List of ASGUAG*/
200  ELLLIST hagList; /*List of ASGHAG*/
201  int trapMask;
202 } ASGRULE;
203 typedef struct{
205  char *inp;
206  void *capvt;
207  struct asg *pasg;
208  int inpIndex;
209 }ASGINP;
210 
211 typedef struct asg{
213  char *name;
217  double *pavalue; /*pointer to array of input values*/
218  unsigned long inpBad; /*bitmap of which inputs are bad*/
219  unsigned long inpChanged; /*bitmap of inputs that changed*/
220 } ASG;
221 typedef struct asgMember {
225  const char *asgName;
226  void *userPvt;
227 } ASGMEMBER;
228 
229 typedef struct asgClient {
232  const char *user;
233  char *host;
234  void *userPvt;
236  int level;
237  asAccessRights access;
238  int trapMask;
239 } ASGCLIENT;
240 
241 LIBCOM_API long epicsStdCall asComputeAsg(ASG *pasg);
242 /*following is "friend" function*/
243 LIBCOM_API void * epicsStdCall asCalloc(size_t nobj,size_t size);
244 LIBCOM_API char * epicsStdCall asStrdup(unsigned char *str);
245 LIBCOM_API void asFreeAll(ASBASE *pasbase);
246 #ifdef __cplusplus
247 }
248 #endif
249 
250 #endif /*INCasLibh*/
struct uag UAG
Definition: asLib.h:147
char * inp
Definition: asLib.h:205
Definition: asLib.h:162
ELLNODE node
Definition: asLib.h:163
ASGMEMBER * pasgMember
Definition: asLib.h:231
void * capvt
Definition: asLib.h:206
LIBCOM_API long epicsStdCall asChangeGroup(ASMEMBERPVT *asMemberPvt, const char *newAsgName)
LIBCOM_API int asCheckClientIP
Definition: asLibRoutines.c:31
ELLLIST memberList
Definition: asLib.h:216
ELLNODE node
Definition: asLib.h:212
LIBCOM_API long epicsStdCall asInitialize(ASINPUTFUNCPTR inputfunction)
Definition: asLibRoutines.c:84
LIBCOM_API long epicsStdCall asInitFile(const char *filename, const char *substitutions)
LIBCOM_API int epicsStdCall asDumpHagFP(FILE *fp, const char *hagname)
int trapMask
Definition: asLib.h:238
ELLLIST ruleList
Definition: asLib.h:215
LIBCOM_API long epicsStdCall asCompute(ASCLIENTPVT asClientPvt)
LIBCOM_API volatile ASBASE * pasbase
Definition: asLibRoutines.c:38
int trapMask
Definition: asLib.h:201
char * calc
Definition: asLib.h:197
LIBCOM_API long epicsStdCall asChangeClient(ASCLIENTPVT asClientPvt, int asl, const char *user, char *host)
LIBCOM_API void *epicsStdCall asTrapWriteBeforeWithData(const char *userid, const char *hostid, void *addr, int dbrType, int no_elements, void *data)
Definition: asTrapWrite.c:113
struct asgClient ASGCLIENT
Definition: asLib.h:166
LIBCOM_API long epicsStdCall asAddClient(ASCLIENTPVT *asClientPvt, ASMEMBERPVT asMemberPvt, int asl, const char *user, char *host)
double * pavalue
Definition: asLib.h:217
LIBCOM_API long epicsStdCall asRegisterClientCallback(ASCLIENTPVT asClientPvt, ASCLIENTCALLBACK pcallback)
char * name
Definition: asLib.h:178
Definition: asLib.h:176
char * user
Definition: asLib.h:164
ELLNODE node
Definition: asLib.h:230
LIBCOM_API void epicsStdCall asPutClientPvt(ASCLIENTPVT asClientPvt, void *userPvt)
LIBCOM_API int epicsStdCall asDumpFP(FILE *fp, void(*memcallback)(ASMEMBERPVT, FILE *), void(*clientcallback)(ASCLIENTPVT, FILE *), int verbose)
Definition: asLib.h:152
const char * user
Definition: asLib.h:232
void * userPvt
Definition: asLib.h:234
#define str(v)
void * userPvt
Definition: asLib.h:226
unsigned long inpBad
Definition: asLib.h:218
ELLNODE node
Definition: asLib.h:192
const char * asgName
Definition: asLib.h:225
ELLLIST asgList
Definition: asLib.h:155
struct hag HAG
UAG * puag
Definition: asLib.h:184
LIBCOM_API long epicsStdCall asComputeAsg(ASG *pasg)
struct gphPvt * phash
Definition: asLib.h:156
ELLNODE node
Definition: asLib.h:204
int result
Definition: asLib.h:196
ASCLIENTCALLBACK pcallback
Definition: asLib.h:235
struct asgMember * ASMEMBERPVT
Definition: asLib.h:29
LIBCOM_API char *epicsStdCall asStrdup(unsigned char *str)
LIBCOM_API int epicsStdCall asDumpHag(const char *hagname)
ELLLIST list
Definition: asLib.h:169
A doubly-linked list library.
asClientStatus
Definition: asLib.h:32
Definition: asLib.h:147
char * name
Definition: asLib.h:213
LIBCOM_API void *epicsStdCall asGetMemberPvt(ASMEMBERPVT asMemberPvt)
void * rpcl
Definition: asLib.h:198
LIBCOM_API long epicsStdCall asInitFP(FILE *fp, const char *substitutions)
LIBCOM_API long epicsStdCall asRemoveMember(ASMEMBERPVT *asMemberPvt)
LIBCOM_API int epicsStdCall asDumpRulesFP(FILE *fp, const char *asgname)
ELLNODE node
Definition: asLib.h:177
ChannelProviderRegistry::shared_pointer clients
unsigned long inpChanged
Definition: asLib.h:219
asAccessRights access
Definition: asLib.h:237
LIBCOM_API long epicsStdCall asRemoveClient(ASCLIENTPVT *asClientPvt)
LIBCOM_API int epicsStdCall asDumpHashFP(FILE *fp)
ELLLIST list
Definition: asLib.h:179
LIBCOM_API void *epicsStdCall asGetClientPvt(ASCLIENTPVT asClientPvt)
ELLNODE node
Definition: asLib.h:167
struct asg * pasg
Definition: asLib.h:207
LIBCOM_API int epicsStdCall asDumpMemFP(FILE *fp, const char *asgname, void(*memcallback)(ASMEMBERPVT, FILE *), int clients)
ELLLIST uagList
Definition: asLib.h:199
int(* ASINPUTFUNCPTR)(char *buf, int max_size)
Definition: asLib.h:31
LIBCOM_API int epicsStdCall asDumpUag(const char *uagname)
List node type.
Definition: ellLib.h:45
ELLLIST hagList
Definition: asLib.h:154
ELLLIST uagList
Definition: asLib.h:153
int inpIndex
Definition: asLib.h:208
ELLLIST hagList
Definition: asLib.h:200
LIBCOM_API int epicsStdCall asDumpHash(void)
LIBCOM_API void epicsStdCall asTrapWriteAfterWrite(void *pvt)
Definition: asTrapWrite.c:151
struct asgMember ASGMEMBER
struct asBase ASBASE
ELLNODE node
Definition: asLib.h:187
int level
Definition: asLib.h:236
int level
Definition: asLib.h:194
Definition: asLib.h:211
HAG * phag
Definition: asLib.h:188
Definition: asLib.h:186
LIBCOM_API long epicsStdCall asInitMem(const char *acf, const char *substitutions)
void verbose(void)
Definition: verbose.c:27
ELLNODE node
Definition: asLib.h:173
LIBCOM_API long epicsStdCall asAddMember(ASMEMBERPVT *asMemberPvt, const char *asgName)
ASG * pasg
Definition: asLib.h:223
LIBCOM_API void *epicsStdCall asCalloc(size_t nobj, size_t size)
void(* ASCLIENTCALLBACK)(ASCLIENTPVT, asClientStatus)
Definition: asLib.h:37
LIBCOM_API int epicsStdCall asDumpRules(const char *asgname)
char * host
Definition: asLib.h:233
ELLLIST inpList
Definition: asLib.h:214
LIBCOM_API long epicsStdCall asComputeAllAsg(void)
Definition: asLib.h:172
List header type.
Definition: ellLib.h:56
unsigned long inpUsed
Definition: asLib.h:195
struct asg ASG
asAccessRights
Definition: asLib.h:147
ELLNODE node
Definition: asLib.h:183
asAccessRights access
Definition: asLib.h:193
LIBCOM_API void epicsStdCall asPutMemberPvt(ASMEMBERPVT asMemberPvt, void *userPvt)
ELLNODE node
Definition: asLib.h:222
ELLLIST clientList
Definition: asLib.h:224
LIBCOM_API int epicsStdCall asDumpUagFP(FILE *fp, const char *uagname)
LIBCOM_API int asActive
Definition: asLibRoutines.c:40
Definition: asLib.h:191
Definition: asLib.h:182
LIBCOM_API int epicsStdCall asDumpMem(const char *asgname, void(*memcallback)(ASMEMBERPVT, FILE *), int clients)
char * name
Definition: asLib.h:168
Definition: asLib.h:203
LIBCOM_API void asFreeAll(ASBASE *pasbase)
struct asgClient * ASCLIENTPVT
Definition: asLib.h:30
LIBCOM_API int epicsStdCall asDump(void(*memcallback)(ASMEMBERPVT, FILE *), void(*clientcallback)(ASCLIENTPVT, FILE *), int verbose)