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/Config.h"
13 #include "auth/Gadgets.h"
14 #include "auth/Scheme.h"
15 #include "globals.h"
16 
17 std::vector<Auth::Scheme::Pointer> *Auth::Scheme::_Schemes = NULL;
18 
19 void
AddScheme(Auth::Scheme::Pointer instance)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
Find(const char * typestr)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> &
GetSchemes()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
FreeAll()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 
71