XRootD
Loading...
Searching...
No Matches
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()

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}