CernVM-FS  2.11.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
magic_xattr.h
Go to the documentation of this file.
1 
5 #ifndef CVMFS_MAGIC_XATTR_H_
6 #define CVMFS_MAGIC_XATTR_H_
7 
8 #include <map>
9 #include <set>
10 #include <string>
11 
12 #include "backoff.h"
13 #include "catalog_counters.h"
14 #include "directory_entry.h"
15 #include "shortstring.h"
16 #include "util/exception.h"
17 #include "util/string.h"
18 
19 class MountPoint;
20 
28 };
29 
30 class MagicXattrManager; // needed for BaseMagicXattr
44  friend class MagicXattrManager;
45  FRIEND_TEST(T_MagicXattr, ProtectedXattr);
46  FRIEND_TEST(T_MagicXattr, TestFqrn);
47  FRIEND_TEST(T_MagicXattr, TestLogBuffer);
48 
49  public:
51  int retval = pthread_mutex_init(&access_mutex_, NULL);
52  assert(retval == 0);
53  }
54 
59  void MarkProtected() {
60  is_protected_ = true;
61  }
62 
63 
64  // TODO(hereThereBeDragons) from C++11 should be marked final
68  bool PrepareValueFencedProtected(gid_t gid);
69 
77  virtual std::string GetValue() = 0;
79 
80  void Lock(PathString path, catalog::DirectoryEntry *dirent) {
81  int retval = pthread_mutex_lock(&access_mutex_);
82  assert(retval == 0);
83  path_ = path;
84  dirent_ = dirent;
85  }
86  void Release() {
87  int retval = pthread_mutex_unlock(&access_mutex_);
88  assert(retval == 0);
89  }
90 
91  virtual ~BaseMagicXattr() {}
92 
93  protected:
98  virtual bool PrepareValueFenced() { return true; }
99 
103 
104  pthread_mutex_t access_mutex_;
106 };
107 
113  public:
114  inline MagicXattrRAIIWrapper() : ptr_(NULL) { }
115 
116  inline explicit MagicXattrRAIIWrapper(
117  BaseMagicXattr *ptr,
118  PathString path,
120  : ptr_(ptr)
121  {
122  if (ptr_ != NULL) ptr_->Lock(path, d);
123  }
125  inline explicit MagicXattrRAIIWrapper(BaseMagicXattr *ptr) : ptr_(ptr) { }
126 
127  inline ~MagicXattrRAIIWrapper() { if (ptr_ != NULL) ptr_->Release(); }
128 
129  inline BaseMagicXattr* operator->() const { return ptr_; }
130  inline bool IsNull() const { return ptr_ == NULL; }
131  inline BaseMagicXattr* Move() {
132  BaseMagicXattr* ret = ptr_;
133  ptr_ = NULL;
134  return ret;
135  }
136 
137  protected:
139 };
140 
143 };
144 
147 };
148 
151 };
152 
155 };
156 
171  public:
173 
175  const std::set<std::string> &protected_xattrs,
176  const std::set<gid_t> &privileged_xattr_gids);
179  BaseMagicXattr* GetLocked(const std::string &name, PathString path,
181  std::string GetListString(catalog::DirectoryEntry *dirent);
186  void Register(const std::string &name, BaseMagicXattr *magic_xattr);
187 
195  bool IsPrivilegedGid(gid_t gid);
196 
197 
199  std::set<gid_t> privileged_xattr_gids()
200  { return privileged_xattr_gids_; }
202  bool is_frozen() const { return is_frozen_; }
203 
204  protected:
205  std::map<std::string, BaseMagicXattr *> xattr_list_;
208 
209  // privileged_xattr_gids_ contains the (fuse) gids that
210  // can access xattrs that are part of protected_xattrs_
211  const std::set<std::string> protected_xattrs_;
212  const std::set<gid_t> privileged_xattr_gids_;
213 
214  private:
216 
218 };
219 
221  virtual bool PrepareValueFenced();
222  virtual std::string GetValue();
224 };
225 
227  std::string subcatalog_path_;
230 
231  virtual bool PrepareValueFenced();
232  virtual std::string GetValue();
233 };
234 
236  std::string chunk_list_;
237 
238  virtual bool PrepareValueFenced();
239  virtual std::string GetValue();
240 };
241 
243  uint64_t n_chunks_;
244 
245  virtual bool PrepareValueFenced();
246  virtual std::string GetValue();
247 };
248 
250  virtual bool PrepareValueFenced();
251  virtual std::string GetValue();
252 };
253 
255  virtual bool PrepareValueFenced();
256  virtual std::string GetValue();
257 };
258 
260  virtual bool PrepareValueFenced();
261  virtual std::string GetValue();
262 };
263 
265  virtual std::string GetValue();
266 };
267 
269  virtual std::string GetValue();
270 };
271 
273  virtual std::string GetValue();
274 };
275 
277  virtual bool PrepareValueFenced();
278  virtual std::string GetValue();
279 };
280 
282  virtual std::string GetValue();
283 };
284 
286  virtual std::string GetValue();
287 };
288 
290  virtual bool PrepareValueFenced();
291  virtual std::string GetValue();
292 };
293 
295  public:
296  LogBufferXattr();
297 
298  private:
299  const unsigned int kMaxLogLine = 4096; // longer log lines are trimmed
300  // Generating the log buffer report involves 64 string copies. To mitigate
301  // memory fragmentation and performance loss, throttle the use of this
302  // attribute a little.
304 
305  virtual std::string GetValue();
306 };
307 
309  virtual std::string GetValue();
310 };
311 
314 
315  virtual bool PrepareValueFenced();
316  virtual std::string GetValue();
317 };
318 
320  virtual std::string GetValue();
321 };
322 
324  virtual std::string GetValue();
325 };
326 
328  virtual std::string GetValue();
329 };
330 
332  virtual std::string GetValue();
333 };
334 
336  virtual std::string GetValue();
337 };
338 
340  virtual std::string GetValue();
341 };
342 
344  virtual std::string GetValue();
345 };
346 
348  virtual std::string GetValue();
349 };
350 
352  std::string pubkeys_;
353 
354  virtual bool PrepareValueFenced();
355  virtual std::string GetValue();
356 };
357 
359  virtual bool PrepareValueFenced();
360  virtual std::string GetValue();
361 };
362 
365 
366  virtual bool PrepareValueFenced();
367  virtual std::string GetValue();
368 };
369 
371  static uint64_t kMaxMetainfoLength;
372 
374  std::string error_reason_;
375 
376  virtual bool PrepareValueFenced();
377  virtual std::string GetValue();
378 };
379 
381  uint64_t revision_;
382 
383  virtual bool PrepareValueFenced();
384  virtual std::string GetValue();
385 };
386 
389 
390  virtual bool PrepareValueFenced();
391  virtual std::string GetValue();
392 };
393 
394 class RxMagicXattr : public BaseMagicXattr {
395  virtual std::string GetValue();
396 };
397 
399  virtual std::string GetValue();
400 };
401 
403  std::string tag_;
404 
405  virtual bool PrepareValueFenced();
406  virtual std::string GetValue();
407 };
408 
410  virtual std::string GetValue();
411 };
412 
414  virtual std::string GetValue();
415 };
416 
418  virtual std::string GetValue();
419 };
420 
422  virtual std::string GetValue();
423 };
424 
426  virtual std::string GetValue();
427 };
428 
430  virtual std::string GetValue();
431 };
432 
434  virtual bool PrepareValueFenced();
435  virtual std::string GetValue();
436 };
437 
438 #endif // CVMFS_MAGIC_XATTR_H_
const std::set< gid_t > privileged_xattr_gids_
Definition: magic_xattr.h:212
virtual std::string GetValue()
Definition: magic_xattr.cc:420
virtual std::string GetValue()=0
MagicXattrFlavor
Definition: magic_xattr.h:21
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:225
void Release()
Definition: magic_xattr.h:86
bool PrepareValueFencedProtected(gid_t gid)
Definition: magic_xattr.cc:158
bool IsNull() const
Definition: magic_xattr.h:130
virtual std::string GetValue()
Definition: magic_xattr.cc:600
std::string subcatalog_path_
Definition: magic_xattr.h:227
void Register(const std::string &name, BaseMagicXattr *magic_xattr)
Definition: magic_xattr.cc:135
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:591
virtual std::string GetValue()
Definition: magic_xattr.cc:499
pthread_mutex_t access_mutex_
Definition: magic_xattr.h:104
MountPoint * mount_point()
Definition: magic_xattr.h:201
virtual std::string GetValue()
Definition: magic_xattr.cc:217
BaseMagicXattr * ptr_
Definition: magic_xattr.h:138
virtual std::string GetValue()
Definition: magic_xattr.cc:606
virtual MagicXattrFlavor GetXattrFlavor()
Definition: magic_xattr.h:142
virtual std::string GetValue()
Definition: magic_xattr.cc:309
std::set< gid_t > privileged_xattr_gids()
Definition: magic_xattr.h:199
catalog::Counters counters_
Definition: magic_xattr.h:229
void MarkProtected()
Definition: magic_xattr.h:59
BaseMagicXattr * GetLocked(const std::string &name, PathString path, catalog::DirectoryEntry *d)
Definition: magic_xattr.cc:119
const std::set< std::string > protected_xattrs_
Definition: magic_xattr.h:211
virtual std::string GetValue()
Definition: magic_xattr.cc:625
std::string error_reason_
Definition: magic_xattr.h:374
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:671
virtual std::string GetValue()
Definition: magic_xattr.cc:530
shash::Any root_hash_
Definition: magic_xattr.h:388
virtual std::string GetValue()
Definition: magic_xattr.cc:322
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:616
assert((mem||(size==0))&&"Out Of Memory")
virtual std::string GetValue()
Definition: magic_xattr.cc:649
virtual std::string GetValue()
Definition: magic_xattr.cc:657
catalog::DirectoryEntry * dirent_
Definition: magic_xattr.h:102
BaseMagicXattr * operator->() const
Definition: magic_xattr.h:129
virtual std::string GetValue()
Definition: magic_xattr.cc:281
virtual std::string GetValue()
Definition: magic_xattr.cc:354
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:285
virtual std::string GetValue()
Definition: magic_xattr.cc:377
bool IsPrivilegedGid(gid_t gid)
Definition: magic_xattr.cc:154
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:210
std::string chunk_list_
Definition: magic_xattr.h:236
virtual std::string GetValue()
Definition: magic_xattr.cc:202
static uint64_t kMaxMetainfoLength
Definition: magic_xattr.h:371
MountPoint * mount_point_
Definition: magic_xattr.h:206
virtual std::string GetValue()
Definition: magic_xattr.cc:459
BaseMagicXattr * Move()
Definition: magic_xattr.h:131
virtual std::string GetValue()
Definition: magic_xattr.cc:403
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:432
MagicXattrManager * xattr_mgr_
Definition: magic_xattr.h:100
std::string GetListString(catalog::DirectoryEntry *dirent)
Definition: magic_xattr.cc:77
virtual std::string GetValue()
Definition: magic_xattr.cc:305
MagicXattrRAIIWrapper(BaseMagicXattr *ptr, PathString path, catalog::DirectoryEntry *d)
Definition: magic_xattr.h:116
virtual std::string GetValue()
Definition: magic_xattr.cc:587
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:582
bool is_frozen() const
Definition: magic_xattr.h:202
virtual std::string GetValue()
Definition: magic_xattr.cc:621
virtual MagicXattrFlavor GetXattrFlavor()
Definition: magic_xattr.h:150
virtual std::string GetValue()
Definition: magic_xattr.cc:329
virtual std::string GetValue()
Definition: magic_xattr.cc:455
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:524
EVisibility visibility()
Definition: magic_xattr.h:198
virtual std::string GetValue()
Definition: magic_xattr.cc:645
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:373
virtual std::string GetValue()
Definition: magic_xattr.cc:337
FRIEND_TEST(T_MagicXattr, ProtectedXattr)
const unsigned int kMaxLogLine
Definition: magic_xattr.h:299
virtual std::string GetValue()
Definition: magic_xattr.cc:653
virtual std::string GetValue()
Definition: magic_xattr.cc:596
virtual std::string GetValue()
Definition: magic_xattr.cc:441
virtual std::string GetValue()
Definition: magic_xattr.cc:445
virtual std::string GetValue()
Definition: magic_xattr.cc:473
virtual std::string GetValue()
Definition: magic_xattr.cc:450
virtual std::string GetValue()
Definition: magic_xattr.cc:503
std::string tag_
Definition: magic_xattr.h:403
MagicXattrRAIIWrapper(BaseMagicXattr *ptr)
Wraps around a BaseMagicXattr* that is already locked (or NULL)
Definition: magic_xattr.h:125
MagicXattrManager(MountPoint *mountpoint, EVisibility visibility, const std::set< std::string > &protected_xattrs, const std::set< gid_t > &privileged_xattr_gids)
Definition: magic_xattr.cc:19
EVisibility visibility_
Definition: magic_xattr.h:207
shash::Any metainfo_hash_
Definition: magic_xattr.h:373
BackoffThrottle throttle_
Definition: magic_xattr.h:303
uint64_t n_chunks_
Definition: magic_xattr.h:243
virtual std::string GetValue()
Definition: magic_xattr.cc:254
virtual std::string GetValue()
Definition: magic_xattr.cc:551
virtual std::string GetValue()
Definition: magic_xattr.cc:437
virtual std::string GetValue()
Definition: magic_xattr.cc:341
PathString path_
Definition: magic_xattr.h:101
virtual std::string GetValue()
Definition: magic_xattr.cc:639
virtual std::string GetValue()
Definition: magic_xattr.cc:289
std::map< std::string, BaseMagicXattr * > xattr_list_
Definition: magic_xattr.h:205
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:333
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:536
virtual bool PrepareValueFenced()
Definition: magic_xattr.h:98
virtual ~BaseMagicXattr()
Definition: magic_xattr.h:91
virtual std::string GetValue()
Definition: magic_xattr.cc:297
catalog::Counters counters_
Definition: magic_xattr.h:364
virtual MagicXattrFlavor GetXattrFlavor()
Definition: magic_xattr.h:78
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:507
virtual MagicXattrFlavor GetXattrFlavor()
Definition: magic_xattr.cc:206
std::string pubkeys_
Definition: magic_xattr.h:352
virtual std::string GetValue()
Definition: magic_xattr.cc:632
void Lock(PathString path, catalog::DirectoryEntry *dirent)
Definition: magic_xattr.h:80
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:258
virtual MagicXattrFlavor GetXattrFlavor()
Definition: magic_xattr.h:146
virtual std::string GetValue()
Definition: magic_xattr.cc:512
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:293
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:301
void SanityCheckProtectedXattrs()
Definition: magic_xattr.cc:167
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:198