Blame apps/snmptranslate.c

Packit Service b38f0b
/*
Packit Service b38f0b
 * snmptranslate.c - report or translate info about oid from mibs
Packit Service b38f0b
 *
Packit Service b38f0b
 * Update: 1998-07-17 <jhy@gsu.edu>
Packit Service b38f0b
 * Added support for dumping alternate oid reports (-t and -T options).
Packit Service b38f0b
 * Added more detailed (useful?) usage info.
Packit Service b38f0b
 */
Packit Service b38f0b
/************************************************************************
Packit Service b38f0b
	Copyright 1988, 1989, 1991, 1992 by Carnegie Mellon University
Packit Service b38f0b
Packit Service b38f0b
                      All Rights Reserved
Packit Service b38f0b
Packit Service b38f0b
Permission to use, copy, modify, and distribute this software and its 
Packit Service b38f0b
documentation for any purpose and without fee is hereby granted, 
Packit Service b38f0b
provided that the above copyright notice appear in all copies and that
Packit Service b38f0b
both that copyright notice and this permission notice appear in 
Packit Service b38f0b
supporting documentation, and that the name of CMU not be
Packit Service b38f0b
used in advertising or publicity pertaining to distribution of the
Packit Service b38f0b
software without specific, written prior permission.  
Packit Service b38f0b
Packit Service b38f0b
CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
Packit Service b38f0b
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
Packit Service b38f0b
CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
Packit Service b38f0b
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
Packit Service b38f0b
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
Packit Service b38f0b
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
Packit Service b38f0b
SOFTWARE.
Packit Service b38f0b
******************************************************************/
Packit Service b38f0b
Packit Service b38f0b
Packit Service b38f0b
#include <net-snmp/net-snmp-config.h>
Packit Service b38f0b
Packit Service b38f0b
#if HAVE_STDLIB_H
Packit Service b38f0b
#include <stdlib.h>
Packit Service b38f0b
#endif
Packit Service b38f0b
#if HAVE_UNISTD_H
Packit Service b38f0b
#include <unistd.h>
Packit Service b38f0b
#endif
Packit Service b38f0b
#if HAVE_STRING_H
Packit Service b38f0b
#include <string.h>
Packit Service b38f0b
#else
Packit Service b38f0b
#include <strings.h>
Packit Service b38f0b
#endif
Packit Service b38f0b
#include <sys/types.h>
Packit Service b38f0b
#if HAVE_SYS_SELECT_H
Packit Service b38f0b
#include <sys/select.h>
Packit Service b38f0b
#endif
Packit Service b38f0b
#if HAVE_NETINET_IN_H
Packit Service b38f0b
#include <netinet/in.h>
Packit Service b38f0b
#endif
Packit Service b38f0b
#include <stdio.h>
Packit Service b38f0b
#include <ctype.h>
Packit Service b38f0b
#include <net-snmp/utilities.h>
Packit Service b38f0b
#include <net-snmp/config_api.h>
Packit Service b38f0b
#include <net-snmp/output_api.h>
Packit Service b38f0b
#include <net-snmp/mib_api.h>
Packit Service b38f0b
Packit Service b38f0b
int             show_all_matched_objects(FILE *, const char *, oid *,
Packit Service b38f0b
                                         size_t *, int, int);
