XRootD
Loading...
Searching...
No Matches
XrdSciTokensAccess.cc File Reference
#include "XrdAcc/XrdAccAuthorize.hh"
#include "XrdOuc/XrdOucEnv.hh"
#include "XrdOuc/XrdOucGatherConf.hh"
#include "XrdOuc/XrdOucPrivateUtils.hh"
#include "XrdSec/XrdSecEntity.hh"
#include "XrdSec/XrdSecEntityAttr.hh"
#include "XrdSys/XrdSysLogger.hh"
#include "XrdTls/XrdTlsContext.hh"
#include "XrdVersion.hh"
#include <cctype>
#include <ctime>
#include <map>
#include <memory>
#include <mutex>
#include <string>
#include <vector>
#include <sstream>
#include <fstream>
#include <unordered_map>
#include <tuple>
#include <cstdlib>
#include "INIReader.h"
#include "picojson.h"
#include "scitokens/scitokens.h"
#include "XrdSciTokens/XrdSciTokensAccess.hh"
#include "XrdSciTokens/XrdSciTokensHelper.hh"
#include "XrdSciTokens/XrdSciTokensMon.hh"
+ Include dependency graph for XrdSciTokensAccess.cc:

Go to the source code of this file.

Classes

class  XrdAccSciTokens
 

Functions

bool AuthorizesRequiredIssuers (Access_Operation client_oper, const std::string_view &path, const std::vector< std::pair< std::unique_ptr< SubpathMatch >, std::string > > &required_issuers, const std::vector< std::shared_ptr< XrdAccRules > > &access_rules_list)
 
void InitAccSciTokens (XrdSysLogger *lp, const char *cfn, const char *parm, XrdAccAuthorize *accP, XrdOucEnv *envP)
 
XrdAccAuthorizeXrdAccAuthorizeObjAdd (XrdSysLogger *lp, const char *cfn, const char *parm, XrdOucEnv *envP, XrdAccAuthorize *accP)
 
XrdAccAuthorizeXrdAccAuthorizeObject (XrdSysLogger *lp, const char *cfn, const char *parm)
 
XrdAccAuthorizeXrdAccAuthorizeObject2 (XrdSysLogger *lp, const char *cfn, const char *parm, XrdOucEnv *envP)
 
 XrdVERSIONINFO (XrdAccAuthorizeObjAdd, XrdAccSciTokens)
 
 XrdVERSIONINFO (XrdAccAuthorizeObject, XrdAccSciTokens)
 

Variables

XrdAccSciTokensaccSciTokens = nullptr
 
XrdSciTokensHelperSciTokensHelper = nullptr
 

Function Documentation

◆ AuthorizesRequiredIssuers()

bool AuthorizesRequiredIssuers ( Access_Operation client_oper,
const std::string_view & path,
const std::vector< std::pair< std::unique_ptr< SubpathMatch >, std::string > > & required_issuers,
const std::vector< std::shared_ptr< XrdAccRules > > & access_rules_list )

Definition at line 392 of file XrdSciTokensAccess.cc.

395{
396
397 // Translate the client-attempted operation to one of the simpler operations we've defined.
398 Access_Operation oper;
399 switch (client_oper) {
400 case AOP_Any:
401 return false; // Invalid request
402 break;
403 case AOP_Chmod: [[fallthrough]];
404 case AOP_Chown: [[fallthrough]];
405 case AOP_Create: [[fallthrough]];
406 case AOP_Excl_Create: [[fallthrough]];
407 case AOP_Delete: [[fallthrough]];
408 case AOP_Excl_Insert: [[fallthrough]];
409 case AOP_Insert: [[fallthrough]];
410 case AOP_Lock:
411 oper = AOP_Create;
412 break;
413 case AOP_Mkdir:
414 oper = AOP_Mkdir;
415 break;
416 case AOP_Read:
417 oper = AOP_Read;
418 break;
419 case AOP_Readdir:
420 oper = AOP_Readdir;
421 break;
422 case AOP_Rename:
423 oper = AOP_Create;
424 break;
425 case AOP_Stat:
426 oper = AOP_Stat;
427 break;
428 case AOP_Update:
429 oper = AOP_Update;
430 break;
431 default:
432 return false; // Invalid request
433 };
434
435 // Iterate through all the required issuers
436 for (const auto &info : required_issuers) {
437 // See if this issuer is required for this path/operation.
438 if (info.first->apply(oper, path)) {
439 bool has_authz = false;
440 // If so, see if one of the tokens (a) is from this issuer and (b) authorizes the request.
441 for (const auto &rules : access_rules_list) {
442 if (rules->get_issuer() == info.second && rules->apply(oper, path)) {
443 has_authz = true;
444 break;
445 }
446 }
447 if (!has_authz) {
448 return false;
449 }
450 }
451 }
452 return true;
453}
Access_Operation
The following are supported operations.
@ AOP_Delete
rm() or rmdir()
@ AOP_Mkdir
mkdir()
@ AOP_Update
open() r/w or append
@ AOP_Create
open() with create
@ AOP_Readdir
opendir()
@ AOP_Chmod
chmod()
@ AOP_Any
Special for getting privs.
@ AOP_Stat
exists(), stat()
@ AOP_Rename
mv() for source
@ AOP_Read
open() r/o, prepare()
@ AOP_Excl_Create
open() with O_EXCL|O_CREAT
@ AOP_Insert
mv() for target
@ AOP_Lock
n/a
@ AOP_Chown
chown()
@ AOP_Excl_Insert
mv() where destination doesn't exist.

