XRootD
XrdMacaroonsHandler.cc File Reference
#include <cstring>
#include <string>
#include <iostream>
#include <sstream>
#include <uuid/uuid.h>
#include "json.h"
#include "macaroons.h"
#include "XrdAcc/XrdAccPrivs.hh"
#include "XrdAcc/XrdAccAuthorize.hh"
#include "XrdSys/XrdSysError.hh"
#include "XrdSec/XrdSecEntity.hh"
#include "XrdMacaroonsHandler.hh"
#include "XrdOuc/XrdOucTUtils.hh"
+ Include dependency graph for XrdMacaroonsHandler.cc:

Go to the source code of this file.

Functions

static ssize_t determine_validity (const std::string &input)
 
char * unquote (const char *str)
 

Function Documentation

◆ determine_validity()

static ssize_t determine_validity ( const std::string &  input)
static

Definition at line 79 of file XrdMacaroonsHandler.cc.

80 {
81  ssize_t duration = 0;
82  if (input.find("PT") != 0)
83  {
84  return -1;
85  }
86  size_t pos = 2;
87  std::string remaining = input;
88  do
89  {
90  remaining = remaining.substr(pos);
91  if (remaining.size() == 0) break;
92  long cur_duration;
93  try
94  {
95  cur_duration = stol(remaining, &pos);
96  } catch (...)
97  {
98  return -1;
99  }
100  if (pos >= remaining.size())
101  {
102  return -1;
103  }
104  char unit = remaining[pos];
105  switch (unit) {
106  case 'S':
107  break;
108  case 'M':
109  cur_duration *= 60;
110  break;
111  case 'H':
112  cur_duration *= 3600;
113  break;
114  default:
115  return -1;
116  };
117  pos ++;
118  duration += cur_duration;
119  } while (1);
120  return duration;
121 }

Referenced by Macaroons::Handler::ProcessReq().

+ Here is the caller graph for this function:

◆ unquote()

char* unquote ( const char *  str)

Definition at line 23 of file XrdMacaroonsHandler.cc.

23  {
24  int l = strlen(str);
25  char *r = (char *) malloc(l + 1);
26  r[0] = '\0';
27  int i, j = 0;
28 
29  for (i = 0; i < l; i++) {
30 
31  if (str[i] == '%') {
32  char savec[3];
33  if (l <= i + 3) {
34  free(r);
35  return NULL;
36  }
37  savec[0] = str[i + 1];
38  savec[1] = str[i + 2];
39  savec[2] = '\0';
40 
41  r[j] = strtol(savec, 0, 16);
42 
43  i += 2;
44  } else if (str[i] == '+') r[j] = ' ';
45  else r[j] = str[i];
46 
47  j++;
48  }
49 
50  r[j] = '\0';
51 
52  return r;
53 
54 }