Packit Service b38f0b
Packit Service b38f0b
void
Packit Service b38f0b
usage(void)
Packit Service b38f0b
{
Packit Service b38f0b
    fprintf(stderr, "USAGE: snmptranslate [OPTIONS] OID [OID]...\n\n");
Packit Service b38f0b
    fprintf(stderr, "  Version:  %s\n", netsnmp_get_version());
Packit Service b38f0b
    fprintf(stderr, "  Web:      http://www.net-snmp.org/\n");
Packit Service b38f0b
    fprintf(stderr,
Packit Service b38f0b
            "  Email:    net-snmp-coders@lists.sourceforge.net\n\nOPTIONS:\n");
Packit Service b38f0b
Packit Service b38f0b
    fprintf(stderr, "  -h\t\t\tdisplay this help message\n");
Packit Service b38f0b
    fprintf(stderr, "  -V\t\t\tdisplay package version number\n");
Packit Service b38f0b
    fprintf(stderr,
Packit Service b38f0b
            "  -m MIB[" ENV_SEPARATOR "...]\t\tload given list of MIBs (ALL loads everything)\n");
Packit Service b38f0b
    fprintf(stderr,
Packit Service b38f0b
            "  -M DIR[" ENV_SEPARATOR "...]\t\tlook in given list of directories for MIBs\n");
Packit Service b38f0b
    fprintf(stderr,
Packit Service b38f0b
            "  -D[TOKEN[,...]]\tturn on debugging output for the specified TOKENs\n\t\t\t   (ALL gives extremely verbose debugging output)\n");
Packit Service b38f0b
    fprintf(stderr, "  -w WIDTH\t\tset width of tree and detail output\n");
Packit Service b38f0b
    fprintf(stderr,
Packit Service b38f0b
            "  -T TRANSOPTS\t\tSet various options controlling report produced:\n");
Packit Service b38f0b
    fprintf(stderr,
Packit Service b38f0b
            "\t\t\t  B:  print all matching objects for a regex search\n");
Packit Service b38f0b
    fprintf(stderr, "\t\t\t  d:  print full details of the given OID\n");
Packit Service b38f0b
    fprintf(stderr, "\t\t\t  p:  print tree format symbol table\n");
Packit Service b38f0b
    fprintf(stderr, "\t\t\t  a:  print ASCII format symbol table\n");
Packit Service b38f0b
    fprintf(stderr, "\t\t\t  l:  enable labeled OID report\n");
Packit Service b38f0b
    fprintf(stderr, "\t\t\t  o:  enable OID report\n");
Packit Service b38f0b
    fprintf(stderr, "\t\t\t  s:  enable dotted symbolic report\n");
Packit Service b38f0b
    fprintf(stderr, "\t\t\t  z:  enable MIB child OID report\n");
Packit Service b38f0b
    fprintf(stderr,
Packit Service b38f0b
            "\t\t\t  t:  enable alternate format symbolic suffix report\n");
Packit Service b38f0b
#ifndef NETSNMP_DISABLE_MIB_LOADING
Packit Service b38f0b
    fprintf(stderr,
Packit Service b38f0b
            "  -P MIBOPTS\t\tToggle various defaults controlling mib parsing:\n");
Packit Service b38f0b
    snmp_mib_toggle_options_usage("\t\t\t  ", stderr);
Packit Service b38f0b
#endif /* NETSNMP_DISABLE_MIB_LOADING */
Packit Service b38f0b
    fprintf(stderr,
Packit Service b38f0b
            "  -O OUTOPTS\t\tToggle various defaults controlling output display:\n");
Packit Service b38f0b
    snmp_out_toggle_options_usage("\t\t\t  ", stderr);
Packit Service b38f0b
    fprintf(stderr,
Packit Service b38f0b
            "  -I INOPTS\t\tToggle various defaults controlling input parsing:\n");
Packit Service b38f0b
    snmp_in_toggle_options_usage("\t\t\t  ", stderr);
Packit Service b38f0b
    fprintf(stderr,
Packit Service b38f0b
            "  -L LOGOPTS\t\tToggle various defaults controlling logging:\n");
Packit Service b38f0b
    snmp_log_options_usage("\t\t\t  ", stderr);
Packit Service b38f0b
}
Packit Service b38f0b
Packit Service b38f0b
/**
Packit Service b38f0b
 * For every line on stdin, assume that it is either a plain OID
Packit Service b38f0b
 * or snmpwalk/snmpget output:
Packit Service b38f0b
 * mib-2.1.2.3.4
Packit Service b38f0b
 * -or-
Packit Service b38f0b
 * mib-2.1.2.3.4 = INTEGER: 5
Packit Service b38f0b
 *
Packit Service b38f0b
 * Replace the OID with its translation.
Packit Service b38f0b
 * If translation fails, just output the original string.
Packit Service b38f0b
 */
