From: Amos Jeffries Date: Sat, 31 May 2014 17:00:05 +0000 (-0700) Subject: Cleanup: de-duplicate auth_param program parameter code X-Git-Tag: SQUID_3_5_0_1~219 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3616c90cbfa0c2dac5a985c4c406df55f7caa89a;p=thirdparty%2Fsquid.git Cleanup: de-duplicate auth_param program parameter code Moves the "program" parse and dump code into Auth::Config. Also, changes API to Auth::Config::dump() to not dump any config settings for schemes which are not configured with a "program". Including scheme specific settings. Also, fixes missing Digest "utf8" parameter in config dump. --- diff --git a/src/auth/Config.cc b/src/auth/Config.cc index ef0f744d50..23552191e2 100644 --- a/src/auth/Config.cc +++ b/src/auth/Config.cc @@ -40,6 +40,7 @@ #include "format/Format.h" #include "globals.h" #include "Store.h" +#include "wordlist.h" Auth::ConfigVector Auth::TheConfig; @@ -94,7 +95,15 @@ Auth::Config::registerWithCacheManager(void) void Auth::Config::parse(Auth::Config * scheme, int n_configured, char *param_str) { - if (strcmp(param_str, "realm") == 0) { + if (strcmp(param_str, "program") == 0) { + if (authenticateProgram) + wordlistDestroy(&authenticateProgram); + + parse_wordlist(&authenticateProgram); + + requirePathnameExists("Authentication helper program", authenticateProgram->key); + + } else if (strcmp(param_str, "realm") == 0) { realm.clear(); char *token = ConfigParser::NextQuotedOrToEol(); @@ -135,9 +144,20 @@ Auth::Config::parse(Auth::Config * scheme, int n_configured, char *param_str) } } -void -Auth::Config::dump(StoreEntry *entry, const char *name, Auth::Config *scheme) +bool +Auth::Config::dump(StoreEntry *entry, const char *name, Auth::Config *scheme) const { + if (!authenticateProgram) + return false; // not configured + + wordlist *list = authenticateProgram; + storeAppendPrintf(entry, "%s %s", name, scheme->type()); + while (list != NULL) { + storeAppendPrintf(entry, " %s", list->key); + list = list->next; + } + storeAppendPrintf(entry, "\n"); + storeAppendPrintf(entry, "%s %s realm " SQUIDSBUFPH "\n", name, scheme->type(), SQUIDSBUFPRINT(realm)); storeAppendPrintf(entry, "%s %s children %d startup=%d idle=%d concurrency=%d\n", @@ -147,6 +167,8 @@ Auth::Config::dump(StoreEntry *entry, const char *name, Auth::Config *scheme) if (keyExtrasLine.size() > 0) storeAppendPrintf(entry, "%s %s key_extras \"%s\"\n", name, scheme->type(), keyExtrasLine.termedBuf()); + + return true; } void diff --git a/src/auth/Config.h b/src/auth/Config.h index 1b132dea6f..f05b67e799 100644 --- a/src/auth/Config.h +++ b/src/auth/Config.h @@ -122,8 +122,9 @@ public: /** * Responsible for writing to the StoreEntry the configuration parameters that a user * would put in a config file to recreate the running configuration. + * Returns whether the scheme is configured. */ - virtual void dump(StoreEntry *, const char *, Config *); + virtual bool dump(StoreEntry *, const char *, Config *) const; /** add headers as needed when challenging for auth */ virtual void fixHeader(UserRequest::Pointer, HttpReply *, http_hdr_type, HttpRequest *) = 0; diff --git a/src/auth/basic/auth_basic.cc b/src/auth/basic/auth_basic.cc index 89b8c80152..1ef3246991 100644 --- a/src/auth/basic/auth_basic.cc +++ b/src/auth/basic/auth_basic.cc @@ -130,22 +130,16 @@ Auth::Basic::Config::done() wordlistDestroy(&authenticateProgram); } -void -Auth::Basic::Config::dump(StoreEntry * entry, const char *name, Auth::Config * scheme) +bool +Auth::Basic::Config::dump(StoreEntry * entry, const char *name, Auth::Config * scheme) const { - wordlist *list = authenticateProgram; - storeAppendPrintf(entry, "%s %s", name, "basic"); - - while (list != NULL) { - storeAppendPrintf(entry, " %s", list->key); - list = list->next; - } - - storeAppendPrintf(entry, "\n"); + if (!Auth::Config::dump(entry, name, scheme)) + return false; // not configured storeAppendPrintf(entry, "%s basic credentialsttl %d seconds\n", name, (int) credentialsTTL); storeAppendPrintf(entry, "%s basic casesensitive %s\n", name, casesensitive ? "on" : "off"); - Auth::Config::dump(entry, name, scheme); + storeAppendPrintf(entry, "%s basic utf8 %s\n", name, utf8 ? "on" : "off"); + return true; } Auth::Basic::Config::Config() : @@ -160,14 +154,7 @@ Auth::Basic::Config::Config() : void Auth::Basic::Config::parse(Auth::Config * scheme, int n_configured, char *param_str) { - if (strcmp(param_str, "program") == 0) { - if (authenticateProgram) - wordlistDestroy(&authenticateProgram); - - parse_wordlist(&authenticateProgram); - - requirePathnameExists("auth_param basic program", authenticateProgram->key); - } else if (strcmp(param_str, "credentialsttl") == 0) { + if (strcmp(param_str, "credentialsttl") == 0) { parse_time_t(&credentialsTTL); } else if (strcmp(param_str, "casesensitive") == 0) { parse_onoff(&casesensitive); diff --git a/src/auth/basic/auth_basic.h b/src/auth/basic/auth_basic.h index 269ef145d4..b85984840f 100644 --- a/src/auth/basic/auth_basic.h +++ b/src/auth/basic/auth_basic.h @@ -28,7 +28,7 @@ public: virtual Auth::UserRequest::Pointer decode(char const *proxy_auth, const char *requestRealm); virtual void done(); virtual void rotateHelpers(); - virtual void dump(StoreEntry *, const char *, Auth::Config *); + virtual bool dump(StoreEntry *, const char *, Auth::Config *) const; virtual void fixHeader(Auth::UserRequest::Pointer, HttpReply *, http_hdr_type, HttpRequest *); virtual void init(Auth::Config *); virtual void parse(Auth::Config *, int, char *); diff --git a/src/auth/digest/auth_digest.cc b/src/auth/digest/auth_digest.cc index d6ecff5ebb..9d6b1ca647 100644 --- a/src/auth/digest/auth_digest.cc +++ b/src/auth/digest/auth_digest.cc @@ -487,23 +487,18 @@ Auth::Digest::Config::rotateHelpers() /* NP: dynamic helper restart will ensure they start up again as needed. */ } -void -Auth::Digest::Config::dump(StoreEntry * entry, const char *name, Auth::Config * scheme) +bool +Auth::Digest::Config::dump(StoreEntry * entry, const char *name, Auth::Config * scheme) const { - wordlist *list = authenticateProgram; - debugs(29, 9, "Dumping configuration"); - storeAppendPrintf(entry, "%s %s", name, "digest"); - - while (list != NULL) { - storeAppendPrintf(entry, " %s", list->key); - list = list->next; - } + if (!Auth::Config::dump(entry, name, scheme)) + return false; - storeAppendPrintf(entry, "\n%s %s nonce_max_count %d\n%s %s nonce_max_duration %d seconds\n%s %s nonce_garbage_interval %d seconds\n", + storeAppendPrintf(entry, "%s %s nonce_max_count %d\n%s %s nonce_max_duration %d seconds\n%s %s nonce_garbage_interval %d seconds\n", name, "digest", noncemaxuses, name, "digest", (int) noncemaxduration, name, "digest", (int) nonceGCInterval); - Auth::Config::dump(entry, name, scheme); + storeAppendPrintf(entry, "%s digest utf8 %s\n", name, utf8 ? "on" : "off"); + return true; } bool diff --git a/src/auth/digest/auth_digest.h b/src/auth/digest/auth_digest.h index f7bc2a5489..e9bb6ab001 100644 --- a/src/auth/digest/auth_digest.h +++ b/src/auth/digest/auth_digest.h @@ -75,7 +75,7 @@ public: virtual Auth::UserRequest::Pointer decode(char const *proxy_auth, const char *requestRealm); virtual void done(); virtual void rotateHelpers(); - virtual void dump(StoreEntry *, const char *, Auth::Config *); + virtual bool dump(StoreEntry *, const char *, Auth::Config *) const; virtual void fixHeader(Auth::UserRequest::Pointer, HttpReply *, http_hdr_type, HttpRequest *); virtual void init(Auth::Config *); virtual void parse(Auth::Config *, int, char *); diff --git a/src/auth/negotiate/auth_negotiate.cc b/src/auth/negotiate/auth_negotiate.cc index c5eee8a216..625888631e 100644 --- a/src/auth/negotiate/auth_negotiate.cc +++ b/src/auth/negotiate/auth_negotiate.cc @@ -108,19 +108,14 @@ Auth::Negotiate::Config::done() debugs(29, DBG_IMPORTANT, "Reconfigure: Negotiate authentication configuration cleared."); } -void -Auth::Negotiate::Config::dump(StoreEntry * entry, const char *name, Auth::Config * scheme) +bool +Auth::Negotiate::Config::dump(StoreEntry * entry, const char *name, Auth::Config * scheme) const { - wordlist *list = authenticateProgram; - storeAppendPrintf(entry, "%s %s", name, "negotiate"); - - while (list != NULL) { - storeAppendPrintf(entry, " %s", list->key); - list = list->next; - } + if (!Auth::Config::dump(entry, name, scheme)) + return false; - storeAppendPrintf(entry, "\n%s %s keep_alive %s\n", name, "negotiate", keep_alive ? "on" : "off"); - Auth::Config::dump(entry, name, scheme); + storeAppendPrintf(entry, "%s negotiate keep_alive %s\n", name, keep_alive ? "on" : "off"); + return true; } Auth::Negotiate::Config::Config() : keep_alive(1) diff --git a/src/auth/negotiate/auth_negotiate.h b/src/auth/negotiate/auth_negotiate.h index b1dcfb8e34..179a816b11 100644 --- a/src/auth/negotiate/auth_negotiate.h +++ b/src/auth/negotiate/auth_negotiate.h @@ -34,7 +34,7 @@ public: virtual Auth::UserRequest::Pointer decode(char const *proxy_auth, const char *requestRealm); virtual void done(); virtual void rotateHelpers(); - virtual void dump(StoreEntry *, const char *, Auth::Config *); + virtual bool dump(StoreEntry *, const char *, Auth::Config *) const; virtual void fixHeader(Auth::UserRequest::Pointer, HttpReply *, http_hdr_type, HttpRequest *); virtual void init(Auth::Config *); virtual void parse(Auth::Config *, int, char *); diff --git a/src/auth/ntlm/auth_ntlm.cc b/src/auth/ntlm/auth_ntlm.cc index b86cd9857a..207b3d8b74 100644 --- a/src/auth/ntlm/auth_ntlm.cc +++ b/src/auth/ntlm/auth_ntlm.cc @@ -100,19 +100,14 @@ Auth::Ntlm::Config::done() debugs(29, DBG_IMPORTANT, "Reconfigure: NTLM authentication configuration cleared."); } -void -Auth::Ntlm::Config::dump(StoreEntry * entry, const char *name, Auth::Config * scheme) +bool +Auth::Ntlm::Config::dump(StoreEntry * entry, const char *name, Auth::Config * scheme) const { - wordlist *list = authenticateProgram; - storeAppendPrintf(entry, "%s %s", name, "ntlm"); - - while (list != NULL) { - storeAppendPrintf(entry, " %s", list->key); - list = list->next; - } + if (!Auth::Config::dump(entry, name, scheme)) + return false; - storeAppendPrintf(entry, "\n%s %s keep_alive %s\n", name, "ntlm", keep_alive ? "on" : "off"); - Auth::Config::dump(entry, name, scheme); + storeAppendPrintf(entry, "%s ntlm keep_alive %s\n", name, keep_alive ? "on" : "off"); + return true; } Auth::Ntlm::Config::Config() : keep_alive(1) diff --git a/src/auth/ntlm/auth_ntlm.h b/src/auth/ntlm/auth_ntlm.h index e704c2a739..df46c97b90 100644 --- a/src/auth/ntlm/auth_ntlm.h +++ b/src/auth/ntlm/auth_ntlm.h @@ -30,7 +30,7 @@ public: virtual Auth::UserRequest::Pointer decode(char const *proxy_auth, const char *requestRealm); virtual void done(); virtual void rotateHelpers(); - virtual void dump(StoreEntry *, const char *, Auth::Config *); + virtual bool dump(StoreEntry *, const char *, Auth::Config *) const; virtual void fixHeader(Auth::UserRequest::Pointer, HttpReply *, http_hdr_type, HttpRequest *); virtual void init(Auth::Config *); virtual void parse(Auth::Config *, int, char *);