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)20Auth::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)33Auth::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()44Auth::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()60Auth::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