]> git.ipfire.org Git - thirdparty/squid.git/blame - src/auth/Scheme.cc
Source Format Enforcement (#763)
[thirdparty/squid.git] / src / auth / Scheme.cc
CommitLineData
f5691f9c 1/*
f70aedc4 2 * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
f5691f9c 3 *
bbc27441
AJ
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
f5691f9c 7 */
8
bbc27441
AJ
9/* DEBUG: section 29 Authenticator */
10
582c2af2 11#include "squid.h"
602d9612
A
12#include "auth/Gadgets.h"
13#include "auth/Scheme.h"
ae578099 14#include "auth/SchemeConfig.h"
582c2af2 15#include "globals.h"
f5691f9c 16
523c3de3 17std::vector<Auth::Scheme::Pointer> *Auth::Scheme::_Schemes = NULL;
f5691f9c 18
19void
c6cf8dee 20Auth::Scheme::AddScheme(Auth::Scheme::Pointer instance)
f5691f9c 21{
22 iterator i = GetSchemes().begin();
23
24 while (i != GetSchemes().end()) {
5817ee13 25 assert(strcmp((*i)->type(), instance->type()) != 0);
f5691f9c 26 ++i;
27 }
28
5817ee13 29 GetSchemes().push_back(instance);
f5691f9c 30}
31
c6cf8dee
AJ
32Auth::Scheme::Pointer
33Auth::Scheme::Find(const char *typestr)
f5691f9c 34{
35 for (iterator i = GetSchemes().begin(); i != GetSchemes().end(); ++i) {
d6374be6 36 if (strcmp((*i)->type(), typestr) == 0)
f5691f9c 37 return *i;
38 }
39
c6cf8dee 40 return Auth::Scheme::Pointer(NULL);
f5691f9c 41}
42
523c3de3 43std::vector<Auth::Scheme::Pointer> &
c6cf8dee 44Auth::Scheme::GetSchemes()
f5691f9c 45{
46 if (!_Schemes)
523c3de3 47 _Schemes = new std::vector<Auth::Scheme::Pointer>;
f5691f9c 48
49 return *_Schemes;
50}
51
5817ee13
AJ
52/**
53 * Called when a graceful shutdown is to occur of each scheme module.
54 * On completion the auth components are to be considered deleted.
55 * None will be available globally. Some may remain around for their
56 * currently active connections to close, but only those active
57 * connections will retain pointers to them.
f5691f9c 58 */
59void
c6cf8dee 60Auth::Scheme::FreeAll()
f5691f9c 61{
5862d3be 62 assert(shutting_down);
ce8876d2 63
f5691f9c 64 while (GetSchemes().size()) {
c6cf8dee 65 Auth::Scheme::Pointer scheme = GetSchemes().back();
f5691f9c 66 GetSchemes().pop_back();
c6cf8dee 67 scheme->shutdownCleanup();
f5691f9c 68 }
69}
f53969cc 70