Blame agent/helpers/null.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
#include <net-snmp/net-snmp-config.h>
Packit fcad23
Packit fcad23
#include <net-snmp/net-snmp-includes.h>
Packit fcad23
#include <net-snmp/agent/net-snmp-agent-includes.h>
Packit fcad23
Packit fcad23
#include <net-snmp/agent/null.h>
Packit fcad23
Packit fcad23
#if HAVE_STRING_H
Packit fcad23
#include <string.h>
Packit fcad23
#else
Packit fcad23
#include <strings.h>
Packit fcad23
#endif
Packit fcad23
Packit fcad23
int
Packit fcad23
netsnmp_register_null(oid * loc, size_t loc_len)
Packit fcad23
{
Packit fcad23
    return netsnmp_register_null_context(loc, loc_len, NULL);
Packit fcad23
}
Packit fcad23
Packit fcad23
int
Packit fcad23
netsnmp_register_null_context(oid * loc, size_t loc_len,
Packit fcad23
                              const char *contextName)
Packit fcad23
{
Packit fcad23
    netsnmp_handler_registration *reginfo;
Packit fcad23
    reginfo = SNMP_MALLOC_TYPEDEF(netsnmp_handler_registration);
Packit fcad23
    if (reginfo != NULL) {
Packit fcad23
        reginfo->handlerName = strdup("");
Packit fcad23
        reginfo->rootoid = loc;
Packit fcad23
        reginfo->rootoid_len = loc_len;
Packit fcad23
        reginfo->handler =
Packit fcad23
            netsnmp_create_handler("null", netsnmp_null_handler);
Packit fcad23
        if (contextName)
Packit fcad23
            reginfo->contextName = strdup(contextName);
Packit fcad23
        reginfo->modes = HANDLER_CAN_DEFAULT | HANDLER_CAN_GETBULK;
Packit fcad23
Packit fcad23
        if (!reginfo->handlerName || !reginfo->handler ||
Packit fcad23
            (contextName && !reginfo->contextName)) {
Packit fcad23
            snmp_log(LOG_ERR,"null context allocation failure(s)\n");
Packit fcad23
            netsnmp_handler_registration_free(reginfo);
Packit fcad23
            return MIB_REGISTRATION_FAILED;
Packit fcad23
        }
Packit fcad23
    } else {
Packit fcad23
        snmp_log(LOG_ERR,"null context allocation failure\n");
Packit fcad23
        return MIB_REGISTRATION_FAILED;
Packit fcad23
    }
Packit fcad23
    return netsnmp_register_handler(reginfo);
Packit fcad23
}
Packit fcad23
Packit fcad23
int
Packit fcad23
netsnmp_null_handler(netsnmp_mib_handler *handler,
Packit fcad23
                     netsnmp_handler_registration *reginfo,
Packit fcad23
                     netsnmp_agent_request_info *reqinfo,
Packit fcad23
                     netsnmp_request_info *requests)
Packit fcad23
{
Packit fcad23
    DEBUGMSGTL(("helper:null", "Got request\n"));
Packit fcad23
Packit fcad23
    DEBUGMSGTL(("helper:null", "  oid:"));
Packit fcad23
    DEBUGMSGOID(("helper:null", requests->requestvb->name,
Packit fcad23
                 requests->requestvb->name_length));
Packit fcad23
    DEBUGMSG(("helper:null", "\n"));
Packit fcad23
Packit fcad23
    switch (reqinfo->mode) {
Packit fcad23
    case MODE_GETNEXT:
Packit fcad23
    case MODE_GETBULK:
Packit fcad23
        return SNMP_ERR_NOERROR;
Packit fcad23
Packit fcad23
    case MODE_GET:
Packit fcad23
        netsnmp_request_set_error_all(requests, SNMP_NOSUCHOBJECT);
Packit fcad23
        return SNMP_ERR_NOERROR;
Packit fcad23
Packit fcad23
    default:
Packit fcad23
        netsnmp_request_set_error_all(requests, SNMP_ERR_NOSUCHNAME);
Packit fcad23
        return SNMP_ERR_NOERROR;
Packit fcad23
    }
Packit fcad23
}