Loading debian/changelog +66 −0 Original line number Diff line number Diff line authdb (20260618+2) unstable; urgency=high * file backend: File::read()/write() looped on rd/wr==0 as if more data were pending instead of treating it as EOF/failure; switch do/while to a while loop and throw on a zero-byte result so a stalled fd can no longer spin or silently truncate a record. * file backend searchValue() / export doExport(): record-walk advanced the read cursor by the record's own datasize without checking it against the buffer end, so a corrupt or oversized datasize could walk past end() (OOB read) or spin forever; now validates the computed offset before advancing and bails out of the loop otherwise. * AuthBackend::Guard: drop the shared->exclusive upgrade path and always take the exclusive lock; the upgrade bookkeeping (_Upgraded, mode tracking) was extra surface for lock-state bugs with no real shared-access use left. * RecordIndex: guard _nameIndex/_offsetIndex/_revision with a shared_mutex. build()/addEntry()/removeEntry()/invalidate() take a unique lock and findByName()/findByUuid()/findOffset()/listByType()/ valid()/revision() take a shared lock; previously all of these were unsynchronized against concurrent index rebuilds. * Session / client-connection expiry: track last-access time instead of creation time (SessionData::_accessed, ClientConnections::_accessed, updated on every lookup). Long-lived but actively used sessions and client connections no longer get reaped by the 24h idle sweep just because they were created a day ago. * ClusterSession::getSession(): on cluster re-import, check for an already-present local session before appending the imported copy instead of unconditionally removing and replacing it — closes a race where a concurrent request's freshly-created local session could be clobbered by a stale cluster read. * Cluster backend: cache the g_Cluster pointer into a local before use in queueDataPush/pushManifestSync/fetchFromCluster/purge/constructor, avoiding a TOCTOU null-dereference if the global is reset by another thread between the null check and the use. * authdb.cpp: server now starts in plain HTTP mode when /AUTHDB/SSL/CERT and /AUTHDB/SSL/KEY are not configured (cluster mode still requires both and refuses to start otherwise); config key lookups (CERT/KEY/PLUGINS/PATH) are null-checked before use instead of dereferencing an absent key; domains with an empty storage path are skipped when populating the domain cache instead of constructing a broken backend for them. * admin.cpp/api.cpp: JSON API requests are now routed through ApiController from "/", "/admin/api" and "/settings/{domain}/api" in addition to the existing REST routes, so the client library can talk JSON directly to the admin domain without the HTML login flow. * admin.cpp: isSuperAdmin() no longer looks up membership in an admin.local "SuperAdmin" group; it now holds full admin rights if the session has every restrictive (default=false) GPO granted, removing the dependency on a specific group existing in the admin backend. * api.cpp GPOadd: check gpo.exists() before gpo.create() so re-adding an already-existing GPO no longer fails; create()/exists() failures are now caught and logged instead of silently reporting false. * api.cpp: client-key login without an explicit domain now resolves to the "admin.local" domain instead of leaving the session domain empty. * api.cpp editClient: use Client::edit() in place instead of remove()+create(), avoiding a window where the client record is briefly absent and a recreate under a fresh UUID could dangle existing references to the old id. * Client library: setUrl() now rewrites a bare "/" request path to "/settings/admin/api" to match the server's new JSON routing. * Node.js bindings: replace exports->GetIsolate() with Isolate::GetCurrent() in AuthDBConnectionJS::Init/AuthDBClientJS::Init for compatibility with current V8/Node headers. -- Jan Koester <jan.koester@tuxist.de> Thu, 18 Jun 2026 05:52:44 +0200 authdb (20260502+1) unstable; urgency=medium * Rebuild against libnetplus 20260502+1 (QUIC performance improvements) Loading Loading
debian/changelog +66 −0 Original line number Diff line number Diff line authdb (20260618+2) unstable; urgency=high * file backend: File::read()/write() looped on rd/wr==0 as if more data were pending instead of treating it as EOF/failure; switch do/while to a while loop and throw on a zero-byte result so a stalled fd can no longer spin or silently truncate a record. * file backend searchValue() / export doExport(): record-walk advanced the read cursor by the record's own datasize without checking it against the buffer end, so a corrupt or oversized datasize could walk past end() (OOB read) or spin forever; now validates the computed offset before advancing and bails out of the loop otherwise. * AuthBackend::Guard: drop the shared->exclusive upgrade path and always take the exclusive lock; the upgrade bookkeeping (_Upgraded, mode tracking) was extra surface for lock-state bugs with no real shared-access use left. * RecordIndex: guard _nameIndex/_offsetIndex/_revision with a shared_mutex. build()/addEntry()/removeEntry()/invalidate() take a unique lock and findByName()/findByUuid()/findOffset()/listByType()/ valid()/revision() take a shared lock; previously all of these were unsynchronized against concurrent index rebuilds. * Session / client-connection expiry: track last-access time instead of creation time (SessionData::_accessed, ClientConnections::_accessed, updated on every lookup). Long-lived but actively used sessions and client connections no longer get reaped by the 24h idle sweep just because they were created a day ago. * ClusterSession::getSession(): on cluster re-import, check for an already-present local session before appending the imported copy instead of unconditionally removing and replacing it — closes a race where a concurrent request's freshly-created local session could be clobbered by a stale cluster read. * Cluster backend: cache the g_Cluster pointer into a local before use in queueDataPush/pushManifestSync/fetchFromCluster/purge/constructor, avoiding a TOCTOU null-dereference if the global is reset by another thread between the null check and the use. * authdb.cpp: server now starts in plain HTTP mode when /AUTHDB/SSL/CERT and /AUTHDB/SSL/KEY are not configured (cluster mode still requires both and refuses to start otherwise); config key lookups (CERT/KEY/PLUGINS/PATH) are null-checked before use instead of dereferencing an absent key; domains with an empty storage path are skipped when populating the domain cache instead of constructing a broken backend for them. * admin.cpp/api.cpp: JSON API requests are now routed through ApiController from "/", "/admin/api" and "/settings/{domain}/api" in addition to the existing REST routes, so the client library can talk JSON directly to the admin domain without the HTML login flow. * admin.cpp: isSuperAdmin() no longer looks up membership in an admin.local "SuperAdmin" group; it now holds full admin rights if the session has every restrictive (default=false) GPO granted, removing the dependency on a specific group existing in the admin backend. * api.cpp GPOadd: check gpo.exists() before gpo.create() so re-adding an already-existing GPO no longer fails; create()/exists() failures are now caught and logged instead of silently reporting false. * api.cpp: client-key login without an explicit domain now resolves to the "admin.local" domain instead of leaving the session domain empty. * api.cpp editClient: use Client::edit() in place instead of remove()+create(), avoiding a window where the client record is briefly absent and a recreate under a fresh UUID could dangle existing references to the old id. * Client library: setUrl() now rewrites a bare "/" request path to "/settings/admin/api" to match the server's new JSON routing. * Node.js bindings: replace exports->GetIsolate() with Isolate::GetCurrent() in AuthDBConnectionJS::Init/AuthDBClientJS::Init for compatibility with current V8/Node headers. -- Jan Koester <jan.koester@tuxist.de> Thu, 18 Jun 2026 05:52:44 +0200 authdb (20260502+1) unstable; urgency=medium * Rebuild against libnetplus 20260502+1 (QUIC performance improvements) Loading