projectdiscovery/subfinder · error

terminated with condition

Error message

%s terminated with condition: %s

What it means

DNSDB source termination notice: the final JSONL batch object from the DNSDB API carried a condition that was neither 'succeeded' nor (the already-handled) 'limited'. Per the code comments, anything else is an error condition — the results streamed so far are partial, and the user must decide to keep them or retry the query.

Solutions

  1. Inspect the condition string in the message to determine why DNSDB stopped (e.g. 'blocked', quota exhausted)
  2. If credentials are used, verify the DNSDB API key and quota tier
  3. Re-run the enumeration for that domain, optionally with an offset, to retrieve the remaining batches
  4. Treat already-received subdomains as partial results unless the condition indicates data corruption
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at pkg/subscraping/sources/dnsdb/dnsdb.go:172 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of projectdiscovery/subfinder@7a0b91f0fa (2026-09-06). Data as JSON: /api/errors/bc1b7ae501797576. Report an issue: GitHub.

Appendix: source

Thrown at pkg/subscraping/sources/dnsdb/dnsdb.go:172

				} else if respCond != "begin" {
					break
				}
			}

			// Check the terminating jsonl object's condition. There are 3 possible scenarios:
			// 1. "limited" - There are more results available, make another query with an offset
			// 2. "succeeded" - The query completed successfully and all results were sent.
			// 3. anything else - This is an error and should be reported to the user. The user can then decide to use the results up to this
			// point or discard and retry.
			if respCond == "limited" {
				if offsetMax != 0 && s.results <= offsetMax {
					// Reset done to false to get more results with an offset query parameter set to s.results
					queryParams.Set("offset", strconv.FormatUint(s.results, 10))
					continue
				}
			} else if respCond != "succeeded" {
				// DNSDB's terminating jsonl object's cond is not "limited" or succeeded" (#3), this is an error, notify the user.
				err = fmt.Errorf("%s terminated with condition: %s", sourceName, respCond)
				results <- subscraping.Result{Source: sourceName, Type: subscraping.Error, Error: err}
				s.errors++
			}

			session.DiscardHTTPResponse(resp)
			break
		}
	}()

	return results
}

// Name returns the name of the source
func (s *Source) Name() string {
	return "dnsdb"
}

func (s *Source) IsDefault() bool {

View on GitHub (pinned to 7a0b91f0fa)