fix(db): strip NUL bytes from SNMP strings before PostgreSQL insert
Made-with: Cursor
This commit is contained in:
@@ -10,6 +10,11 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// pgText убирает U+0000: PostgreSQL text/json не принимают нулевой байт в UTF-8 (SQLSTATE 22021).
|
||||||
|
func pgText(s string) string {
|
||||||
|
return strings.ReplaceAll(s, "\x00", "")
|
||||||
|
}
|
||||||
|
|
||||||
type PostgresStore struct {
|
type PostgresStore struct {
|
||||||
db *sql.DB
|
db *sql.DB
|
||||||
}
|
}
|
||||||
@@ -61,8 +66,8 @@ func (s *PostgresStore) CreateScan(req CreateScanRequest) (ScanJob, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var snmpID any
|
var snmpID any
|
||||||
if job.SNMPCredentialsID != "" {
|
if v := pgText(job.SNMPCredentialsID); v != "" {
|
||||||
snmpID = job.SNMPCredentialsID
|
snmpID = v
|
||||||
}
|
}
|
||||||
|
|
||||||
query := `
|
query := `
|
||||||
@@ -74,7 +79,7 @@ insert into scan_jobs (
|
|||||||
|
|
||||||
_, err = s.db.ExecContext(context.Background(), query,
|
_, err = s.db.ExecContext(context.Background(), query,
|
||||||
job.ID,
|
job.ID,
|
||||||
job.Name,
|
pgText(job.Name),
|
||||||
job.Status,
|
job.Status,
|
||||||
string(cidrsJSON),
|
string(cidrsJSON),
|
||||||
string(excludeJSON),
|
string(excludeJSON),
|
||||||
@@ -375,10 +380,10 @@ values ($1, $2, $3, $4, $5, $6, $7, $8)`
|
|||||||
scanID,
|
scanID,
|
||||||
result.IP,
|
result.IP,
|
||||||
result.Success,
|
result.Success,
|
||||||
result.SysName,
|
pgText(result.SysName),
|
||||||
result.SysDescr,
|
pgText(result.SysDescr),
|
||||||
result.SysObjectID,
|
pgText(result.SysObjectID),
|
||||||
result.Error,
|
pgText(result.Error),
|
||||||
result.CheckedAt,
|
result.CheckedAt,
|
||||||
)
|
)
|
||||||
return err
|
return err
|
||||||
@@ -433,10 +438,10 @@ values ($1, $2, $3, $4, $5, $6, $7)`
|
|||||||
query,
|
query,
|
||||||
scanID,
|
scanID,
|
||||||
result.IP,
|
result.IP,
|
||||||
result.LocalPortNum,
|
pgText(result.LocalPortNum),
|
||||||
result.RemoteChassisID,
|
pgText(result.RemoteChassisID),
|
||||||
result.RemotePortID,
|
pgText(result.RemotePortID),
|
||||||
result.RemoteSysName,
|
pgText(result.RemoteSysName),
|
||||||
result.CheckedAt,
|
result.CheckedAt,
|
||||||
)
|
)
|
||||||
return err
|
return err
|
||||||
@@ -487,9 +492,9 @@ values ($1, $2, $3, $4, $5, $6, $7)`
|
|||||||
scanID,
|
scanID,
|
||||||
result.IP,
|
result.IP,
|
||||||
result.IfIndex,
|
result.IfIndex,
|
||||||
result.IfDescr,
|
pgText(result.IfDescr),
|
||||||
result.IfName,
|
pgText(result.IfName),
|
||||||
result.IfOperStatus,
|
pgText(result.IfOperStatus),
|
||||||
result.CheckedAt,
|
result.CheckedAt,
|
||||||
)
|
)
|
||||||
return err
|
return err
|
||||||
@@ -589,7 +594,7 @@ values ($1, $2, $3, $4, $5, $6, $7, $8)`
|
|||||||
result.IfIndex,
|
result.IfIndex,
|
||||||
result.BridgePort,
|
result.BridgePort,
|
||||||
result.Vlan,
|
result.Vlan,
|
||||||
result.MAC,
|
pgText(result.MAC),
|
||||||
learnedIP,
|
learnedIP,
|
||||||
result.CheckedAt,
|
result.CheckedAt,
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user