]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
fixed memory problem
authorkostas <>
Thu, 26 Feb 1998 02:15:05 +0000 (02:15 +0000)
committerkostas <>
Thu, 26 Feb 1998 02:15:05 +0000 (02:15 +0000)
src/acl.cc
src/cache_cf.cc
src/snmp_agent.cc

index 0bef317b2c49f4d545a0ab3df77bc3f642e2b9ed..5e47b208f8be0b80fc8b00b47a4744b0e7fd6968 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: acl.cc,v 1.141 1998/02/25 11:16:38 kostas Exp $
+ * $Id: acl.cc,v 1.142 1998/02/25 19:15:05 kostas Exp $
  *
  * DEBUG: section 28    Access Control
  * AUTHOR: Duane Wessels
@@ -1484,6 +1484,7 @@ aclChecklistFree(aclCheck_t * checklist)
        fqdncacheUnregister(checklist->dst_addr, checklist);
     if (checklist->state[ACL_DST_IP] == ACL_LOOKUP_PENDING)
        ipcacheUnregister(checklist->request->host, checklist);
+    if (checklist->request)
     requestUnlink(checklist->request);
     checklist->request = NULL;
     cbdataFree(checklist);
@@ -1548,7 +1549,8 @@ aclChecklistCreate(const acl_access * A,
      * pointer, so lock it.
      */
     cbdataLock(A);
-    checklist->request = requestLink(request);
+    if (checklist->request)
+       checklist->request = requestLink(request);
     checklist->src_addr = src_addr;
     for (i = 0; i < ACL_ENUM_MAX; i++)
        checklist->state[i] = ACL_LOOKUP_NONE;
index a9427d49b54f623a65141518a20ade08ade97849..4abd8b78a3160614c0b6e715e32c554a8f8d5420 100644 (file)
@@ -1,6 +1,6 @@
 
 /*
- * $Id: cache_cf.cc,v 1.251 1998/02/25 11:16:39 kostas Exp $
+ * $Id: cache_cf.cc,v 1.252 1998/02/25 19:15:06 kostas Exp $
  *
  * DEBUG: section 3     Configuration File Parsing
  * AUTHOR: Harvest Derived
@@ -436,6 +436,8 @@ free_acl(acl ** acl)
     aclDestroyAcls(acl);
 }
 
+#if SQUID_SNMP
+
 static void
 dump_snmp_access(StoreEntry * entry, const char *name, communityEntry * Head)
 {
@@ -457,6 +459,7 @@ dump_snmp_access(StoreEntry * entry, const char *name, communityEntry * Head)
        }
     }
 }
+#endif
 
 static void
 dump_acl_access(StoreEntry * entry, const char *name, acl_access * head)
@@ -474,6 +477,8 @@ dump_acl_access(StoreEntry * entry, const char *name, acl_access * head)
     }
 }
 
+#if SQUID_SNMP
+
 static void
 parse_snmp_access(communityEntry  **head)
 {
@@ -497,6 +502,7 @@ free_snmp_access(communityEntry ** Head)
     for (cp = *Head; cp; cp = cp->next) 
        aclDestroyAccessList(&cp->acls);
 }
+#endif
 
 static void
 parse_acl_access(acl_access ** head)
index 32f7301d610165f894810cfdf7d23bda0f4beb0e..7029ddfaae25ec37d8845d9b424613788f992082 100644 (file)
@@ -40,6 +40,7 @@ snmp_agent_parse(snmp_request_t *rq)
     u_char *Community;
 
     /* Now that we have the data, turn it into a PDU */
+    cbdataAdd(rq,MEM_NONE);
     PDU = snmp_pdu_create(0);
     Community = snmp_parse(Session, PDU, buf, len);
     rq->community=Community;
@@ -52,6 +53,7 @@ snmp_agent_parse(snmp_request_t *rq)
 
        snmp_free_pdu(PDU);
        snmp_agent_parse_done(0, rq);
+       return;
     }
     snmpAclCheckStart(rq);
 }
@@ -60,7 +62,6 @@ void
 snmpAclCheckStart(snmp_request_t *rq)
 {
        communityEntry *cp;
-       cbdataAdd(rq,MEM_NONE);
        for (cp=Config.Snmp.communities;cp!=NULL;cp=cp->next) 
                if (!strcmp(rq->community, cp->name) && cp->acls) {
                        rq->acl_checklist= aclChecklistCreate(cp->acls,
@@ -85,11 +86,9 @@ snmpAclCheckDone(int answer, void *data)
    
     debug(49,5)("snmpAclCheckDone: called with answer=%d.\n",answer);
     rq->acl_checklist = NULL;
-    cbdataFree(rq);
     PDU=rq->PDU;
     Community=rq->community;
     if (answer==ACCESS_DENIED) {
-               xfree(Community);
                debug(49,5)("snmpAclCheckDone: failed on acl.\n");
                snmp_agent_parse_done(0, rq);
                return;
@@ -104,20 +103,17 @@ snmpAclCheckDone(int answer, void *data)
        /* access check for each variable */
 
        if (!community_check(Community, VarPtr->name, VarPtr->name_length)) {
-               xfree(Community);
                debug(49,5)("snmpAclCheckDone: failed on community_check.\n");
                snmp_agent_parse_done(0, rq);
                return;
        }
     }
-    xfree(Session->community);
     Session->community=xstrdup(Community);
     Session->community_len=strlen(Community);
     RespPDU = snmp_agent_response(PDU);
     snmp_free_pdu(PDU);
     if (RespPDU == NULL) {
        debug(49, 8) ("snmpAclCheckDone: RespPDU == NULL. Returning code 2.\n");
-       xfree(Community);
        debug(49,5)("snmpAclCheckDone: failed on RespPDU==NULL.\n");
        snmp_agent_parse_done(2, rq);
        return;
@@ -129,7 +125,7 @@ snmpAclCheckDone(int answer, void *data)
     ret = snmp_build(Session, RespPDU, outbuf, &rq->outlen);
     /* XXXXX Handle failure */
     snmp_free_pdu(RespPDU);
-    xfree(Community);
+       /* XXX maybe here */
     debug(49,5)("snmpAclCheckDone: ok!\n");
     snmp_agent_parse_done(1, rq);
 }