CernVM-FS  2.13.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 #include <utility>
12 #include <vector>
13 
14 #include "backoff.h"
15 #include "catalog_counters.h"
16 #include "directory_entry.h"
17 #include "shortstring.h"
18 #include "util/exception.h"
19 #include "util/string.h"
20 
21 class MountPoint;
22 
30 };
31 
35 };
36 
37 class MagicXattrManager; // needed for BaseMagicXattr
67  friend class MagicXattrManager;
68  FRIEND_TEST(T_MagicXattr, ProtectedXattr);
69  FRIEND_TEST(T_MagicXattr, TestFqrn);
70  FRIEND_TEST(T_MagicXattr, TestLogBuffer);
71 
72  public:
74  int retval = pthread_mutex_init(&access_mutex_, NULL);
75  assert(retval == 0);
76  }
77 
82  void MarkProtected() { is_protected_ = true; }
83 
84 
85  // TODO(hereThereBeDragons) from C++11 should be marked final
89  bool PrepareValueFencedProtected(gid_t gid);
90 
116  std::pair<bool, std::string> GetValue(int32_t requested_page,
117  const MagicXattrMode mode);
118 
120 
122  int retval = pthread_mutex_lock(&access_mutex_);
123  assert(retval == 0);
124  path_ = path;
125  dirent_ = dirent;
126  }
127  void Release() {
128  int retval = pthread_mutex_unlock(&access_mutex_);
129  assert(retval == 0);
130  }
131 
132  virtual ~BaseMagicXattr() { }
133 
134  // how many chars per page (with some leeway). system maximum would be 64k
135  static const uint32_t kMaxCharsPerPage = 40000;
136 
137  protected:
142  virtual bool PrepareValueFenced() { return true; }
143  virtual void FinalizeValue() { }
144 
145  std::string HeaderMultipageHuman(uint32_t requested_page);
146 
150 
151  pthread_mutex_t access_mutex_;
153  std::vector<std::string> result_pages_;
154 };
155 
161  public:
162  inline MagicXattrRAIIWrapper() : ptr_(NULL) { }
163 
164  inline explicit MagicXattrRAIIWrapper(BaseMagicXattr *ptr,
165  PathString path,
167  : ptr_(ptr) {
168  if (ptr_ != NULL)
169  ptr_->Lock(path, d);
170  }
172  inline explicit MagicXattrRAIIWrapper(BaseMagicXattr *ptr) : ptr_(ptr) { }
173 
175  if (ptr_ != NULL)
176  ptr_->Release();
177  }
178 
179  inline BaseMagicXattr *operator->() const { return ptr_; }
180  inline bool IsNull() const { return ptr_ == NULL; }
181  inline BaseMagicXattr *Move() {
182  BaseMagicXattr *ret = ptr_;
183  ptr_ = NULL;
184  return ret;
185  }
186 
187  protected:
189 };
190 
193 };
194 
197 };
198 
201 };
202 
205 };
206 
221  public:
222  enum EVisibility {
226  };
227 
229  const std::set<std::string> &protected_xattrs,
230  const std::set<gid_t> &privileged_xattr_gids);
233  BaseMagicXattr *GetLocked(const std::string &name, PathString path,
235  std::string GetListString(catalog::DirectoryEntry *dirent);
240  void Register(const std::string &name, BaseMagicXattr *magic_xattr);
241 
248  void Freeze() {
249  is_frozen_ = true;
251  }
252  bool IsPrivilegedGid(gid_t gid);
253 
254 
256  std::set<gid_t> privileged_xattr_gids() { return privileged_xattr_gids_; }
258  bool is_frozen() const { return is_frozen_; }
259 
260  protected:
261  std::map<std::string, BaseMagicXattr *> xattr_list_;
264 
265  // privileged_xattr_gids_ contains the (fuse) gids that
266  // can access xattrs that are part of protected_xattrs_
267  const std::set<std::string> protected_xattrs_;
268  const std::set<gid_t> privileged_xattr_gids_;
269 
270  private:
272 
274 };
275 
277  virtual bool PrepareValueFenced();
278  virtual void FinalizeValue();
279 
281 };
282 
284  std::string subcatalog_path_;
287 
288  virtual bool PrepareValueFenced();
289  virtual void FinalizeValue();
290 };
291 
293  virtual bool PrepareValueFenced();
294  virtual void FinalizeValue();
295 
296  private:
297  std::vector<std::string> chunk_list_;
298 };
299 
301  uint64_t n_chunks_;
302 
303  virtual bool PrepareValueFenced();
304  virtual void FinalizeValue();
305 };
306 
308  virtual bool PrepareValueFenced();
309  virtual void FinalizeValue();
310 };
311 
313  virtual bool PrepareValueFenced();
314  virtual void FinalizeValue();
315 };
316 
318  virtual bool PrepareValueFenced();
319  virtual void FinalizeValue();
320 };
321 
323  virtual void FinalizeValue();
324 };
325 
327  virtual void FinalizeValue();
328 };
329 
331  virtual void FinalizeValue();
332 };
333 
335  virtual bool PrepareValueFenced();
336  virtual void FinalizeValue();
337 };
338 
340  virtual void FinalizeValue();
341 };
342 
344  virtual void FinalizeValue();
345 };
346 
348  virtual bool PrepareValueFenced();
349  virtual void FinalizeValue();
350 };
351 
353  public:
354  LogBufferXattr();
355 
356  private:
357  const unsigned int kMaxLogLine = 4096; // longer log lines are trimmed
358  // Generating the log buffer report involves 64 string copies. To mitigate
359  // memory fragmentation and performance loss, throttle the use of this
360  // attribute a little.
362 
363  virtual void FinalizeValue();
364 };
365 
367  virtual void FinalizeValue();
368 };
369 
372 
373  virtual bool PrepareValueFenced();
374  virtual void FinalizeValue();
375 };
376 
378  virtual void FinalizeValue();
379 };
380 
382  virtual void FinalizeValue();
383 };
384 
386  virtual void FinalizeValue();
387 };
388 
390  virtual void FinalizeValue();
391 };
392 
394  virtual void FinalizeValue();
395 };
396 
398  virtual void FinalizeValue();
399 };
400 
402  virtual void FinalizeValue();
403 };
404 
406  virtual void FinalizeValue();
407 };
408 
410  FRIEND_TEST(T_MagicXattr, MultiPageMachineModeXattr);
411  FRIEND_TEST(T_MagicXattr, MultiPageHumanModeXattr);
412 
413  std::vector<std::string> pubkeys_;
414 
415  virtual bool PrepareValueFenced();
416  virtual void FinalizeValue();
417 };
418 
420  virtual bool PrepareValueFenced();
421  virtual void FinalizeValue();
422 };
423 
426 
427  virtual bool PrepareValueFenced();
428  virtual void FinalizeValue();
429 };
430 
432  static uint64_t kMaxMetainfoLength;
433 
435  std::string error_reason_;
436 
437  virtual bool PrepareValueFenced();
438  virtual void FinalizeValue();
439 };
440 
442  uint64_t revision_;
443 
444  virtual bool PrepareValueFenced();
445  virtual void FinalizeValue();
446 };
447 
450 
451  virtual bool PrepareValueFenced();
452  virtual void FinalizeValue();
453 };
454 
455 class RxMagicXattr : public BaseMagicXattr {
456  virtual void FinalizeValue();
457 };
458 
460  virtual void FinalizeValue();
461 };
462 
464  std::string tag_;
465 
466  virtual bool PrepareValueFenced();
467  virtual void FinalizeValue();
468 };
469 
471  virtual void FinalizeValue();
472 };
473 
475  virtual void FinalizeValue();
476 };
477 
479  virtual void FinalizeValue();
480 };
481 
483  virtual void FinalizeValue();
484 };
485 
487  virtual void FinalizeValue();
488 };
489 
491  virtual void FinalizeValue();
492 };
493 
495  virtual bool PrepareValueFenced();
496  virtual void FinalizeValue();
497 };
498 
499 #endif // CVMFS_MAGIC_XATTR_H_
const std::set< gid_t > privileged_xattr_gids_
Definition: magic_xattr.h:268
virtual void FinalizeValue()
Definition: magic_xattr.cc:408
MagicXattrFlavor
Definition: magic_xattr.h:23
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:278
bool PrepareValueFencedProtected(gid_t gid)
Definition: magic_xattr.cc:161
virtual void FinalizeValue()
Definition: magic_xattr.cc:592
bool IsNull() const
Definition: magic_xattr.h:180
virtual void FinalizeValue()
Definition: magic_xattr.cc:724
std::string subcatalog_path_
Definition: magic_xattr.h:284
virtual void FinalizeValue()
Definition: magic_xattr.cc:748
virtual void FinalizeValue()
Definition: magic_xattr.cc:376
void Register(const std::string &name, BaseMagicXattr *magic_xattr)
Definition: magic_xattr.cc:139
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:715
pthread_mutex_t access_mutex_
Definition: magic_xattr.h:151
MountPoint * mount_point()
Definition: magic_xattr.h:257
virtual void FinalizeValue()
Definition: magic_xattr.cc:711
virtual void FinalizeValue()
Definition: magic_xattr.cc:779
BaseMagicXattr * ptr_
Definition: magic_xattr.h:188
virtual MagicXattrFlavor GetXattrFlavor()
Definition: magic_xattr.h:192
virtual void FinalizeValue()
Definition: magic_xattr.cc:357
std::set< gid_t > privileged_xattr_gids()
Definition: magic_xattr.h:256
virtual void FinalizeValue()
Definition: magic_xattr.cc:784
catalog::Counters counters_
Definition: magic_xattr.h:286
void MarkProtected()
Definition: magic_xattr.h:82
BaseMagicXattr * GetLocked(const std::string &name, PathString path, catalog::DirectoryEntry *d)
Definition: magic_xattr.cc:124
virtual void FinalizeValue()
Definition: magic_xattr.cc:257
const std::set< std::string > protected_xattrs_
Definition: magic_xattr.h:267
virtual void FinalizeValue()
Definition: magic_xattr.cc:553
std::string error_reason_
Definition: magic_xattr.h:435
virtual void FinalizeValue()
Definition: magic_xattr.cc:396
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:800
shash::Any root_hash_
Definition: magic_xattr.h:449
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:741
virtual void FinalizeValue()
Definition: magic_xattr.cc:746
assert((mem||(size==0))&&"Out Of Memory")
virtual void FinalizeValue()
Definition: magic_xattr.cc:588
catalog::DirectoryEntry * dirent_
Definition: magic_xattr.h:149
BaseMagicXattr * operator->() const
Definition: magic_xattr.h:179
std::vector< std::string > chunk_list_
Definition: magic_xattr.h:297
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:353
bool IsPrivilegedGid(gid_t gid)
Definition: magic_xattr.cc:157
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:263
virtual void FinalizeValue()
Definition: magic_xattr.cc:755
static uint64_t kMaxMetainfoLength
Definition: magic_xattr.h:432
MagicXattrMode
Definition: magic_xattr.h:32
MountPoint * mount_point_
Definition: magic_xattr.h:262
BaseMagicXattr * Move()
Definition: magic_xattr.h:181
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:501
MagicXattrManager * xattr_mgr_
Definition: magic_xattr.h:147
std::string GetListString(catalog::DirectoryEntry *dirent)
Definition: magic_xattr.cc:77
MagicXattrRAIIWrapper(BaseMagicXattr *ptr, PathString path, catalog::DirectoryEntry *d)
Definition: magic_xattr.h:164
static const uint32_t kMaxCharsPerPage
Definition: magic_xattr.h:135
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:706
virtual void FinalizeValue()
Definition: magic_xattr.cc:389
virtual void FinalizeValue()
Definition: magic_xattr.cc:603
virtual void FinalizeValue()
Definition: magic_xattr.cc:364
std::string HeaderMultipageHuman(uint32_t requested_page)
Definition: magic_xattr.cc:203
bool is_frozen() const
Definition: magic_xattr.h:258
virtual MagicXattrFlavor GetXattrFlavor()
Definition: magic_xattr.h:200
virtual void FinalizeValue()
Definition: magic_xattr.cc:443
virtual void FinalizeValue()
Definition: magic_xattr.cc:669
virtual void FinalizeValue()
Definition: magic_xattr.cc:515
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:638
EVisibility visibility()
Definition: magic_xattr.h:255
FRIEND_TEST(T_MagicXattr, MultiPageMachineModeXattr)
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:439
virtual void FinalizeValue()
Definition: magic_xattr.cc:470
virtual void FinalizeValue()
Definition: magic_xattr.cc:774
virtual void FinalizeValue()
Definition: magic_xattr.cc:323
virtual void FinalizeValue()
Definition: magic_xattr.cc:720
virtual void FinalizeValue()
Definition: magic_xattr.cc:769
std::pair< bool, std::string > GetValue(int32_t requested_page, const MagicXattrMode mode)
Definition: magic_xattr.cc:210
FRIEND_TEST(T_MagicXattr, ProtectedXattr)
virtual void FinalizeValue()
Definition: magic_xattr.cc:532
const unsigned int kMaxLogLine
Definition: magic_xattr.h:357
virtual void FinalizeValue()
Definition: magic_xattr.cc:646
virtual void FinalizeValue()
Definition: magic_xattr.cc:487
virtual void FinalizeValue()
Definition: magic_xattr.cc:730
virtual void FinalizeValue()
Definition: magic_xattr.cc:269
virtual void FinalizeValue()
Definition: magic_xattr.cc:510
virtual void FinalizeValue()
Definition: magic_xattr.cc:527
virtual void FinalizeValue()
Definition: magic_xattr.cc:372
virtual void FinalizeValue()
Definition: magic_xattr.cc:421
std::string tag_
Definition: magic_xattr.h:464
MagicXattrRAIIWrapper(BaseMagicXattr *ptr)
Wraps around a BaseMagicXattr* that is already locked (or NULL)
Definition: magic_xattr.h:172
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:263
virtual void FinalizeValue()
Definition: magic_xattr.cc:349
shash::Any metainfo_hash_
Definition: magic_xattr.h:434
BackoffThrottle throttle_
Definition: magic_xattr.h:361
uint64_t n_chunks_
Definition: magic_xattr.h:301
std::vector< std::string > pubkeys_
Definition: magic_xattr.h:413
PathString path_
Definition: magic_xattr.h:148
virtual void FinalizeValue()
Definition: magic_xattr.h:143
std::map< std::string, BaseMagicXattr * > xattr_list_
Definition: magic_xattr.h:261
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:400
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:652
virtual void FinalizeValue()
Definition: magic_xattr.cc:404
virtual bool PrepareValueFenced()
Definition: magic_xattr.h:142
virtual ~BaseMagicXattr()
Definition: magic_xattr.h:132
catalog::Counters counters_
Definition: magic_xattr.h:425
virtual void FinalizeValue()
Definition: magic_xattr.cc:506
virtual MagicXattrFlavor GetXattrFlavor()
Definition: magic_xattr.h:119
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:596
virtual MagicXattrFlavor GetXattrFlavor()
Definition: magic_xattr.cc:261
void Lock(PathString path, catalog::DirectoryEntry *dirent)
Definition: magic_xattr.h:121
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:325
virtual MagicXattrFlavor GetXattrFlavor()
Definition: magic_xattr.h:196
virtual void FinalizeValue()
Definition: magic_xattr.cc:522
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:362
std::vector< std::string > result_pages_
Definition: magic_xattr.h:153
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:368
void SanityCheckProtectedXattrs()
Definition: magic_xattr.cc:170
virtual bool PrepareValueFenced()
Definition: magic_xattr.cc:253