CernVM-FS  2.12.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
cvmfs_suid_util.cc
Go to the documentation of this file.
1 
5 #include "cvmfs_suid_util.h"
6 
7 #include <sys/stat.h>
8 #include <unistd.h>
9 
10 #include <cassert>
11 #include <climits>
12 #include <cstdlib>
13 
14 #include "sanitizer.h"
15 
16 using namespace std; // NOLINT
17 
18 namespace cvmfs_suid {
19 
24 string EscapeSystemdUnit(const string &path) {
25  assert(!path.empty());
26 
27  string normalized_path(path);
28  size_t pos;
29  while ((pos = normalized_path.find("//")) != string::npos) {
30  normalized_path.replace(pos, 2, "/");
31  }
32 
33  if (normalized_path == "/")
34  return "-.mount";
35 
36  sanitizer::InputSanitizer sanitizer("az AZ 09 _");
37  unsigned length = normalized_path.length();
38  string result;
39  for (unsigned i = 0; i < length; ++i) {
40  char c = normalized_path[i];
41  if (c == '/') {
42  if ((i == 0) || (i == length - 1))
43  continue;
44  result.push_back('-');
45  } else if ((c == '.') && (i > 0)) {
46  result.push_back('.');
47  } else if (sanitizer.IsValid(string(&c, 1))) {
48  result.push_back(c);
49  } else {
50  result.push_back('\\');
51  result.push_back('x');
52  result.push_back((c / 16) + ((c / 16 <= 9) ? '0' : 'a'-10));
53  result.push_back((c % 16) + ((c % 16 <= 9) ? '0' : 'a'-10));
54  }
55  }
56 
57  return result + ".mount";
58 }
59 
60 
61 bool PathExists(const std::string &path) {
62  struct stat info;
63  int retval = stat(path.c_str(), &info);
64  return retval == 0;
65 }
66 
67 
68 string ResolvePath(const std::string &path) {
69  char buf[PATH_MAX];
70  char *retval = realpath(path.c_str(), buf);
71  if (retval == NULL) return "";
72  return string(buf);
73 }
74 
75 } // namespace cvmfs_suid
assert((mem||(size==0))&&"Out Of Memory")
bool IsValid(const std::string &input) const
Definition: sanitizer.cc:114
string EscapeSystemdUnit(const string &path)
string ResolvePath(const std::string &path)
bool PathExists(const std::string &path)