Blame snmplib/snmp_debug.c

Packit fcad23
/*
Packit fcad23
 * Portions of this file are subject to the following copyright(s).  See
Packit fcad23
 * the Net-SNMP's COPYING file for more details and other copyrights
Packit fcad23
 * that may apply:
Packit fcad23
 *
Packit fcad23
 * Portions of this file are copyrighted by:
Packit fcad23
 * Copyright (c) 2016 VMware, Inc. All rights reserved.
Packit fcad23
 * Use is subject to license terms specified in the COPYING file
Packit fcad23
 * distributed with the Net-SNMP package.
Packit fcad23
 */
Packit fcad23
Packit fcad23
#include <net-snmp/net-snmp-config.h>
Packit fcad23
Packit fcad23
#define SYSLOG_NAMES
Packit fcad23
Packit fcad23
#include <limits.h>
Packit fcad23
#include <stdio.h>
Packit fcad23
#ifndef HAVE_PRIORITYNAMES
Packit fcad23
#include <errno.h>
Packit fcad23
#endif
Packit fcad23
#if HAVE_STDLIB_H
Packit fcad23
#include <stdlib.h>
Packit fcad23
#endif
Packit fcad23
#if HAVE_STRING_H
Packit fcad23
#include <string.h>
Packit fcad23
#else
Packit fcad23
#include <strings.h>
Packit fcad23
#endif
Packit fcad23
#include <sys/types.h>
Packit fcad23
#if HAVE_NETINET_IN_H
Packit fcad23
#include <netinet/in.h>
Packit fcad23
#endif
Packit fcad23
#include <stdarg.h>
Packit fcad23
Packit fcad23
#if HAVE_UNISTD_H
Packit fcad23
#include <unistd.h>
Packit fcad23
#endif
Packit fcad23
#if HAVE_DMALLOC_H
Packit fcad23
#include <dmalloc.h>
Packit fcad23
#endif
Packit fcad23
Packit fcad23
#ifdef HAVE_PRIORITYNAMES
Packit fcad23
#include <sys/syslog.h>
Packit fcad23
#endif
Packit fcad23
Packit fcad23
#include <net-snmp/types.h>
Packit fcad23
#include <net-snmp/output_api.h>
Packit fcad23
#include <net-snmp/library/snmp_debug.h>        /* For this file's "internal" definitions */
Packit fcad23
#include <net-snmp/config_api.h>
Packit fcad23
#include <net-snmp/utilities.h>
Packit fcad23
Packit fcad23
#include <net-snmp/library/mib.h>
Packit fcad23
#include <net-snmp/library/snmp_api.h>
Packit fcad23
#include <net-snmp/library/snmp_assert.h>
Packit fcad23
Packit fcad23
#define SNMP_DEBUG_DISABLED           0
Packit fcad23
#define SNMP_DEBUG_ACTIVE             1
Packit fcad23
#define SNMP_DEBUG_EXCLUDED           2
Packit fcad23
Packit fcad23
#ifndef NETSNMP_NO_DEBUGGING
Packit fcad23
Packit fcad23
static int      dodebug = NETSNMP_ALWAYS_DEBUG;
Packit fcad23
int             debug_num_tokens = 0;
Packit fcad23
static int      debug_print_everything = 0;
Packit fcad23
#ifndef NETSNMP_DISABLE_DYNAMIC_LOG_LEVEL
Packit fcad23
static int      debug_log_level = LOG_DEBUG;
Packit fcad23
#else
Packit fcad23
#define debug_log_level LOG_DEBUG
Packit fcad23
#endif /* NETSNMP_DISABLE_DYNAMIC_LOG_LEVEL */
Packit fcad23
Packit fcad23
netsnmp_token_descr dbg_tokens[MAX_DEBUG_TOKENS];
Packit fcad23
Packit fcad23
/*
Packit fcad23
 * Number of spaces to indent debug output. Valid range is [0,INT_MAX]
Packit fcad23
 */
