]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
auth_rewrite merge:
authorhno <>
Thu, 11 Jan 2001 07:01:52 +0000 (07:01 +0000)
committerhno <>
Thu, 11 Jan 2001 07:01:52 +0000 (07:01 +0000)
Lots of bug fixes.

src/auth/basic/auth_basic.cc
src/auth/ntlm/auth_ntlm.cc
src/authenticate.cc
src/helper.cc
src/main.cc

index 55b6515a22f1f1e825f04463ea84ea36a9ddd36f..e640d263a550894c0f1a565341ec96a2a6ebc328 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: auth_basic.cc,v 1.2 2001/01/10 00:24:39 hno Exp $
+ * $Id: auth_basic.cc,v 1.3 2001/01/11 00:01:53 hno Exp $
  *
  * DEBUG: section 29    Authenticator
  * AUTHOR: Duane Wessels
@@ -87,9 +87,14 @@ authBasicDone(void)
     authbasic_initialised = 0;
     if (!shutting_down)
        return;
-    helperFree(basicauthenticators);
+    if (basicauthenticators)
+       helperFree(basicauthenticators);
     basicauthenticators = NULL;
-    memPoolDestroy(basic_data_pool);
+    if (basic_data_pool) {
+       memPoolDestroy(basic_data_pool);
+       basic_data_pool = NULL;
+    }
+    debug(29, 2) ("authBasicDone: Basic authentication Shutdown.\n");
 }
 
 void
@@ -162,7 +167,6 @@ authenticateBasicAuthenticateUser(auth_user_request_t * auth_user_request, reque
        debug(29, 4) ("authBasicAuthenticate: credentials expired - rechecking\n");
        return;
     }
-
     /* we have been through the external helper, and the credentials haven't expired */
     debug(29, 9) ("authenticateBasicAuthenticateuser: user '%s' authenticated\n",
        basic_auth->username);
@@ -258,16 +262,16 @@ authenticateBasicHandleReply(void *data, char *reply)
        auth_user->flags.credentials_ok = 3;
     basic_auth->credentials_checkedtime = squid_curtime;
     valid = cbdataValid(r->data);
-    cbdataUnlock(r->data);
     if (valid)
        r->handler(r->data, NULL);
+    cbdataUnlock(r->data);
     node = basic_auth->auth_queue;
     while (node) {
        tmpnode = node->next;
        valid = cbdataValid(node->data);
-       cbdataUnlock(node->data);
        if (valid)
            node->handler(node->data, NULL);
+       cbdataUnlock(node->data);
        xfree(node);
        node = tmpnode;
     }
index 2bb38ffef5db7080c64a09731ece4e5edef00833..fdc6abe07a6a3ed32463f49562a0165ccaa411cd 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: auth_ntlm.cc,v 1.3 2001/01/10 00:24:39 hno Exp $
+ * $Id: auth_ntlm.cc,v 1.4 2001/01/11 00:01:54 hno Exp $
  *
  * DEBUG: section 29    NTLM Authenticator
  * AUTHOR: Robert Collins
@@ -99,12 +99,25 @@ authNTLMDone(void)
     authntlm_initialised = 0;
     if (!shutting_down)
        return;
-    helperStatefulFree(ntlmauthenticators);
+    if (ntlmauthenticators)
+       helperStatefulFree(ntlmauthenticators);
     ntlmauthenticators = NULL;
-    memPoolDestroy(ntlm_helper_state_pool);
-    memPoolDestroy(ntlm_request_pool);
-    memPoolDestroy(ntlm_user_pool);
-
+    if (ntlm_helper_state_pool) {
+       assert(memPoolInUseCount(ntlm_helper_state_pool) == 0);
+       memPoolDestroy(ntlm_helper_state_pool);
+       ntlm_helper_state_pool = NULL;
+    }
+    if (ntlm_request_pool) {
+       assert(memPoolInUseCount(ntlm_request_pool) == 0);
+       memPoolDestroy(ntlm_request_pool);
+       ntlm_request_pool = NULL;
+    }
+    if (ntlm_user_pool) {
+       assert(memPoolInUseCount(ntlm_user_pool) == 0);
+       memPoolDestroy(ntlm_user_pool);
+       ntlm_user_pool = NULL;
+    }
+    debug(29, 2) ("authNTLMDone: NTLM authentication Shutdown.\n");
 }
 
 /* free any allocated configuration details */
@@ -231,9 +244,9 @@ int
 authenticateNTLMActive()
 {
     if ((ntlmConfig != NULL) && (ntlmConfig->authenticate != NULL) &&
-        (ntlmConfig->authenticateChildren != 0) && (ntlmConfig->challengeuses > -1) 
-        && (ntlmConfig->challengelifetime>-1))
-        return 1;
+       (ntlmConfig->authenticateChildren != 0) && (ntlmConfig->challengeuses > -1)
+       && (ntlmConfig->challengelifetime > -1))
+       return 1;
     return 0;
 }
 
