NationalSecurityAgency/ghidra · error · IOException

Entry missing ending quote in pg_ident.conf

Error message

Entry missing ending quote in pg_ident.conf

What it means

Thrown by ServerConfig.IdentEntry.parse when the system-name field is quoted (starts with '"') but the closing quote is missing. parseDoubleQuote scans to end-of-line; if the last character is not a quote, the entry is malformed. Quoting is allowed on the system-name field only when properly closed.

Source

Thrown at Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/ServerConfig.java:394

			}
			if (line.charAt(pos) == '"') {
				throw new IOException("Bad map field in pg_ident.conf entry");
			}
			if (line.charAt(pos) == '#') {
				return false;			// Return false to indicate comment
			}
			int endpos = parseField(pos, line);
			mapName = line.substring(pos, endpos);

			pos = skipWhiteSpace(endpos, line);
			if (pos >= line.length()) {
				throw new IOException("Missing system-name in pg_ident.conf entry");
			}
			else if (line.charAt(pos) == '"') {
				systemNameIsQuoted = true;
				endpos = parseDoubleQuote(pos, line);
				if (line.charAt(endpos - 1) != '"') {
					throw new IOException("Entry missing ending quote in pg_ident.conf");
				}
				systemName = line.substring(pos + 1, endpos - 1);		// Strip quotes
			}
			else {
				systemNameIsQuoted = false;
				endpos = parseField(pos, line);
				systemName = line.substring(pos, endpos);
			}

			pos = skipWhiteSpace(endpos, line);
			if (pos >= line.length()) {
				throw new IOException("Missing role in pg_ident.conf entry");
			}
			else if (line.charAt(pos) == '"') {
				roleNameIsQuoted = true;
				endpos = parseDoubleQuote(pos, line);
				if (line.charAt(endpos - 1) != '"') {
					throw new IOException("Entry missing ending quote in pg_ident.conf");

View on GitHub (pinned to d5f144c24d)

Solutions

  1. Add the missing closing double-quote to the system-name field.
  2. If the field has no embedded spaces, remove the opening quote and use an unquoted token instead.
  3. Validate quoted fields are balanced before saving the file.

Example fix

// before (pg_ident.conf line)
mymap   "my user   myrole
// after
mymap   "my user"   myrole
Defensive patterns

Strategy: validation

Validate before calling

// Check that a quoted system-name field is properly closed
String[] parts = line.trim().split("\\s+", 3);
if (parts.length >= 2 && parts[1].startsWith("\"")) {
    // count quotes in the system-name token region; must be even
    String sysField = parts[1];
    if (!sysField.endsWith("\"") || sysField.length() < 2) {
        throw new IllegalArgumentException(
            "pg_ident.conf system-name quoted field missing closing quote: " + line);
    }
}
identEntry.parse(line);

Try / catch

try {
    identEntry.parse(line);
} catch (IOException e) {
    if (e.getMessage().contains("missing ending quote")) {
        log.error("pg_ident.conf quoted field is missing its closing quote: '{}'", line);
    }
    throw e;
}

Prevention

When it happens

Trigger: Parsing a pg_ident.conf line where the system-name begins with '"' but has no matching closing '"', e.g. 'mymap "myuser myrole' or 'mymap "myuser'.

Common situations: Hand-editing pg_ident.conf and forgetting the closing quote. A field with an embedded space was quoted but the quote was accidentally deleted. Encoding/copy issues that dropped a character.

Related errors


AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14). Data as JSON: /api/errors/4d66a3c45abb0116. Report an issue: GitHub.