Commit 26ae90a6 authored by jan.koester's avatar jan.koester
Browse files

tes

parent 352941bf
Loading
Loading
Loading
Loading
Loading
+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)