Packit Service b38f0b
#define MAX_LINE_TEMP   10240
Packit Service b38f0b
void
Packit Service b38f0b
process_stdin(void)
Packit Service b38f0b
{
Packit Service b38f0b
    char        buf[MAX_LINE_TEMP];
Packit Service b38f0b
    oid         name[MAX_OID_LEN];
Packit Service b38f0b
    size_t      name_length;
Packit Service b38f0b
Packit Service b38f0b
    while ( NULL != fgets( buf, sizeof( buf ), stdin ) ) {
Packit Service b38f0b
        char delim = ' ';
Packit Service b38f0b
        char *nl = strchr(buf, '\n');
Packit Service b38f0b
        char *rest = strchr(buf, delim);
Packit Service b38f0b
Packit Service b38f0b
        if (nl != NULL) {
Packit Service b38f0b
            *nl = '\0';
Packit Service b38f0b
        } /* else too-long line: output will look weird.  Too bad. */
Packit Service b38f0b
        if (rest == NULL) {
Packit Service b38f0b
            delim = '\t';
Packit Service b38f0b
            rest = strchr(buf, delim);
Packit Service b38f0b
        }
Packit Service b38f0b
        if (rest != NULL) {
Packit Service b38f0b
            *rest++ = '\0';
Packit Service b38f0b
        }
Packit Service b38f0b
        name_length = MAX_OID_LEN;
Packit Service b38f0b
        /*
Packit Service b38f0b
         * If it's not the whole line, only try to process buffer
Packit Service b38f0b
         * longer than 5 characters.
Packit Service b38f0b
         * The idea is to avoid false positives including, e.g.,
Packit Service b38f0b
         * a hex dump.
Packit Service b38f0b
         */
Packit Service b38f0b
        if ( !(rest && strlen( buf ) <= 5) &&
Packit Service b38f0b
              read_objid( buf, name, &name_length )) {
Packit Service b38f0b
            char objbuf[MAX_LINE_TEMP];
Packit Service b38f0b
            snprint_objid( objbuf, MAX_LINE_TEMP, name, name_length );
Packit Service b38f0b
            fputs( objbuf, stdout );
Packit Service b38f0b
        } else {
Packit Service b38f0b
            fputs( buf, stdout );
Packit Service b38f0b
        }
Packit Service b38f0b
        /*
Packit Service b38f0b
         * For future improvement: if delim == ' ' && rest && *rest == '='
Packit Service b38f0b
         * see if rest looks like snmpget/snmpwalk output
Packit Service b38f0b
         * and handle it in the context of the given node
Packit Service b38f0b
         */
Packit Service b38f0b
        if (rest) {
Packit Service b38f0b
            fputc( delim, stdout );
Packit Service b38f0b
            fputs( rest, stdout );
Packit Service b38f0b
        }
Packit Service b38f0b
        fputc( '\n', stdout );
Packit Service b38f0b
    }
Packit Service b38f0b
}
Packit Service b38f0b
Packit Service b38f0b
int
Packit Service b38f0b
main(int argc, char *argv[])
Packit Service b38f0b
{
Packit Service b38f0b
    int             arg;
Packit Service b38f0b
    char           *current_name = NULL, *cp = NULL;
Packit Service b38f0b
    oid             name[MAX_OID_LEN];
Packit Service b38f0b
    size_t          name_length;
Packit Service b38f0b
    int             description = 0;
Packit Service b38f0b
    int             print = 0;
Packit Service b38f0b
    int             find_all = 0;
Packit Service b38f0b
    int             width = 1000000;
Packit Service b38f0b
    int             exit_code = 1;
Packit Service b38f0b
    netsnmp_session dummy;
Packit Service b38f0b
Packit Service b38f0b
    SOCK_STARTUP;
Packit Service b38f0b
Packit Service b38f0b
    /*
Packit Service b38f0b
     * usage: snmptranslate name
Packit Service b38f0b
     */
Packit Service b38f0b
    snmp_sess_init(&dummy);
Packit Service b38f0b
    while ((arg = getopt(argc, argv, "Vhm:M:w:D:P:T:O:I:L:")) != EOF) {
Packit Service b38f0b
        switch (arg) {
Packit Service b38f0b
        case 'h':
Packit Service b38f0b
            usage();
Packit Service b38f0b
            goto out;
Packit Service b38f0b
Packit Service b38f0b
        case 'm':
Packit Service b38f0b
            setenv("MIBS", optarg, 1);
Packit Service b38f0b
            break;
Packit Service b38f0b
        case 'M':
Packit Service b38f0b
            setenv("MIBDIRS", optarg, 1);
Packit Service b38f0b
            break;
Packit Service b38f0b
        case 'D':
Packit Service b38f0b
            debug_register_tokens(optarg);
Packit Service b38f0b
            snmp_set_do_debugging(1);
Packit Service b38f0b
            break;
Packit Service b38f0b
        case 'V':
Packit Service b38f0b
            fprintf(stderr, "NET-SNMP version: %s\n",
Packit Service b38f0b
                    netsnmp_get_version());
Packit Service b38f0b
            exit_code = 0;
Packit Service b38f0b
            goto out;
Packit Service b38f0b
            break;
Packit Service b38f0b
        case 'w':
Packit Service b38f0b
	    width = atoi(optarg);
Packit Service b38f0b
	    if (width <= 0) {
Packit Service b38f0b
		fprintf(stderr, "Invalid width specification: %s\n", optarg);
Packit Service b38f0b
		goto out;
Packit Service b38f0b
	    }
Packit Service b38f0b
	    break;
Packit Service b38f0b
#ifndef NETSNMP_DISABLE_MIB_LOADING
Packit Service b38f0b
        case 'P':
Packit Service b38f0b
            cp = snmp_mib_toggle_options(optarg);
Packit Service b38f0b
            if (cp != NULL) {
Packit Service b38f0b
                fprintf(stderr, "Unknown parser option to -P: %c.\n", *cp);
Packit Service b38f0b
                usage();
Packit Service b38f0b
                goto out;
Packit Service b38f0b
            }
Packit Service b38f0b
            break;
Packit Service b38f0b
#endif /* NETSNMP_DISABLE_MIB_LOADING */
Packit Service b38f0b
        case 'O':
Packit Service b38f0b
            cp = snmp_out_toggle_options(optarg);
Packit Service b38f0b
            if (cp != NULL) {
Packit Service b38f0b
                fprintf(stderr, "Unknown OID option to -O: %c.\n", *cp);
Packit Service b38f0b
                usage();
Packit Service b38f0b
                goto out;
Packit Service b38f0b
            }
Packit Service b38f0b
            break;
Packit Service b38f0b
        case 'I':
Packit Service b38f0b
            cp = snmp_in_toggle_options(optarg);
Packit Service b38f0b
            if (cp != NULL) {
Packit Service b38f0b
                fprintf(stderr, "Unknown OID option to -I: %c.\n", *cp);
Packit Service b38f0b
                usage();
Packit Service b38f0b
                goto out;
Packit Service b38f0b
            }
Packit Service b38f0b
            break;
Packit Service b38f0b
        case 'T':
Packit Service b38f0b
            for (cp = optarg; *cp; cp++) {
Packit Service b38f0b
                switch (*cp) {
Packit Service b38f0b
#ifndef NETSNMP_DISABLE_MIB_LOADING
Packit Service b38f0b
                case 'l':
Packit Service b38f0b
                    print = 3;
Packit Service b38f0b
                    print_oid_report_enable_labeledoid();
Packit Service b38f0b
                    break;
Packit Service b38f0b
                case 'o':
Packit Service b38f0b
                    print = 3;
Packit Service b38f0b
                    print_oid_report_enable_oid();
Packit Service b38f0b
                    break;
Packit Service b38f0b
                case 's':
Packit Service b38f0b
                    print = 3;
Packit Service b38f0b
                    print_oid_report_enable_symbolic();
Packit Service b38f0b
                    break;
Packit Service b38f0b
                case 't':
Packit Service b38f0b
                    print = 3;
Packit Service b38f0b
                    print_oid_report_enable_suffix();
Packit Service b38f0b
                    break;
Packit Service b38f0b
                case 'z':
Packit Service b38f0b
                    print = 3;
Packit Service b38f0b
                    print_oid_report_enable_mibchildoid();
Packit Service b38f0b
                    break;
Packit Service b38f0b
#endif /* NETSNMP_DISABLE_MIB_LOADING */
Packit Service b38f0b
                case 'd':
Packit Service b38f0b
                    description = 1;
Packit Service b38f0b
                    netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, 
Packit Service b38f0b
                                           NETSNMP_DS_LIB_SAVE_MIB_DESCRS, 1);
Packit Service b38f0b
                    break;
Packit Service b38f0b
                case 'B':
Packit Service b38f0b
                    find_all = 1;
Packit Service b38f0b
                    break;
Packit Service b38f0b
                case 'p':
Packit Service b38f0b
                    print = 1;
Packit Service b38f0b
                    break;
Packit Service b38f0b
                case 'a':
Packit Service b38f0b
                    print = 2;
Packit Service b38f0b
                    break;
Packit Service b38f0b
                default:
Packit Service b38f0b
                    fprintf(stderr, "Invalid -T<lostpad> character: %c\n",
Packit Service b38f0b
                            *cp);
Packit Service b38f0b
                    usage();
Packit Service b38f0b
                    goto out;
Packit Service b38f0b
                }
Packit Service b38f0b
            }
Packit Service b38f0b
            break;
Packit Service b38f0b
        case 'L':
Packit Service b38f0b
            if (snmp_log_options(optarg, argc, argv) < 0)
Packit Service b38f0b
                goto out;
Packit Service b38f0b
            break;
Packit Service b38f0b
        default:
Packit Service b38f0b
            fprintf(stderr, "invalid option: -%c\n", arg);
Packit Service b38f0b
            usage();
Packit Service b38f0b
            goto out;
Packit Service b38f0b
        }
Packit Service b38f0b
    }
