CernVM-FS  2.13.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
authz_fetch.h
Go to the documentation of this file.
1 
5 #ifndef CVMFS_AUTHZ_AUTHZ_FETCH_H_
6 #define CVMFS_AUTHZ_AUTHZ_FETCH_H_
7 
8 #include <inttypes.h>
9 #include <pthread.h>
10 #include <unistd.h>
11 
12 #include <string>
13 
14 #include "authz/authz.h"
15 #include "gtest/gtest_prod.h"
16 #include "json_document.h"
17 #include "util/single_copy.h"
18 
19 class OptionsManager;
20 
21 class AuthzFetcher {
22  public:
23  struct QueryInfo {
24  QueryInfo(pid_t p, uid_t u, gid_t g, const std::string &m)
25  : pid(p), uid(u), gid(g), membership(m) { }
26  pid_t pid;
27  uid_t uid;
28  gid_t gid;
29  std::string membership;
30  };
31 
32  virtual ~AuthzFetcher() { }
33 
38  virtual AuthzStatus Fetch(const QueryInfo &query_info,
39  AuthzToken *authz_token,
40  unsigned *ttl) = 0;
41 };
42 
43 
48  public:
49  AuthzStaticFetcher(AuthzStatus s, unsigned ttl) : status_(s), ttl_(ttl) { }
50  virtual ~AuthzStaticFetcher() { }
51  virtual AuthzStatus Fetch(const QueryInfo &query_info,
52  AuthzToken *authz_token,
53  unsigned *ttl) {
54  *authz_token = AuthzToken();
55  *ttl = ttl_;
56  return status_;
57  }
58 
59  private:
61  unsigned ttl_;
62 };
63 
64 
75 };
76 
77 
85  struct {
88  uint32_t ttl;
89  } permit;
90 };
91 
92 
101  FRIEND_TEST(T_AuthzFetch, ExecHelper);
102  FRIEND_TEST(T_AuthzFetch, ExecHelperSlow);
103  FRIEND_TEST(T_AuthzFetch, ParseMsg);
104  FRIEND_TEST(T_AuthzFetch, Handshake);
105 
106  public:
111  static const uint32_t kProtocolVersion; // = 1;
112 
113  AuthzExternalFetcher(const std::string &fqrn,
114  const std::string &progname,
115  const std::string &search_path,
116  OptionsManager *options_manager);
117  AuthzExternalFetcher(const std::string &fqrn, int fd_send, int fd_recv);
118  virtual ~AuthzExternalFetcher();
119 
120  virtual AuthzStatus Fetch(const QueryInfo &query_info,
121  AuthzToken *authz_token,
122  unsigned *ttl);
123 
124  private:
128  static const unsigned kChildTimeout = 5;
129 
133  static const int kMinTtl; // = 0
134 
138  static const unsigned kDefaultTtl = 120;
139 
140  void InitLock();
141  std::string FindHelper(const std::string &membership);
142  void ExecHelper();
143  bool Handshake();
144 
145  bool Send(const std::string &msg);
146  bool Recv(std::string *msg);
147  void EnterFailState();
148 
149  void StripAuthzSchema(const std::string &membership,
150  std::string *authz_schema,
151  std::string *pure_membership);
152  bool ParseMsg(const std::string &json_msg,
153  const AuthzExternalMsgIds expected_msgid,
154  AuthzExternalMsg *binary_msg);
155  bool ParseMsgId(JSON *json_authz, AuthzExternalMsg *binary_msg);
156  bool ParseRevision(JSON *json_authz, AuthzExternalMsg *binary_msg);
157  bool ParsePermit(JSON *json_authz, AuthzExternalMsg *binary_msg);
158 
159  void ReapHelper();
160 
164  std::string fqrn_;
165 
169  std::string progname_;
170 
174  std::string search_path_;
175 
179  int fd_send_;
180 
184  int fd_recv_;
185 
189  pid_t pid_;
190 
196 
201 
205  pthread_mutex_t lock_;
206 
211  uint64_t next_start_;
212 };
213 
214 #endif // CVMFS_AUTHZ_AUTHZ_FETCH_H_
AuthzExternalMsgIds msgid
Definition: authz_fetch.h:83
std::string search_path_
Definition: authz_fetch.h:174
AuthzExternalFetcher(const std::string &fqrn, const std::string &progname, const std::string &search_path, OptionsManager *options_manager)
QueryInfo(pid_t p, uid_t u, gid_t g, const std::string &m)
Definition: authz_fetch.h:24
std::string membership
Definition: authz_fetch.h:29
virtual AuthzStatus Fetch(const QueryInfo &query_info, AuthzToken *authz_token, unsigned *ttl)=0
static const unsigned kChildTimeout
Definition: authz_fetch.h:128
Helper: &quot;I verified, cvmfs, here&#39;s the result&quot;.
Definition: authz_fetch.h:72
void StripAuthzSchema(const std::string &membership, std::string *authz_schema, std::string *pure_membership)
Definition: authz_fetch.cc:585
pthread_mutex_t lock_
Definition: authz_fetch.h:205
bool ParseMsgId(JSON *json_authz, AuthzExternalMsg *binary_msg)
Definition: authz_fetch.cc:403
virtual ~AuthzFetcher()
Definition: authz_fetch.h:32
static const uint32_t kProtocolVersion
Definition: authz_fetch.h:111
Helper: &quot;Yes, cvmfs, I&#39;m here&quot;.
Definition: authz_fetch.h:70
std::string progname_
Definition: authz_fetch.h:169
AuthzToken token
Definition: authz_fetch.h:87
OptionsManager * options_manager_
Definition: authz_fetch.h:200
bool ParsePermit(JSON *json_authz, AuthzExternalMsg *binary_msg)
Definition: authz_fetch.cc:433
bool Recv(std::string *msg)
Definition: authz_fetch.cc:544
virtual ~AuthzStaticFetcher()
Definition: authz_fetch.h:50
virtual AuthzStatus Fetch(const QueryInfo &query_info, AuthzToken *authz_token, unsigned *ttl)
Definition: authz_fetch.h:51
std::string FindHelper(const std::string &membership)
Definition: authz_fetch.cc:270
Cvmfs: &quot;Please verify, helper&quot;.
Definition: authz_fetch.h:71
AuthzStatus status
Definition: authz_fetch.h:86
struct AuthzExternalMsg::@0 permit
bool ParseRevision(JSON *json_authz, AuthzExternalMsg *binary_msg)
Definition: authz_fetch.cc:519
virtual ~AuthzExternalFetcher()
Definition: authz_fetch.cc:67
static const int kMinTtl
Definition: authz_fetch.h:133
virtual AuthzStatus Fetch(const QueryInfo &query_info, AuthzToken *authz_token, unsigned *ttl)
Definition: authz_fetch.cc:215
bool ParseMsg(const std::string &json_msg, const AuthzExternalMsgIds expected_msgid, AuthzExternalMsg *binary_msg)
Definition: authz_fetch.cc:360
bool Send(const std::string &msg)
Definition: authz_fetch.cc:326
Cvmfs: &quot;Hello, helper, are you there?&quot;.
Definition: authz_fetch.h:69
Cvmfs: &quot;Please shutdown, helper&quot;.
Definition: authz_fetch.h:73
AuthzStaticFetcher(AuthzStatus s, unsigned ttl)
Definition: authz_fetch.h:49
FRIEND_TEST(T_AuthzFetch, ExecHelper)
AuthzExternalMsgIds
Definition: authz_fetch.h:68
static const unsigned kDefaultTtl
Definition: authz_fetch.h:138
First invalid message id.
Definition: authz_fetch.h:74
struct json_value JSON
Definition: helper_allow.cc:11
AuthzStatus
Definition: authz.h:38
AuthzStatus status_
Definition: authz_fetch.h:60