Packit fcad23
static int debugindent = 0;
Packit fcad23
Packit fcad23
int
Packit fcad23
debug_indent_get(void)
Packit fcad23
{
Packit fcad23
    return debugindent;
Packit fcad23
}
Packit fcad23
Packit fcad23
const char*
Packit fcad23
debug_indent(void)
Packit fcad23
{
Packit fcad23
#define SPACES "                                        " \
Packit fcad23
               "                                        "
Packit fcad23
    if ((sizeof(SPACES) - 1) < (unsigned int)debugindent) {
Packit fcad23
        snmp_log(LOG_ERR, "Too deep indentation for debug_indent. "
Packit fcad23
                 "Consider using \"%%*s\", debug_indent_get(), \"\" instead.");
Packit fcad23
        return SPACES;
Packit fcad23
    }
Packit fcad23
    return SPACES + sizeof(SPACES) - 1 - debugindent;
Packit fcad23
#undef SPACES
Packit fcad23
}
Packit fcad23
Packit fcad23
void
Packit fcad23
debug_indent_add(int amount)
Packit fcad23
{
Packit fcad23
    if (-debugindent <= amount && amount <= INT_MAX - debugindent)
Packit fcad23
	debugindent += amount;
Packit fcad23
    netsnmp_assert( debugindent >= 0 ); /* no negative indents */
Packit fcad23
}
Packit fcad23
Packit fcad23
NETSNMP_IMPORT void
Packit fcad23
debug_config_register_tokens(const char *configtoken, char *tokens);
Packit fcad23
Packit fcad23
void
Packit fcad23
debug_indent_reset(void)
Packit fcad23
{
Packit fcad23
    if (debugindent != 0)
Packit fcad23
        DEBUGMSGTL(("dump_indent","indent reset from %d\n", debugindent));
Packit fcad23
    debugindent = 0;
Packit fcad23
}
Packit fcad23
Packit fcad23
void
Packit fcad23
debug_config_register_tokens(const char *configtoken, char *tokens)
Packit fcad23
{
Packit fcad23
    debug_register_tokens(tokens);
Packit fcad23
}
Packit fcad23
Packit fcad23
NETSNMP_IMPORT void
Packit fcad23
debug_config_turn_on_debugging(const char *configtoken, char *line);
Packit fcad23
Packit fcad23
void
Packit fcad23
debug_config_turn_on_debugging(const char *configtoken, char *line)
Packit fcad23
{
Packit fcad23
    snmp_set_do_debugging(atoi(line));
Packit fcad23
}
Packit fcad23
Packit fcad23
#ifndef NETSNMP_DISABLE_DYNAMIC_LOG_LEVEL
Packit fcad23
Packit fcad23
void
Packit fcad23
netsnmp_set_debug_log_level(int val)
Packit fcad23
{
Packit fcad23
    if (val < LOG_EMERG)
Packit fcad23
        val = LOG_EMERG;
Packit fcad23
    else if (val > LOG_DEBUG)
Packit fcad23
        val = LOG_DEBUG;
Packit fcad23
    debug_log_level = val;
Packit fcad23
}
Packit fcad23
Packit fcad23
int
Packit fcad23
netsnmp_get_debug_log_level(void)
Packit fcad23
{
Packit fcad23
    return debug_log_level;
Packit fcad23
}
Packit fcad23
Packit fcad23
static void
Packit fcad23
debug_config_debug_log_level(const char *configtoken, char *line)
Packit fcad23
{
Packit fcad23
#if !HAVE_PRIORITYNAMES
Packit fcad23
    static const struct strval_s {
Packit fcad23
        const char *c_name;
Packit fcad23
        int         c_val;
Packit fcad23
    } prioritynames[] = {
Packit fcad23
        { "alert", LOG_ALERT },
Packit fcad23
        { "crit", LOG_CRIT },
Packit fcad23
        { "debug", LOG_DEBUG },
Packit fcad23
        { "emerg", LOG_EMERG },
Packit fcad23
        { "err", LOG_ERR },
Packit fcad23
        { "info", LOG_INFO },
Packit fcad23
        { "notice", LOG_NOTICE },
Packit fcad23
        { "warning", LOG_WARNING },
Packit fcad23
        { NULL, 0 }
Packit fcad23
    };
Packit fcad23
#endif
Packit fcad23
    int i = 0, len_l, len_p;
Packit fcad23
Packit fcad23
    len_l = strlen(line);
Packit fcad23
    for(;prioritynames[i].c_name;++i) {
Packit fcad23
        len_p = strlen(prioritynames[i].c_name);
Packit fcad23
        if ((len_p != len_l) ||
Packit fcad23
            (strcasecmp(line,prioritynames[i].c_name) != 0))
Packit fcad23
            continue;
Packit fcad23
        netsnmp_set_debug_log_level(prioritynames[i].c_val);
Packit fcad23
        return;
Packit fcad23
    }
Packit fcad23
    config_perror("unknown debug log level, using debug");
Packit fcad23
    netsnmp_set_debug_log_level(LOG_DEBUG);
Packit fcad23
}
Packit fcad23
#endif /* NETSNMP_DISABLE_DYNAMIC_LOG_LEVEL */
Packit fcad23
Packit fcad23
void
Packit fcad23
debug_register_tokens(const char *tokens)
Packit fcad23
{
Packit fcad23
    char           *newp, *cp;
Packit fcad23
    char           *st = NULL;
Packit fcad23
    int             status;
Packit fcad23
Packit fcad23
    if (tokens == NULL || *tokens == 0)
Packit fcad23
        return;
Packit fcad23
Packit fcad23
    newp = strdup(tokens);      /* strtok_r messes it up */
Packit fcad23
    if (!newp)
Packit fcad23
        return;
Packit fcad23
    cp = strtok_r(newp, DEBUG_TOKEN_DELIMITER, &st);
Packit fcad23
    while (cp) {
Packit fcad23
        if (strlen(cp) < MAX_DEBUG_TOKEN_LEN) {
Packit fcad23
            if (strcasecmp(cp, DEBUG_ALWAYS_TOKEN) == 0) {
Packit fcad23
                debug_print_everything = 1;
Packit fcad23
            } else if (debug_num_tokens < MAX_DEBUG_TOKENS) {
Packit fcad23
                if ('-' == *cp) {
Packit fcad23
                    ++cp;
Packit fcad23
                    status = SNMP_DEBUG_EXCLUDED;
Packit fcad23
                }
Packit fcad23
                else
Packit fcad23
                    status = SNMP_DEBUG_ACTIVE;
Packit fcad23
                dbg_tokens[debug_num_tokens].token_name = strdup(cp);
Packit fcad23
                dbg_tokens[debug_num_tokens++].enabled  = status;
Packit fcad23
                snmp_log(LOG_NOTICE, "registered debug token %s, %d\n", cp, status);
Packit fcad23
            } else {
Packit fcad23
                snmp_log(LOG_NOTICE, "Unable to register debug token %s\n", cp);
Packit fcad23
            }
Packit fcad23
        } else {
Packit fcad23
            snmp_log(LOG_NOTICE, "Debug token %s over length\n", cp);
Packit fcad23
        }
Packit fcad23
        cp = strtok_r(NULL, DEBUG_TOKEN_DELIMITER, &st);
Packit fcad23
    }
Packit fcad23
    free(newp);
Packit fcad23
}
Packit fcad23
Packit fcad23
/*
Packit fcad23
 * Print all registered tokens along with their current status
Packit fcad23
 */
