in kerby-kerb/kerb-common/src/main/java/org/apache/kerby/kerberos/kerb/common/Krb5Parser.java [183:249]
private String insertEntries(String line, BufferedReader br, Map<String, Object> entries) throws IOException {
if (line == null) {
return line;
}
if (line.startsWith("[")) {
return line;
}
if (line.startsWith("}")) {
line = br.readLine();
if (line != null) {
line = line.trim();
}
return line;
}
if (line.isEmpty() || isComment(line)) {
line = br.readLine();
if (line != null) {
line = line.trim();
line = insertEntries(line, br, entries);
}
return line;
}
/*some special cases above*/
String[] kv = line.split("=", 2);
kv[0] = kv[0].trim();
kv[1] = kv[1].trim();
if (kv[1].startsWith("{")) {
Map<String, Object> meValue = new IdentityHashMap<>();
line = br.readLine();
while (line != null && (isComment(line.trim()) || line.trim().isEmpty())) {
line = br.readLine();
}
if (line != null) {
line = line.trim();
if (!line.contains("=") && !isComment(line) && !line.isEmpty()) {
// multi-line value
List<String> values = new ArrayList<>();
while (line != null && !line.contains("}")) {
line = line.trim();
if (!line.isEmpty() && !isComment(line)) {
values.add(line.trim());
}
line = br.readLine();
}
entries.put(kv[0], values);
line = br.readLine();
if (line != null) {
line = line.trim();
}
} else {
line = insertEntries(line, br, meValue);
entries.put(kv[0], meValue);
}
line = insertEntries(line, br, entries);
}
} else {
entries.put(kv[0], kv[1]);
line = br.readLine();
if (line != null) {
line = line.trim();
line = insertEntries(line, br, entries);
}
}
return line;
}