summaryrefslogtreecommitdiff
path: root/support/dktools/prmonsnmp.ctr
diff options
context:
space:
mode:
Diffstat (limited to 'support/dktools/prmonsnmp.ctr')
-rw-r--r--support/dktools/prmonsnmp.ctr1942
1 files changed, 0 insertions, 1942 deletions
diff --git a/support/dktools/prmonsnmp.ctr b/support/dktools/prmonsnmp.ctr
deleted file mode 100644
index bdf92f2b9a..0000000000
--- a/support/dktools/prmonsnmp.ctr
+++ /dev/null
@@ -1,1942 +0,0 @@
-%% options
-
-copyright owner = Dirk Krause
-copyright year = 2016-xxxx
-SPDX-License-Identifier: BSD-3-Clause
-
-
-
-%% module
-
-#include "dk4conf.h"
-#include "dk4types.h"
-
-
-#if DK4_HAVE_STDLIB_H
-#ifndef STDLIB_H_INCLUDED
-#include <stdlib.h>
-#define STDLIB_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_UNISTD_H
-#ifndef UNISTD_H_INCLUDED
-#include <unistd.h>
-#define UNISTD_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_PROCESS_H
-#ifndef PROCESS_H_INCLUDED
-#include <process.h>
-#define PROCESS_H_INCLUDED 1
-#endif
-#endif
-
-
-
-/** Constant text fragments used by the program, not localized.
-*/
-static const char * const prmonsnmp_kw[] = {
-$!string-table
-#
-# 0 Newline
-#
-\n
-#
-# 1 Space
-#
-
-#
-# 2 Program name
-#
-prmonsnmp
-#
-# 3 Default SNMP community name
-#
-public
-#
-# 4 ... 9 Device status
-#
-unreachable
-unknown
-running
-warning
-testing
-down
-#
-# 10 ... 15 Printer status
-#
-unreachable
-other
-unknown
-idle
-printing
-warmup
-#
-# 16 Default condition set
-#
-XXXX-XXXX-XXXX-XXXX
-#
-# 17 Separator
-#
- /
-#
-# 18 3 spaces
-#
-
-#
-# 19 ... 33 Error conditions
-#
-W: Low paper.\n
-E: No paper!\n
-W: Low toner.\n
-E: No toner!\n
-E: Door open!\n
-E: Jammed!\n
-E: Offline!\n
-W: Service requested.\n
-E: Input tray missing!\n
-E: Output tray missing!\n
-E: Marker supply missing!\n
-W: Output near full.\n
-E: Output full!\n
-W: Input tray empty.\n
-W: Overdue preventive maintenance.\n
-#
-# 34 Comment marker before timestamp
-#
-\#
-#
-# 35 Error: Unreachable
-#
-UNREACHABLE!\n
-#
-# 36 ERROR: Failed to create request PDU
-#
-: ERROR: Failed to create SNMP request PDU!\n
-#
-# 37 Warning: SNMP version configured multiple times
-#
-: Warning: SNMP version configured multiple times!\n
-#
-# 38 39 ERROR: Illegal SNMP version
-#
-: ERROR: Illegal SNMP version: "
-"!\n
-#
-# 40
-#
-: Warning: SNMP community configured multiple times!\n
-#
-# 41
-#
-: Warning: Host name configured multiple times!\n
-#
-# 42
-#
-: ERROR: Missing host name!\n
-#
-# 43
-#
-: ERROR: Failed to open SNMP session!\n
-#
-# 44
-#
-: ERROR: Failed to restore signal handlers!\n
-#
-# 45
-#
-: ERROR: Failed to set up signal handlers!\n
-$!end
-};
-
-
-
-#if DK4_HAVE_LIBNETSNMP && ((DK4_HAVE_SIGACTION) || (DK4_HAVE_SIGSET))
-
-#include <net-snmp/net-snmp-config.h>
-#include <net-snmp/net-snmp-includes.h>
-#include <net-snmp/utilities.h>
-#include <net-snmp/library/snmp_logging.h>
-
-#include "dk4mem.h"
-#include "dk4str8.h"
-#include "dk4mai8dus.h"
-#include "dk4time.h"
-#include "dk4time08.h"
-#include "dk4sock.h"
-#include "dk4maasz.h"
-#include "dk4mai8dii.h"
-#include "dk4mai8ddu.h"
-#include "dk4mao8d.h"
-#include "dk4mao8h.h"
-#include "dk4enc.h"
-#include "dk4loc.h"
-#include "dk4vers.h"
-#include "dk4unused.h"
-
-
-
-$!trace-include
-
-
-
-/** Status text from SNMP response.
-*/
-static char statext[1024];
-
-
-
-/** Previous status text.
-*/
-static char ostatext[sizeof(statext)];
-
-
-
-/** Long option names.
-*/
-static const char * const long_options[] = {
-$!string-table
-help
-version
-license
-$!end
-};
-
-
-
-/** OID for device status.
-*/
-static const oid prmonsnmp_oid_ds[] = {
- (oid)1, (oid)3, (oid)6, (oid)1, (oid)2, (oid)1,
- (oid)25, (oid)3, (oid)2, (oid)1, (oid)5, (oid)1
-};
-
-/** Size of device status OID (number of elements).
-*/
-static size_t const pjsnmp_sz_oid_ds = sizeof(prmonsnmp_oid_ds)/sizeof(oid);
-
-
-/** OID for printer status.
-*/
-static const oid prmonsnmp_oid_ps[] = {
- (oid)1, (oid)3, (oid)6, (oid)1, (oid)2, (oid)1,
- (oid)25, (oid)3, (oid)5, (oid)1, (oid)1, (oid)1
-};
-
-/** Size of printer status OID (number of elements).
-*/
-static size_t const pjsnmp_sz_oid_ps = sizeof(prmonsnmp_oid_ps)/sizeof(oid);
-
-
-/** OID for pagecount value.
-*/
-static const oid prmonsnmp_oid_pc[] = {
- (oid)1, (oid)3, (oid)6, (oid)1, (oid)2, (oid)1,
- (oid)43, (oid)10, (oid)2, (oid)1, (oid)4, (oid)1, (oid)1
-};
-
-/** Size of page counter OID (number of elements).
-*/
-static size_t const pjsnmp_sz_oid_pc = sizeof(prmonsnmp_oid_pc)/sizeof(oid);
-
-
-/** Printer error OID.
-*/
-static const oid prmonsnmp_oid_pe[] = {
- (oid)1, (oid)3, (oid)6, (oid)1, (oid)2, (oid)1,
- (oid)25, (oid)3, (oid)5, (oid)1, (oid)2, (oid)1
-};
-
-/** Size of printer error OID (number of elements).
-*/
-static size_t const pjsnmp_sz_oid_pe = sizeof(prmonsnmp_oid_pe)/sizeof(oid);
-
-/** Status text OID.
-*/
-static const oid prmonsnmp_oid_st[] = {
- (oid)1, (oid)3, (oid)6, (oid)1, (oid)2, (oid)1,
- (oid)43, (oid)16, (oid)5, (oid)1, (oid)2, (oid)1, (oid)1
-};
-
-/** Size of printer error OID (number of elements).
-*/
-static size_t const pjsnmp_sz_oid_st = sizeof(prmonsnmp_oid_st)/sizeof(oid);
-
-
-/** Help text.
-*/
-static const char * const help_text[] = {
-$!text
-
-Monitor printers
-
-prmonsnmp [-v version] [-c community] [-t seconds] [-n] host
-
-Options:
--v version SNMP version: 1, 2c, 2 (same as 2c), 3, default: 1.
--c community SNMP community name, default: public.
--t seconds Duration for monitoring, default: 0 (endless).
--n No 250 ms grace period between requests.
-
---help Show this help text.
---version Show version number.
---license Show license information.
-
-$!end
-};
-
-
-
-/** License conditions text.
-*/
-static const char * const license_text[] = {
-$!text preprocessor
-
-This software uses code from the following projects, either directly or as
-a library:
-
-dktools Dirk Krause's tools and libraries.
- See http://sourceforge.net/p/dktools/wiki/Home/
- for more information.
-#if DK4_HAVE_LIBNETSNMP
-Net-SNMP SNMP access library.
- See http://net-snmp.sourceforge.net/ for more information.
-#endif
-#if DK4_HAVE_ZLIB_H
-
-zlib Data compression library.
- See http://www.zlib.net/ for more information.
-#endif
-#if DK4_HAVE_OPENSSL_MD5_H && DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_OPENSSL_RIPEMD_H
-
-OpenSSL Cryptographic toolkit, used to build file checksums here.
- See http://www.openssl.org/ for more information.
-
-This product includes software developed by the OpenSSL Project for use in
-the OpenSSL Toolkit (http://www.openssl.org/).
-This product includes cryptographic software written by
-Eric Young (eay@cryptsoft.com).
-This product includes software written by Tim Hudson (tjh@cryptsoft.com).
-#endif
-
-All the licenses below apply to the program.
-Licenses for used libraries are shown as found on my Scientific Linux 6.x
-computer in the /usr/share/doc directory on 2015-04-01. Check the project
-homepages of the used libraries for additional information and/or updated
-license terms.
-
-
-DK tools and libraries license
-==============================
-Copyright (c) 2015-2016, Dirk Krause
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-3. Neither the name of the copyright holder nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-#if DK4_HAVE_LIBNETSNMP
-
-
-Net-SNMP license
-================
-Various copyrights apply to this package, listed in various separate parts
-below. Please make sure that you read all the parts. Up until 2001,
-the project was based at UC Davis, and the first part covers all code
-written during this time. From 2001 onwards, the project has been
-based at SourceForge, and Networks Associates Technology, Inc hold the
-copyright on behalf of the wider Net-SNMP community, covering all
-derivative work done since then. An additional copyright section has
-been added as Part 3 below also under a BSD license for the work
-contributed by Cambridge Broadband Ltd. to the project since 2001.
-An additional copyright section has been added as Part 4 below also
-under a BSD license for the work contributed by Sun Microsystems, Inc.
-to the project since 2003.
-
-Code has been contributed to this project by many people over
-the years it has been in development, and a full list of contributors
-can be found in the README file under the THANKS section.
-
-
----- Part 1: CMU/UCD copyright notice: (BSD like) -----
-
-
- Copyright 1989, 1991, 1992 by Carnegie Mellon University
-
- Derivative Work - 1996, 1998-2000
-Copyright 1996, 1998-2000 The Regents of the University of California
-
- All Rights Reserved
-
-Permission to use, copy, modify and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appears in all copies and
-that both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of CMU and The Regents of
-the University of California not be used in advertising or publicity
-pertaining to distribution of the software without specific written
-permission.
-
-CMU AND THE REGENTS OF THE UNIVERSITY OF CALIFORNIA DISCLAIM ALL
-WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL CMU OR
-THE REGENTS OF THE UNIVERSITY OF CALIFORNIA BE LIABLE FOR ANY SPECIAL,
-INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
-FROM THE LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
-CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-
----- Part 2: Networks Associates Technology, Inc copyright notice (BSD) -----
-
-Copyright (c) 2001-2003, Networks Associates Technology, Inc
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-* Neither the name of the Networks Associates Technology, Inc nor the
- names of its contributors may be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
-IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
----- Part 3: Cambridge Broadband Ltd. copyright notice (BSD) -----
-
-Portions of this code are copyright (c) 2001-2003, Cambridge Broadband Ltd.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-* The name of Cambridge Broadband Ltd. may not be used to endorse or
- promote products derived from this software without specific prior
- written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
----- Part 4: Sun Microsystems, Inc. copyright notice (BSD) -----
-
-Copyright © 2003 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-California 95054, U.S.A. All rights reserved.
-
-Use is subject to license terms below.
-
-This distribution may include materials developed by third parties.
-
-Sun, Sun Microsystems, the Sun logo and Solaris are trademarks or registered
-trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-* Neither the name of the Sun Microsystems, Inc. nor the
- names of its contributors may be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
-IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
----- Part 5: Sparta, Inc copyright notice (BSD) -----
-
-Copyright (c) 2003-2006, Sparta, Inc
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-* Neither the name of Sparta, Inc nor the names of its contributors may
- be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
-IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
----- Part 6: Cisco/BUPTNIC copyright notice (BSD) -----
-
-Copyright (c) 2004, Cisco, Inc and Information Network
-Center of Beijing University of Posts and Telecommunications.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-* Neither the name of Cisco, Inc, Beijing University of Posts and
- Telecommunications, nor the names of their contributors may
- be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
-IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
----- Part 7: Fabasoft R&D Software GmbH & Co KG copyright notice (BSD) -----
-
-Copyright (c) Fabasoft R&D Software GmbH & Co KG, 2003
-oss@fabasoft.com
-Author: Bernhard Penz <bernhard.penz@fabasoft.com>
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-* The name of Fabasoft R&D Software GmbH & Co KG or any of its subsidiaries,
- brand or product names may not be used to endorse or promote products
- derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#endif
-#if DK4_HAVE_ZLIB_H
-
-
-Zlib license
-============
-(C) 1995-2004 Jean-loup Gailly and Mark Adler
-
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-
-Jean-loup Gailly Mark Adler
-jloup@gzip.org madler@alumni.caltech.edu
-#endif
-#if DK4_HAVE_BZLIB_H
-
-
-Bzip2 and libbzip2 library license
-==================================
-This program, "bzip2", the associated library "libbzip2", and all
-documentation, are copyright (C) 1996-2007 Julian R Seward. All
-rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-2. The origin of this software must not be misrepresented; you must
- not claim that you wrote the original software. If you use this
- software in a product, an acknowledgment in the product
- documentation would be appreciated but is not required.
-
-3. Altered source versions must be plainly marked as such, and must
- not be misrepresented as being the original software.
-
-4. The name of the author may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
-OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Julian Seward, jseward@bzip.org
-bzip2/libbzip2 version 1.0.5 of 10 December 2007
-#endif
-#if DK4_HAVE_OPENSSL_MD5_H && DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_OPENSSL_RIPEMD_H
-
-
-OpenSSL license
-===============
-
-LICENSE ISSUES
---------------
-
-The OpenSSL toolkit stays under a dual license, i.e. both the conditions of
-the OpenSSL License and the original SSLeay license apply to the toolkit.
-See below for the actual license texts. Actually both licenses are BSD-style
-Open Source licenses. In case of any license issues related to OpenSSL
-please contact openssl-core@openssl.org.
-
-OpenSSL License
----------------
-
-Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
-
-3. All advertising materials mentioning features or use of this
- software must display the following acknowledgment:
- "This product includes software developed by the OpenSSL Project
- for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
-
-4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
- endorse or promote products derived from this software without
- prior written permission. For written permission, please contact
- openssl-core@openssl.org.
-
-5. Products derived from this software may not be called "OpenSSL"
- nor may "OpenSSL" appear in their names without prior written
- permission of the OpenSSL Project.
-
-6. Redistributions of any form whatsoever must retain the following
- acknowledgment:
- "This product includes software developed by the OpenSSL Project
- for use in the OpenSSL Toolkit (http://www.openssl.org/)"
-
-THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
-EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
-ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-OF THE POSSIBILITY OF SUCH DAMAGE.
-
-This product includes cryptographic software written by Eric Young
-(eay@cryptsoft.com). This product includes software written by Tim
-Hudson (tjh@cryptsoft.com).
-
-
-Original SSLeay License
------------------------
-
-Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
-All rights reserved.
-
-This package is an SSL implementation written
-by Eric Young (eay@cryptsoft.com).
-The implementation was written so as to conform with Netscapes SSL.
-
-This library is free for commercial and non-commercial use as long as
-the following conditions are aheared to. The following conditions
-apply to all code found in this distribution, be it the RC4, RSA,
-lhash, DES, etc., code; not just the SSL code. The SSL documentation
-included with this distribution is covered by the same copyright terms
-except that the holder is Tim Hudson (tjh@cryptsoft.com).
-
-Copyright remains Eric Young's, and as such any Copyright notices in
-the code are not to be removed.
-If this package is used in a product, Eric Young should be given attribution
-as the author of the parts of the library used.
-This can be in the form of a textual message at program startup or
-in documentation (online or textual) provided with the package.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-3. All advertising materials mentioning features or use of this software
- must display the following acknowledgement:
- "This product includes cryptographic software written by
- Eric Young (eay@cryptsoft.com)"
- The word 'cryptographic' can be left out if the rouines from the library
- being used are not cryptographic related :-).
-4. If you include any Windows specific code (or a derivative thereof) from
- the apps directory (application code) you must include an acknowledgement:
- "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
-
-THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
-The licence and distribution terms for any publically available version or
-derivative of this code cannot be changed. i.e. this code cannot simply be
-copied and put under another distribution licence
-[including the GNU Public Licence.]
-
-#endif
-
-$!end
-};
-
-
-
-/** Version information.
-*/
-static const char version_text[] = { DKT_VERSION_C8 };
-
-
-
-/** Accepted SNMP version names.
-*/
-static const char * const snmp_version_names[] = {
-$!string-table
-1
-2
-2c
-3
-$!end
-};
-
-
-/** Host name (or IP address) of printer.
-*/
-static char *host_name = NULL;
-
-/** SNMP community name.
-*/
-static char *snmp_comm = NULL;
-
-
-/** SNMP session.
-*/
-static struct snmp_session *snmp_sess = NULL;
-
-
-/** Timeout in seconds.
-*/
-static dk4_um_t timeout = (dk4_um_t)0UL;
-
-
-/** Previous log timestamp.
-*/
-static dk4_time_t previous_log = (dk4_time_t)0UL;
-
-
-/** SNMP version.
-*/
-static long snmp_vers = SNMP_VERSION_1;
-
-/** Flag: Had a previous log.
-*/
-static int have_time = 0;
-
-
-/** Flag: Behave gracefully, max 4 SNMP requests per second.
-*/
-static int grace = 1;
-
-
-#ifdef SIGPIPE
-/** Indicator: SIGPIPE signal received.
-*/
-static
-DK4_VOLATILE
-dk4_sig_atomic_t sig_had_pipe = 0;
-#endif
-
-
-/** Indicator: SIGINT signal received.
-*/
-static
-DK4_VOLATILE
-dk4_sig_atomic_t sig_had_int = 0;
-
-
-/** Indicator: SIGTERM signal received.
-*/
-static
-DK4_VOLATILE
-dk4_sig_atomic_t sig_had_term = 0;
-
-static int encoding = DK4_ENCODING_PLAIN;
-#endif
-
-/** Exit status code.
-*/
-static int exval = EXIT_FAILURE;
-
-
-
-#if DK4_HAVE_LIBNETSNMP && ((DK4_HAVE_SIGACTION) || (DK4_HAVE_SIGSET))
-
-
-
-/** Help (1), version (2), license (4).
-*/
-static int hvl = 0;
-
-
-
-/** Pass volatile pointer.
- @param ptr Pointer to pass through.
- @return The original pointer.
-*/
-static
-DK4_VOLATILE
-dk4_sig_atomic_t *
-sig_pass_pointer(DK4_VOLATILE dk4_sig_atomic_t *ptr)
-{
- return ptr;
-}
-
-
-#ifdef SIGPIPE
-/** Handler for SIGPIPE signal.
- @param signo Signal number (always SIGPIPE, ignored).
-*/
-static
-void
-sig_handler_pipe(int DK4_ARG_UNUSED(signo) )
-{
- DK4_UNUSED_ARG(signo)
- *sig_pass_pointer(&sig_had_pipe) = 1;
-}
-#endif
-
-
-/** Handler for SIGINT signal.
- @param signo Signal number (always SIGINT, ignored).
-*/
-static
-void
-sig_handler_int(int DK4_ARG_UNUSED(signo) )
-{
- DK4_UNUSED_ARG(signo)
- *sig_pass_pointer(&sig_had_int) = 1;
-}
-
-
-/** Handler for SIGTERM signal.
- @param signo Signal number (always SIGTERM, ignored).
-*/
-static
-void
-sig_handler_term(int DK4_ARG_UNUSED(signo) )
-{
- DK4_UNUSED_ARG(signo)
- *sig_pass_pointer(&sig_had_term) = 1;
-}
-
-
-/** Read value from volatile atomic type.
- This function is necessary as some compilers mis-optimize
- direct access to volatile variables (at least if you believe
- one of the coding standards).
- @param ap Pointer to volatile atomic variable.
- @return Contents of the variable.
-*/
-static
-dk4_sig_atomic_t
-sig_read_atomic(DK4_VOLATILE dk4_sig_atomic_t *ap)
-{
- return (*ap);
-}
-
-
-/** Check whether we can continue or must abort due to signal.
- @param dopipe Flag: Check for SIGPIPE too.
- @return 1 if we can continue, 0 otherwise.
-*/
-static
-int
-can_continue(int dopipe)
-{
- int back = 1;
- if (0 != sig_read_atomic(&sig_had_term)) { back = 0; }
- if (0 != sig_read_atomic(&sig_had_int)) { back = 0; }
-#ifdef SIGPIPE
- if (0 != dopipe) {
- if (0 != sig_read_atomic(&sig_had_pipe)) { back = 0; }
- }
-#endif
- return back;
-}
-
-
-
-/** Check two OIDs for equality.
- @param pl Left OID.
- @param szl Left OID size.
- @param pr Right OID.
- @param szr Right OID size.
- @return 1 for equal OIDs, 0 otherwise.
-*/
-static
-int
-oids_equal(const oid *pl, size_t szl, const oid *pr, size_t szr)
-{
-#if VERSION_BEFORE_20160206
- size_t i;
-#endif
- int back = 0;
-
- if (szl == szr) {
-#if VERSION_BEFORE_20160206
- back = 1;
- for (i = 0; ((i < szl) && (1 == back)); i++) {
- if (pl[i] != pr[i]) {
- back = 0;
- }
- }
-#else
- if (0 == dk4mem_cmp(pl, pr, (szl * sizeof(oid)), NULL)) {
- back = 1;
- }
-#endif
- }
- return back;
-}
-
-
-/** Find OID index.
- @param oid Pointer to OID to check.
- @param sz OID size.
- @return 0 for hrDeviceStatus, 1 for hrPrinterStatus,
- 2 for page counter, 3 for hrPrinterDetectedErrorState,
- 4 for prtMarkerLifeCount, -1 otherwise.
-*/
-static
-int
-oid_index(oid *p, size_t sz)
-{
- int back = -1;
- if (0 != oids_equal(p, sz, prmonsnmp_oid_ds, pjsnmp_sz_oid_ds)) {
- back = 0;
- } else {
- if (0 != oids_equal(p, sz, prmonsnmp_oid_ps, pjsnmp_sz_oid_ps)) {
- back = 1;
- } else {
- if (0 != oids_equal(p, sz, prmonsnmp_oid_pe, pjsnmp_sz_oid_pe)) {
- back = 2;
- } else {
- if (0 != oids_equal(p, sz, prmonsnmp_oid_st, pjsnmp_sz_oid_st)) {
- back = 3;
- } else {
- if (0 != oids_equal(p, sz, prmonsnmp_oid_pc, pjsnmp_sz_oid_pc)) {
- back = 4;
- }
- }
- }
- }
- }
- return back;
-}
-
-
-/** Retrieve integer value from variable list.
- @param iptr Address of variable to set.
- @param var SNMP variable containing the value.
- @return 1 on success, 0 on error.
-*/
-static
-int
-get_int(int *iptr, struct variable_list *var)
-{
- char bu[64]; /* Buffer for text data copy */
- const char *endptr = NULL; /* End of used data in numeric conversion */
- long l; /* Long value from SNMP response */
- int i; /* Text to number conversion result */
- int back = 0;
- $? "+ get_int"
- switch (var->type) {
- case ASN_OCTET_STR : { $? ". from string"
- if ((var->val_len > 0) && (var->val_len < sizeof(bu))) {
- dk4mem_cpy(bu, (void *)((var->val).string), var->val_len, NULL);
- bu[var->val_len] = '\0';
- if (0 != dk4ma_input_c8_dec_int(&i, bu, &endptr, 1, NULL)) {
- *iptr = i;
- back = 1;
- }
- }
- } break;
- case ASN_TIMETICKS :
- case ASN_GAUGE :
- case ASN_COUNTER :
- case ASN_INTEGER : { $? ". from integer"
- l = *((var->val).integer);
- *iptr = (int)l;
- back = 1;
- } break;
- }
- $? "- get_int %d", back
- return back;
-}
-
-
-/** Retrieve unsigned long value from variable list.
- @param ulptr Address of variable to set.
- @param var SNMP variable containing the value.
- @return 1 on success, 0 on error.
-*/
-static
-int
-get_ul(unsigned long *ulptr, struct variable_list *var)
-{
- unsigned long ul = 0UL; /* Conversion result */
- long l; /* Long result from SNMP response */
- int back = 0;
- $? "+ get_ul"
- switch (var->type) {
- case ASN_OCTET_STR : { $? ". from byte array"
- if (0 < var->val_len) {
- ul |=
- ((((unsigned long)(((var->val).string)[0])) << 24) & 0xFF000000UL);
- back = 1;
- }
- if (1 < var->val_len) {
- ul |=
- ((((unsigned long)(((var->val).string)[1])) << 16) & 0x00FF0000UL);
- }
- if (2 < var->val_len) {
- ul |=
- ((((unsigned long)(((var->val).string)[2])) << 8) & 0x0000FF00UL);
- }
- if (3 < var->val_len) {
- ul |=
- ((((unsigned long)(((var->val).string)[3])) ) & 0x000000FFUL);
- }
- if (0 != back) {
- *ulptr = ul;
- }
- } break;
- case ASN_TIMETICKS :
- case ASN_GAUGE :
- case ASN_COUNTER :
- case ASN_INTEGER : { $? ". from integer"
- l = *((var->val).integer);
- if (0L <= l) {
- *ulptr = (unsigned long)l;
- back = 1;
- }
- } break;
- }
- $? "- get_ul %d", back
- return back;
-}
-
-
-
-/** Check whether a text buffer contains non-ASCII bytes.
- @param ptr Buffer start address.
- @param i Buffer size.
- @return 1 if non-ASCII found, 0 for ASCII only.
-*/
-static
-int
-contains_non_ascii(const unsigned char *ptr, size_t i)
-{
- int back = 0;
- while ((0 == back) && (0 < i)) {
- if (0x7F < *(ptr++)) {
- back = 1;
- }
- i--;
- }
- return back;
-}
-
-
-
-/** Log current timestamp.
-*/
-static
-void
-log_timestamp(void)
-{
- char buf[64]; /* Text representation of timestamp */
- dk4_time_t current; /* Current time */
- int res; /* Conversion operation result */
-
- dk4time_get(&current);
- if ((0 == have_time) || (current != previous_log)) {
- res = dk4time_as_text_c8(buf, sizeof(buf), &current, NULL);
- if (0 != res) {
- if (0 != have_time) {
- fputc('\n', stdout);
- }
- fputs(prmonsnmp_kw[34], stdout);
- fputs(buf, stdout);
- fputc('\n', stdout);
- }
- } else {
- if (0 != have_time) {
- fputc('\n', stdout);
- }
- }
- have_time = 1;
- previous_log = current;
-}
-
-
-
-/** Show text, convert non-ASCII to question marks.
- @param str String to show.
- @param sz Text length.
-*/
-static
-void
-show_as_ascii(const unsigned char *str, size_t sz)
-{
- while (0 < sz--) {
- if (0x7F < *str) {
- fputc('?', stdout);
- } else {
- fputc(*str, stdout);
- }
- str++;
- }
-}
-
-
-
-/** The main loop sending SNMP requests and printing
- responses to standard output.
-*/
-static
-void
-run_main_loop(void)
-{
- char nb[64]; /* Buffer for hex representation */
- struct timeval to; /* Timeout for select */
- struct snmp_pdu *rq; /* Request */
- struct snmp_pdu *rs; /* Response */
- struct variable_list *vars; /* Current variable to process */
- unsigned char *uptr; /* Traverse text */
- dk4_time_t start_time; /* Start time */
- dk4_time_t timeout_time; /* First timeout seen */
- dk4_time_t current_time; /* Current time */
- unsigned long cond = 0UL; /* Printer detected error */
- unsigned long ocond = 0UL; /* Previous printer det err */
- unsigned long tcond = 0UL; /* Current conditions */
- unsigned long opcnt = 0UL; /* Previous page count */
- unsigned long ul; /* unsigned long from current var */
- unsigned long pcnt; /* Page count */
- size_t lst; /* Status text length */
- size_t olst; /* Previous status text length */
- int i; /* Traverse bits in pr det err st */
- int found; /* Summary: Which information found */
- int must_show; /* Must show changed values */
- int must_flush; /* Must flush standard output */
- int status; /* SNMP response status */
- int res; /* Operation result */
- int cc = 1; /* Flag: Can continue */
- int devst = 0; /* Device status */
- int prist = 0; /* Printer status */
- int unreach = 0; /* Flag: Unreachable */
- int odevst = 0; /* Previous device status */
- int oprist = 0; /* Previous printer status */
- int ounreach = 0; /* Previous unreach flag */
-
- dk4time_get(&start_time);
- timeout_time = (dk4_time_t)0UL;
- if ((dk4_um_t)0UL < timeout) {
- timeout_time = start_time + (dk4_time_t)timeout;
- }
- cc = 1;
- statext[0] = '\0';
- ostatext[0] = '\0';
- olst = 0;
- do {
- pcnt = 0UL;
- unreach = 1;
- devst = 0;
- prist = 0;
- found = 0;
- cond = 0UL;
- statext[0] = '\0';
- rs = NULL;
- lst = 0;
- must_show = 0; $? ". must_show = 0"
- must_flush = 0;
- if (0 != can_continue(0)) {
- rq = snmp_pdu_create(SNMP_MSG_GET);
- if (NULL != rq) {
- snmp_add_null_var(rq, prmonsnmp_oid_ds, pjsnmp_sz_oid_ds);
- snmp_add_null_var(rq, prmonsnmp_oid_ps, pjsnmp_sz_oid_ps);
- snmp_add_null_var(rq, prmonsnmp_oid_pe, pjsnmp_sz_oid_pe);
- snmp_add_null_var(rq, prmonsnmp_oid_st, pjsnmp_sz_oid_st);
- snmp_add_null_var(rq, prmonsnmp_oid_pc, pjsnmp_sz_oid_pc);
- status = snmp_synch_response(snmp_sess, rq, &rs);
- if (STAT_SUCCESS == status) {
- if (NULL != rs) {
- if (SNMP_ERR_NOERROR == rs->errstat) {
- unreach = 0;
- vars = rs->variables;
- while (NULL != vars) {
- switch (oid_index(vars->name, vars->name_length)) {
- case 0: {
- i = 0;
- if (0 != get_int(&i, vars)) {
- devst = i;
- found |= 1;
- }
- } break;
- case 1: {
- i = 0;
- if (0 != get_int(&i, vars)) {
- prist = i;
- found |= 2;
- }
- } break;
- case 2: {
- ul = 0UL;
- if (0 != get_ul(&ul, vars)) {
- cond = ul;
- found |= 4;
- }
- } break;
- case 3: {
- if ((0 < vars->val_len)&&(sizeof(statext) > vars->val_len))
- {
- dk4mem_cpy(statext,(vars->val).string,vars->val_len,NULL);
- statext[vars->val_len] = '\0';
- lst = vars->val_len;
- found |= 8;
- }
- } break;
- case 4: {
- ul = 0UL;
- if (0 != get_ul(&ul, vars)) {
- pcnt = ul;
- found |= 16;
- }
- } break;
- }
- vars = vars->next_variable;
- }
- if (0 != (1 & found)) {
- if (devst != odevst) { $? ". must_show = 1"
- must_show = 1;
- }
- }
- if (0 != (2 & found)) {
- if (prist != oprist) { $? ". must_show = 1"
- must_show = 1;
- }
- }
- if (0 != (4 & found)) {
- if (cond != ocond) { $? ". must_show = 1"
- must_show = 1;
- }
- }
- if (0 != (8 & found)) {
- if (lst != olst) { $? ". must_show = 1"
- must_show = 1;
- }
- if (0 != dk4mem_cmp(statext, ostatext, lst, NULL)) {
- $? ". must_show = 1"
- must_show = 1;
- }
- }
- if (0 != (16 & found)) {
- if (pcnt != opcnt) {
- must_show = 1;
- }
- }
- if (0 != must_show) {
- log_timestamp();
- must_flush = 1;
- if ((0 != (1 & found)) && (0 <= devst) && (5 >= devst)) {
- fputs(prmonsnmp_kw[4 + devst], stdout);
- }
- if ((0 != (2 & found)) && (0 <= prist) && (5 >= prist)) {
- fputs(prmonsnmp_kw[17], stdout);
- fputs(prmonsnmp_kw[10 + prist], stdout);
- }
- if (0 != (4 & found)) {
- fputs(prmonsnmp_kw[18], stdout);
- tcond = 0x80000000UL;
- for (i = 0; i < 16; i++) {
- if ((0 < i) && (0 == (i % 4))) {
- fputc('-', stdout);
- }
- fputc(((0UL != (tcond & cond)) ? '1' : '0'), stdout);
- tcond = tcond / 2UL;
- }
- }
- if (0 != (16 & found)) {
- res = dk4ma_write_c8_decimal_unsigned(
- nb, sizeof(nb), (dk4_um_t)pcnt, 0, NULL
- );
- if (0 != res) {
- fputs(prmonsnmp_kw[18], stdout);
- fputs(nb, stdout);
- }
- }
- fputc('\n', stdout);
- if (0 != (4 & found)) {
- tcond = 0x80000000UL;
- for (i = 0; i < 15; i++) {
- if (0UL != (cond & tcond)) {
- fputs(prmonsnmp_kw[19 + i], stdout);
- }
- tcond = tcond / 2UL;
- }
- }
- if (0 != (8 & found)) {
- if (0 < lst) {
- uptr = (unsigned char *)statext;
- for (i = 0; (size_t)i < lst; i++) {
- if (0 < i) {
- if (0 == (i % 24)) {
- fputc('\n', stdout);
- } else {
- fputc(' ', stdout);
- }
- }
- res = dk4ma_write_c8_hex_unsigned(
- nb, sizeof(nb), (dk4_um_t)(*(uptr++)), 2, NULL
- );
- if (0 != res) {
- fputs(nb, stdout);
- }
- }
- fputc('\n', stdout);
- fputc('"', stdout);
- if (0 == contains_non_ascii((unsigned char *)statext,lst)) {
- fwrite(statext, 1, lst, stdout);
- } else {
- show_as_ascii((unsigned char *)statext, lst);
- }
- fputc('"', stdout);
- fputc('\n', stdout);
- }
- }
- }
- }
- }
- }
- if (NULL != rs) {
- snmp_free_pdu(rs);
- }
- if (unreach != ounreach) {
- log_timestamp();
- fputs(prmonsnmp_kw[35], stdout);
- must_flush = 1;
- }
- ounreach = unreach;
- odevst = devst;
- oprist = prist;
- ocond = cond;
- olst = lst;
- opcnt = pcnt;
- strcpy(ostatext, statext);
- } else {
- cc = -1;
- exval = EXIT_FAILURE;
- /* ERROR: Failed to create request PDU */
- fputs(prmonsnmp_kw[2], stderr);
- fputs(prmonsnmp_kw[36], stderr);
- fflush(stderr);
- }
- if (0 != must_flush) {
- fflush(stdout);
- }
- } else {
- cc = -1;
- }
- if (1 == cc) {
- if ((dk4_time_t)0UL < timeout_time) {
- dk4time_get(&current_time);
- if (current_time > timeout_time) {
- cc = 0;
- }
- }
- }
- if (1 == cc) {
- if (0 != grace) {
- to.tv_sec = 0L;
- to.tv_usec = 250000L;
- select(0, NULL, NULL, NULL, &to);
- }
- }
- } while (1 == cc);
-}
-
-
-
-/** Set SNMP version.
- @param name SNMP version name as text.
- @return 1 on success, 0 on error.
-*/
-static
-int
-set_snmp_version(const char *name)
-{
- int back = 0;
- switch (dk4str8_array_index(snmp_version_names, name, 0)) {
- case 0: {
- back = 1;
- snmp_vers = SNMP_VERSION_1;
- } break;
- case 1: case 2: {
- back = 1;
- snmp_vers = SNMP_VERSION_2c;
- } break;
- case 3: {
- back = 1;
- snmp_vers = SNMP_VERSION_3;
- } break;
- }
- return back;
-}
-
-
-
-/** Process command line arguments.
- @param argc Number of command line arguments.
- @param argv Command line arguments array.
- @return 1 on success, 0 on error.
-*/
-static
-int
-process_command_line_arguments(int argc, char *argv[])
-{
- char **lfdarg; /* Traverse cmd line arguments */
- char *curarg; /* Current cmd line argument */
- const char *ep; /* End of used data in conversion */
- dk4_um_t um; /* Conversion result */
- int i; /* Cmd line args still remaining */
- int have_vers = 0; /* Flag: Have SNMP version */
- int back = 1; /* Function result */
- int res; /* Conversion result */
-
- lfdarg = argv; i = argc;
- lfdarg++; i--;
- while (0 < i) {
- curarg = *lfdarg;
- if ('-' == *curarg) {
- curarg++;
- switch (*curarg) {
- case '-' : {
- curarg++;
- switch ( dk4str8_array_index(long_options, curarg, 0) ) {
- case 0: {
- hvl |= 1;
- } break;
- case 1: {
- hvl |= 2;
- } break;
- case 2: {
- hvl |= 4;
- } break;
- }
- } break;
- case 'n' : {
- grace = 0;
- } break;
- case 'v' : {
- if (0 != have_vers) {
- /* WARNING: Version redefined */
- fputs(prmonsnmp_kw[2], stderr);
- fputs(prmonsnmp_kw[37], stderr);
- fflush(stderr);
- }
- have_vers = 1;
- curarg++; curarg = dk4str8_start(curarg, NULL);
- if (NULL == curarg) {
- lfdarg++; i--;
- if (0 < i) { curarg = *lfdarg; }
- }
- if (NULL != curarg) {
- if (0 == set_snmp_version(curarg)) {
- /* WARNING: Illegal SNMP version */
- fputs(prmonsnmp_kw[2], stderr);
- fputs(prmonsnmp_kw[38], stderr);
- fputs(curarg, stderr);
- fputs(prmonsnmp_kw[39], stderr);
- fflush(stderr);
- back = 0;
- }
- } else {
- back = 0;
- }
- } break;
- case 'c' : {
- curarg++; curarg = dk4str8_start(curarg, NULL);
- if (NULL == curarg) {
- lfdarg++; i--;
- if (0 < i) { curarg = *lfdarg; }
- }
- if (NULL != curarg) {
- if (NULL != snmp_comm) {
- /* WARNING: Community redefined */
- fputs(prmonsnmp_kw[2], stderr);
- fputs(prmonsnmp_kw[40], stderr);
- fflush(stderr);
- }
- snmp_comm = curarg;
- } else {
- back = 0;
- }
- } break;
- case 't' : {
- curarg++; curarg = dk4str8_start(curarg, NULL);
- if (NULL == curarg) {
- lfdarg++; i--;
- if (0 < i) { curarg = *lfdarg; }
- }
- if (NULL != curarg) {
- ep = NULL;
- res = dk4ma_input_c8_dec_dk4_um_t(&um, curarg, &ep, 1, NULL);
- if (0 != res) {
- timeout = um;
- } else {
- back = 0;
- }
- } else {
- back = 0;
- }
- } break;
- }
- } else {
- if (NULL != host_name) {
- /* WARNING: Host name redefined */
- fputs(prmonsnmp_kw[2], stderr);
- fputs(prmonsnmp_kw[41], stderr);
- fflush(stderr);
- }
- host_name = curarg;
- }
- if (0 < i) { lfdarg++; i--; }
- }
- if ((0 == hvl) && (NULL == host_name)) {
- /* ERROR: Missing host name */
- fputs(prmonsnmp_kw[2], stderr);
- fputs(prmonsnmp_kw[42], stderr);
- fflush(stderr);
- back = 0;
- }
- return back;
-}
-
-
-/** Show a text paragraph on standard output.
- @param txt Text to show.
-*/
-static
-void
-show_text(const char * const *txt)
-{
- if (NULL != txt) {
- while (NULL != *txt) {
- fputs(*(txt++), stdout);
- fputc('\n', stdout);
- }
- fflush(stdout);
- }
-}
-
-
-
-/** Handle --help, --version, --license options.
-*/
-static
-void
-run_hvl(void)
-{
- $? "+ run_hvl"
- if (0 != (1 & hvl)) {
- show_text(help_text);
- }
- if (0 != (2 & hvl)) {
- fputs(version_text, stdout);
- fputc('\n', stdout);
- fflush(stdout);
- }
- if (0 != (4 & hvl)) {
- show_text(license_text);
- }
- exval = EXIT_SUCCESS;
- $? "- run_hvl"
-}
-
-
-
-#endif
-
-/** Main function.
- @param argc Number of command line arguments.
- @param argv Command line arguments array.
- @return 0 on success, all other values indicate errors.
-*/
-int main(int argc, char *argv[])
-{
-#if DK4_HAVE_LIBNETSNMP && ((DK4_HAVE_SIGACTION) || (DK4_HAVE_SIGSET))
-
- /* +++++ Required libraries available */
- dkChar blang[32];
- dkChar breg[32];
- struct snmp_session sesstemp;
-#if DK4_HAVE_SIGACTION
-#ifdef SIGPIPE
- struct sigaction opipe;
- struct sigaction npipe;
-#endif
- struct sigaction oint;
- struct sigaction nint;
- struct sigaction oterm;
- struct sigaction nterm;
-#else
-#ifdef SIGPIPE
- dk4_sig_handler_t *opipe = NULL;
-#endif
- dk4_sig_handler_t *oterm = NULL;
- dk4_sig_handler_t *oint = NULL;
-#endif
- const size_t szblang = DK4_SIZEOF(blang,dkChar);
- const size_t szbreg = DK4_SIZEOF(breg,dkChar);
-#if DK4_HAVE_SIGACTION
- int pipe_set = 0;
- int term_set = 0;
- int int_set = 0;
- int sig_i_f = 0;
- int sig_r_f = 0;
-#endif
- $!trace-init prmonsnmp.deb
- $? "+ main"
-
- /* Set signal handlers.
- --------------------
- */
-#if DK4_HAVE_SIGACTION
-#ifdef SIGPIPE
- DK4_MEMRES(&npipe, sizeof(npipe));
- npipe.sa_handler = sig_handler_pipe;
- npipe.sa_flags = 0;
- if (0 != sigemptyset(&npipe.sa_mask)) {
- /* ERROR: Failed to set up masked signal set for SIGPIPE */
- sig_i_f = 1;
- goto finished;
- }
- if (0 != sigaddset(&npipe.sa_mask, SIGPIPE)) {
- /* ERROR: Failed to set up masked signal set for SIGPIPE */
- sig_i_f = 1;
- goto finished;
- }
- if (0 != sigaction(SIGPIPE, &npipe, &opipe)) {
- /* ERROR: Failed to set up signal handler for SIGPIPE */
- sig_i_f = 1;
- goto finished;
- }
- pipe_set = 1;
-#endif
- DK4_MEMRES(&nterm, sizeof(nterm));
- nterm.sa_handler = sig_handler_term;
- nterm.sa_flags = 0;
- if (0 != sigemptyset(&nterm.sa_mask)) {
- /* ERROR: Failed to set up masked signal set for SIGTERM */
- sig_i_f = 1;
- goto finished;
- }
- if (0 != sigaddset(&nterm.sa_mask, SIGTERM)) {
- /* ERROR: Failed to set up masked signal set for SIGTERM */
- sig_i_f = 1;
- goto finished;
- }
- if (0 != sigaction(SIGTERM, &nterm, &oterm)) {
- /* ERROR: Failed to set up signal handler for SIGTERM */
- sig_i_f = 1;
- goto finished;
- }
- term_set = 1;
- DK4_MEMRES(&nint, sizeof(nint));
- nint.sa_handler = sig_handler_int;
- nint.sa_flags = 0;
- if (0 != sigemptyset(&nint.sa_mask)) {
- /* ERROR: Failed to set up masked signal set for SIGINT */
- sig_i_f = 1;
- goto finished;
- }
- if (0 != sigaddset(&nint.sa_mask, SIGINT)) {
- /* ERROR: Failed to set up masked signal set for SIGINT */
- sig_i_f = 1;
- goto finished;
- }
- if (0 != sigaction(SIGINT, &nint, &oint)) {
- /* ERROR: Failed to set up signal handler for SIGINT */
- sig_i_f = 1;
- goto finished;
- }
- int_set = 1;
-#else
-#ifdef SIGPIPE
- opipe = sigset(SIGPIPE, sig_handler_pipe);
-#endif
- oint = sigset(SIGINT, sig_handler_int);
- oterm = sigset(SIGTERM, sig_handler_term);
-#endif
-
- /*
- Retrieve encoding.
- ------------------
- */
- if (0 == dk4loc_get_settings(blang, szblang, breg, szbreg, &encoding, NULL)) {
- encoding = DK4_ENCODING_PLAIN;
- }
- /* Process command line arguments.
- -------------------------------
- */
- if (0 == process_command_line_arguments(argc, argv)) {
- goto finished;
- }
-
- if (0 != hvl) {
- run_hvl();
- goto finished;
- }
-
- /* Set up SNMP and create session.
- -------------------------------
- */
-#if DK4_HAVE_SNMP_DISABLE_SYSLOG
- $? ". disable syslog"
- snmp_disable_syslog();
-#endif
-#if DK4_HAVE_SNMP_DISABLE_FILELOG
- $? ". disable filelog"
- snmp_disable_filelog();
-#endif
-#if DK4_HAVE_SNMP_DISABLE_STDERRLOG
- $? ". disable stderrlog"
- snmp_disable_stderrlog();
-#endif
- init_snmp(prmonsnmp_kw[2]);
- DK4_MEMRES(&sesstemp, sizeof(sesstemp));
- snmp_sess_init(&sesstemp);
- sesstemp.version = snmp_vers;
- sesstemp.peername = host_name;
- sesstemp.community = (unsigned char *)snmp_comm;
- if (NULL == snmp_comm) {
- sesstemp.community = (unsigned char *)(prmonsnmp_kw[3]);
- }
- sesstemp.community_len = strlen((char *)(sesstemp.community));
- snmp_sess = snmp_open(&sesstemp);
- if (NULL == snmp_sess) {
- /* ERROR: Failed to open session */
- fputs(prmonsnmp_kw[2], stderr);
- fputs(prmonsnmp_kw[43], stderr);
- fflush(stderr);
- goto finished;
- }
-
- /* Run main loop.
- --------------
- */
- exval = EXIT_SUCCESS;
- run_main_loop();
-
- /*
- Cleanup.
- --------
- */
- finished:
- /*
- Close SNMP session, if any.
- */
- /*
- Restore signal handlers
- */
-#if DK4_HAVE_SIGACTION
- if (0 != sig_i_f) {
- fputs(prmonsnmp_kw[2], stderr);
- fputs(prmonsnmp_kw[45], stderr);
- fflush(stderr);
- }
- if (0 != int_set) {
- if (0 != sigaction(SIGINT, &oint, NULL)) {
- /* ERROR */
- sig_r_f = 1;
- }
- }
- if (0 != term_set) {
- if (0 != sigaction(SIGTERM, &oterm, NULL)) {
- /* ERROR */
- sig_r_f = 1;
- }
- }
-#ifdef SIGPIPE
- if (0 != pipe_set) {
- if (0 != sigaction(SIGPIPE, &opipe, NULL)) {
- /* ERROR */
- sig_r_f = 1;
- }
- }
-#endif
- if (0 != sig_r_f) {
- fputs(prmonsnmp_kw[2], stderr);
- fputs(prmonsnmp_kw[44], stderr);
- fflush(stderr);
- }
-#else
- if (NULL != oterm) { sigset(SIGTERM, oterm); }
- if (NULL != oint ) { sigset(SIGINT, oint ); }
-#ifdef SIGPIPE
- if (NULL != opipe) { sigset(SIGPIPE, opipe); }
-#endif
-#endif
-
- $? "- main %d", exval
- $!trace-end
- /* ----- Required libraries available */
-
-#else
-/* if DK4_HAVE_LIBNETSNMP && ((DK4_HAVE_SIGACTION) || (DK4_HAVE_SIGSET)) */
- fputs(prmonsnmp_kw[2], stderr);
- fputs(": ERROR: Required features missing!\n", stderr);
-#if !DK4_HAVE_LIBNETSNMP
- fputs("Support for Net-SNMP required!\n", stderr);
- fputs("http://sourceforge.net/projects/net-snmp\n", stderr);
-#endif
-#if !((DK4_HAVE_SIGACTION) || (DK4_HAVE_SIGSET))
- fputs("Support for sigaction() or sigset() required but not found!\n",stderr);
-#endif
- fflush(stderr);
-#endif
-/* if DK4_HAVE_LIBNETSNMP && ((DK4_HAVE_SIGACTION) || (DK4_HAVE_SIGSET)) */
- exit(exval); return exval;
-}
-
-