@@ -364,10 +377,10 @@ authenticateNTLMHandleplaceholder(void *data, void *lastserver, char *reply)
     assert(r->auth_user_request);
     /* standard callback stuff */
     valid = cbdataValid(r->data);
-    cbdataUnlock(r->data);
     /* call authenticateNTLMStart to retry this request */
     debug(29, 9) ("authenticateNTLMHandleplaceholder: calling authenticateNTLMStart\n");
     authenticateNTLMStart(r->auth_user_request, r->handler, r->data);
+    cbdataUnlock(r->data);
     authenticateStateFree(r);
     return result;
 }
@@ -386,7 +399,6 @@ authenticateNTLMHandleReply(void *data, void *lastserver, char *reply)
     ntlm_request_t *ntlm_request;
     debug(29, 9) ("authenticateNTLMHandleReply: Helper: '%d' {%s}\n", lastserver, reply ? reply : "<NULL>");
     valid = cbdataValid(r->data);
-    cbdataUnlock(r->data);
     if (valid) {
        if (reply) {
            /* seperate out the useful data */
@@ -512,6 +524,7 @@ authenticateNTLMHandleReply(void *data, void *lastserver, char *reply)
        debug(29, 1) ("AuthenticateNTLMHandleReply: invalid callback data. Releasing helper '%d'.\n", lastserver);
        result = S_HELPER_RELEASE;
     }
+    cbdataUnlock(r->data);
     authenticateStateFree(r);
     debug(29, 9) ("NTLM HandleReply, telling stateful helper : %d\n", result);
     return result;
index bc71eac859163eff12c603634beb6ff0bd896783..29cb95af1d18f8b1ff65fa40f91b8da7a69d8c0d 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: authenticate.cc,v 1.17 2001/01/10 17:35:32 hno Exp $
+ * $Id: authenticate.cc,v 1.18 2001/01/11 00:01:52 hno Exp $
  *
  * DEBUG: section 29    Authenticator
  * AUTHOR: Duane Wessels
@@ -122,7 +122,7 @@ authenticateStart(auth_user_request_t * auth_user_request, RH * handler, void *d
 {
     assert(auth_user_request);
     assert(handler);
-    debug(29, 9) ("authenticateStart: auth_user_request '%d'\n", auth_user_request);
+    debug(29, 9) ("authenticateStart: auth_user_request '%p'\n", auth_user_request);
     if (auth_user_request->auth_user->auth_module > 0)
        authscheme_list[auth_user_request->auth_user->auth_module - 1].authStart(auth_user_request, handler, data);
     else
@@ -137,7 +137,7 @@ authenticateStart(auth_user_request_t * auth_user_request, RH * handler, void *d
 int
 authenticateValidateUser(auth_user_request_t * auth_user_request)
 {
-    debug(29, 9) ("authenticateValidateUser: Validating Auth_user request '%d'.\n", auth_user_request);
+    debug(29, 9) ("authenticateValidateUser: Validating Auth_user request '%p'.\n", auth_user_request);
     if (auth_user_request == NULL) {
        debug(29, 4) ("authenticateValidateUser: Auth_user_request was NULL!\n");
        return 0;
@@ -147,11 +147,11 @@ authenticateValidateUser(auth_user_request_t * auth_user_request)
        return 0;
     }
     if (auth_user_request->auth_user->auth_type == AUTH_UNKNOWN) {
-       debug(29, 4) ("authenticateValidateUser: Auth_user '%d' uses unknown scheme.\n", auth_user_request->auth_user);
+       debug(29, 4) ("authenticateValidateUser: Auth_user '%p' uses unknown scheme.\n", auth_user_request->auth_user);
        return 0;
     }
     if (auth_user_request->auth_user->auth_type == AUTH_BROKEN) {
-       debug(29, 4) ("authenticateValidateUser: Auth_user '%d' is broken for it's scheme.\n", auth_user_request->auth_user);
+       debug(29, 4) ("authenticateValidateUser: Auth_user '%p' is broken for it's scheme.\n", auth_user_request->auth_user);
        return 0;
     }
     /* any other sanity checks that we need in the future */
@@ -159,7 +159,7 @@ authenticateValidateUser(auth_user_request_t * auth_user_request)
     /* Thus should a module call to something like authValidate */
 
     /* finally return ok */
-    debug(29, 4) ("authenticateValidateUser: Validated Auth_user request '%d'.\n", auth_user_request);
+    debug(29, 4) ("authenticateValidateUser: Validated Auth_user request '%p'.\n", auth_user_request);
     return 1;
 
 }
@@ -195,7 +195,7 @@ void
 authenticateAuthUserRequestFree(auth_user_request_t * auth_user_request)
 {
     dlink_node *link;
-    debug(29, 5) ("authenticateAuthUserRequestFree: freeing request %d\n", auth_user_request);
+    debug(29, 5) ("authenticateAuthUserRequestFree: freeing request %p\n", auth_user_request);
     if (!auth_user_request)
        return;
     assert(auth_user_request->references == 0);
@@ -350,9 +350,9 @@ authenticateInit(authConfig * config)
     int i;
     authScheme *scheme;
     for (i = 0; i < config->n_configured; i++) {
-       if (authscheme_list[i].init) {
-           scheme = config->schemes + i;
-           authscheme_list[i].init(scheme);
+       scheme = config->schemes + i;
+       if (authscheme_list[scheme->Id].init) {
+           authscheme_list[scheme->Id].init(scheme);
        }
     }
     if (!proxy_auth_username_cache)
@@ -399,7 +399,7 @@ authenticateFixHeader(HttpReply * rep, auth_user_request_t * auth_user_request,
        /* some other HTTP status */
        break;
     }
-    debug(29, 9) ("authenticateFixHeader: headertype:%d authuser:%d\n", type, auth_user_request);
+    debug(29, 9) ("authenticateFixHeader: headertype:%d authuser:%p\n", type, auth_user_request);
     if ((rep->sline.status == HTTP_PROXY_AUTHENTICATION_REQUIRED)
        || (rep->sline.status == HTTP_UNAUTHORIZED))
        /* this is a authenticate-needed response */
@@ -437,23 +437,23 @@ authenticateAddTrailer(HttpReply * rep, auth_user_request_t * auth_user_request,
 void
 authenticateAuthUserLock(auth_user_t * auth_user)
 {
-    debug(29, 9) ("authenticateAuthUserLock auth_user '%d'.\n", auth_user);
+    debug(29, 9) ("authenticateAuthUserLock auth_user '%p'.\n", auth_user);
     assert(auth_user != NULL);
     auth_user->references++;
-    debug(29, 9) ("authenticateAuthUserLock auth_user '%d' now at '%d'.\n", auth_user, auth_user->references);
+    debug(29, 9) ("authenticateAuthUserLock auth_user '%p' now at '%d'.\n", auth_user, auth_user->references);
 }
 
 void
 authenticateAuthUserUnlock(auth_user_t * auth_user)
 {
-    debug(29, 9) ("authenticateAuthUserUnlock auth_user '%d'.\n", auth_user);
+    debug(29, 9) ("authenticateAuthUserUnlock auth_user '%p'.\n", auth_user);
     assert(auth_user != NULL);
     if (auth_user->references > 0) {
        auth_user->references--;
     } else {
-       debug(29, 1) ("Attempt to lower Auth User %d refcount below 0!\n", auth_user);
+       debug(29, 1) ("Attempt to lower Auth User %p refcount below 0!\n", auth_user);
     }
-    debug(29, 9) ("authenticateAuthUserUnlock auth_user '%d' now at '%d'.\n", auth_user, auth_user->references);
+    debug(29, 9) ("authenticateAuthUserUnlock auth_user '%p' now at '%d'.\n", auth_user, auth_user->references);
     if (auth_user->references == 0)
        authenticateFreeProxyAuthUser(auth_user);
 }
@@ -461,23 +461,23 @@ authenticateAuthUserUnlock(auth_user_t * auth_user)
 void
 authenticateAuthUserRequestLock(auth_user_request_t * auth_user_request)
 {
-    debug(29, 9) ("authenticateAuthUserRequestLock auth_user request '%d'.\n", auth_user_request);
+    debug(29, 9) ("authenticateAuthUserRequestLock auth_user request '%p'.\n", auth_user_request);
     assert(auth_user_request != NULL);
     auth_user_request->references++;
-    debug(29, 9) ("authenticateAuthUserRequestLock auth_user request '%d' now at '%d'.\n", auth_user_request, auth_user_request->references);
+    debug(29, 9) ("authenticateAuthUserRequestLock auth_user request '%p' now at '%d'.\n", auth_user_request, auth_user_request->references);
 }
 
 void
 authenticateAuthUserRequestUnlock(auth_user_request_t * auth_user_request)
 {
-    debug(29, 9) ("authenticateAuthUserRequestUnlock auth_user request '%d'.\n", auth_user_request);
+    debug(29, 9) ("authenticateAuthUserRequestUnlock auth_user request '%p'.\n", auth_user_request);
     assert(auth_user_request != NULL);
     if (auth_user_request->references > 0) {
        auth_user_request->references--;
     } else {
-       debug(29, 1) ("Attempt to lower Auth User request %d refcount below 0!\n", auth_user_request);
+       debug(29, 1) ("Attempt to lower Auth User request %p refcount below 0!\n", auth_user_request);
     }
-    debug(29, 9) ("authenticateAuthUserRequestUnlock auth_user_request '%d' now at '%d'.\n", auth_user_request, auth_user_request->references);
+    debug(29, 9) ("authenticateAuthUserRequestUnlock auth_user_request '%p' now at '%d'.\n", auth_user_request, auth_user_request->references);
     if (auth_user_request->references == 0) {
        /* not locked anymore */
        authenticateAuthUserRequestFree(auth_user_request);
@@ -503,7 +503,7 @@ authenticateAuthUserMerge(auth_user_t * from, auth_user_t * to)
     auth_user_request_t *auth_user_request;
 /* XXX combine two authuser structs. Incomplete: it should merge in hash references 
  * too and ask the module to merge in scheme data */
-    debug(29, 5) ("authenticateAuthUserMerge auth_user '%d' into auth_user '%d'.\n", from, to);
+    debug(29, 5) ("authenticateAuthUserMerge auth_user '%p' into auth_user '%p'.\n", from, to);
     link = from->requests.head;
     while (link) {
        auth_user_request = link->data;
@@ -525,12 +525,12 @@ authenticateFreeProxyAuthUser(void *data)
     auth_user_request_t *auth_user_request;
     dlink_node *link, *tmplink;
     assert(data != NULL);
-    debug(29, 5) ("authenticateFreeProxyAuthUser: Freeing auth_user '%d' with refcount '%d'.\n", u, u->references);
+    debug(29, 5) ("authenticateFreeProxyAuthUser: Freeing auth_user '%p' with refcount '%d'.\n", u, u->references);
     assert(u->references == 0);
     /* were they linked in by username ? */
     if (u->usernamehash) {
        assert(u->usernamehash->auth_user == u);
-       debug(29, 5) ("authenticateFreeProxyAuthUser: removing usernamehash entry '%d'\n", u->usernamehash);
+       debug(29, 5) ("authenticateFreeProxyAuthUser: removing usernamehash entry '%p'\n", u->usernamehash);
        hash_remove_link(proxy_auth_username_cache,
            (hash_link *) u->usernamehash);
        /* don't free the key as we use the same user string as the auth_user 
@@ -540,7 +540,7 @@ authenticateFreeProxyAuthUser(void *data)
     /* remove any outstanding requests */
     link = u->requests.head;
     while (link) {
-       debug(29, 5) ("authenticateFreeProxyAuthUser: removing request entry '%d'\n", link->data);
+       debug(29, 5) ("authenticateFreeProxyAuthUser: removing request entry '%p'\n", link->data);
        auth_user_request = link->data;
        tmplink = link;
        link = link->next;
index 0201482d158f7e81fc6f612972f0fd44260d0b57..2db486d80a392ab8f9a95e116384d2c3a08a0789 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: helper.cc,v 1.22 2001/01/07 23:36:39 hno Exp $
+ * $Id: helper.cc,v 1.23 2001/01/11 00:01:53 hno Exp $
  *
  * DEBUG: section 29    Helper process maintenance
  * AUTHOR: Harvest Derived?
@@ -555,6 +555,8 @@ helperStatefulCreate(const char *name)
 void
 helperFree(helper * hlp)
 {
+    if (!hlp)
+       return;
     /* note, don't free hlp->name, it probably points to static memory */
     if (hlp->queue.head)
        debug(29, 0) ("WARNING: freeing %s helper with %d requests queued\n",
@@ -565,6 +567,8 @@ helperFree(helper * hlp)
 void
 helperStatefulFree(statefulhelper * hlp)
 {
+    if (!hlp)
+       return;
     /* note, don't free hlp->name, it probably points to static memory */
     if (hlp->queue.head)
        debug(29, 0) ("WARNING: freeing %s helper with %d requests queued\n",
index e5c05b2c6534d1999ee8084b9bca7ac54f38dd26..3d96c60e92c2a9f4046cd3aa92d3b5e7ff2d5764 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: main.cc,v 1.329 2001/01/07 23:36:39 hno Exp $
+ * $Id: main.cc,v 1.330 2001/01/11 00:01:53 hno Exp $
  *
  * DEBUG: section 1     Startup and Main Loop
  * AUTHOR: Harvest Derived
@@ -713,7 +713,6 @@ main(int argc, char **argv)
            idnsShutdown();
 #endif
            redirectShutdown();
-           authenticateShutdown();
            eventAdd("SquidShutdown", SquidShutdown, NULL, (double) (wait + 1), 1);
        }
        eventRun();
@@ -939,6 +938,7 @@ SquidShutdown(void *unused)
 #endif
     releaseServerSockets();
     commCloseAllSockets();
+    authenticateShutdown();
 #if USE_UNLINKD
     unlinkdClose();
 #endif