void authenticateAuthUserRequestUnlock(auth_user_request_t * auth_user_request) { debug(29, 9) ("authenticateAuthUserRequestUnlock auth_user request '%p'.\n", auth_user_request); assert(auth_user_request != NULL); if (auth_user_request->references > 0) { auth_user_request->references--; } else { debug(29, 1) ("Attempt to lower Auth User request %p refcount below 0!\n", auth_user_request); } debug(29, 9) ("authenticateAuthUserRequestUnlock auth_user_request '%p' now at '%ld'.\n", auth_user_request, (long int) auth_user_request->references); if (auth_user_request->references == 0) { /* not locked anymore */ authenticateAuthUserRequestFree(auth_user_request); } }
void authenticateFreeProxyAuthUser(void *data) { auth_user_t *u = data; auth_user_request_t *auth_user_request; dlink_node *link, *tmplink; assert(data != NULL); debug(29, 5) ("authenticateFreeProxyAuthUser: Freeing auth_user '%p' with refcount '%ld'.\n", u, (long int) u->references); assert(u->references == 0); /* were they linked in by username ? */ if (u->usernamehash) { assert(u->usernamehash->auth_user == u); debug(29, 5) ("authenticateFreeProxyAuthUser: removing usernamehash entry '%p'\n", u->usernamehash); hash_remove_link(proxy_auth_username_cache, (hash_link *) u->usernamehash); /* don't free the key as we use the same user string as the auth_user * structure */ memFree(u->usernamehash, MEM_AUTH_USER_HASH); } /* remove any outstanding requests */ link = u->requests.head; while (link) { debug(29, 5) ("authenticateFreeProxyAuthUser: removing request entry '%p'\n", link->data); auth_user_request = link->data; tmplink = link; link = link->next; dlinkDelete(tmplink, &u->requests); dlinkNodeDelete(tmplink); authenticateAuthUserRequestFree(auth_user_request); } /* free cached acl results */ aclCacheMatchFlush(&u->proxy_match_cache); /* free seen ip address's */ authenticateAuthUserClearIp(u); if (u->scheme_data && u->auth_module > 0) authscheme_list[u->auth_module - 1].FreeUser(u); /* prevent accidental reuse */ u->auth_type = AUTH_UNKNOWN; memFree(u, MEM_AUTH_USER_T); }