CernVM-FS  2.13.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
settings.cc
Go to the documentation of this file.
1 
6 #include "publish/settings.h"
7 
8 #include <unistd.h>
9 
10 #include <cstdlib>
11 #include <string>
12 #include <vector>
13 
14 #include "crypto/hash.h"
15 #include "options.h"
16 #include "publish/except.h"
17 #include "publish/repository.h"
18 #include "sanitizer.h"
19 #include "util/pointer.h"
20 #include "util/posix.h"
21 #include "util/string.h"
22 
23 namespace publish {
24 
26  if (getenv("TMPDIR") != NULL)
27  tmp_dir_ = getenv("TMPDIR");
28  else
29  tmp_dir_ = "/tmp";
30 }
31 
32 void SettingsSpoolArea::SetSpoolArea(const std::string &path) {
33  workspace_ = path;
34  tmp_dir_ = workspace_() + "/tmp";
35 }
36 
37 void SettingsSpoolArea::SetUnionMount(const std::string &path) {
38  union_mnt_ = path;
39 }
40 
42  repair_mode_ = val;
43 }
44 
46  std::vector<std::string> targets;
47  targets.push_back(tmp_dir());
48  targets.push_back(readonly_mnt());
49  targets.push_back(scratch_dir());
50  targets.push_back(cache_dir());
51  targets.push_back(log_dir());
52  targets.push_back(ovl_work_dir());
53 
54  for (unsigned i = 0; i < targets.size(); ++i) {
55  const bool rv = MkdirDeep(targets[i], 0700, true /* veryfy_writable */);
56  if (!rv)
57  throw publish::EPublish("cannot create directory " + targets[i]);
58  }
59 }
60 
61 
62 //------------------------------------------------------------------------------
63 
64 
65 void SettingsTransaction::SetLayoutRevision(const unsigned revision) {
66  layout_revision_ = revision;
67 }
68 
70  in_enter_session_ = value;
71 }
72 
74  base_hash_ = hash;
75 }
76 
79 }
80 
82  const std::string &algorithm) {
84 }
85 
87  enforce_limits_ = value;
88 }
89 
91  enable_mtime_ns_ = value;
92 }
93 
96 }
97 
100 }
101 
103  limit_file_size_mb_ = value;
104 }
105 
107  use_catalog_autobalance_ = value;
108 }
109 
111  autobalance_max_weight_ = value;
112 }
113 
115  autobalance_min_weight_ = value;
116 }
117 
119  print_changeset_ = value;
120 }
121 
122 void SettingsTransaction::SetDryRun(bool value) { dry_run_ = value; }
123 
124 void SettingsTransaction::SetUnionFsType(const std::string &union_fs) {
125  if (union_fs == "aufs") {
127  } else if ((union_fs == "overlay") || (union_fs == "overlayfs")) {
129  } else if (union_fs == "tarball") {
131  } else {
132  throw EPublish("unsupported union file system: " + union_fs);
133  }
134 }
135 
137  // TODO(jblomer): shall we switch the order?
138  if (DirectoryExists("/sys/fs/aufs")) {
140  return;
141  }
142  // TODO(jblomer): modprobe aufs, try again
143  if (DirectoryExists("/sys/module/overlay")) {
145  return;
146  }
147  // TODO(jblomer): modprobe overlay, try again
148  throw EPublish("neither AUFS nor OverlayFS detected on the system");
149 }
150 
152  // TODO(jblomer)
153  return true;
154 }
155 
156 void SettingsTransaction::SetTimeout(unsigned seconds) { timeout_s_ = seconds; }
157 
159  if (timeout_s_.is_default())
160  return -1;
161  return timeout_s_();
162 }
163 
164 void SettingsTransaction::SetLeasePath(const std::string &path) {
165  lease_path_ = path;
166 }
167 
168 void SettingsTransaction::SetTemplate(const std::string &from,
169  const std::string &to) {
170  if (from.empty())
171  throw EPublish("template transaction's 'from' path must not be empty");
172  if (to.empty())
173  throw EPublish("template transaction's 'to' path must not be empty");
174  template_from_ = (from[0] == '/') ? from.substr(1) : from;
175  template_to_ = (to[0] == '/') ? to.substr(1) : to;
176 }
177 
178 //------------------------------------------------------------------------------
179 
180 
181 std::string SettingsStorage::GetLocator() const {
182  return std::string(upload::SpoolerDefinition::kDriverNames[type_()]) + ","
183  + tmp_dir_() + "," + endpoint_();
184 }
185 
186 void SettingsStorage::MakeS3(const std::string &s3_config,
187  const std::string &tmp_dir) {
189  tmp_dir_ = tmp_dir;
190  endpoint_ = "cvmfs/" + fqrn_() + "@" + s3_config;
191 }
192 
193 void SettingsStorage::MakeLocal(const std::string &path) {
195  endpoint_ = path;
196  tmp_dir_ = path + "/data/txn";
197 }
198 
199 void SettingsStorage::MakeGateway(const std::string &host,
200  unsigned int port,
201  const std::string &tmp_dir) {
203  endpoint_ = "http://" + host + ":" + StringifyInt(port) + "/api/v1";
204  tmp_dir_ = tmp_dir_;
205 }
206 
207 void SettingsStorage::SetLocator(const std::string &locator) {
208  std::vector<std::string> tokens = SplitString(locator, ',');
209  if (tokens.size() != 3) {
210  throw EPublish("malformed storage locator, expected format is "
211  "<type>,<temporary directory>,<endpoint>");
212  }
213  if (tokens[0] == "local") {
215  } else if (tokens[0] == "S3") {
217  } else if (tokens[0] == "gw") {
219  } else {
220  throw EPublish("unsupported storage type: " + tokens[0]);
221  }
222  tmp_dir_ = tokens[1];
223  endpoint_ = tokens[2];
224 }
225 
226 
227 //------------------------------------------------------------------------------
228 
229 void SettingsKeychain::SetKeychainDir(const std::string &keychain_dir) {
231  master_private_key_path_ = keychain_dir + "/" + fqrn_() + ".masterkey";
232  master_public_key_path_ = keychain_dir + "/" + fqrn_() + ".pub";
233  private_key_path_ = keychain_dir + "/" + fqrn_() + ".key";
234  certificate_path_ = keychain_dir + "/" + fqrn_() + ".crt";
235  gw_key_path_ = keychain_dir + "/" + fqrn_() + ".gw";
236 }
237 
238 
244 }
245 
246 
250 }
251 
252 
257 }
258 
259 
262 }
263 
265  return FileExists(gw_key_path_());
266 }
267 
268 //------------------------------------------------------------------------------
269 
270 
272  const SettingsPublisher &settings_publisher)
273  : fqrn_(settings_publisher.fqrn())
274  , url_(settings_publisher.url())
275  , proxy_(settings_publisher.proxy())
276  , tmp_dir_(settings_publisher.transaction().spool_area().tmp_dir())
277  , keychain_(settings_publisher.fqrn()) {
278  keychain_.SetKeychainDir(settings_publisher.keychain().keychain_dir());
279 }
280 
281 
283  : fqrn_(settings_replica.fqrn())
284  , url_(settings_replica.url())
285  , keychain_(settings_replica.fqrn()) { }
286 
287 
288 void SettingsRepository::SetUrl(const std::string &url) {
289  // TODO(jblomer): sanitiation, check availability
290  url_ = url;
291 }
292 
293 
294 void SettingsRepository::SetProxy(const std::string &proxy) { proxy_ = proxy; }
295 
296 
297 void SettingsRepository::SetTmpDir(const std::string &tmp_dir) {
298  tmp_dir_ = tmp_dir;
299 }
300 
301 
302 void SettingsRepository::SetCertBundle(const std::string &cert_bundle) {
304 }
305 
306 
307 //------------------------------------------------------------------------------
308 
309 
311 
312 
314  const SettingsRepository &settings_repository)
315  : fqrn_(settings_repository.fqrn())
316  , url_(settings_repository.url())
317  , proxy_(settings_repository.proxy())
318  , owner_uid_(0)
319  , owner_gid_(0)
320  , whitelist_validity_days_(kDefaultWhitelistValidity)
321  , is_silent_(false)
322  , is_managed_(false)
323  , storage_(fqrn_())
324  , transaction_(fqrn_())
325  , keychain_(fqrn_()) {
326  keychain_.SetKeychainDir(settings_repository.keychain().keychain_dir());
327 }
328 
329 
330 void SettingsPublisher::SetUrl(const std::string &url) {
331  // TODO(jblomer): sanitiation, check availability
332  url_ = url;
333 }
334 
335 
336 void SettingsPublisher::SetProxy(const std::string &proxy) { proxy_ = proxy; }
337 
338 
339 void SettingsPublisher::SetOwner(const std::string &user_name) {
340  const bool retval =
341  GetUidOf(user_name, owner_uid_.GetPtr(), owner_gid_.GetPtr());
342  if (!retval) {
343  throw EPublish("unknown user name for repository owner: " + user_name);
344  }
345 }
346 
347 void SettingsPublisher::SetOwner(uid_t uid, gid_t gid) {
348  owner_uid_ = uid;
349  owner_gid_ = gid;
350 }
351 
352 void SettingsPublisher::SetIsSilent(bool value) { is_silent_ = value; }
353 
354 void SettingsPublisher::SetIsManaged(bool value) { is_managed_ = value; }
355 
357  ignore_invalid_lease_ = value;
358 }
359 
360 
361 //------------------------------------------------------------------------------
362 
363 
365 
366 
367 std::map<std::string, std::string> SettingsBuilder::GetSessionEnvironment() {
368  std::map<std::string, std::string> result;
369  const std::string session_dir = Env::GetEnterSessionDir();
370  if (session_dir.empty())
371  return result;
372 
373  // Get the repository name from the ephemeral writable shell
374  BashOptionsManager omgr;
375  omgr.set_taint_environment(false);
376  omgr.ParsePath(session_dir + "/env.conf", false /* external */);
377 
378  // We require at least CVMFS_FQRN to be set
379  std::string fqrn;
380  if (!omgr.GetValue("CVMFS_FQRN", &fqrn)) {
381  throw EPublish("no repositories found in ephemeral writable shell",
383  }
384 
385  std::vector<std::string> keys = omgr.GetAllKeys();
386  for (unsigned i = 0; i < keys.size(); ++i) {
387  result[keys[i]] = omgr.GetValueOrDie(keys[i]);
388  }
389  return result;
390 }
391 
392 
394  std::map<std::string, std::string> session_env = GetSessionEnvironment();
395  if (!session_env.empty())
396  return session_env["CVMFS_FQRN"];
397 
398  std::vector<std::string> repositories = FindDirectories(config_path_);
399  if (repositories.empty()) {
400  throw EPublish("no repositories available in " + config_path_,
402  }
403 
404  for (unsigned i = 0; i < repositories.size(); ++i) {
405  repositories[i] = GetFileName(repositories[i]);
406  }
407  if (repositories.size() > 1) {
408  throw EPublish("multiple repositories available in " + config_path_
409  + ":\n " + JoinStrings(repositories, "\n "),
411  }
412  return repositories[0];
413 }
414 
415 
417  const std::string &ident) {
418  if (HasPrefix(ident, "http://", true /* ignore case */)
419  || HasPrefix(ident, "https://", true /* ignore case */)
420  || HasPrefix(ident, "file://", true /* ignore case */)) {
421  const std::string fqrn = Repository::GetFqrnFromUrl(ident);
422  const sanitizer::RepositorySanitizer sanitizer;
423  if (!sanitizer.IsValid(fqrn)) {
424  throw EPublish("malformed repository name: " + fqrn);
425  }
427  settings.SetUrl(ident);
428  return settings;
429  }
430 
431  const std::string alias = ident.empty() ? GetSingleAlias() : ident;
432  const std::string repo_path = config_path_ + "/" + alias;
433  const std::string server_path = repo_path + "/server.conf";
434  const std::string replica_path = repo_path + "/replica.conf";
435  std::string fqrn = alias;
436 
437  delete options_mgr_;
439  std::string arg;
441  options_mgr_->ParsePath("/etc/cvmfs/server.local", false /* external */);
442  options_mgr_->ParsePath(server_path, false /* external */);
443  options_mgr_->ParsePath(replica_path, false /* external */);
444  if (options_mgr_->GetValue("CVMFS_REPOSITORY_NAME", &arg))
445  fqrn = arg;
447 
448  if (options_mgr_->GetValue("CVMFS_PUBLIC_KEY", &arg))
449  settings.GetKeychain()->SetKeychainDir(arg);
450  if (options_mgr_->GetValue("CVMFS_STRATUM0", &arg))
451  settings.SetUrl(arg);
452  if (options_mgr_->GetValue("CVMFS_SERVER_PROXY", &arg))
453  settings.SetProxy(arg);
454  // For a replica, the stratum 1 url is the "local" location, hence it takes
455  // precedence over the stratum 0 url
456  if (options_mgr_->GetValue("CVMFS_STRATUM1", &arg))
457  settings.SetUrl(arg);
458  if (options_mgr_->GetValue("CVMFS_SPOOL_DIR", &arg))
459  settings.SetTmpDir(arg + "/tmp");
460  if (options_mgr_->GetValue("X509_CERT_BUNDLE", &arg))
461  settings.SetCertBundle(arg);
462 
463  return settings;
464 }
465 
466 std::string SettingsPublisher::GetReadOnlyXAttr(const std::string &attr) {
467  std::string value;
468  const bool rvb = platform_getxattr(
469  this->transaction().spool_area().readonly_mnt(), attr, &value);
470  if (!rvb) {
471  throw EPublish("cannot get extended attribute " + attr);
472  }
473  return value;
474 }
475 
477  const std::string session_dir = Env::GetEnterSessionDir();
478  std::map<std::string, std::string> session_env = GetSessionEnvironment();
479  const std::string fqrn = session_env["CVMFS_FQRN"];
480 
481  UniquePtr<SettingsPublisher> settings_publisher(
483  // TODO(jblomer): work in progress
484  settings_publisher->GetTransaction()->SetInEnterSession(true);
485  settings_publisher->GetTransaction()->GetSpoolArea()->SetSpoolArea(
486  session_dir);
487 
488  const std::string base_hash =
489  settings_publisher->GetReadOnlyXAttr("user.root_hash");
490 
491  BashOptionsManager omgr;
492  omgr.set_taint_environment(false);
493  omgr.ParsePath(settings_publisher->transaction().spool_area().client_config(),
494  false /* external */);
495 
496  std::string arg;
497  settings_publisher->SetUrl(settings_publisher->GetReadOnlyXAttr("user.host"));
498  settings_publisher->SetProxy(
499  settings_publisher->GetReadOnlyXAttr("user.proxy"));
500  if (omgr.GetValue("CVMFS_KEYS_DIR", &arg))
501  settings_publisher->GetKeychain()->SetKeychainDir(arg);
502  settings_publisher->GetTransaction()->SetLayoutRevision(
504  settings_publisher->GetTransaction()->SetBaseHash(
506  settings_publisher->GetTransaction()->SetUnionFsType("overlayfs");
507  settings_publisher->SetOwner(geteuid(), getegid());
508 
509  return settings_publisher.Release();
510 }
511 
513  const OptionsManager &options_mgr_, SettingsPublisher *settings_publisher) {
514  std::string arg;
515  if (options_mgr_.GetValue("CVMFS_CREATOR_VERSION", &arg)) {
516  settings_publisher->GetTransaction()->SetLayoutRevision(String2Uint64(arg));
517  }
518  if (options_mgr_.GetValue("CVMFS_UNION_FS_TYPE", &arg)) {
519  settings_publisher->GetTransaction()->SetUnionFsType(arg);
520  }
521  if (options_mgr_.GetValue("CVMFS_HASH_ALGORITHM", &arg)) {
522  settings_publisher->GetTransaction()->SetHashAlgorithm(arg);
523  }
524  if (options_mgr_.GetValue("CVMFS_UPSTREAM_STORAGE", &arg)) {
525  settings_publisher->GetStorage()->SetLocator(arg);
526  }
527  if (options_mgr_.GetValue("CVMFS_KEYS_DIR", &arg)) {
528  settings_publisher->GetKeychain()->SetKeychainDir(arg);
529  }
530  if (options_mgr_.GetValue("CVMFS_COMPRESSION_ALGORITHM", &arg)) {
531  settings_publisher->GetTransaction()->SetCompressionAlgorithm(arg);
532  }
533  if (options_mgr_.GetValue("CVMFS_ENFORCE_LIMITS", &arg)) {
534  settings_publisher->GetTransaction()->SetEnforceLimits(
535  options_mgr_.IsOn(arg));
536  }
537  if (options_mgr_.GetValue("CVMFS_ENABLE_MTIME_NS", &arg)) {
538  settings_publisher->GetTransaction()->SetEnableMtimeNs(
539  options_mgr_.IsOn(arg));
540  }
541  if (options_mgr_.GetValue("CVMFS_NESTED_KCATALOG_LIMIT", &arg)) {
542  settings_publisher->GetTransaction()->SetLimitNestedCatalogKentries(
543  String2Uint64(arg));
544  }
545  if (options_mgr_.GetValue("CVMFS_ROOT_KCATALOG_LIMIT", &arg)) {
546  settings_publisher->GetTransaction()->SetLimitRootCatalogKentries(
547  String2Uint64(arg));
548  }
549  if (options_mgr_.GetValue("CVMFS_FILE_MBYTE_LIMIT", &arg)) {
550  settings_publisher->GetTransaction()->SetLimitFileSizeMb(
551  String2Uint64(arg));
552  }
553  if (options_mgr_.GetValue("CVMFS_AUTOCATALOGS", &arg)) {
554  settings_publisher->GetTransaction()->SetUseCatalogAutobalance(
555  options_mgr_.IsOn(arg));
556  }
557  if (options_mgr_.GetValue("CVMFS_AUTOCATALOGS_MAX_WEIGHT", &arg)) {
558  settings_publisher->GetTransaction()->SetAutobalanceMaxWeight(
559  String2Uint64(arg));
560  }
561  if (options_mgr_.GetValue("CVMFS_AUTOCATALOGS_MIN_WEIGHT", &arg)) {
562  settings_publisher->GetTransaction()->SetAutobalanceMinWeight(
563  String2Uint64(arg));
564  }
565  if (options_mgr_.GetValue("CVMFS_AUTO_REPAIR_MOUNTPOINT", &arg)) {
566  if (!options_mgr_.IsOn(arg)) {
567  settings_publisher->GetTransaction()->GetSpoolArea()->SetRepairMode(
569  }
570  }
571 }
572 
574  const std::string &ident, bool needs_managed) {
575  // we are creating a publisher, it need to have the `server.conf` file
576  // present, otherwise something is wrong and we should exit early
577  const std::string alias(ident.empty() ? GetSingleAlias() : ident);
578 
579  std::map<std::string, std::string> session_env = GetSessionEnvironment();
580  // We can be in an ephemeral writable shell but interested in a different
581  // repository
582 
583  const std::string server_path = config_path_ + "/" + alias + "/server.conf";
584 
585  // Instead of returning the Settings from session, we need more processing
586  if (!session_env.empty() && (session_env["CVMFS_FQRN"] == alias)) {
588  *settings_publisher = CreateSettingsPublisherFromSession();
589  if (FileExists(server_path)) {
590  delete options_mgr_;
593  options_mgr_->ParsePath(server_path, false /* external */);
594  ApplyOptionsFromServerPath(*options_mgr_, settings_publisher);
595  }
596  return settings_publisher;
597  }
598 
599  if (FileExists(server_path) == false) {
600  throw EPublish(
601  "Unable to find the configuration file `server.conf` for the cvmfs "
602  "publisher: "
603  + alias,
605  }
606 
607  const SettingsRepository settings_repository =
609  if (needs_managed && !IsManagedRepository())
610  throw EPublish("remote repositories are not supported in this context");
611 
612  if (options_mgr_->GetValueOrDie("CVMFS_REPOSITORY_TYPE") != "stratum0") {
613  throw EPublish("Repository " + alias + " is not a stratum 0 repository",
615  }
616 
617  UniquePtr<SettingsPublisher> settings_publisher(
618  new SettingsPublisher(settings_repository));
619 
620  try {
621  const std::string xattr =
622  settings_publisher->GetReadOnlyXAttr("user.root_hash");
623  settings_publisher->GetTransaction()->SetBaseHash(
625  } catch (const EPublish &e) {
626  // We ignore the exception.
627  // In case of exception, the base hash remains unset.
628  }
629 
630  settings_publisher->SetIsManaged(IsManagedRepository());
631  settings_publisher->SetOwner(options_mgr_->GetValueOrDie("CVMFS_USER"));
632  settings_publisher->GetStorage()->SetLocator(
633  options_mgr_->GetValueOrDie("CVMFS_UPSTREAM_STORAGE"));
634 
635  ApplyOptionsFromServerPath(*options_mgr_, &*settings_publisher);
636 
637  // TODO(jblomer): process other parameters
638  return settings_publisher.Release();
639 }
640 
641 } // namespace publish
void SetUnionFsType(const std::string &union_fs)
Definition: settings.cc:124
SettingsKeychain * GetKeychain()
Definition: settings.h:373
std::string GetValueOrDie(const std::string &key)
Definition: options.cc:380
Setting< std::string > keychain_dir_
Definition: settings.h:335
void SetIgnoreInvalidLease(bool value)
Definition: settings.cc:356
Algorithms ParseCompressionAlgorithm(const std::string &algorithm_option)
Definition: compression.cc:153
std::string config_path_
Definition: settings.h:534
std::string readonly_mnt() const
Definition: settings.h:93
void SetEnableMtimeNs(bool value)
Definition: settings.cc:90
bool HasGatewayKey() const
Definition: settings.cc:264
Setting< unsigned > timeout_s_
Definition: settings.h:261
virtual void ParsePath(const std::string &config_file, const bool external)=0
SettingsPublisher * CreateSettingsPublisher(const std::string &ident, bool needs_managed=false)
Definition: settings.cc:573
SettingsTransaction * GetTransaction()
Definition: settings.h:436
void SetUrl(const std::string &url)
Definition: settings.cc:288
void SetUnionMount(const std::string &path)
Definition: settings.cc:37
void MakeGateway(const std::string &host, unsigned port, const std::string &tmp_dir)
Definition: settings.cc:199
NameString GetFileName(const PathString &path)
Definition: shortstring.cc:28
Setting< bool > is_managed_
Definition: settings.h:447
void SetTimeout(unsigned seconds)
Definition: settings.cc:156
SettingsKeychain * GetKeychain()
Definition: settings.h:437
void SetKeychainDir(const std::string &keychain_dir)
Definition: settings.cc:229
Setting< gid_t > owner_gid_
Definition: settings.h:444
std::string keychain_dir() const
Definition: settings.h:322
void SetLimitNestedCatalogKentries(unsigned value)
Definition: settings.cc:94
EUnionMountRepairMode
Definition: settings.h:63
void SetAutobalanceMaxWeight(unsigned value)
Definition: settings.cc:110
string JoinStrings(const vector< string > &strings, const string &joint)
Definition: string.cc:356
void SetIsSilent(bool value)
Definition: settings.cc:352
void set_taint_environment(bool value)
Definition: options.h:198
Setting< UnionFsType > union_fs_
Definition: settings.h:257
bool IsOn(const std::string &param_value) const
Definition: options.cc:402
Setting< upload::SpoolerDefinition::DriverType > type_
Definition: settings.h:297
void SetTemplate(const std::string &from, const std::string &to)
Definition: settings.cc:168
const SettingsPublisher & settings() const
Definition: repository.h:316
Setting< bool > enforce_limits_
Definition: settings.h:246
std::string GetSingleAlias()
Definition: settings.cc:393
Setting< std::string > union_mnt_
Definition: settings.h:123
SettingsRepository(const std::string &fqrn)
Definition: settings.h:352
void SetLayoutRevision(const unsigned revision)
Definition: settings.cc:65
std::string log_dir() const
Definition: settings.h:101
Setting< bool > ignore_invalid_lease_
Definition: settings.h:450
void SetLeasePath(const std::string &path)
Definition: settings.cc:164
Setting< std::string > tmp_dir_
Definition: settings.h:379
static const char * kDriverNames[]
corresponds to DriverType
std::string cert_bundle() const
Definition: settings.h:370
std::vector< std::string > FindDirectories(const std::string &parent_dir)
Definition: posix.cc:1178
Setting< unsigned > layout_revision_
Definition: settings.h:227
void SetAutobalanceMinWeight(unsigned value)
Definition: settings.cc:114
char algorithm
SettingsPublisher(const std::string &fqrn)
Definition: settings.h:395
OptionsManager * options_mgr_
Definition: settings.h:540
Setting< bool > is_silent_
Definition: settings.h:446
bool HasMasterKeys() const
Definition: settings.cc:247
void ApplyOptionsFromServerPath(const OptionsManager &options_mgr_, SettingsPublisher *settings_publisher)
Definition: settings.cc:512
Setting< shash::Any > base_hash_
Definition: settings.h:240
bool IsValid(const std::string &input) const
Definition: sanitizer.cc:112
Setting< unsigned > limit_root_catalog_kentries_
Definition: settings.h:249
bool FileExists(const std::string &path)
Definition: posix.cc:803
std::string cache_dir() const
Definition: settings.h:106
bool HasRepositoryKeys() const
Definition: settings.cc:260
std::string proxy() const
Definition: settings.h:368
const SettingsKeychain & keychain() const
Definition: settings.h:434
void SetTmpDir(const std::string &tmp_dir)
Definition: settings.cc:297
bool IsManagedRepository() const
Definition: settings.h:516
Setting< bool > in_enter_session_
Definition: settings.h:232
vector< string > SplitString(const string &str, char delim)
Definition: string.cc:306
void SetDryRun(bool value)
Definition: settings.cc:122
bool platform_getxattr(const std::string &path, const std::string &name, std::string *value)
Setting< std::string > template_from_
Definition: settings.h:267
Setting< uid_t > owner_uid_
Definition: settings.h:443
Setting< bool > use_catalog_autobalance_
Definition: settings.h:251
void SetProxy(const std::string &proxy)
Definition: settings.cc:336
const char kSuffixCatalog
Definition: hash.h:54
std::string GetReadOnlyXAttr(const std::string &attr)
Definition: settings.cc:466
void SetUrl(const std::string &url)
Definition: settings.cc:330
std::vector< std::string > GetAllKeys()
Definition: options.cc:416
std::string ovl_work_dir() const
Definition: settings.h:107
SettingsRepository CreateSettingsRepository(const std::string &ident)
Definition: settings.cc:416
Setting< unsigned > autobalance_max_weight_
Definition: settings.h:252
void SetLimitRootCatalogKentries(unsigned value)
Definition: settings.cc:98
bool MkdirDeep(const std::string &path, const mode_t mode, bool verify_writable)
Definition: posix.cc:855
void SetIsManaged(bool value)
Definition: settings.cc:354
Setting< std::string > workspace_
Definition: settings.h:121
const SettingsTransaction & transaction() const
Definition: settings.h:433
SettingsPublisher * CreateSettingsPublisherFromSession()
Definition: settings.cc:476
SettingsKeychain keychain_
Definition: settings.h:454
bool is_default() const
Definition: settings.h:50
std::string proxy() const
Definition: settings.h:422
void SetHashAlgorithm(const std::string &algorithm)
Definition: settings.cc:77
string StringifyInt(const int64_t value)
Definition: string.cc:77
void SetLocator(const std::string &locator)
Definition: settings.cc:207
Setting< std::string > fqrn_
Definition: settings.h:296
void SetCertBundle(const std::string &cert_bundle)
Definition: settings.cc:302
Setting< bool > print_changeset_
Definition: settings.h:254
SettingsStorage * GetStorage()
Definition: settings.h:435
bool HasPrefix(const string &str, const string &prefix, const bool ignore_case)
Definition: string.cc:279
Setting< zlib::Algorithms > compression_algorithm_
Definition: settings.h:242
bool GetValue(const std::string &key, std::string *value) const
Definition: options.cc:369
OptionsManager * options_mgr_
Definition: cvmfs.cc:155
Setting< std::string > fqrn_
Definition: settings.h:334
bool DirectoryExists(const std::string &path)
Definition: posix.cc:824
Setting< std::string > cert_bundle_
Definition: settings.h:382
void SetLimitFileSizeMb(unsigned value)
Definition: settings.cc:102
Setting< std::string > url_
Definition: settings.h:441
Setting< std::string > template_to_
Definition: settings.h:268
void SetUseCatalogAutobalance(bool value)
Definition: settings.cc:106
Setting< EUnionMountRepairMode > repair_mode_
Definition: settings.h:127
Setting< unsigned > autobalance_min_weight_
Definition: settings.h:253
void SetCompressionAlgorithm(const std::string &algorithm)
Definition: settings.cc:81
Setting< std::string > private_key_path_
Definition: settings.h:338
void SetSpoolArea(const std::string &path)
Definition: settings.cc:32
Setting< shash::Algorithms > hash_algorithm_
Definition: settings.h:241
void SetEnforceLimits(bool value)
Definition: settings.cc:86
Setting< std::string > tmp_dir_
Definition: settings.h:298
void ParsePath(const std::string &config_file, const bool external)
Definition: options.cc:144
void SetProxy(const std::string &proxy)
Definition: settings.cc:294
Setting< std::string > master_private_key_path_
Definition: settings.h:336
const SettingsKeychain & keychain() const
Definition: settings.h:372
static const unsigned kDefaultWhitelistValidity
Definition: settings.h:393
std::string tmp_dir() const
Definition: settings.h:92
Setting< std::string > proxy_
Definition: settings.h:442
void SetBaseHash(const shash::Any &hash)
Definition: settings.cc:73
Setting< std::string > endpoint_
Definition: settings.h:299
uint64_t String2Uint64(const string &value)
Definition: string.cc:240
void SetPrintChangeset(bool value)
Definition: settings.cc:118
bool GetUidOf(const std::string &username, uid_t *uid, gid_t *main_gid)
Definition: posix.cc:1342
Algorithms ParseHashAlgorithm(const string &algorithm_option)
Definition: hash.cc:71
std::string scratch_dir() const
Definition: settings.h:99
std::map< std::string, std::string > GetSessionEnvironment()
Definition: settings.cc:367
SettingsSpoolArea * GetSpoolArea()
Definition: settings.h:217
bool HasDanglingRepositoryKeys() const
Definition: settings.cc:253
Any MkFromHexPtr(const HexPtr hex, const char suffix)
Definition: hash.cc:82
Setting< unsigned > limit_file_size_mb_
Definition: settings.h:250
void MakeLocal(const std::string &path)
Definition: settings.cc:193
Setting< std::string > master_public_key_path_
Definition: settings.h:337
void SetOwner(const std::string &user_name)
Definition: settings.cc:339
void SetRepairMode(const EUnionMountRepairMode val)
Definition: settings.cc:41
Setting< unsigned > limit_nested_catalog_kentries_
Definition: settings.h:248
SettingsKeychain keychain_
Definition: settings.h:384
Setting< bool > dry_run_
Definition: settings.h:255
Setting< std::string > certificate_path_
Definition: settings.h:339
std::string url() const
Definition: settings.h:367
Setting< std::string > proxy_
Definition: settings.h:378
void MakeS3(const std::string &s3_config, const std::string &tmp_dir)
Definition: settings.cc:186
std::string url() const
Definition: settings.h:421
Setting< std::string > tmp_dir_
Definition: settings.h:122
std::string GetLocator() const
Definition: settings.cc:181
Setting< std::string > url_
Definition: settings.h:377
void SetInEnterSession(const bool value)
Definition: settings.cc:69
Setting< std::string > gw_key_path_
Definition: settings.h:340
Setting< std::string > lease_path_
Definition: settings.h:262
std::string tmp_dir() const
Definition: settings.h:369
static const unsigned kRequiredLayoutRevision
Definition: repository.h:277
class static __attribute__((visibility("default"))) Repository std::string GetFqrnFromUrl(const std::string &url)
Definition: repository.cc:229
bool HasDanglingMasterKeys() const
Definition: settings.cc:239
Setting< bool > enable_mtime_ns_
Definition: settings.h:247