xrootd
Loading...
Searching...
No Matches
XrdSecProtocolgsi.hh
Go to the documentation of this file.
1/******************************************************************************/
2/* */
3/* X r d S e c P r o t o c o l g s i . h h */
4/* */
5/* (c) 2005 G. Ganis / CERN */
6/* */
7/* This file is part of the XRootD software suite. */
8/* */
9/* XRootD is free software: you can redistribute it and/or modify it under */
10/* the terms of the GNU Lesser General Public License as published by the */
11/* Free Software Foundation, either version 3 of the License, or (at your */
12/* option) any later version. */
13/* */
14/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
15/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
16/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
17/* License for more details. */
18/* */
19/* You should have received a copy of the GNU Lesser General Public License */
20/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
21/* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
22/* */
23/* The copyright holder's institutional names and contributor's names may not */
24/* be used to endorse or promote products derived from this software without */
25/* specific prior written permission of the institution or contributor. */
26/* */
27/******************************************************************************/
28#include <ctime>
29#include <memory>
30
32
34#include "XrdOuc/XrdOucGMap.hh"
35#include "XrdOuc/XrdOucHash.hh"
38
40
43
44#include "XrdSut/XrdSutCache.hh"
45
47#include "XrdSut/XrdSutPFile.hh"
49#include "XrdSut/XrdSutRndm.hh"
50
55
57
58/******************************************************************************/
59/* D e f i n e s */
60/******************************************************************************/
61
64
65#define XrdSecPROTOIDENT "gsi"
66#define XrdSecPROTOIDLEN sizeof(XrdSecPROTOIDENT)
67#define XrdSecgsiVERSION 10600
68#define XrdSecNOIPCHK 0x0001
69#define XrdSecDEBUG 0x1000
70#define XrdCryptoMax 10
71
72#define kMAXBUFLEN 1024
73
74
75#define XrdSecgsiVersDHsigned 10400 // Version at which started signing
76 // of server DH parameters
77#define XrdSecgsiVersCertKey 10600 // Version at which started supporting
78 // authentication with cert/key only
79
80//
81// Message codes either returned by server or included in buffers
83 kgST_error = -1, // error occurred
84 kgST_ok = 0, // ok
85 kgST_more = 1 // need more info
86};
87
88// Client steps
91 kXGC_certreq = 1000, // 1000: request server certificate
92 kXGC_cert, // 1001: packet with (proxy) certificate
93 kXGC_sigpxy, // 1002: packet with signed proxy certificate
95};
96
97// Server steps
100 kXGS_init = 2000, // 2000: fake code used the first time
101 kXGS_cert, // 2001: packet with certificate
102 kXGS_pxyreq, // 2002: packet with proxy req to be signed
105
106// Handshake options
108 kOptsDlgPxy = 1, // 0x0001: Ask for a delegated proxy
109 kOptsFwdPxy = 2, // 0x0002: Forward local proxy
110 kOptsSigReq = 4, // 0x0004: Accept to sign delegated proxy
111 kOptsSrvReq = 8, // 0x0008: Server request for delegated proxy
112 kOptsPxFile = 16, // 0x0010: Save delegated proxies in file
113 kOptsDelChn = 32, // 0x0020: Delete chain
114 kOptsPxCred = 64, // 0x0040: Save delegated proxies as credentials
115 kOptsCreatePxy = 128, // 0x0080: Request a client proxy
116 kOptsDelPxy = 256 // 0x0100: Delete the proxy PxyChain
118
119// Error codes
149
150#define REL1(x) { if (x) delete x; }
151#define REL2(x,y) { if (x) delete x; if (y) delete y; }
152#define REL3(x,y,z) { if (x) delete x; if (y) delete y; if (z) delete z; }
153
154#define SafeDelete(x) { if (x) {delete x ; x = 0;} }
155#define SafeDelArray(x) { if (x) {delete [] x ; x = 0;} }
156#define SafeFree(x) { if (x) {free(x) ; x = 0;} }
157
158// External functions for generic mapping
159typedef char *(*XrdSecgsiGMAP_t)(const char *, int);
161typedef int (*XrdSecgsiAuthzInit_t)(const char *);
162typedef int (*XrdSecgsiAuthzKey_t)(XrdSecEntity &, char **);
163// VOMS extraction
166//
167// This a small class to set the relevant options in one go
168//
169class XrdOucGMap;
170class XrdOucTrace;
172public:
173 short debug; // [cs] debug flag
174 char mode; // [cs] 'c' or 's'
175 char *clist; // [s] list of crypto modules ["ssl" ]
176 char *certdir;// [cs] dir with CA info [/etc/grid-security/certificates]
177 char *crldir; // [cs] dir with CRL info [/etc/grid-security/certificates]
178 char *crlext; // [cs] extension of CRL files [.r0]
179 char *cert; // [s] server certificate [/etc/grid-security/root/rootcert.pem]
180 // [c] user certificate [$HOME/.globus/usercert.pem]
181 char *key; // [s] server private key [/etc/grid-security/root/rootkey.pem]
182 // [c] user private key [$HOME/.globus/userkey.pem]
183 char *cipher; // [s] list of ciphers [aes-128-cbc:bf-cbc:des-ede3-cbc]
184 char *md; // [s] list of MDs [sha256:md5]
185 int crl; // [cs] check level of CRL's [1]
186 int ca; // [cs] verification level of CA's [1]
187 int crlrefresh; // [cs] CRL refresh or expiration period in secs [1 day]
188 char *proxy; // [c] user proxy [/tmp/x509up_u<uid>]
189 char *valid; // [c] proxy validity [12:00]
190 int deplen; // [c] depth of signature path for proxies [0]
191 int bits; // [c] bits in PKI for proxies [512]
192 char *gridmap;// [s] gridmap file [/etc/grid-security/gridmap]
193 int gmapto; // [s] validity in secs of grid-map cache entries [600 s]
194 char *gmapfun;// [s] file with the function to map DN to usernames [0]
195 char *gmapfunparms;// [s] parameters for the function to map DN to usernames [0]
196 char *authzfun;// [s] file with the function to fill entities [0]
197 char *authzfunparms;// [s] parameters for the function to fill entities [0]
198 int authzcall; // [s] when to call authz function [1 -> always]
199 int authzto; // [s] validity in secs of authz cache entries [-1 => unlimited]
200 int ogmap; // [s] gridmap file checking option
201 int dlgpxy; // [c] explicitely ask the creation of a delegated proxy; default 0
202 // [s] ask client for proxies; default: do not accept delegated proxies
203 int sigpxy; // [c] accept delegated proxy requests
204 int createpxy; // [c] force client proxy authentications
205 char *srvnames;// [c] '|' separated list of allowed server names
206 char *exppxy; // [s] template for the exported file with proxies
207 int authzpxy; // [s] if 1 make proxy available in exported form in the 'endorsement'
208 // field of the XrdSecEntity object for use in XrdAcc
209 int vomsat; // [s] 0 do not look for; 1 extract if any
210 char *vomsfun;// [s] file with the function to fill VOMS [0]
211 char *vomsfunparms;// [s] parameters for the function to fill VOMS [0]
212 int moninfo; // [s] 0 do not look for; 1 use DN as default
213 int hashcomp; // [cs] 1 send hash names with both algorithms; 0 send only the default [1]
214
215 bool trustdns; // [cs] 'true' if DNS is trusted [true]
216 bool showDN; // [cs] 'true' display the dn
217
218 gsiOptions() { debug = -1; mode = 's'; clist = 0;
219 certdir = 0; crldir = 0; crlext = 0; cert = 0; key = 0;
220 cipher = 0; md = 0; ca = 1 ; crl = 1; crlrefresh = 86400;
221 proxy = 0; valid = 0; deplen = 0; bits = 512;
222 gridmap = 0; gmapto = 600;
223 gmapfun = 0; gmapfunparms = 0; authzfun = 0; authzfunparms = 0;
224 authzto = -1; authzcall = 1;
225 ogmap = 1; dlgpxy = 0; sigpxy = 1; srvnames = 0;
226 exppxy = 0; authzpxy = 0;
227 vomsat = 1; vomsfun = 0; vomsfunparms = 0; moninfo = 0;
228 hashcomp = 1; trustdns = true; showDN = false; createpxy = 1;}
229 virtual ~gsiOptions() { } // Cleanup inside XrdSecProtocolgsiInit
230 void Print(XrdOucTrace *t); // Print summary of gsi option status
231};
232
234class gsiHSVars;
235
236// From a proxy query
242
243// To query proxies
244typedef struct {
245 const char *cert;
246 const char *key;
247 const char *certdir;
248 const char *out;
249 const char *valid;
251 int bits;
253} ProxyIn_t;
254
255template<class T>
256class GSIStack {
257public:
258 void Add(T *t) {
259 char k[40]; snprintf(k, 40, "%p", t);
260 mtx.Lock();
261 if (!stack.Find(k)) stack.Add(k, t, 0, Hash_count); // We need an additional count
262 stack.Add(k, t, 0, Hash_count);
263 mtx.UnLock();
264 }
265 void Del(T *t) {
266 char k[40]; snprintf(k, 40, "%p", t);
267 mtx.Lock();
268 if (stack.Find(k)) stack.Del(k, Hash_count);
269 mtx.UnLock();
270 }
271private:
274};
275
276/******************************************************************************/
277/* X r d S e c P r o t o c o l g s i C l a s s */
278/******************************************************************************/
279
281{
282friend class gsiOptions;
283friend class gsiHSVars;
284public:
286 XrdSecParameters **parms,
287 XrdOucErrInfo *einfo=0);
288
290 XrdOucErrInfo *einfo=0);
291
292 XrdSecProtocolgsi(int opts, const char *hname, XrdNetAddrInfo &endPoint,
293 const char *parms = 0);
294 virtual ~XrdSecProtocolgsi() {} // Delete() does it all
295
296 // Initialization methods
297 static char *Init(gsiOptions o, XrdOucErrInfo *erp);
298
299 void Delete();
300
301 // Encrypt / Decrypt methods
302 int Encrypt(const char *inbuf, int inlen,
303 XrdSecBuffer **outbuf);
304 int Decrypt(const char *inbuf, int inlen,
305 XrdSecBuffer **outbuf);
306 // Sign / Verify methods
307 int Sign(const char *inbuf, int inlen,
308 XrdSecBuffer **outbuf);
309 int Verify(const char *inbuf, int inlen,
310 const char *sigbuf, int siglen);
311
312 // Export session key
313 int getKey(char *kbuf=0, int klen=0);
314 // Import a key
315 int setKey(char *kbuf, int klen);
316
317 // Enable tracing
319
320private:
322
323 // Static members initialized at startup
325 static String CAdir;
334 static int DepLength;
335 static int DefBits;
336 static int CACheck;
337 static int CRLCheck;
338 static int CRLDownload;
339 static int CRLRefresh;
342 static String DefMD;
345 static int GMAPOpt;
346 static bool GMAPuseDNname;
351 static int AuthzCertFmt;
353 static int PxyReqOpts;
354 static int AuthzPxyWhat;
355 static int AuthzPxyWhere;
356 static int AuthzAlways;
358 static int VOMSAttrOpt;
360 static int VOMSCertFmt;
361 static int MonInfoOpt;
362 static bool HashCompatibility;
363 static bool TrustDNS;
364 static bool ShowDN;
365 //
366 // Crypto related info
367 static int ncrypt; // Number of factories
368 static XrdCryptoFactory *cryptF[XrdCryptoMax]; // their hooks
369 static int cryptID[XrdCryptoMax]; // their IDs
370 static String cryptName[XrdCryptoMax]; // their names
371 static XrdCryptoCipher *refcip[XrdCryptoMax]; // ref for session ciphers
372 //
373 // Caches
374 static XrdSutCache cacheCA; // Info about trusted CA's
375 static XrdSutCache cacheCert; // Server certificates info cache
376 static XrdSutCache cachePxy; // Client proxies cache;
377 static XrdSutCache cacheGMAPFun; // Cache for entries mapped by GMAPFun
378 static XrdSutCache cacheAuthzFun; // Cache for entities filled by AuthzFun
379 //
380 // Services
381 static XrdOucGMap *servGMap; // Grid mapping service
382 //
383 // CA and CRL stacks
384 static GSIStack<XrdCryptoX509Chain> stackCA; // Stack of CA in use
385 static std::unique_ptr<GSIStack<XrdCryptoX509Crl>> stackCRL; // Stack of CRL in use
386 //
387 // GMAP control vars
388 static time_t lastGMAPCheck; // time of last check on GMAP
389 static XrdSysMutex mutexGMAP; // mutex to control GMAP reloads
390 //
391 // Running options / settings
392 static int Debug; // [CS] Debug level
393 static bool Server; // [CS] If server mode
394 static int TimeSkew; // [CS] Allowed skew in secs for time stamps
395 //
396 // for error logging and tracing
400
401 // Information local to this instance
403 XrdCryptoFactory *sessionCF; // Chosen crypto factory
404 XrdCryptoCipher *sessionKey; // Session Key (result of the handshake)
405 XrdSutBucket *bucketKey; // Bucket with the key in export form
406 XrdCryptoMsgDigest *sessionMD; // Message Digest instance
407 XrdCryptoRSA *sessionKsig; // RSA key to sign
408 XrdCryptoRSA *sessionKver; // RSA key to verify
409 X509Chain *proxyChain; // Chain with the delegated proxy on servers
410 bool srvMode; // TRUE if server mode
411 char *expectedHost; // Expected hostname if TrustDNS is enabled.
412 bool useIV; // Use a non-zeroed unique IV in cipher enc/dec operations
413
414 // Temporary Handshake local info
416
417 // Parsing received buffers: client
419 String &emsg);
421 String &cmsg);
423 String &cmsg);
425 String &cmsg);
426
427 // Parsing received buffers: server
429 String &cmsg);
431 String &cmsg);
433 String &cmsg);
435 String &cmsg);
436
437 // Auxilliary functions
438 int ParseCrypto(String cryptlist);
439 int ParseCAlist(String calist);
440
441 // Load CA certificates
442 static int GetCA(const char *cahash,
443 XrdCryptoFactory *cryptof, gsiHSVars *hs = 0);
444 static String GetCApath(const char *cahash);
445 static bool VerifyCA(int opt, X509Chain *cca, XrdCryptoFactory *cf);
447 XrdCryptoFactory *CF, int hashalg);
448 bool ServerCertNameOK(const char *subject, const char *hname, String &e);
451 time_t timestamp, String &cal);
452
453 // Load CRLs
454 static XrdCryptoX509Crl *LoadCRL(XrdCryptoX509 *xca, const char *sjhash,
455 XrdCryptoFactory *CF, int dwld, int &err);
456
457 // Updating proxies
458 static int QueryProxy(bool checkcache, XrdSutCache *cache, const char *tag,
459 XrdCryptoFactory *cf, time_t timestamp,
460 ProxyIn_t *pi, ProxyOut_t *po);
462 X509Chain *ch = 0, XrdCryptoRSA **key = 0);
463
464 // Error functions
465 static void ErrF(XrdOucErrInfo *einfo, kXR_int32 ecode,
466 const char *msg1, const char *msg2 = 0,
467 const char *msg3 = 0);
470 kXR_int32 ecode, const char *msg1 = 0,
471 const char *msg2 = 0, const char *msg3 = 0);
473 XrdSutBuffer *b2, XrdSutBuffer *b3,
474 kXR_int32 ecode, const char *msg1 = 0,
475 const char *msg2 = 0, const char *msg3 = 0);
476
477 // Check Time stamp
478 bool CheckTimeStamp(XrdSutBuffer *b, int skew, String &emsg);
479
480 // Check random challenge
481 bool CheckRtag(XrdSutBuffer *bm, String &emsg);
482
483 // Auxilliary methods
484 int AddSerialized(char opt, kXR_int32 step, String ID,
485 XrdSutBuffer *bls, XrdSutBuffer *buf,
486 kXR_int32 type, XrdCryptoCipher *cip);
487 // Grid map cache handling
488 static XrdSecgsiGMAP_t // Load alternative function for mapping
489 LoadGMAPFun(const char *plugin, const char *parms);
490 static XrdSecgsiAuthz_t // Load alternative function to fill XrdSecEntity
491 LoadAuthzFun(const char *plugin, const char *parms, int &fmt);
492 static XrdSecgsiVOMS_t // Load alternative function to extract VOMS
493 LoadVOMSFun(const char *plugin, const char *parms, int &fmt);
494 static void QueryGMAP(XrdCryptoX509Chain* chain, int now, String &name); //Lookup info for DN
495
496 // Entity handling
497 void CopyEntity(XrdSecEntity *in, XrdSecEntity *out, int *lout = 0);
499};
500
502public:
503 int Iter; // Iteration number
504 time_t TimeStamp; // Time of last call
505 String CryptoMod; // Crypto module in use
506 int RemVers; // Version run by remote counterpart
507 XrdCryptoCipher *Rcip; // Reference cipher
508 bool HasPad; // Whether padding is supported
509 XrdSutBucket *Cbck; // Bucket with the certificate in export form
510 String ID; // Handshake ID (dummy for clients)
511 XrdSutPFEntry *Cref; // Cache reference
512 XrdSutPFEntry *Pent; // Pointer to relevant file entry
513 X509Chain *Chain; // Chain to be eventually verified
514 XrdCryptoX509Crl *Crl; // Pointer to CRL, if required
515 X509Chain *PxyChain; // Proxy Chain on clients
516 bool RtagOK; // Rndm tag checked / not checked
517 bool Tty; // Terminal attached / not attached
518 int LastStep; // Step required at previous iteration
519 int Options; // Handshake options;
520 int HashAlg; // Hash algorithm of peer hash name;
521 XrdSutBuffer *Parms; // Buffer with server parms on first iteration
522
523 gsiHSVars() { Iter = 0; TimeStamp = -1; CryptoMod = "";
524 RemVers = -1; Rcip = 0; HasPad = 0;
525 Cbck = 0;
526 ID = ""; Cref = 0; Pent = 0; Chain = 0; Crl = 0; PxyChain = 0;
527 RtagOK = 0; Tty = 0; LastStep = 0; Options = 0; HashAlg = 0; Parms = 0;}
528
530 if (Options & kOptsDelChn) {
531 // Do not delete the CA certificate in the cached reference
532 if (Chain) Chain->Cleanup(1);
534 }
535 // Make sure XrdSecProtocolgsi::stackCRL exists, it could happen
536 // that it has been deallocated due to static deinitialization
537 // order fiasco
538 if (Crl && bool( XrdSecProtocolgsi::stackCRL ) ) {
539 // This decreases the counter and actually deletes the object only
540 // when no instance is using it
542 Crl = 0;
543 }
544 if (Options & kOptsDelPxy) {
545 if (PxyChain) PxyChain->Cleanup();
547 } else {
548 // The proxy chain is owned by the proxy cache; invalid proxies
549 // are detected (and eventually removed) by QueryProxy
550 PxyChain = 0;
551 }
552 SafeDelete(Parms); }
554};
int kXR_int32
Definition XPtypes.hh:89
@ Hash_count
Definition XrdOucHash.hh:54
kgsiHandshakeOpts
Definition XrdSecProtocolgsi.hh:107
@ kOptsDelChn
Definition XrdSecProtocolgsi.hh:113
@ kOptsDelPxy
Definition XrdSecProtocolgsi.hh:116
@ kOptsSigReq
Definition XrdSecProtocolgsi.hh:110
@ kOptsFwdPxy
Definition XrdSecProtocolgsi.hh:109
@ kOptsPxCred
Definition XrdSecProtocolgsi.hh:114
@ kOptsSrvReq
Definition XrdSecProtocolgsi.hh:111
@ kOptsDlgPxy
Definition XrdSecProtocolgsi.hh:108
@ kOptsCreatePxy
Definition XrdSecProtocolgsi.hh:115
@ kOptsPxFile
Definition XrdSecProtocolgsi.hh:112
#define SafeDelete(x)
Definition XrdSecProtocolgsi.hh:154
int(* XrdSecgsiAuthz_t)(XrdSecEntity &)
Definition XrdSecProtocolgsi.hh:160
XrdCryptogsiX509Chain X509Chain
Definition XrdSecProtocolgsi.hh:63
kgsiServerSteps
Definition XrdSecProtocolgsi.hh:98
@ kXGS_cert
Definition XrdSecProtocolgsi.hh:101
@ kXGS_none
Definition XrdSecProtocolgsi.hh:99
@ kXGS_pxyreq
Definition XrdSecProtocolgsi.hh:102
@ kXGS_init
Definition XrdSecProtocolgsi.hh:100
@ kXGS_reserved
Definition XrdSecProtocolgsi.hh:103
XrdSecgsiAuthz_t XrdSecgsiVOMS_t
Definition XrdSecProtocolgsi.hh:164
int(* XrdSecgsiAuthzKey_t)(XrdSecEntity &, char **)
Definition XrdSecProtocolgsi.hh:162
XrdOucString String
Definition XrdSecProtocolgsi.hh:62
kgsiStatus
Definition XrdSecProtocolgsi.hh:82
@ kgST_ok
Definition XrdSecProtocolgsi.hh:84
@ kgST_error
Definition XrdSecProtocolgsi.hh:83
@ kgST_more
Definition XrdSecProtocolgsi.hh:85
int(* XrdSecgsiAuthzInit_t)(const char *)
Definition XrdSecProtocolgsi.hh:161
#define XrdCryptoMax
Definition XrdSecProtocolgsi.hh:70
kgsiClientSteps
Definition XrdSecProtocolgsi.hh:89
@ kXGC_sigpxy
Definition XrdSecProtocolgsi.hh:93
@ kXGC_cert
Definition XrdSecProtocolgsi.hh:92
@ kXGC_reserved
Definition XrdSecProtocolgsi.hh:94
@ kXGC_none
Definition XrdSecProtocolgsi.hh:90
@ kXGC_certreq
Definition XrdSecProtocolgsi.hh:91
XrdSecgsiAuthzInit_t XrdSecgsiVOMSInit_t
Definition XrdSecProtocolgsi.hh:165
kgsiErrors
Definition XrdSecProtocolgsi.hh:120
@ kGSErrExportPuK
Definition XrdSecProtocolgsi.hh:130
@ kGSErrBadRndmTag
Definition XrdSecProtocolgsi.hh:132
@ kGSErrCreateBuffer
Definition XrdSecProtocolgsi.hh:127
@ kGSErrNoCipher
Definition XrdSecProtocolgsi.hh:134
@ kGSErrInit
Definition XrdSecProtocolgsi.hh:145
@ kGSErrFinCipher
Definition XrdSecProtocolgsi.hh:144
@ kGSErrParseBuffer
Definition XrdSecProtocolgsi.hh:121
@ kGSErrGenCipher
Definition XrdSecProtocolgsi.hh:129
@ kGSErrBadCreds
Definition XrdSecProtocolgsi.hh:146
@ kGSErrUnmarshal
Definition XrdSecProtocolgsi.hh:138
@ kGSErrRefCipher
Definition XrdSecProtocolgsi.hh:141
@ kGSErrBadProtocol
Definition XrdSecProtocolgsi.hh:124
@ kGSErrMarshal
Definition XrdSecProtocolgsi.hh:137
@ kGSErrNoPublic
Definition XrdSecProtocolgsi.hh:142
@ kGSErrSaveCreds
Definition XrdSecProtocolgsi.hh:139
@ kGSErrSerialBuffer
Definition XrdSecProtocolgsi.hh:128
@ kGSErrNoCreds
Definition XrdSecProtocolgsi.hh:135
@ kGSErrDecodeBuffer
Definition XrdSecProtocolgsi.hh:122
@ kGSErrLoadCrypto
Definition XrdSecProtocolgsi.hh:123
@ kGSErrEncRndmTag
Definition XrdSecProtocolgsi.hh:131
@ kGSErrDuplicateBucket
Definition XrdSecProtocolgsi.hh:126
@ kGSErrBadOpt
Definition XrdSecProtocolgsi.hh:136
@ kGSErrNoRndmTag
Definition XrdSecProtocolgsi.hh:133
@ kGSErrAddBucket
Definition XrdSecProtocolgsi.hh:143
@ kGSErrError
Definition XrdSecProtocolgsi.hh:147
@ kGSErrCreateBucket
Definition XrdSecProtocolgsi.hh:125
@ kGSErrNoBuffer
Definition XrdSecProtocolgsi.hh:140
char *(* XrdSecgsiGMAP_t)(const char *, int)
Definition XrdSecProtocolgsi.hh:159
Definition XrdSecProtocolgsi.hh:256
void Add(T *t)
Definition XrdSecProtocolgsi.hh:258
XrdSysMutex mtx
Definition XrdSecProtocolgsi.hh:272
void Del(T *t)
Definition XrdSecProtocolgsi.hh:265
XrdOucHash< T > stack
Definition XrdSecProtocolgsi.hh:273
Definition XrdCryptoCipher.hh:48
Definition XrdCryptoFactory.hh:122
Definition XrdCryptoMsgDigest.hh:47
Definition XrdCryptoRSA.hh:51
Definition XrdCryptoX509Chain.hh:80
void Cleanup(bool keepCA=0)
Definition XrdCryptoX509Crl.hh:49
Definition XrdCryptoX509.hh:51
Definition XrdCryptogsiX509Chain.hh:50
Definition XrdNetAddrInfo.hh:54
Definition XrdOucErrInfo.hh:101
Definition XrdOucGMap.hh:49
Definition XrdOucHash.hh:128
Definition XrdOucString.hh:254
Definition XrdOucTrace.hh:36
Definition XrdSecEntity.hh:65
Definition XrdSecInterface.hh:131
Definition XrdSecProtocolgsi.hh:281
static GSIStack< XrdCryptoX509Chain > stackCA
Definition XrdSecProtocolgsi.hh:384
int Authenticate(XrdSecCredentials *cred, XrdSecParameters **parms, XrdOucErrInfo *einfo=0)
static std::unique_ptr< GSIStack< XrdCryptoX509Crl > > stackCRL
Definition XrdSecProtocolgsi.hh:385
bool useIV
Definition XrdSecProtocolgsi.hh:412
int Verify(const char *inbuf, int inlen, const char *sigbuf, int siglen)
XrdSutBucket * bucketKey
Definition XrdSecProtocolgsi.hh:405
static XrdSecgsiGMAP_t LoadGMAPFun(const char *plugin, const char *parms)
virtual ~XrdSecProtocolgsi()
Definition XrdSecProtocolgsi.hh:294
static String SrvKey
Definition XrdSecProtocolgsi.hh:329
XrdCryptoFactory * sessionCF
Definition XrdSecProtocolgsi.hh:403
static String UsrCert
Definition XrdSecProtocolgsi.hh:331
static XrdSecgsiAuthz_t LoadAuthzFun(const char *plugin, const char *parms, int &fmt)
XrdSecProtocolgsi(int opts, const char *hname, XrdNetAddrInfo &endPoint, const char *parms=0)
X509Chain * proxyChain
Definition XrdSecProtocolgsi.hh:409
static int AuthzCertFmt
Definition XrdSecProtocolgsi.hh:351
static XrdSecgsiVOMS_t VOMSFun
Definition XrdSecProtocolgsi.hh:359
void FreeEntity(XrdSecEntity *in)
XrdSecCredentials * ErrC(XrdOucErrInfo *einfo, XrdSutBuffer *b1, XrdSutBuffer *b2, XrdSutBuffer *b3, kXR_int32 ecode, const char *msg1=0, const char *msg2=0, const char *msg3=0)
static int CRLDownload
Definition XrdSecProtocolgsi.hh:338
static XrdSecgsiVOMS_t LoadVOMSFun(const char *plugin, const char *parms, int &fmt)
static XrdSysLogger Logger
Definition XrdSecProtocolgsi.hh:397
int ServerDoCertreq(XrdSutBuffer *br, XrdSutBuffer **bm, String &cmsg)
static bool VerifyCA(int opt, X509Chain *cca, XrdCryptoFactory *cf)
bool ServerCertNameOK(const char *subject, const char *hname, String &e)
static XrdSecgsiAuthzKey_t AuthzKey
Definition XrdSecProtocolgsi.hh:350
int ParseServerInput(XrdSutBuffer *br, XrdSutBuffer **bm, String &cmsg)
static int PxyReqOpts
Definition XrdSecProtocolgsi.hh:353
static String DefError
Definition XrdSecProtocolgsi.hh:343
static XrdCryptoFactory * cryptF[XrdCryptoMax]
Definition XrdSecProtocolgsi.hh:368
static String DefMD
Definition XrdSecProtocolgsi.hh:342
static String PxyValid
Definition XrdSecProtocolgsi.hh:333
static XrdOucGMap * servGMap
Definition XrdSecProtocolgsi.hh:381
static String GetCApath(const char *cahash)
static String DefCRLext
Definition XrdSecProtocolgsi.hh:327
static int GMAPCacheTimeOut
Definition XrdSecProtocolgsi.hh:347
int ServerDoSigpxy(XrdSutBuffer *br, XrdSutBuffer **bm, String &cmsg)
static String UsrProxy
Definition XrdSecProtocolgsi.hh:330
static int ncrypt
Definition XrdSecProtocolgsi.hh:367
bool srvMode
Definition XrdSecProtocolgsi.hh:410
int AddSerialized(char opt, kXR_int32 step, String ID, XrdSutBuffer *bls, XrdSutBuffer *buf, kXR_int32 type, XrdCryptoCipher *cip)
bool CheckTimeStamp(XrdSutBuffer *b, int skew, String &emsg)
static XrdCryptoX509Crl * LoadCRL(XrdCryptoX509 *xca, const char *sjhash, XrdCryptoFactory *CF, int dwld, int &err)
static int VOMSAttrOpt
Definition XrdSecProtocolgsi.hh:358
static int AuthzPxyWhat
Definition XrdSecProtocolgsi.hh:354
int options
Definition XrdSecProtocolgsi.hh:402
static int GetCA(const char *cahash, XrdCryptoFactory *cryptof, gsiHSVars *hs=0)
static int QueryProxy(bool checkcache, XrdSutCache *cache, const char *tag, XrdCryptoFactory *cf, time_t timestamp, ProxyIn_t *pi, ProxyOut_t *po)
int Decrypt(const char *inbuf, int inlen, XrdSecBuffer **outbuf)
static String cryptName[XrdCryptoMax]
Definition XrdSecProtocolgsi.hh:370
static XrdSysMutex gsiContext
Definition XrdSecProtocolgsi.hh:324
static XrdSutCacheEntry * GetSrvCertEnt(XrdSutCERef &gcref, XrdCryptoFactory *cf, time_t timestamp, String &cal)
XrdNetAddrInfo epAddr
Definition XrdSecProtocolgsi.hh:321
int Encrypt(const char *inbuf, int inlen, XrdSecBuffer **outbuf)
static String GMAPFile
Definition XrdSecProtocolgsi.hh:344
static int Debug
Definition XrdSecProtocolgsi.hh:392
static bool HashCompatibility
Definition XrdSecProtocolgsi.hh:362
static int AuthzCacheTimeOut
Definition XrdSecProtocolgsi.hh:352
static int GMAPOpt
Definition XrdSecProtocolgsi.hh:345
XrdCryptoRSA * sessionKver
Definition XrdSecProtocolgsi.hh:408
static String UsrKey
Definition XrdSecProtocolgsi.hh:332
static String CRLdir
Definition XrdSecProtocolgsi.hh:326
XrdCryptoMsgDigest * sessionMD
Definition XrdSecProtocolgsi.hh:406
int ClientDoCert(XrdSutBuffer *br, XrdSutBuffer **bm, String &cmsg)
int ClientDoPxyreq(XrdSutBuffer *br, XrdSutBuffer **bm, String &cmsg)
static String SrvAllowedNames
Definition XrdSecProtocolgsi.hh:357
int ClientDoInit(XrdSutBuffer *br, XrdSutBuffer **bm, String &cmsg)
static char * Init(gsiOptions o, XrdOucErrInfo *erp)
void Delete()
Delete the protocol object. DO NOT use C++ delete() on this object.
static int cryptID[XrdCryptoMax]
Definition XrdSecProtocolgsi.hh:369
void CopyEntity(XrdSecEntity *in, XrdSecEntity *out, int *lout=0)
char * expectedHost
Definition XrdSecProtocolgsi.hh:411
gsiHSVars * hs
Definition XrdSecProtocolgsi.hh:415
static time_t lastGMAPCheck
Definition XrdSecProtocolgsi.hh:388
static int DepLength
Definition XrdSecProtocolgsi.hh:334
static bool TrustDNS
Definition XrdSecProtocolgsi.hh:363
static String CAdir
Definition XrdSecProtocolgsi.hh:325
static XrdSutCache cachePxy
Definition XrdSecProtocolgsi.hh:376
static XrdSutCache cacheAuthzFun
Definition XrdSecProtocolgsi.hh:378
static XrdSecgsiGMAP_t GMAPFun
Definition XrdSecProtocolgsi.hh:348
static int AuthzAlways
Definition XrdSecProtocolgsi.hh:356
XrdCryptoCipher * sessionKey
Definition XrdSecProtocolgsi.hh:404
static XrdOucTrace * EnableTracing()
static bool GMAPuseDNname
Definition XrdSecProtocolgsi.hh:346
XrdCryptoRSA * sessionKsig
Definition XrdSecProtocolgsi.hh:407
static int VOMSCertFmt
Definition XrdSecProtocolgsi.hh:360
XrdSecCredentials * getCredentials(XrdSecParameters *parm=0, XrdOucErrInfo *einfo=0)
static int AuthzPxyWhere
Definition XrdSecProtocolgsi.hh:355
static XrdSutCache cacheCA
Definition XrdSecProtocolgsi.hh:374
static XrdOucTrace * GSITrace
Definition XrdSecProtocolgsi.hh:399
static XrdSysMutex mutexGMAP
Definition XrdSecProtocolgsi.hh:389
static int CACheck
Definition XrdSecProtocolgsi.hh:336
int getKey(char *kbuf=0, int klen=0)
static String SrvCert
Definition XrdSecProtocolgsi.hh:328
static String DefCipher
Definition XrdSecProtocolgsi.hh:341
static XrdSysError eDest
Definition XrdSecProtocolgsi.hh:398
int ServerDoCert(XrdSutBuffer *br, XrdSutBuffer **bm, String &cmsg)
static bool Server
Definition XrdSecProtocolgsi.hh:393
static String DefCrypto
Definition XrdSecProtocolgsi.hh:340
static int MonInfoOpt
Definition XrdSecProtocolgsi.hh:361
static void ErrF(XrdOucErrInfo *einfo, kXR_int32 ecode, const char *msg1, const char *msg2=0, const char *msg3=0)
static XrdCryptoCipher * refcip[XrdCryptoMax]
Definition XrdSecProtocolgsi.hh:371
int ParseCrypto(String cryptlist)
static int DefBits
Definition XrdSecProtocolgsi.hh:335
int ParseCAlist(String calist)
static int InitProxy(ProxyIn_t *pi, XrdCryptoFactory *cf, X509Chain *ch=0, XrdCryptoRSA **key=0)
static void QueryGMAP(XrdCryptoX509Chain *chain, int now, String &name)
int Sign(const char *inbuf, int inlen, XrdSecBuffer **outbuf)
static XrdSutCache cacheCert
Definition XrdSecProtocolgsi.hh:375
int ErrS(String ID, XrdOucErrInfo *einfo, XrdSutBuffer *b1, XrdSutBuffer *b2, XrdSutBuffer *b3, kXR_int32 ecode, const char *msg1=0, const char *msg2=0, const char *msg3=0)
bool CheckRtag(XrdSutBuffer *bm, String &emsg)
static bool ShowDN
Definition XrdSecProtocolgsi.hh:364
static int CRLCheck
Definition XrdSecProtocolgsi.hh:337
int setKey(char *kbuf, int klen)
int ParseClientInput(XrdSutBuffer *br, XrdSutBuffer **bm, String &emsg)
static XrdSutCache cacheGMAPFun
Definition XrdSecProtocolgsi.hh:377
static XrdSecgsiAuthz_t AuthzFun
Definition XrdSecProtocolgsi.hh:349
static int VerifyCRL(XrdCryptoX509Crl *crl, XrdCryptoX509 *xca, XrdOucString crldir, XrdCryptoFactory *CF, int hashalg)
static int TimeSkew
Definition XrdSecProtocolgsi.hh:394
static int CRLRefresh
Definition XrdSecProtocolgsi.hh:339
Definition XrdSutBucket.hh:44
Definition XrdSutBuffer.hh:43
Definition XrdSutCacheEntry.hh:100
Definition XrdSutCacheEntry.hh:75
Definition XrdSutCache.hh:49
Definition XrdSutPFEntry.hh:78
Definition XrdSysError.hh:90
Definition XrdSysLogger.hh:53
Definition XrdSysPthread.hh:165
void Lock()
Definition XrdSysPthread.hh:222
void UnLock()
Definition XrdSysPthread.hh:224
Definition XrdSecProtocolgsi.hh:501
XrdSutPFEntry * Cref
Definition XrdSecProtocolgsi.hh:511
bool RtagOK
Definition XrdSecProtocolgsi.hh:516
bool Tty
Definition XrdSecProtocolgsi.hh:517
String CryptoMod
Definition XrdSecProtocolgsi.hh:505
bool HasPad
Definition XrdSecProtocolgsi.hh:508
X509Chain * PxyChain
Definition XrdSecProtocolgsi.hh:515
XrdCryptoX509Crl * Crl
Definition XrdSecProtocolgsi.hh:514
XrdSutBuffer * Parms
Definition XrdSecProtocolgsi.hh:521
int HashAlg
Definition XrdSecProtocolgsi.hh:520
String ID
Definition XrdSecProtocolgsi.hh:510
XrdSutBucket * Cbck
Definition XrdSecProtocolgsi.hh:509
gsiHSVars()
Definition XrdSecProtocolgsi.hh:523
void Dump(XrdSecProtocolgsi *p=0)
X509Chain * Chain
Definition XrdSecProtocolgsi.hh:513
int Options
Definition XrdSecProtocolgsi.hh:519
XrdSutPFEntry * Pent
Definition XrdSecProtocolgsi.hh:512
~gsiHSVars()
Definition XrdSecProtocolgsi.hh:529
time_t TimeStamp
Definition XrdSecProtocolgsi.hh:504
int LastStep
Definition XrdSecProtocolgsi.hh:518
int Iter
Definition XrdSecProtocolgsi.hh:503
int RemVers
Definition XrdSecProtocolgsi.hh:506
XrdCryptoCipher * Rcip
Definition XrdSecProtocolgsi.hh:507
Definition XrdSecProtocolgsi.hh:171
int authzto
Definition XrdSecProtocolgsi.hh:199
char * authzfun
Definition XrdSecProtocolgsi.hh:196
char mode
Definition XrdSecProtocolgsi.hh:174
char * cert
Definition XrdSecProtocolgsi.hh:179
int moninfo
Definition XrdSecProtocolgsi.hh:212
char * valid
Definition XrdSecProtocolgsi.hh:189
char * crldir
Definition XrdSecProtocolgsi.hh:177
char * gmapfun
Definition XrdSecProtocolgsi.hh:194
char * proxy
Definition XrdSecProtocolgsi.hh:188
char * crlext
Definition XrdSecProtocolgsi.hh:178
char * cipher
Definition XrdSecProtocolgsi.hh:183
bool showDN
Definition XrdSecProtocolgsi.hh:216
virtual ~gsiOptions()
Definition XrdSecProtocolgsi.hh:229
char * vomsfunparms
Definition XrdSecProtocolgsi.hh:211
char * key
Definition XrdSecProtocolgsi.hh:181
int deplen
Definition XrdSecProtocolgsi.hh:190
char * certdir
Definition XrdSecProtocolgsi.hh:176
char * authzfunparms
Definition XrdSecProtocolgsi.hh:197
int createpxy
Definition XrdSecProtocolgsi.hh:204
char * srvnames
Definition XrdSecProtocolgsi.hh:205
char * exppxy
Definition XrdSecProtocolgsi.hh:206
int crl
Definition XrdSecProtocolgsi.hh:185
int ogmap
Definition XrdSecProtocolgsi.hh:200
int vomsat
Definition XrdSecProtocolgsi.hh:209
bool trustdns
Definition XrdSecProtocolgsi.hh:215
int authzcall
Definition XrdSecProtocolgsi.hh:198
char * gridmap
Definition XrdSecProtocolgsi.hh:192
char * md
Definition XrdSecProtocolgsi.hh:184
int hashcomp
Definition XrdSecProtocolgsi.hh:213
int authzpxy
Definition XrdSecProtocolgsi.hh:207
short debug
Definition XrdSecProtocolgsi.hh:173
gsiOptions()
Definition XrdSecProtocolgsi.hh:218
int bits
Definition XrdSecProtocolgsi.hh:191
int gmapto
Definition XrdSecProtocolgsi.hh:193
char * vomsfun
Definition XrdSecProtocolgsi.hh:210
void Print(XrdOucTrace *t)
char * clist
Definition XrdSecProtocolgsi.hh:175
char * gmapfunparms
Definition XrdSecProtocolgsi.hh:195
int sigpxy
Definition XrdSecProtocolgsi.hh:203
int ca
Definition XrdSecProtocolgsi.hh:186
int crlrefresh
Definition XrdSecProtocolgsi.hh:187
int dlgpxy
Definition XrdSecProtocolgsi.hh:201
Definition XrdSecProtocolgsi.hh:244
int bits
Definition XrdSecProtocolgsi.hh:251
bool createpxy
Definition XrdSecProtocolgsi.hh:252
const char * valid
Definition XrdSecProtocolgsi.hh:249
const char * out
Definition XrdSecProtocolgsi.hh:248
int deplen
Definition XrdSecProtocolgsi.hh:250
const char * key
Definition XrdSecProtocolgsi.hh:246
const char * certdir
Definition XrdSecProtocolgsi.hh:247
const char * cert
Definition XrdSecProtocolgsi.hh:245
Definition XrdSecProtocolgsi.hh:237
XrdSutBucket * cbck
Definition XrdSecProtocolgsi.hh:240
XrdCryptoRSA * ksig
Definition XrdSecProtocolgsi.hh:239
X509Chain * chain
Definition XrdSecProtocolgsi.hh:238
Generic structure to pass security information back and forth.
Definition XrdSecInterface.hh:51