Packit Service b38f0b
Packit Service b38f0b
    init_snmp(NETSNMP_APPLICATION_CONFIG_TYPE);
Packit Service b38f0b
Packit Service b38f0b
    if (optind < argc)
Packit Service b38f0b
        current_name = argv[optind];
Packit Service b38f0b
Packit Service b38f0b
    if (current_name == NULL) {
Packit Service b38f0b
        switch (print) {
Packit Service b38f0b
        default:
Packit Service b38f0b
            usage();
Packit Service b38f0b
            goto out;
Packit Service b38f0b
#ifndef NETSNMP_DISABLE_MIB_LOADING
Packit Service b38f0b
        case 1:
Packit Service b38f0b
            print_mib_tree(stdout, get_tree_head(), width);
Packit Service b38f0b
            break;
Packit Service b38f0b
        case 2:
Packit Service b38f0b
            print_ascii_dump(stdout);
Packit Service b38f0b
            break;
Packit Service b38f0b
        case 3:
Packit Service b38f0b
            print_oid_report(stdout);
Packit Service b38f0b
            break;
Packit Service b38f0b
#endif /* NETSNMP_DISABLE_MIB_LOADING */
Packit Service b38f0b
        }
Packit Service b38f0b
        exit_code = 0;
Packit Service b38f0b
        goto out;
Packit Service b38f0b
    }
