]> git.ipfire.org Git - thirdparty/squid.git/blob - src/auth/Scheme.cc
Source Format Enforcement (#763)
[thirdparty/squid.git] / src / auth / Scheme.cc
1 /*
2 * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
3 *
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.
7 */
8
9 /* DEBUG: section 29 Authenticator */
10
11 #include "squid.h"
12 #include "auth/Gadgets.h"
13 #include "auth/Scheme.h"
14 #include "auth/SchemeConfig.h"
15 #include "globals.h"
16
17 std::vector<Auth::Scheme::Pointer> *Auth::Scheme::_Schemes = NULL;
18
19 void
20 Auth::Scheme::AddScheme(Auth::Scheme::Pointer instance)
21 {
22 iterator i = GetSchemes().begin();
23
24 while (i != GetSchemes().end()) {
25 assert(strcmp((*i)->type(), instance->type()) != 0);
26 ++i;
27 }
28
29 GetSchemes().push_back(instance);
30 }
31
32 Auth::Scheme::Pointer
33 Auth::Scheme::Find(const char *typestr)
34 {
35 for (iterator i = GetSchemes().begin(); i != GetSchemes().end(); ++i) {
36 if (strcmp((*i)->type(), typestr) == 0)
37 return *i;
38 }
39
40 return Auth::Scheme::Pointer(NULL);
41 }
42
43 std::vector<Auth::Scheme::Pointer> &
44 Auth::Scheme::GetSchemes()
45 {
46 if (!_Schemes)
47 _Schemes = new std::vector<Auth::Scheme::Pointer>;
48
49 return *_Schemes;
50 }
51
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.
58 */
59 void
60 Auth::Scheme::FreeAll()
61 {
62 assert(shutting_down);
63
64 while (GetSchemes().size()) {
65 Auth::Scheme::Pointer scheme = GetSchemes().back();
66 GetSchemes().pop_back();
67 scheme->shutdownCleanup();
68 }
69 }
70