xrootd
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
XrdVersionPlugin.hh
Go to the documentation of this file.
1 #ifndef __XRDVERSIONPLUGIN_HH__
2 #define __XRDVERSIONPLUGIN_HH__
3 /******************************************************************************/
4 /* */
5 /* X r d V e r s i o n P l u g i n . h h */
6 /* */
7 /* (c) 2012 by the Board of Trustees of the Leland Stanford, Jr., University */
8 /* All Rights Reserved */
9 /* Produced by Andrew Hanushevsky for Stanford University under contract */
10 /* DE-AC02-76-SFO0515 with the Department of Energy */
11 /* */
12 /* This file is part of the XRootD software suite. */
13 /* */
14 /* XRootD is free software: you can redistribute it and/or modify it under */
15 /* the terms of the GNU Lesser General Public License as published by the */
16 /* Free Software Foundation, either version 3 of the License, or (at your */
17 /* option) any later version. */
18 /* */
19 /* XRootD is distributed in the hope that it will be useful, but WITHOUT */
20 /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
21 /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
22 /* License for more details. */
23 /* */
24 /* You should have received a copy of the GNU Lesser General Public License */
25 /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
26 /* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
27 /* */
28 /* The copyright holder's institutional names and contributor's names may not */
29 /* be used to endorse or promote products derived from this software without */
30 /* specific prior written permission of the institution or contributor. */
31 /******************************************************************************/
32 
33 /* The following section defines the versioning rules for plugins. The rules are
34  applied by 'XrdSysPlugin.cc'. The rules defined by the XrdVERSIONPLUGIN_RULE
35  macro (see below) are used to initialize a data the following data structure.
36 */
38  {const char *pName;
39  char vPfxLen;
40  char vSfxLen;
41  int vProcess;
42  short vMajLow;
43  short vMinLow;
44  };
45 
46 /* The rules are defined here because they apply to every class that uses a
47  plugin. This file *must* be updated whenever a plugin interface materially
48  changes; including any material changes (layout or size) to any classes
49  passed as arguments to the plugin.
50 */
51 
52 // Macros used to define version checking rule values (see explanation below).
53 //
54 #define XrdVERSIONPLUGIN_DoNotChk -1
55 #define XrdVERSIONPLUGIN_Optional 0
56 #define XrdVERSIONPLUGIN_Required 1
57 
58 #define XrdVERSIONPLUGIN_Rule(procMode, majorVer, minorVer, piSymbol)\
59  {#piSymbol, 0, 0, XrdVERSIONPLUGIN_##procMode, majorVer, minorVer},
60 
61 /* Each rule must be defined by the XrdVERSIONPLUGIN_Rule macro which takes four
62  arguments, as follows:
63 
64  procMode: Version procsessing mode:
65  DoNotChk -> Skip version check as it's already been done by a
66  previous getPlugin() call for a library symbol.
67  Optional -> Version check is optional, do it if version information
68  present but warn if it is missing.
69  Required -> Version check required; plugin must define a version
70  number and issue error message if it is missing.
71 
72  majorVer: The required major version number. It is checked as follows:
73  < 0: major version numbers must be identical.
74  >= 0: is the lowest valid major version number allowed.
75 
76  minorVer: The required minor version number, It is check as follows:
77  < 0: Do not check the minor version number, it's immaterial.
78  >= 0: the lowest valid minor version for the major number allowed.
79 
80  piSymbol: The plugin's object creator's unquoted function name. When this
81  symbol is looked-up, the defined version rule is applied.
82 
83  Note: a plugin may not have a major.minor version number greater than the
84  program's major.minor version number unless either one is unreleased.
85  Unreleased versions can use any version. However, a message is issued.
86 */
87 #define XrdVERSIONPLUGINRULES \
88  XrdVERSIONPLUGIN_Rule(Required, 5, 0, SecEntityPin )\
89  XrdVERSIONPLUGIN_Rule(Required, 4, 8, TcpMonPin )\
90  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdAccAuthorizeObject )\
91  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdAccAuthorizeObjAdd )\
92  XrdVERSIONPLUGIN_Rule(Optional, 5, 0, XrdBwmPolicyObject )\
93  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdCksAdd2 )\
94  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdCksCalcInit )\
95  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdCksInit )\
96  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdCmsGetClient )\
97  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdCmsgetVnId )\
98  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdCmsPerfMonitor )\
99  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdCryptosslFactoryObject )\
100  XrdVERSIONPLUGIN_Rule(Optional, 5, 0, XrdPfcGetDecision )\
101  XrdVERSIONPLUGIN_Rule(DoNotChk, 5, 0, XrdgetProtocol )\
102  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdgetProtocolPort )\
103  XrdVERSIONPLUGIN_Rule(Required, 4, 0, XrdHttpGetSecXtractor )\
104  XrdVERSIONPLUGIN_Rule(Required, 4, 8, XrdHttpGetExtHandler )\
105  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdSysLogPInit )\
106  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdOfsAddPrepare )\
107  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdOfsFSctl )\
108  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdOfsgetPrepare )\
109  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdOssGetStorageSystem )\
110  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdOssAddStorageSystem2 )\
111  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdOssGetStorageSystem2 )\
112  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdOssStatInfoInit )\
113  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdOssStatInfoInit2 )\
114  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdOucGetCache )\
115  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdOucGetCache2 )\
116  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdOucCacheCMInit )\
117  XrdVERSIONPLUGIN_Rule(Optional, 5, 0, XrdOucgetName2Name )\
118  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdSecGetProtocol )\
119  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdSecgetService )\
120  XrdVERSIONPLUGIN_Rule(Optional, 5, 0, XrdSecgsiAuthzFun )\
121  XrdVERSIONPLUGIN_Rule(DoNotChk, 5, 0, XrdSecgsiAuthzInit )\
122  XrdVERSIONPLUGIN_Rule(DoNotChk, 5, 0, XrdSecgsiAuthzKey )\
123  XrdVERSIONPLUGIN_Rule(Optional, 5, 0, XrdSecgsiGMAPFun )\
124  XrdVERSIONPLUGIN_Rule(Optional, 5, 0, XrdSecgsiVOMSFun )\
125  XrdVERSIONPLUGIN_Rule(DoNotChk, 5, 0, XrdSecgsiVOMSInit )\
126  XrdVERSIONPLUGIN_Rule(DoNotChk, 5, 0, XrdSecProtocolgsiInit )\
127  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdSecProtocolgsiObject )\
128  XrdVERSIONPLUGIN_Rule(DoNotChk, 5, 0, XrdSecProtocolkrb5Init )\
129  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdSecProtocolkrb5Object )\
130  XrdVERSIONPLUGIN_Rule(DoNotChk, 5, 0, XrdSecProtocolpwdInit )\
131  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdSecProtocolpwdObject )\
132  XrdVERSIONPLUGIN_Rule(DoNotChk, 5, 0, XrdSecProtocolsssInit )\
133  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdSecProtocolsssObject )\
134  XrdVERSIONPLUGIN_Rule(DoNotChk, 5, 0, XrdSecProtocolunixInit )\
135  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdSecProtocolunixObject )\
136  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdSfsGetFileSystem )\
137  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdSfsGetFileSystem2 )\
138  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdSysAddXAttrObject )\
139  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdSysGetXAttrObject )\
140  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdClGetMonitor )\
141  XrdVERSIONPLUGIN_Rule(Required, 5, 0, XrdClGetPlugIn )\
142  { 0, 0, 0, 0, 0, 0}
143 
144 #define XrdVERSIONPLUGIN_Maxim(procMode, majorVer, minorVer, piPfx, piSfx)\
145  {#piPfx #piSfx, static_cast<char>(strlen(#piPfx)),\
146  static_cast<char>(strlen(#piSfx)),\
147  XrdVERSIONPLUGIN_##procMode, majorVer, minorVer},
148 
149 /* Each generic rule must be defined by the XrdVERSIONPLUGIN_Maxim macro which
150  takes five arguments. The first three are exactly the same as defined for
151  XrdVERSIONPLUGIN_Rule. The last two define a pefix/suffix match for the
152  symbol being looked up, as follows:
153 
154  piPfx: The leading characters of the plugin's object creator's unquoted
155  function name. When this symbol is looked-up, the defined version
156  rule is applied if the suffix, if any, also matches.
157 
158  piSfx: The trailing characters of the plugin's object creator's unquoted
159  function name. When this symbol is looked-up, the defined version
160  rule is applied if the prefix, if any, also matches.
161 
162  Note: An attempt is made to match the symbol using specific rules defined
163  by XRDVERSIONPLUGIN_Rule before using any generic rules. If a match
164  is found the same processing as for specific rules is applied.
165 */
166 #define XrdVERSIONPLUGINMAXIMS\
167  XrdVERSIONPLUGIN_Maxim(DoNotChk, 4, 0, XrdSecProtocol, Init )\
168  XrdVERSIONPLUGIN_Maxim(Required, 4, 0, XrdSecProtocol, Object )\
169  XrdVERSIONPLUGIN_Maxim(Optional, 4, 0, XrdCrypto, FactoryObject)\
170  { 0, 0, 0, 0, 0, 0}
171 
172 /* The following defines the list of plugins that are included in the base
173  code and are to be strictly name versioned upon loading (i.e. fallback
174  to an unversioned name is not allowed). This is enforced by XrdOucVerName.
175 */
176 #define XrdVERSIONPLUGINSTRICT \
177  {"libXrdAccSciTokens.so", \
178  "libXrdBlacklistDecision.so", \
179  "libXrdBwm.so", \
180  "libXrdCksCalczcrc32.so", \
181  "libXrdClProxyPlugin.so", \
182  "libXrdCmsRedirectLocal.so", \
183  "libXrdCryptossl.so", \
184  "libXrdHttp.so", \
185  "libXrdHttpTPC.so", \
186  "libXrdMacaroons.so", \
187  "libXrdN2No2p.so", \
188  "libXrdOssSIgpfsT.so", \
189  "libXrdPfc.so", \
190  "libXrdPss.so", \
191  "libXrdSec.so", \
192  "libXrdSecgsi.so", \
193  "libXrdSecgsiAUTHZVO.so", \
194  "libXrdSecgsiGMAPDN.so", \
195  "libXrdSecgsiVOMS.so", \
196  "libXrdSeckrb5.so", \
197  "libXrdSecProt.so", \
198  "libXrdSecpwd.so", \
199  "libXrdSecsss.so", \
200  "libXrdSecunix.so", \
201  "libXrdSsi.so", \
202  "libXrdSsiLog.so", \
203  "libXrdThrottle.so", \
204  "libXrdVoms.so", \
205  "libXrdXrootd.so", \
206  0}
207 
208 // The XrdVersionMapD2P maps a directive to the associated plugin creator.
209 // When two or more such creators exist, the newest one should be used.
210 //
212  {const char *dName;
213  const char *pName;
214  };
215 
216 #define XrdVERSIONPLUGIN_Mapd(drctv, piSymbol)\
217  {#drctv, #piSymbol},
218 
219 #define XrdVERSIONPLUGINMAPD2P\
220  XrdVERSIONPLUGIN_Mapd(ofs.authlib, XrdAccAuthorizeObject )\
221  XrdVERSIONPLUGIN_Mapd(bwm.policy, XrdBwmPolicyObject )\
222  XrdVERSIONPLUGIN_Mapd(ofs.ckslib, XrdCksInit )\
223  XrdVERSIONPLUGIN_Mapd(ofs.cmslib, XrdCmsGetClient )\
224  XrdVERSIONPLUGIN_Mapd(cms.vnid, XrdCmsgetVnId )\
225  XrdVERSIONPLUGIN_Mapd(cms.perf, XrdCmsPerfMonitor )\
226  XrdVERSIONPLUGIN_Mapd(pfc.decisionlib, XrdPfcGetDecision )\
227  XrdVERSIONPLUGIN_Mapd(xrd.protocol, XrdgetProtocol )\
228  XrdVERSIONPLUGIN_Mapd(http.secxtractor, XrdHttpGetSecXtractor )\
229  XrdVERSIONPLUGIN_Mapd(http.exthandler, XrdHttpGetExtHandler )\
230  XrdVERSIONPLUGIN_Mapd(@logging, XrdSysLogPInit )\
231  XrdVERSIONPLUGIN_Mapd(ofs.ctllib, XrdOfsFSctl )\
232  XrdVERSIONPLUGIN_Mapd(ofs.preplib, XrdOfsgetPrepare )\
233  XrdVERSIONPLUGIN_Mapd(ofs.osslib, XrdOssGetStorageSystem2 )\
234  XrdVERSIONPLUGIN_Mapd(oss.statlib, XrdOssStatInfoInit2 )\
235  XrdVERSIONPLUGIN_Mapd(pss.cachelib, XrdOucGetCache2 )\
236  XrdVERSIONPLUGIN_Mapd(pss.ccmlib, XrdOucCacheCMInit )\
237  XrdVERSIONPLUGIN_Mapd(oss.namelib, XrdOucgetName2Name )\
238  XrdVERSIONPLUGIN_Mapd(sec.protocol, XrdSecGetProtocol )\
239  XrdVERSIONPLUGIN_Mapd(xrootd.seclib, XrdSecgetService )\
240  XrdVERSIONPLUGIN_Mapd(gsi-authzfun, XrdSecgsiAuthzFun )\
241  XrdVERSIONPLUGIN_Mapd(gsi-gmapfun, XrdSecgsiGMAPFun )\
242  XrdVERSIONPLUGIN_Mapd(gsi-vomsfun, XrdSecgsiVOMSFun )\
243  XrdVERSIONPLUGIN_Mapd(sec.protocol-gsi, XrdSecProtocolgsiObject )\
244  XrdVERSIONPLUGIN_Mapd(sec.protocol-krb5,XrdSecProtocolkrb5Object )\
245  XrdVERSIONPLUGIN_Mapd(sec.protocol-pwd, XrdSecProtocolpwdObject )\
246  XrdVERSIONPLUGIN_Mapd(sec.protocol-sss, XrdSecProtocolsssObject )\
247  XrdVERSIONPLUGIN_Mapd(sec.protocol-unix,XrdSecProtocolunixObject )\
248  XrdVERSIONPLUGIN_Mapd(xrootd.fslib, XrdSfsGetFileSystem2 )\
249  XrdVERSIONPLUGIN_Mapd(ofs.xattrlib, XrdSysGetXAttrObject )\
250  XrdVERSIONPLUGIN_Mapd(xrdcl.monitor, XrdClGetMonitor )\
251  XrdVERSIONPLUGIN_Mapd(xrdcl.plugin, XrdClGetPlugIn )\
252  { 0, 0}
253 #endif
char vSfxLen
Generic rule suffix length for preceding.
Definition: XrdVersionPlugin.hh:40
char vPfxLen
Generic rule prefix length.
Definition: XrdVersionPlugin.hh:39
short vMinLow
Lowest compatible minor (&lt; 0 don&#39;t check).
Definition: XrdVersionPlugin.hh:43
short vMajLow
Lowest compatible major version number.
Definition: XrdVersionPlugin.hh:42
const char * pName
-&gt; plugin object creator function name
Definition: XrdVersionPlugin.hh:38
Definition: XrdVersionPlugin.hh:211
Definition: XrdVersionPlugin.hh:37
const char * pName
-&gt; plugin object creator function name
Definition: XrdVersionPlugin.hh:213
int vProcess
version: &lt;0 skip, =0 optional, &gt;0 required
Definition: XrdVersionPlugin.hh:41
const char * dName
-&gt; plugin directive name
Definition: XrdVersionPlugin.hh:212