Packit Service b38f0b
Packit Service b38f0b
    do {
Packit Service b38f0b
        if ( strcmp( current_name, "-" ) == 0  && ( print == 0 ) ) {
Packit Service b38f0b
            process_stdin();
Packit Service b38f0b
            current_name = argv[++optind];
Packit Service b38f0b
            continue;
Packit Service b38f0b
        }
Packit Service b38f0b
Packit Service b38f0b
        name_length = MAX_OID_LEN;
Packit Service b38f0b
        if (netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, 
Packit Service b38f0b
				  NETSNMP_DS_LIB_RANDOM_ACCESS)) {
Packit Service b38f0b
#ifndef NETSNMP_DISABLE_MIB_LOADING
Packit Service b38f0b
            if (!get_node(current_name, name, &name_length)) {
Packit Service b38f0b
#endif /* NETSNMP_DISABLE_MIB_LOADING */
Packit Service b38f0b
                fprintf(stderr, "Unknown object identifier: %s\n",
Packit Service b38f0b
                        current_name);
Packit Service b38f0b
                exit_code = 2;
Packit Service b38f0b
                goto out;
Packit Service b38f0b
#ifndef NETSNMP_DISABLE_MIB_LOADING
Packit Service b38f0b
            }
Packit Service b38f0b
#endif /* NETSNMP_DISABLE_MIB_LOADING */
Packit Service b38f0b
        } else if (find_all) {
Packit Service b38f0b
            if (0 == show_all_matched_objects(stdout, current_name,
Packit Service b38f0b
                                              name, &name_length,
Packit Service b38f0b
                                              description, width)) {
Packit Service b38f0b
                fprintf(stderr,
Packit Service b38f0b
                        "Unable to find a matching object identifier for \"%s\"\n",
Packit Service b38f0b
                        current_name);
Packit Service b38f0b
                goto out;
Packit Service b38f0b
            }
Packit Service b38f0b
            break;
Packit Service b38f0b
        } else if (netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, 
Packit Service b38f0b
					  NETSNMP_DS_LIB_REGEX_ACCESS)) {
Packit Service b38f0b
#ifndef NETSNMP_DISABLE_MIB_LOADING
Packit Service b38f0b
            if (0 == get_wild_node(current_name, name, &name_length)) {
Packit Service b38f0b
#endif /* NETSNMP_DISABLE_MIB_LOADING */
Packit Service b38f0b
                fprintf(stderr,
Packit Service b38f0b
                        "Unable to find a matching object identifier for \"%s\"\n",
Packit Service b38f0b
                        current_name);
Packit Service b38f0b
                goto out;
Packit Service b38f0b
#ifndef NETSNMP_DISABLE_MIB_LOADING
Packit Service b38f0b
            }
Packit Service b38f0b
#endif /* NETSNMP_DISABLE_MIB_LOADING */
Packit Service b38f0b
        } else {
Packit Service b38f0b
            if (!read_objid(current_name, name, &name_length)) {
Packit Service b38f0b
                snmp_perror(current_name);
Packit Service b38f0b
                exit_code = 2;
Packit Service b38f0b
                goto out;
Packit Service b38f0b
            }
Packit Service b38f0b
        }
