shadow1ng/fscan · error

oracle resend is not supported

Error message

oracle resend is not supported

What it means

When reading n bytes, the session refills its buffer via readPacket(). Oracle servers occasionally respond with a RESEND packet asking the client to retransmit. This library does not implement the resend flow, so it aborts with this error instead of silently mis-handling the exchange.

Source

Thrown at plugins/services/oracle_raw.go:334

	_, err := s.conn.Write(buf)
	return err
}

func (s *oracleSession) reset() {
	s.in = nil
	s.out.Reset()
	s.index = 0
	s.summary = nil
}

func (s *oracleSession) read(n int) ([]byte, error) {
	for s.index+n > len(s.in) {
		p, err := s.readPacket()
		if err != nil {
			return nil, err
		}
		if p.typ == oraclePacketResend {
			return nil, errors.New("oracle resend is not supported")
		}
		if p.typ != oraclePacketData {
			return nil, fmt.Errorf("expected oracle data packet, got %d", p.typ)
		}
	}
	ret := s.in[s.index : s.index+n]
	s.index += n
	return ret, nil
}

func (s *oracleSession) putBytes(data ...byte) {
	s.out.Write(data)
}

func (s *oracleSession) putString(v string) {
	s.putClr([]byte(v))
}

View on GitHub (pinned to 95cc12e753)

Solutions

  1. Improve network reliability between client and DB (reduce packet loss, avoid flaky VPN/proxy paths) so the server never requests a resend
  2. Retry the whole connection on this error, since resend is triggered per-connection state
  3. Check MTU/fragmentation issues (e.g. VPN tunnels) that commonly trigger Oracle resend requests
  4. Implement or upstream resend support in the plugin if your environment legitimately requires it

Example fix

// before
if p.typ == oraclePacketResend {
	return nil, errors.New("oracle resend is not supported")
}
// after
if p.typ == oraclePacketResend {
	// caller-level workaround: retry the entire authentication
	return nil, RetryableError(errors.New("oracle resend is not supported"))
}
Defensive patterns

Strategy: retry

Try / catch

if err != nil && strings.Contains(err.Error(), "resend is not supported") {
	// resend is per-connection state; restart the whole auth
	return retryAuth(dsn, 3)
}

Prevention

When it happens

Trigger: s.read(n) requests more data than buffered, the next packet fetched has type oraclePacketResend, and the caller is any of getByte/getBytes/getInt64/getNullTermString or TestSessionRead.

Common situations: Slow or congested links where the server requests retransmission; large auth payloads over lossy networks; packet loss between client and listener that triggers Oracle's resend mechanism.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of shadow1ng/fscan@95cc12e753 (2026-09-06). Data as JSON: /api/errors/424f4a7e7947d019. Report an issue: GitHub.