XRootD
XrdSciTokensAccess.hh File Reference
#include "XrdAcc/XrdAccAuthorize.hh"
#include "XrdOuc/XrdOucPrivateUtils.hh"
#include <memory>
#include <string>
#include <string_view>
#include <vector>
#include <string.h>
+ Include dependency graph for XrdSciTokensAccess.hh:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  MapRule
 
class  SubpathMatch
 
class  XrdAccRules
 

Typedefs

typedef std::vector< std::pair< Access_Operation, std::string > > AccessRulesRaw
 

Enumerations

enum class  AuthzSetting {
  None ,
  Read ,
  Write ,
  All
}
 
enum  IssuerAuthz {
  Capability = 0x01 ,
  Group = 0x02 ,
  Mapping = 0x04 ,
  Default = 0x07
}
 

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)
 

Typedef Documentation

◆ AccessRulesRaw

typedef std::vector<std::pair<Access_Operation, std::string> > AccessRulesRaw

Class and function definitions for the SciTokens plugin.

Definition at line 16 of file XrdSciTokensAccess.hh.

Enumeration Type Documentation

◆ AuthzSetting

enum AuthzSetting
strong
Enumerator
None 
Read 
Write 
All 

Definition at line 69 of file XrdSciTokensAccess.hh.

69  {
70  None, // Issuer's authorization is not necessary
71  Read, // Authorization from this issuer is necessary for reads.
72  Write, // Authorization from this issuer is necessary for writes.
73  All, // Authorization from this issuer is necessary for all operations.
74 };
ReadImpl< false > Read(Ctx< File > file, Arg< uint64_t > offset, Arg< uint32_t > size, Arg< void * > buffer, time_t timeout=0)
Factory for creating ReadImpl objects.
WriteImpl< false > Write(Ctx< File > file, Arg< uint64_t > offset, Arg< uint32_t > size, Arg< const void * > buffer, time_t timeout=0)
Factory for creating WriteImpl objects.

◆ IssuerAuthz

Enumerator
Capability 
Group 
Mapping 
Default 

Definition at line 80 of file XrdSciTokensAccess.hh.

80  {
81  Capability = 0x01,
82  Group = 0x02,
83  Mapping = 0x04,
84  Default = 0x07
85 };
@ Default
@ Capability
@ Mapping

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: