NationalSecurityAgency/ghidra · error · IOException

Missing system-name in pg_ident.conf entry

Error message

Missing system-name in pg_ident.conf entry

What it means

Thrown by ServerConfig.IdentEntry.parse when, after reading the map-name field, there is no remaining content for the required system-name field (pos >= line.length() after skipping whitespace). The pg_ident.conf entry format requires three fields: map name, system (OS) user name, and role.

Source

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

		 */
		public boolean parse(String line) throws IOException {
			int pos = 0;
			pos = skipWhiteSpace(pos, line);
			if (pos >= line.length()) {
				return false;			// Blank line, treat as comment
			}
			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");

View on GitHub (pinned to d5f144c24d)

Solutions

  1. Add the missing system-name (OS user) field after the map name.
  2. Use the full three-field form: mapname systemusername rolename.
  3. Remove incomplete lines or comment them out with '#'.

Example fix

// before (pg_ident.conf line)
mymap   
// after
mymap   myuser   myrole
Defensive patterns

Strategy: validation

Validate before calling

// Ensure a pg_ident.conf line has all three fields before parsing
String[] split = line.trim().split("\\s+");
if (split.length < 3) {
    throw new IllegalArgumentException(
        "pg_ident.conf entry needs map-name, system-name, and role: " + line);
}
identEntry.parse(line);

Try / catch

try {
    identEntry.parse(line);
} catch (IOException e) {
    if (e.getMessage().contains("Missing system-name")) {
        log.error("pg_ident.conf entry missing system-name field: '{}'", line);
    }
    throw e;
}

Prevention

When it happens

Trigger: Parsing a pg_ident.conf line that has a map name but no system-name token afterwards, e.g. 'mymap' alone or 'mymap ' with only trailing whitespace.

Common situations: A truncated pg_ident.conf line missing the system-user field. Editing the file and deleting the second field. A copy-paste that dropped columns.

Related errors


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