AdguardTeam/AdGuardHome · error
reading db: %w
Error message
reading db: %w
What it means
The DHCP server could not read the lease database file from disk; the wrapped error is an os.ReadFile failure other than 'file does not exist' (missing file is tolerated and treated as empty DB).
Source
Thrown at internal/dhcpd/db.go:97
return nil, fmt.Errorf("parsing expiry time: %w", err)
}
}
return &dhcpsvc.Lease{
Expiry: expiry,
IP: dl.IP,
Hostname: dl.Hostname,
HWAddr: mac,
IsStatic: dl.IsStatic,
}, nil
}
// dbLoad loads stored leases.
func (s *server) dbLoad() (err error) {
data, err := os.ReadFile(s.conf.dbFilePath)
if err != nil {
if !errors.Is(err, os.ErrNotExist) {
return fmt.Errorf("reading db: %w", err)
}
return nil
}
dl := &dataLeases{}
err = json.Unmarshal(data, dl)
if err != nil {
return fmt.Errorf("decoding db: %w", err)
}
leases := dl.Leases
leases4 := []*dhcpsvc.Lease{}
leases6 := []*dhcpsvc.Lease{}
for _, l := range leases {
var lease *dhcpsvc.Lease
lease, err = l.toLease()View on GitHub (pinned to b41aefbe51)
Solutions
- Check permissions on the leases file and data dir (chown/chmod so the service user can read)
- Verify the path is a regular file, not a directory
- Look for underlying I/O errors (dmesg/disk health) if permissions are fine
Defensive patterns
Strategy: try-catch
Validate before calling
// pre-flight check
if fi, err := os.Stat(path); err == nil && fi.IsDir() { return errors.New("leases path is a directory") } Try / catch
if err := s.dbLoad(); err != nil { if errors.Is(err, os.ErrPermission) { /* fix perms / alert */ }; return err } Prevention
- Grant service user read/write on the data dir
- Monitor for SELinux/AppArmor denials
When it happens
Trigger: Permission denied on the leases file, path is a directory, I/O errors, or the configured working directory containing an unreadable leases.db.
Common situations: Running the service as a user without read access to the data dir; SELinux/AppArmor restrictions; the file being replaced with a directory; disk failures.
Related errors
- networksetup failed to configure dns servers: %w
- reading key file: %w
- parsing hardware address: %w
- parsing expiry time: %w
- decoding db: %w
AI-assisted analysis of AdguardTeam/AdGuardHome@b41aefbe51 (2026-08-27).
Data as JSON: /api/errors/05f17e44d10bcf47.
Report an issue: GitHub.