CernVM-FS  2.13.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
sanitizer.h
Go to the documentation of this file.
1 
5 #ifndef CVMFS_SANITIZER_H_
6 #define CVMFS_SANITIZER_H_
7 
8 #include <string>
9 #include <vector>
10 
11 #ifdef CVMFS_NAMESPACE_GUARD
12 namespace CVMFS_NAMESPACE_GUARD {
13 #endif
14 
15 namespace sanitizer {
16 
17 class CharRange {
18  public:
19  CharRange(const char range_begin, const char range_end);
20  explicit CharRange(const char single_char);
21  bool InRange(const char c) const;
22 
23  private:
25  char range_end_;
26 };
27 
28 
30  public:
31  // whitelist is of the form "az AZ _ - 09"
32  // Any other format will abort the program
33  explicit InputSanitizer(const std::string &whitelist);
34  InputSanitizer(const std::string &whitelist, int max_length);
35  virtual ~InputSanitizer() { }
36 
37  std::string Filter(const std::string &input) const;
38  bool IsValid(const std::string &input) const;
39 
40  protected:
41  bool Sanitize(const std::string &input, std::string *filtered_output) const {
42  return Sanitize(input.begin(), input.end(), filtered_output);
43  }
44  virtual bool Sanitize(std::string::const_iterator begin,
45  std::string::const_iterator end,
46  std::string *filtered_output) const;
47  bool CheckRanges(const char chr) const;
48 
49  private:
50  void InitValidRanges(const std::string &whitelist);
51 
53  std::vector<CharRange> valid_ranges_;
54 };
55 
56 
58  public:
59  AlphaNumSanitizer() : InputSanitizer("az AZ 09") { }
60 };
61 
62 
63 class UuidSanitizer : public InputSanitizer {
64  public:
65  UuidSanitizer() : InputSanitizer("af AF 09 -") { }
66 };
67 
68 
70  public:
71  CacheInstanceSanitizer() : InputSanitizer("az AZ 09 _") { }
72 };
73 
74 
76  public:
77  RepositorySanitizer() : InputSanitizer("az AZ 09 - _ .", 60) { }
78 };
79 
80 
82  public:
83  AuthzSchemaSanitizer() : InputSanitizer("az AZ 09 - _ .") { }
84 };
85 
86 
87 // Also update is_valid_branch in cvmfs_server
89  public:
90  BranchSanitizer() : InputSanitizer("az AZ 09 - _ . @ /") { }
91 };
92 
93 
94 class TagSanitizer : public InputSanitizer {
95  public:
96  TagSanitizer() : InputSanitizer("az AZ 09 - _ . / :") { }
97 };
98 
99 
101  public:
103 
104  protected:
105  virtual bool Sanitize(std::string::const_iterator begin,
106  std::string::const_iterator end,
107  std::string *filtered_output) const;
108 };
109 
110 
112  public:
114 
115  protected:
116  virtual bool Sanitize(std::string::const_iterator begin,
117  std::string::const_iterator end,
118  std::string *filtered_output) const;
119 };
120 
121 
126  public:
127  Base64Sanitizer() : InputSanitizer("az AZ 09 + / - _ =") { }
128 };
129 
134 class UriSanitizer : public InputSanitizer {
135  public:
136  UriSanitizer() : InputSanitizer("az AZ 09 . - _ /") { }
137 };
138 
139 } // namespace sanitizer
140 
141 #ifdef CVMFS_NAMESPACE_GUARD
142 } // namespace CVMFS_NAMESPACE_GUARD
143 #endif
144 
145 #endif // CVMFS_SANITIZER_H_
bool Sanitize(const std::string &input, std::string *filtered_output) const
Definition: sanitizer.h:41
std::vector< CharRange > valid_ranges_
Definition: sanitizer.h:53
const whitelist::Whitelist * whitelist() const
Definition: repository.h:124