Packit fcad23
void
Packit fcad23
debug_print_registered_tokens(void) {
Packit fcad23
    int i;
Packit fcad23
Packit fcad23
    snmp_log(LOG_INFO, "%d tokens registered :\n", debug_num_tokens);
Packit fcad23
    for (i=0; i
Packit fcad23
        snmp_log( LOG_INFO, "%d) %s : %d\n",
Packit fcad23
                 i, dbg_tokens [i].token_name, dbg_tokens [i].enabled);
Packit fcad23
    }
Packit fcad23
}
Packit fcad23
Packit fcad23
Packit fcad23
/*
Packit fcad23
 * Enable logs on a given token
Packit fcad23
 */
Packit fcad23
int
Packit fcad23
debug_enable_token_logs (const char *token) {
Packit fcad23
    int i;
Packit fcad23
Packit fcad23
    /* debugging flag is on or off */
Packit fcad23
    if (!dodebug)
Packit fcad23
        return SNMPERR_GENERR;
Packit fcad23
Packit fcad23
    if (debug_num_tokens == 0 || debug_print_everything) {
Packit fcad23
        /* no tokens specified, print everything */
Packit fcad23
        return SNMPERR_SUCCESS;
Packit fcad23
    } else {
Packit fcad23
        for(i=0; i < debug_num_tokens; i++) {
Packit fcad23
            if (dbg_tokens[i].token_name &&
Packit fcad23
                strncmp(dbg_tokens[i].token_name, token,
Packit fcad23
                        strlen(dbg_tokens[i].token_name)) == 0) {
Packit fcad23
                dbg_tokens[i].enabled = SNMP_DEBUG_ACTIVE;
Packit fcad23
                return SNMPERR_SUCCESS;
Packit fcad23
            }
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
    return SNMPERR_GENERR;
Packit fcad23
}
Packit fcad23
Packit fcad23
/*
Packit fcad23
 * Diable logs on a given token
Packit fcad23
 */
Packit fcad23
int
Packit fcad23
debug_disable_token_logs (const char *token) {
Packit fcad23
    int i;
Packit fcad23
Packit fcad23
    /* debugging flag is on or off */
Packit fcad23
    if (!dodebug)
Packit fcad23
        return SNMPERR_GENERR;
Packit fcad23
Packit fcad23
    if (debug_num_tokens == 0 || debug_print_everything) {
Packit fcad23
        /* no tokens specified, print everything */
Packit fcad23
        return SNMPERR_SUCCESS;
Packit fcad23
    } else {
Packit fcad23
        for(i=0; i < debug_num_tokens; i++) {
Packit fcad23
            if (strncmp(dbg_tokens[i].token_name, token, 
Packit fcad23
                  strlen(dbg_tokens[i].token_name)) == 0) {
Packit fcad23
                dbg_tokens[i].enabled = SNMP_DEBUG_DISABLED;
Packit fcad23
                return SNMPERR_SUCCESS;
Packit fcad23
            }
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
    return SNMPERR_GENERR;
Packit fcad23
}
Packit fcad23
Packit fcad23
/*
Packit fcad23
 * debug_is_token_registered(char *TOKEN):
Packit fcad23
 *
Packit fcad23
 * returns SNMPERR_SUCCESS
Packit fcad23
 * or SNMPERR_GENERR
Packit fcad23
 *
Packit fcad23
 * if TOKEN has been registered and debugging support is turned on.
Packit fcad23
 */
Packit fcad23
int
Packit fcad23
debug_is_token_registered(const char *token)
Packit fcad23
{
Packit fcad23
    int             i, rc;
Packit fcad23
Packit fcad23
    /*
Packit fcad23
     * debugging flag is on or off
Packit fcad23
     */
Packit fcad23
    if (!dodebug)
Packit fcad23
        return SNMPERR_GENERR;
Packit fcad23
Packit fcad23
    if (debug_num_tokens == 0 || debug_print_everything) {
Packit fcad23
        /*
Packit fcad23
         * no tokens specified, print everything
Packit fcad23
         */
Packit fcad23
        return SNMPERR_SUCCESS;
Packit fcad23
    }
Packit fcad23
    else
Packit fcad23
        rc = SNMPERR_GENERR; /* ! found = err */
Packit fcad23
Packit fcad23
    for (i = 0; i < debug_num_tokens; i++) {
Packit fcad23
        if (SNMP_DEBUG_DISABLED == dbg_tokens[i].enabled)
Packit fcad23
            continue;
Packit fcad23
        if (dbg_tokens[i].token_name &&
Packit fcad23
            strncmp(dbg_tokens[i].token_name, token,
Packit fcad23
                    strlen(dbg_tokens[i].token_name)) == 0) {
Packit fcad23
            if (SNMP_DEBUG_ACTIVE == dbg_tokens[i].enabled)
Packit fcad23
                return SNMPERR_SUCCESS; /* active */
Packit fcad23
            else
Packit fcad23
                return SNMPERR_GENERR; /* excluded */
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
    return rc;
Packit fcad23
}
Packit fcad23
Packit fcad23
void
Packit fcad23
debugmsg(const char *token, const char *format, ...)
Packit fcad23
{
Packit fcad23
    if (debug_is_token_registered(token) == SNMPERR_SUCCESS) {
Packit fcad23
	va_list         debugargs;
Packit fcad23
Packit fcad23
	va_start(debugargs, format);
Packit fcad23
	snmp_vlog(debug_log_level, format, debugargs);
Packit fcad23
	va_end(debugargs);
Packit fcad23
    }
Packit fcad23
}
Packit fcad23
Packit fcad23
void
Packit fcad23
debugmsg_oid(const char *token, const oid * theoid, size_t len)
Packit fcad23
{
Packit fcad23
    u_char         *buf = NULL;
Packit fcad23
    size_t          buf_len = 0, out_len = 0;
Packit fcad23
Packit fcad23
    if (sprint_realloc_objid(&buf, &buf_len, &out_len, 1, theoid, len)) {
Packit fcad23
        if (buf != NULL) {
Packit fcad23
            debugmsg(token, "%s", buf);
Packit fcad23
        }
Packit fcad23
    } else {
Packit fcad23
        if (buf != NULL) {
Packit fcad23
            debugmsg(token, "%s [TRUNCATED]", buf);
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
Packit fcad23
    if (buf != NULL) {
Packit fcad23
        free(buf);
Packit fcad23
    }
Packit fcad23
}
Packit fcad23
Packit fcad23
void
Packit fcad23
debugmsg_suboid(const char *token, const oid * theoid, size_t len)
Packit fcad23
{
Packit fcad23
    u_char         *buf = NULL;
Packit fcad23
    size_t          buf_len = 0, out_len = 0;
Packit fcad23
    int             buf_overflow = 0;
Packit fcad23
Packit fcad23
    netsnmp_sprint_realloc_objid(&buf, &buf_len, &out_len, 1,
Packit fcad23
                                 &buf_overflow, theoid, len);
Packit fcad23
    if(buf_overflow) {
Packit fcad23
        if (buf != NULL) {
Packit fcad23
            debugmsg(token, "%s [TRUNCATED]", buf);
Packit fcad23
        }
Packit fcad23
    } else {
Packit fcad23
        if (buf != NULL) {
Packit fcad23
            debugmsg(token, "%s", buf);
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
Packit fcad23
    if (buf != NULL) {
Packit fcad23
        free(buf);
Packit fcad23
    }
Packit fcad23
}
Packit fcad23
Packit fcad23
void
Packit fcad23
debugmsg_var(const char *token, netsnmp_variable_list * var)
Packit fcad23
{
Packit fcad23
    u_char         *buf = NULL;
Packit fcad23
    size_t          buf_len = 0, out_len = 0;
Packit fcad23
Packit fcad23
    if (var == NULL || token == NULL) {
Packit fcad23
        return;
Packit fcad23
    }
Packit fcad23
Packit fcad23
    if (sprint_realloc_variable(&buf, &buf_len, &out_len, 1,
Packit fcad23
                                var->name, var->name_length, var)) {
Packit fcad23
        if (buf != NULL) {
Packit fcad23
            debugmsg(token, "%s", buf);
Packit fcad23
        }
Packit fcad23
    } else {
Packit fcad23
        if (buf != NULL) {
Packit fcad23
            debugmsg(token, "%s [TRUNCATED]", buf);
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
Packit fcad23
    if (buf != NULL) {
Packit fcad23
        free(buf);
Packit fcad23
    }
Packit fcad23
}
Packit fcad23
Packit fcad23
void
Packit fcad23
debugmsg_oidrange(const char *token, const oid * theoid, size_t len,
Packit fcad23
                  size_t var_subid, oid range_ubound)
Packit fcad23
{
Packit fcad23
    u_char         *buf = NULL;
Packit fcad23
    size_t          buf_len = 0, out_len = 0, i = 0;
Packit fcad23
    int             rc = 0;
Packit fcad23
Packit fcad23
    if (var_subid == 0) {
Packit fcad23
        rc = sprint_realloc_objid(&buf, &buf_len, &out_len, 1, theoid,
Packit fcad23
                                  len);
Packit fcad23
    } else {
Packit fcad23
        char            tmpbuf[128];
Packit fcad23
        /* XXX - ? check for 0 == var_subid -1 ? */
Packit fcad23
        rc = sprint_realloc_objid(&buf, &buf_len, &out_len, 1, theoid,
Packit fcad23
                                  var_subid-1);  /* Adjust for C's 0-based array indexing */
Packit fcad23
        if (rc) {
Packit fcad23
            sprintf(tmpbuf, ".%" NETSNMP_PRIo "u--%" NETSNMP_PRIo "u",
Packit fcad23
                    theoid[var_subid - 1], range_ubound);
Packit fcad23
            rc = snmp_cstrcat(&buf, &buf_len, &out_len, 1, tmpbuf);
Packit fcad23
            if (rc) {
Packit fcad23
                for (i = var_subid; i < len; i++) {
Packit fcad23
                    sprintf(tmpbuf, ".%" NETSNMP_PRIo "u", theoid[i]);
Packit fcad23
                    if (!snmp_cstrcat(&buf, &buf_len, &out_len, 1, tmpbuf)) {
Packit fcad23
                        break;
Packit fcad23
                    }
Packit fcad23
                }
Packit fcad23
            }
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
Packit fcad23
Packit fcad23
    if (buf != NULL) {
Packit fcad23
        debugmsg(token, "%s%s", buf, rc ? "" : " [TRUNCATED]");
Packit fcad23
        free(buf);
Packit fcad23
    }
Packit fcad23
}
Packit fcad23
Packit fcad23
void
Packit fcad23
debugmsg_hex(const char *token, const u_char * thedata, size_t len)
Packit fcad23
{
Packit fcad23
    u_char         *buf = NULL;
Packit fcad23
    size_t          buf_len = 0, out_len = 0;
Packit fcad23
Packit fcad23
    if (sprint_realloc_hexstring
Packit fcad23
        (&buf, &buf_len, &out_len, 1, thedata, len)) {
Packit fcad23
        if (buf != NULL) {
Packit fcad23
            debugmsg(token, "%s", buf);
Packit fcad23
        }
Packit fcad23
    } else {
Packit fcad23
        if (buf != NULL) {
Packit fcad23
            debugmsg(token, "%s [TRUNCATED]", buf);
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
Packit fcad23
    if (buf != NULL) {
Packit fcad23
        free(buf);
Packit fcad23
    }
Packit fcad23
}
Packit fcad23
Packit fcad23
void
Packit fcad23
debugmsg_hextli(const char *token, const u_char * thedata, size_t len)
Packit fcad23
{
Packit fcad23
    char            buf[SPRINT_MAX_LEN], token2[SPRINT_MAX_LEN];
Packit fcad23
    u_char         *b3 = NULL;
Packit fcad23
    size_t          b3_len = 0, o3_len = 0;
Packit fcad23
    int             incr;
Packit fcad23
    sprintf(token2, "dumpx_%s", token);
Packit fcad23
Packit fcad23
    /*
Packit fcad23
     * XX tracing lines removed from this function DEBUGTRACE; 
Packit fcad23
     */
Packit fcad23
    DEBUGIF(token2) {
Packit fcad23
        for (incr = 16; len > 0; len -= incr, thedata += incr) {
Packit fcad23
            if ((int) len < incr) {
Packit fcad23
                incr = len;
Packit fcad23
            }
Packit fcad23
            /*
Packit fcad23
             * XXnext two lines were DEBUGPRINTINDENT(token);
Packit fcad23
             */
Packit fcad23
            sprintf(buf, "dumpx%s", token);
Packit fcad23
            debugmsg(buf, "%s: %*s", token2, debug_indent_get(), "");
Packit fcad23
            if (sprint_realloc_hexstring
Packit fcad23
                (&b3, &b3_len, &o3_len, 1, thedata, incr)) {
Packit fcad23
                if (b3 != NULL) {
Packit fcad23
                    debugmsg(token2, "%s", b3);
Packit fcad23
                }
Packit fcad23
            } else {
Packit fcad23
                if (b3 != NULL) {
Packit fcad23
                    debugmsg(token2, "%s [TRUNCATED]", b3);
Packit fcad23
                }
Packit fcad23
            }
Packit fcad23
            o3_len = 0;
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
    if (b3 != NULL) {
Packit fcad23
        free(b3);
Packit fcad23
    }
Packit fcad23
}
Packit fcad23
Packit fcad23
void
Packit fcad23
debugmsgtoken(const char *token, const char *format, ...)
Packit fcad23
{
Packit fcad23
    va_list         debugargs;
Packit fcad23
Packit fcad23
    va_start(debugargs, format);
Packit fcad23
    debugmsg(token, "%s: ", token);
Packit fcad23
    va_end(debugargs);
Packit fcad23
}
Packit fcad23
Packit fcad23
void
Packit fcad23
debug_combo_nc(const char *token, const char *format, ...)
Packit fcad23
{
Packit fcad23
    va_list         debugargs;
Packit fcad23
Packit fcad23
    va_start(debugargs, format);
Packit fcad23
    snmp_log(debug_log_level, "%s: ", token);
Packit fcad23
    snmp_vlog(debug_log_level, format, debugargs);
Packit fcad23
    va_end(debugargs);
Packit fcad23
}
Packit fcad23
Packit fcad23
/*
Packit fcad23
 * for speed, these shouldn't be in default_storage space 
Packit fcad23
 */
Packit fcad23
void
Packit fcad23
snmp_set_do_debugging(int val)
Packit fcad23
{
Packit fcad23
    dodebug = val;
Packit fcad23
}
Packit fcad23
Packit fcad23
int
Packit fcad23
snmp_get_do_debugging(void)
Packit fcad23
{
Packit fcad23
    return dodebug;
Packit fcad23
}
Packit fcad23
Packit fcad23
void
Packit fcad23
snmp_debug_shutdown(void)
Packit fcad23
{
Packit fcad23
    int i;
Packit fcad23
Packit fcad23
    for (i = 0; i < debug_num_tokens; i++)
Packit fcad23
       SNMP_FREE(dbg_tokens[i].token_name);
Packit fcad23
}
Packit fcad23
Packit fcad23
#else /* ! NETSNMP_NO_DEBUGGING */
Packit fcad23
Packit fcad23
int debug_indent_get(void) { return 0; }
Packit fcad23
Packit fcad23
const char* debug_indent(void) { return ""; }
Packit fcad23
Packit fcad23
void debug_indent_add(int amount)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
NETSNMP_IMPORT void
Packit fcad23
debug_config_register_tokens(const char *configtoken, char *tokens);
Packit fcad23
Packit fcad23
void
Packit fcad23
debug_indent_reset(void)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
void
Packit fcad23
debug_config_register_tokens(const char *configtoken, char *tokens)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
#ifndef NETSNMP_DISABLE_DYNAMIC_LOG_LEVEL
Packit fcad23
static void
Packit fcad23
debug_config_debug_log_level(const char *configtoken NETSNMP_ATTRIBUTE_UNUSED,
Packit fcad23
                             char *tokens NETSNMP_ATTRIBUTE_UNUSED)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
NETSNMP_IMPORT void
Packit fcad23
netsnmp_set_debug_log_level(int val NETSNMP_ATTRIBUTE_UNUSED)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
NETSNMP_IMPORT int
Packit fcad23
netsnmp_get_debug_log_level(void)
Packit fcad23
{
Packit fcad23
    return 0;
Packit fcad23
}
Packit fcad23
#endif /* NETSNMP_DISABLE_DYNAMIC_LOG_LEVEL */
Packit fcad23
Packit fcad23
NETSNMP_IMPORT void
Packit fcad23
debug_config_turn_on_debugging(const char *configtoken, char *line);
Packit fcad23
Packit fcad23
void
Packit fcad23
debug_config_turn_on_debugging(const char *configtokenu, char *line)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
void
Packit fcad23
debug_register_tokens(const char *tokens)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
void
Packit fcad23
debug_print_registered_tokens(void)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
Packit fcad23
int
Packit fcad23
debug_enable_token_logs (const char *token)
Packit fcad23
{
Packit fcad23
    return SNMPERR_GENERR;
Packit fcad23
}
Packit fcad23
Packit fcad23
int
Packit fcad23
debug_disable_token_logs (const char *token)
Packit fcad23
{
Packit fcad23
    return SNMPERR_GENERR;
Packit fcad23
}
Packit fcad23
Packit fcad23
int
Packit fcad23
debug_is_token_registered(const char *token)
Packit fcad23
{
Packit fcad23
    return SNMPERR_GENERR;
Packit fcad23
}
Packit fcad23
Packit fcad23
void
Packit fcad23
debugmsg(const char *token, const char *format, ...)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
void debugmsg_oid(const char *token, const oid * theoid, size_t len)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
void
Packit fcad23
debugmsg_suboid(const char *token, const oid * theoid, size_t len)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
void
Packit fcad23
debugmsg_var(const char *token, netsnmp_variable_list * var)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
void
Packit fcad23
debugmsg_oidrange(const char *token, const oid * theoid, size_t len,
Packit fcad23
                  size_t var_subid, oid range_ubound)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
void
Packit fcad23
debugmsg_hex(const char *token, const u_char * thedata, size_t len)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
void
Packit fcad23
debugmsg_hextli(const char *token, const u_char * thedata, size_t len)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
void
Packit fcad23
debugmsgtoken(const char *token, const char *format, ...)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
void
Packit fcad23
debug_combo_nc(const char *token, const char *format, ...)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
void
Packit fcad23
snmp_set_do_debugging(int val)
Packit fcad23
{ }
Packit fcad23
Packit fcad23
int
Packit fcad23
snmp_get_do_debugging(void)
Packit fcad23
{
Packit fcad23
    return 0;
Packit fcad23
}
Packit fcad23
Packit fcad23
void
Packit fcad23
snmp_debug_shutdown(void)
Packit fcad23
{  }
Packit fcad23
Packit fcad23
#endif /* NETSNMP_NO_DEBUGGING */
Packit fcad23
Packit fcad23
void
Packit fcad23
snmp_debug_init(void)
Packit fcad23
{
Packit fcad23
    register_prenetsnmp_mib_handler("snmp", "doDebugging",
Packit fcad23
                                    debug_config_turn_on_debugging, NULL,
Packit fcad23
                                    "(1|0)");
Packit fcad23
    register_prenetsnmp_mib_handler("snmp", "debugTokens",
Packit fcad23
                                    debug_config_register_tokens, NULL,
Packit fcad23
                                    "token[,token...]");
Packit fcad23
#ifndef NETSNMP_DISABLE_DYNAMIC_LOG_LEVEL
Packit fcad23
    register_prenetsnmp_mib_handler("snmp", "debugLogLevel",
Packit fcad23
                                    debug_config_debug_log_level, NULL,
Packit fcad23
                                    "(emerg|alert|crit|err|warning|notice|info|debug)");
Packit fcad23
#endif /* NETSNMP_DISABLE_DYNAMIC_LOG_LEVEL */
Packit fcad23
}
Packit fcad23