From owner-svn-src-head@FreeBSD.ORG Fri Mar 19 09:53:25 2010 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9A226106564A; Fri, 19 Mar 2010 09:53:25 +0000 (UTC) (envelope-from syrinx@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7EBED8FC14; Fri, 19 Mar 2010 09:53:25 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2J9rPOE011234; Fri, 19 Mar 2010 09:53:25 GMT (envelope-from syrinx@svn.freebsd.org) Received: (from syrinx@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2J9rPWV011232; Fri, 19 Mar 2010 09:53:25 GMT (envelope-from syrinx@svn.freebsd.org) Message-Id: <201003190953.o2J9rPWV011232@svn.freebsd.org> From: Shteryana Shopova Date: Fri, 19 Mar 2010 09:53:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r205312 - head/usr.sbin/bsnmpd/modules/snmp_pf X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Mar 2010 09:53:25 -0000 Author: syrinx Date: Fri Mar 19 09:53:25 2010 New Revision: 205312 URL: http://svn.freebsd.org/changeset/base/205312 Log: Make sure the snmp_pf module will first refresh its entires if necessary, then find a specific entry, and get the requested value. So far, it found the specific entry, refreshed the entry list if necessary, and got the requested value from the found entry. The problem is that refreshing nukes all old entries and replaces them with new ones and the obtained entry pointer was no longer valid after the refresh. Reviewed by: bz, philip MFC after: 1 week Modified: head/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c Modified: head/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c ============================================================================== --- head/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c Fri Mar 19 09:20:06 2010 (r205311) +++ head/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c Fri Mar 19 09:53:25 2010 (r205312) @@ -534,6 +534,9 @@ pf_iftable(struct snmp_context __unused asn_subid_t which = val->var.subs[sub - 1]; struct pfi_entry *e = NULL; + if ((time(NULL) - pfi_table_age) > PFI_TABLE_MAXAGE) + pfi_refresh(); + switch (op) { case SNMP_OP_SET: return (SNMP_ERR_NOT_WRITEABLE); @@ -557,9 +560,6 @@ pf_iftable(struct snmp_context __unused abort(); } - if ((time(NULL) - pfi_table_age) > PFI_TABLE_MAXAGE) - pfi_refresh(); - switch (which) { case LEAF_pfInterfacesIfDescr: return (string_get(val, e->pfi.pfik_name, -1)); @@ -684,6 +684,9 @@ pf_tbltable(struct snmp_context __unused asn_subid_t which = val->var.subs[sub - 1]; struct pft_entry *e = NULL; + if ((time(NULL) - pft_table_age) > PFT_TABLE_MAXAGE) + pft_refresh(); + switch (op) { case SNMP_OP_SET: return (SNMP_ERR_NOT_WRITEABLE); @@ -707,9 +710,6 @@ pf_tbltable(struct snmp_context __unused abort(); } - if ((time(NULL) - pft_table_age) > PFT_TABLE_MAXAGE) - pft_refresh(); - switch (which) { case LEAF_pfTablesTblDescr: return (string_get(val, e->pft.pfrts_name, -1)); @@ -842,6 +842,9 @@ pf_altqq(struct snmp_context __unused *c return (SNMP_ERR_NOERROR); } + if ((time(NULL) - pfq_table_age) > PFQ_TABLE_MAXAGE) + pfq_refresh(); + switch (op) { case SNMP_OP_SET: return (SNMP_ERR_NOT_WRITEABLE); @@ -865,9 +868,6 @@ pf_altqq(struct snmp_context __unused *c abort(); } - if ((time(NULL) - pfq_table_age) > PFQ_TABLE_MAXAGE) - pfq_refresh(); - switch (which) { case LEAF_pfAltqQueueDescr: return (string_get(val, e->altq.qname, -1)); @@ -930,6 +930,9 @@ pf_lbltable(struct snmp_context __unused asn_subid_t which = val->var.subs[sub - 1]; struct pfl_entry *e = NULL; + if ((time(NULL) - pfl_table_age) > PFL_TABLE_MAXAGE) + pfl_refresh(); + switch (op) { case SNMP_OP_SET: return (SNMP_ERR_NOT_WRITEABLE); @@ -953,9 +956,6 @@ pf_lbltable(struct snmp_context __unused abort(); } - if ((time(NULL) - pfl_table_age) > PFL_TABLE_MAXAGE) - pfl_refresh(); - switch (which) { case LEAF_pfLabelsLblName: return (string_get(val, e->name, -1));