1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.security.visibility;
19
20 import java.util.regex.Pattern;
21
22 import org.apache.hadoop.hbase.classification.InterfaceAudience;
23
24
25
26
27 @InterfaceAudience.Private
28 public class VisibilityLabelsValidator {
29 private static final boolean[] validAuthChars = new boolean[256];
30
31 public static final String regex = "[A-Za-z_\\-\\:\\/\\.0-9]+";
32 public static final Pattern pattern = Pattern.compile(regex);
33
34 static {
35 for (int i = 0; i < 256; i++) {
36 validAuthChars[i] = false;
37 }
38
39 for (int i = 'a'; i <= 'z'; i++) {
40 validAuthChars[i] = true;
41 }
42
43 for (int i = 'A'; i <= 'Z'; i++) {
44 validAuthChars[i] = true;
45 }
46
47 for (int i = '0'; i <= '9'; i++) {
48 validAuthChars[i] = true;
49 }
50
51 validAuthChars['_'] = true;
52 validAuthChars['-'] = true;
53 validAuthChars[':'] = true;
54 validAuthChars['.'] = true;
55 validAuthChars['/'] = true;
56 }
57
58 static final boolean isValidAuthChar(byte b) {
59 return validAuthChars[0xff & b];
60 }
61
62 public static final boolean isValidLabel(byte[] label) {
63 for (int i = 0; i < label.length; i++) {
64 if (!isValidAuthChar(label[i])) {
65 return false;
66 }
67 }
68 return true;
69 }
70 }