#include "squid.h" #include "auth/digest/auth_digest.h" #include "auth/digest/User.h" #include "Debug.h" #include "dlink.h" #include "SquidConfig.h" #include "SquidTime.h" Auth::Digest::User::User(Auth::Config *aConfig) : Auth::User(aConfig), HA1created(0) { memset(HA1, 0, sizeof(HA1)); } Auth::Digest::User::~User() { dlink_node *link, *tmplink; link = nonces.head; while (link) { tmplink = link; link = link->next; dlinkDelete(tmplink, &nonces); authDigestNoncePurge(static_cast < digest_nonce_h * >(tmplink->data)); authDigestNonceUnlink(static_cast < digest_nonce_h * >(tmplink->data)); dlinkNodeDelete(tmplink); } } int32_t Auth::Digest::User::ttl() const { int32_t global_ttl = static_cast(expiretime - squid_curtime + ::Config.authenticateTTL); /* find the longest lasting nonce. */ int32_t latest_nonce = -1; dlink_node *link = nonces.head; while (link) { digest_nonce_h *nonce = static_cast(link->data); if (nonce->flags.valid && nonce->noncedata.creationtime > latest_nonce) latest_nonce = nonce->noncedata.creationtime; link = link->next; } if (latest_nonce == -1) return min(-1, global_ttl); int32_t nonce_ttl = latest_nonce - current_time.tv_sec + static_cast(Auth::Config::Find("digest"))->noncemaxduration; return min(nonce_ttl, global_ttl); } .