See <http://build.squid-cache.org/job/3.HEAD-i386-FreeBSD-6.4/327/changes>
Changes: [Automatic source maintenance <[email protected]>] SourceFormat Enforcement [Amos Jeffries <[email protected]>] Bug 2305: Multiple leaks and assertion crashes in authentication. * implements proper RefCounting using the RefCount.h classes for almost all auth objects in Squid. * Restructures auth objects with a simpler structure of duties and scopes. * Prunes away several circular and indirectly circular pointer loops * Adds an API to auth config for handling the mainRotate() event. To only shutdown helpers, fixing the loss of cached credentials on rotate. * Adds a username_cache page to cachemgr interface to display the current credentials and their TTLs to various revalidation or garbage events. With this we end up with several global pointers for the auth schemes which have been built into the current Squid. These are RefCount pointers, fixing the leak of schemes on shutdown. Schemes are now also permanent structures for the runtime of Squid, fixing leaks on reconfigure and rotate actions. These AuthSchemes are responsible for creating auth Config objects for each auth protocol configured in squid.conf. These config objects are now also able to be altered with a reconfigure instead of requiring a restart. Each HTTP request authentication attempt generates AuthUserRequest objects, which may or may not pointer to an AuthUser set of credentials being checked. AuthUserRequest is RefCounted instead of locked, fixing several assertion crashes. AuthUser is now RefCounted instead of locked. It's children inherit these properties. This simplifies the object handling a lot and fixes several assertions. * This also means AuthUser no longer needs a back-pointer to all AuthUserRequest in order to see if its still needed alive, fixing one circular lock loop and a few possible assertions. * The username cache pointers to only AuthUser objects, fixing a second cirular lock loop and potentially leakage. Also simplifying the hash cache handling a lot. Non-Auth code needing a reference to authentication credentials should hold a pointer to either an AuthUserRequest or AuthUser object. Not any other auth object. FUTURE WORK; There is still some conditions leading to auth re-challenge when they are not expected. A fair chunk of classes and enums have been shuffled into separate files to keep the scopes clearer. This could be increased in future when building the Auth namespace. Potential is now present for simpler TTL handling for all auth types. This work was a collaboration between multiple interested parties over the last year, with additional developer time and testing funded by Netspace Online Systems. ------------------------------------------ [...truncated 8567 lines...] rm -f *.lo rm -rf ./.deps rm -f Makefile Making distclean in base rm -f *.tab.c test -z "" || rm -f rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags test -z "testHeaders" || rm -f testHeaders rm -rf .libs _libs test -z "libbase.la" || rm -f libbase.la rm -f *.o rm -f "./so_locations" rm -f *.lo rm -rf ./.deps rm -f Makefile Making distclean in . rm -f *.tab.c test -z "" || rm -f rm -f DiskIO/.deps/.dirstamp rm -f DiskIO/.dirstamp rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags rm -f DiskIO/AIO/.deps/.dirstamp rm -f DiskIO/AIO/.dirstamp rm -f DiskIO/Blocking/.deps/.dirstamp rm -f DiskIO/Blocking/.dirstamp rm -f DiskIO/DiskDaemon/.deps/.dirstamp rm -f DiskIO/DiskDaemon/.dirstamp rm -f DiskIO/DiskThreads/.deps/.dirstamp rm -f tests/testAuth tests/testAuth rm -f DiskIO/DiskThreads/.dirstamp rm -f tests/.deps/.dirstamp rm -f tests/.dirstamp rm -f tests/testACLMaxUserIP tests/testACLMaxUserIP rm -f tests/testBoilerplate tests/testBoilerplate test -z "cf_gen_defines.cci cf_parser.cci err_type.cc globals.cc hier_code.cc icp_opcode.cc lookup_t.cc repl_modules.cc swap_log_op.cc squid.8 cf.data squid.conf.default squid.conf.documented DiskIO/DiskIOModules_gen.cc test_tools.cc *.a testHeaders" || rm -f cf_gen_defines.cci cf_parser.cci err_type.cc globals.cc hier_code.cc icp_opcode.cc lookup_t.cc repl_modules.cc swap_log_op.cc squid.8 cf.data squid.conf.default squid.conf.documented DiskIO/DiskIOModules_gen.cc test_tools.cc *.a testHeaders rm -f tests/testCacheManager tests/testCacheManager rm -f tests/testDiskIO tests/testDiskIO rm -f DiskIO/DiskDaemon/diskd DiskIO/DiskDaemon/diskd rm -f tests/testEvent tests/testEvent rm -f unlinkd unlinkd rm -f tests/testEventLoop tests/testEventLoop rm -rf .libs _libs rm -f tests/test_http_range tests/test_http_range rm -rf DiskIO/DiskDaemon/.libs DiskIO/DiskDaemon/_libs rm -f tests/testHttpReply tests/testHttpReply rm -f tests/testHttpRequest tests/testHttpRequest rm -f tests/testStore tests/testStore rm -f tests/testString tests/testString rm -f tests/testURL tests/testURL rm -f tests/testUfs tests/testUfs rm -rf tests/.libs tests/_libs test -z "libBlocking.a libDiskDaemon.a libDiskThreads.a" || rm -f libBlocking.a libDiskDaemon.a libDiskThreads.a test -z "libsquid.la" || rm -f libsquid.la rm -f cf_gen cf_gen rm -f "./so_locations" rm -f squid squid rm -f *.o rm -f DiskIO/AIO/AIODiskFile.o rm -f *.lo rm -f DiskIO/AIO/AIODiskIOModule.o rm -f DiskIO/AIO/AIODiskIOStrategy.o rm -f DiskIO/AIO/aio_win32.o rm -f DiskIO/Blocking/BlockingDiskIOModule.o rm -f DiskIO/Blocking/BlockingFile.o rm -f DiskIO/Blocking/BlockingIOStrategy.o rm -f DiskIO/DiskDaemon/DiskDaemonDiskIOModule.o rm -f DiskIO/DiskDaemon/DiskdFile.o rm -f DiskIO/DiskDaemon/DiskdIOStrategy.o rm -f DiskIO/DiskDaemon/diskd.o rm -f DiskIO/DiskIOModule.o rm -f DiskIO/DiskIOModules_gen.o rm -f DiskIO/DiskThreads/DiskThreadsDiskFile.o rm -f DiskIO/DiskThreads/DiskThreadsDiskIOModule.o rm -f DiskIO/DiskThreads/DiskThreadsIOStrategy.o rm -f DiskIO/DiskThreads/aiops.o rm -f DiskIO/DiskThreads/aiops_win32.o rm -f DiskIO/DiskThreads/async_io.o rm -f DiskIO/ReadRequest.o rm -f DiskIO/WriteRequest.o rm -f tests/TestSwapDir.o rm -f tests/stub_CommIO.o rm -f tests/stub_DelayId.o rm -f tests/stub_HelperChildConfig.o rm -f tests/stub_HttpReply.o rm -f tests/stub_HttpRequest.o rm -f tests/stub_MemObject.o rm -f tests/stub_StatHist.o rm -f tests/stub_access_log.o rm -f tests/stub_acl.o rm -f tests/stub_cache_cf.o rm -f tests/stub_cache_manager.o rm -f tests/stub_client_side_request.o rm -f tests/stub_comm.o rm -f tests/stub_errorpage.o rm -f tests/stub_fd.o rm -f tests/stub_helper.o rm -f tests/stub_http.o rm -f tests/stub_internal.o rm -f tests/stub_mime.o rm -f tests/stub_store.o rm -f tests/stub_store_client.o rm -f tests/stub_store_rebuild.o rm -f tests/stub_store_swapout.o rm -f tests/stub_tools.o rm -f tests/testACLMaxUserIP.o rm -f tests/testAuth.o rm -f tests/testBoilerplate.o rm -f tests/testCacheManager.o rm -f tests/testCoss.o rm -f tests/testDiskIO.o rm -f tests/testEvent.o rm -f tests/testEventLoop.o rm -f tests/testHttpReply.o rm -f tests/testHttpRequest.o rm -f tests/testHttpRequestMethod.o rm -f tests/testMain.o rm -f tests/testNull.o rm -f tests/testStore.o rm -f tests/testStoreController.o rm -f tests/testStoreEntryStream.o rm -f tests/testStoreHashIndex.o rm -f tests/testStoreSupport.o rm -f tests/testString.o rm -f tests/testURL.o rm -f tests/testURLScheme.o rm -f tests/testUfs.o rm -f tests/test_http_range.o rm -rf ./.deps DiskIO/.deps DiskIO/AIO/.deps DiskIO/Blocking/.deps DiskIO/DiskDaemon/.deps DiskIO/DiskThreads/.deps tests/.deps rm -f Makefile Making distclean in scripts test -z "" || rm -f rm -rf .libs _libs rm -f *.lo rm -f Makefile Making distclean in snmplib rm -f *.tab.c test -z "" || rm -f rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags rm -rf .libs _libs test -z "libsnmp.a" || rm -f libsnmp.a rm -f *.o rm -f *.lo rm -rf ./.deps rm -f Makefile Making distclean in libltdl rm -f *.tab.c test -z "" || rm -f test . = "../../libltdl" || test -z "" || rm -f rm -f config.h stamp-h1 rm -f libtool config.lt rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags test -z "libltdl.la libltdlc.la libdlloader.la argz.o argz.lo" || rm -f libltdl.la libltdlc.la libdlloader.la argz.o argz.lo test -z "" || rm -f rm -rf .libs _libs test -z "dlopen.la libltdlc.la" || rm -f dlopen.la libltdlc.la rm -f *.o rm -f "./so_locations" test -z "argz.h argz.h-t" || rm -f argz.h argz.h-t rm -f "./so_locations" rm -f *.lo rm -f config.status config.cache config.log configure.lineno config.status.lineno rm -rf .deps ./.deps rm -f Makefile Making distclean in lib Making distclean in libTrie Making distclean in test rm -f *.tab.c test -z "" || rm -f rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags rm -f trie trie rm -rf .libs _libs rm -f *.o rm -f *.lo rm -rf ./.deps rm -f Makefile Making distclean in src rm -f *.tab.c test -z "" || rm -f rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags rm -rf .libs _libs test -z "libTrie.a" || rm -f libTrie.a rm -f *.o rm -f *.lo rm -rf ./.deps rm -f Makefile Making distclean in include test -z "" || rm -f rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags rm -rf .libs _libs rm -f *.lo rm -f Makefile Making distclean in . test -z "" || rm -f rm -f config.h stamp-h1 rm -f libtool rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags rm -rf .libs _libs rm -f *.lo rm -f config.status config.cache config.log configure.lineno config.status.lineno rm -f Makefile Making distclean in . rm -f *.tab.c test -z "" || rm -f rm -f tests/.dirstamp rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags test -z "testHeaders" || rm -f testHeaders rm -f tests/testAll tests/testAll rm -rf .libs _libs test -z "libmiscutil.a libntlmauth.a " || rm -f libmiscutil.a libntlmauth.a rm -rf tests/.libs tests/_libs rm -f *.o rm -f *.lo rm -rf .deps ./.deps rm -f Makefile Making distclean in compat rm -f *.tab.c test -z "" || rm -f rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags rm -f testPreCompiler testPreCompiler test -z "testHeaders" || rm -f testHeaders rm -rf .libs _libs test -z "libcompat.la" || rm -f libcompat.la rm -f "./so_locations" rm -f *.o rm -f *.lo rm -rf ./.deps rm -f Makefile Making distclean in . test -z "" || rm -f test -z "include/stamp-h include/stamp-h[0-9]*" || rm -f include/stamp-h include/stamp-h[0-9]* rm -f include/autoconf.h include/stamp-h1 rm -f libtool rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags rm -rf .libs _libs rm -f *.lo rm -f config.status config.cache config.log configure.lineno config.status.lineno rm -f Makefile ERROR: files left in build directory after distclean: ./src/auth/AuthType.cc *** Error code 1 1 error *** Error code 2 1 error buildtest.sh result is 2 BUILD: .././test-suite/buildtests/layer-00-default.opts ERROR: files left in build directory after distclean: *** Error code 1 *** Error code 2 Build FAILED.