Packit Service b38f0b
Packit Service b38f0b
Packit Service b38f0b
        if (print == 1) {
Packit Service b38f0b
#ifndef NETSNMP_DISABLE_MIB_LOADING
Packit Service b38f0b
            struct tree    *tp;
Packit Service b38f0b
            tp = get_tree(name, name_length, get_tree_head());
Packit Service b38f0b
            if (tp == NULL) {
Packit Service b38f0b
#endif /* NETSNMP_DISABLE_MIB_LOADING */
Packit Service b38f0b
                snmp_log(LOG_ERR,
Packit Service b38f0b
                        "Unable to find a matching object identifier for \"%s\"\n",
Packit Service b38f0b
                        current_name);
Packit Service b38f0b
                goto out;
Packit Service b38f0b
#ifndef NETSNMP_DISABLE_MIB_LOADING
Packit Service b38f0b
            }
Packit Service b38f0b
            print_mib_tree(stdout, tp, width);
Packit Service b38f0b
#endif /* NETSNMP_DISABLE_MIB_LOADING */
Packit Service b38f0b
        } else {
Packit Service b38f0b
            print_objid(name, name_length);
Packit Service b38f0b
            if (description) {
Packit Service b38f0b
#ifndef NETSNMP_DISABLE_MIB_LOADING
Packit Service b38f0b
                print_description(name, name_length, width);
Packit Service b38f0b
#endif /* NETSNMP_DISABLE_MIB_LOADING */
Packit Service b38f0b
            }
Packit Service b38f0b
        }
Packit Service b38f0b
        current_name = argv[++optind];
Packit Service b38f0b
        if (current_name != NULL)
Packit Service b38f0b
            printf("\n");
Packit Service b38f0b
    } while (optind < argc);
Packit Service b38f0b
Packit Service b38f0b
    exit_code = 0;
Packit Service b38f0b
Packit Service b38f0b
out:
Packit Service b38f0b
    SOCK_CLEANUP;
Packit Service b38f0b
    return exit_code;
Packit Service b38f0b
}
Packit Service b38f0b
Packit Service b38f0b
/*
Packit Service b38f0b
 * Show all object identifiers that match the pattern.
Packit Service b38f0b
 */
Packit Service b38f0b
Packit Service b38f0b
int
Packit Service b38f0b
show_all_matched_objects(FILE * fp, const char *patmatch, oid * name, size_t * name_length, int f_desc, /* non-zero if descriptions should be shown */
Packit Service b38f0b
                         int width)
Packit Service b38f0b
{
Packit Service b38f0b
    int             result = 0, count = 0;
Packit Service b38f0b
    size_t          savlen = *name_length;
Packit Service b38f0b
#ifndef NETSNMP_DISABLE_MIB_LOADING
Packit Service b38f0b
    clear_tree_flags(get_tree_head());
Packit Service b38f0b
#endif /* NETSNMP_DISABLE_MIB_LOADING */
Packit Service b38f0b
Packit Service b38f0b
    while (1) {
Packit Service b38f0b
        *name_length = savlen;
Packit Service b38f0b
#ifndef NETSNMP_DISABLE_MIB_LOADING
Packit Service b38f0b
        result = get_wild_node(patmatch, name, name_length);
Packit Service b38f0b
#endif /* NETSNMP_DISABLE_MIB_LOADING */
Packit Service b38f0b
        if (!result)
Packit Service b38f0b
            break;
Packit Service b38f0b
        count++;
Packit Service b38f0b
Packit Service b38f0b
        fprint_objid(fp, name, *name_length);
Packit Service b38f0b
#ifndef NETSNMP_DISABLE_MIB_LOADING
Packit Service b38f0b
        if (f_desc)
Packit Service b38f0b
            fprint_description(fp, name, *name_length, width);
Packit Service b38f0b
#endif /* NETSNMP_DISABLE_MIB_LOADING */
Packit Service b38f0b
    }
Packit Service b38f0b
Packit Service b38f0b
    return (count);
Packit Service b38f0b
}