References AOP_Any, AOP_Chmod, AOP_Chown, AOP_Create, AOP_Delete, AOP_Excl_Create, AOP_Excl_Insert, AOP_Insert, AOP_Lock, AOP_Mkdir, AOP_Read, AOP_Readdir, AOP_Rename, AOP_Stat, and AOP_Update.

Referenced by XrdAccSciTokens::Access().

+ Here is the caller graph for this function:

◆ InitAccSciTokens()

void InitAccSciTokens ( XrdSysLogger * lp,
const char * cfn,
const char * parm,
XrdAccAuthorize * accP,
XrdOucEnv * envP )

Definition at line 1530 of file XrdSciTokensAccess.cc.

1532{
1533 try {
1534 accSciTokens = new XrdAccSciTokens(lp, parm, accP, envP);
1536 } catch (std::exception &) {
1537 }
1538}
XrdSciTokensHelper * SciTokensHelper
XrdAccSciTokens * accSciTokens

References accSciTokens, and SciTokensHelper.

Referenced by XrdAccAuthorizeObjAdd(), XrdAccAuthorizeObject(), and XrdAccAuthorizeObject2().

+ Here is the caller graph for this function:

◆ XrdAccAuthorizeObjAdd()

XrdAccAuthorize * XrdAccAuthorizeObjAdd ( XrdSysLogger * lp,
const char * cfn,
const char * parm,
XrdOucEnv * envP,
XrdAccAuthorize * accP )

Definition at line 1542 of file XrdSciTokensAccess.cc.

1547{
1548 // Record the parent authorization plugin. There is no need to use
1549 // unique_ptr as all of this happens once in the main and only thread.
1550 //
1551
1552 // If we have been initialized by a previous load, them return that result.
1553 // Otherwise, it's the first time through, get a new SciTokens authorizer.
1554 //
1555 if (!accSciTokens) InitAccSciTokens(lp, cfn, parm, accP, envP);
1556 return accSciTokens;
1557}
void InitAccSciTokens(XrdSysLogger *lp, const char *cfn, const char *parm, XrdAccAuthorize *accP, XrdOucEnv *envP)

References accSciTokens, and InitAccSciTokens().

+ Here is the call graph for this function:

◆ XrdAccAuthorizeObject()

XrdAccAuthorize * XrdAccAuthorizeObject ( XrdSysLogger * lp,
const char * cfn,
const char * parm )

Definition at line 1559 of file XrdSciTokensAccess.cc.

1562{
1563 InitAccSciTokens(lp, cfn, parm, nullptr, nullptr);
1564 return accSciTokens;
1565}

References accSciTokens, and InitAccSciTokens().

+ Here is the call graph for this function:

◆ XrdAccAuthorizeObject2()

XrdAccAuthorize * XrdAccAuthorizeObject2 ( XrdSysLogger * lp,
const char * cfn,
const char * parm,
XrdOucEnv * envP )

Definition at line 1567 of file XrdSciTokensAccess.cc.

1571{
1572 InitAccSciTokens(lp, cfn, parm, nullptr, envP);
1573 return accSciTokens;
1574}

References accSciTokens, and InitAccSciTokens().

+ Here is the call graph for this function:

◆ XrdVERSIONINFO() [1/2]

XrdVERSIONINFO ( XrdAccAuthorizeObjAdd ,
XrdAccSciTokens  )

References XrdAccAuthorizeObjAdd().

+ Here is the call graph for this function:

◆ XrdVERSIONINFO() [2/2]

XrdVERSIONINFO ( XrdAccAuthorizeObject ,
XrdAccSciTokens  )

References XrdAccAuthorizeObject().

+ Here is the call graph for this function:

Variable Documentation

◆ accSciTokens

◆ SciTokensHelper

XrdSciTokensHelper* SciTokensHelper = nullptr

Definition at line 38 of file XrdSciTokensAccess.cc.