Blame apps/snmptls.c

Packit fcad23
/*
Packit fcad23
 * Note: this file originally auto-generated by mib2c using
Packit fcad23
 *  $
Packit fcad23
 */
Packit fcad23
Packit fcad23
#include <net-snmp/net-snmp-config.h>
Packit fcad23
#include <net-snmp/net-snmp-features.h>
Packit fcad23
#undef NETSNMP_USE_ASSERT
Packit fcad23
#include <net-snmp/net-snmp-includes.h>
Packit fcad23
#include <net-snmp/agent/net-snmp-agent-includes.h>
Packit fcad23
Packit fcad23
netsnmp_feature_require(tls_fingerprint_build)
Packit fcad23
netsnmp_feature_require(row_create)
Packit fcad23
Packit fcad23
#include <ctype.h>
Packit fcad23
Packit fcad23
#include <openssl/ssl.h>
Packit fcad23
#include <openssl/x509.h>
Packit fcad23
#include <net-snmp/library/cert_util.h>
Packit fcad23
Packit fcad23
#include "tlstm-mib.h"
Packit fcad23
#include "tlstm-mib/snmpTlstmAddrTable/snmpTlstmAddrTable.h"
Packit fcad23
#include "tlstm-mib/snmpTlstmParamsTable/snmpTlstmParamsTable.h"
Packit fcad23
#include "tlstm-mib/snmpTlstmCertToTSNTable/snmpTlstmCertToTSNTable.h"
Packit fcad23
Packit fcad23
Packit fcad23
Packit fcad23
/*
Packit fcad23
#define COL_SNMPTLSTMCERTTOTSN_ID                       1
Packit fcad23
#define COL_SNMPTLSTMCERTTOTSN_FINGERPRINT              2
Packit fcad23
#define COL_SNMPTLSTMCERTTOTSN_MAPTYPE                  3
Packit fcad23
#define COL_SNMPTLSTMCERTTOTSN_DATA                     4
Packit fcad23
#define COL_SNMPTLSTMCERTTOTSN_STORAGETYPE              5
Packit fcad23
#define COL_SNMPTLSTMCERTTOTSN_ROWSTATUS                6
Packit fcad23
*/
Packit fcad23
const oid certNum[] = { SNMP_TLS_TM_CERT_COUNT };
Packit fcad23
const oid certChg[] = { SNMP_TLS_TM_CERT_CHANGED };
Packit fcad23
const oid certTbl[] = { SNMP_TLS_TM_CERT_TABLE };
Packit fcad23
Packit fcad23
/*
Packit fcad23
#define COLUMN_SNMPTLSTMPARAMSCLIENTFINGERPRINT    1
Packit fcad23
#define COLUMN_SNMPTLSTMPARAMSSTORAGETYPE    2
Packit fcad23
#define COLUMN_SNMPTLSTMPARAMSROWSTATUS    3
Packit fcad23
*/
Packit fcad23
Packit fcad23
const oid paramsNum[] = { SNMP_TLS_TM_PARAMS_COUNT };
Packit fcad23
const oid paramsChg[] = { SNMP_TLS_TM_PARAMS_CHANGED };
Packit fcad23
const oid paramsTbl[] = { SNMP_TLS_TM_PARAMS_TABLE };
Packit fcad23
Packit fcad23
const oid addrNum[] = { SNMP_TLS_TM_ADDR_COUNT };
Packit fcad23
const oid addrChg[] = { SNMP_TLS_TM_ADDR_CHANGED };
Packit fcad23
const oid addrTbl[] = { SNMP_TLS_TM_ADDR_TABLE };
Packit fcad23
Packit fcad23
Packit fcad23
const oid tlstmCertSpecified[]     = { SNMP_TLS_TM_BASE, 1, 1, 1 };
Packit fcad23
const oid tlstmCertSANRFC822Name[] = { SNMP_TLS_TM_BASE, 1, 1, 2 };
Packit fcad23
const oid tlstmCertSANDNSName[]    = { SNMP_TLS_TM_BASE, 1, 1, 3 };
Packit fcad23
const oid tlstmCertSANIpAddress[]  = { SNMP_TLS_TM_BASE, 1, 1, 4 };
Packit fcad23
const oid tlstmCertSANAny[]        = { SNMP_TLS_TM_BASE, 1, 1, 5 };
Packit fcad23
const oid tlstmCertCommonName[]    = { SNMP_TLS_TM_BASE, 1, 1, 6 };
Packit fcad23
Packit fcad23
const oid *certMapTypes[TSNM_tlstmCert_MAX + 1] = {
Packit fcad23
    0, tlstmCertSpecified, tlstmCertSANRFC822Name, tlstmCertSANDNSName,
Packit fcad23
    tlstmCertSANIpAddress, tlstmCertSANAny, tlstmCertCommonName };
Packit fcad23
Packit fcad23
/** **************************************************************************
Packit fcad23
 *
Packit fcad23
 * cert rows
Packit fcad23
 *
Packit fcad23
 */
Packit fcad23
netsnmp_variable_list *
Packit fcad23
cert_row_create(uint32_t priority, int hash_type, const char *fp,
Packit fcad23
                const oid *map_type, int map_type_len, const u_char *data,
Packit fcad23
                int data_len, uint32_t st, int *row_status_index)
Packit fcad23
{
Packit fcad23
    oid                    name[] = { SNMP_TLS_TM_CERT_TABLE, 1, -1, -1 };
Packit fcad23
    int                    name_len = OID_LENGTH(name), col_pos = name_len - 2;
Packit fcad23
    int                    rs_index = 4;
Packit fcad23
    u_char                 bin_fp[SNMP_MAXBUF_SMALL], *bin_fp_ptr = bin_fp;
Packit fcad23
    u_int                  rs;
Packit fcad23
    size_t                 bin_fp_len;
Packit fcad23
    netsnmp_variable_list *vl = NULL, *vb;
Packit fcad23
Packit fcad23
    netsnmp_require_ptr_LRV( fp, NULL );
Packit fcad23
Packit fcad23
    DEBUGMSGT(("cert:create", "creating varbinds for pri %d, fp %s\n", priority,
Packit fcad23
               fp));
Packit fcad23
Packit fcad23
    bin_fp_len = sizeof(bin_fp);
Packit fcad23
    netsnmp_tls_fingerprint_build(hash_type, fp, &bin_fp_ptr, &bin_fp_len, 0);
Packit fcad23
Packit fcad23
    name[name_len-1] = priority;
Packit fcad23
    name[col_pos] = COL_SNMPTLSTMCERTTOTSN_FINGERPRINT;
Packit fcad23
    vl = snmp_varlist_add_variable(&vl, name, name_len, ASN_OCTET_STR,
Packit fcad23
                                   &bin_fp, bin_fp_len);
Packit fcad23
    netsnmp_require_ptr_LRV(vl, NULL);
Packit fcad23
Packit fcad23
    if (map_type_len && map_type) {
Packit fcad23
        name[col_pos] = COL_SNMPTLSTMCERTTOTSN_MAPTYPE;
Packit fcad23
        vb = snmp_varlist_add_variable(&vl, name, name_len, ASN_OBJECT_ID,
Packit fcad23
                                       map_type, map_type_len * sizeof(oid));
Packit fcad23
        if (NULL == vb) {
Packit fcad23
            snmp_free_varbind(vl);
Packit fcad23
            return NULL;
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
    else
Packit fcad23
        --rs_index;
Packit fcad23
Packit fcad23
    if (data) {
Packit fcad23
        name[col_pos] = COL_SNMPTLSTMCERTTOTSN_DATA;
Packit fcad23
        vb = snmp_varlist_add_variable(&vl, name, name_len, ASN_OCTET_STR,
Packit fcad23
                                       data, data_len);
Packit fcad23
        if (NULL == vb) {
Packit fcad23
            snmp_free_varbind(vl);
Packit fcad23
            return NULL;
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
    else
Packit fcad23
        --rs_index;
Packit fcad23
Packit fcad23
    if (st) {
Packit fcad23
        name[col_pos] = COL_SNMPTLSTMCERTTOTSN_STORAGETYPE;
Packit fcad23
        vb = snmp_varlist_add_variable(&vl, name, name_len, ASN_INTEGER,
Packit fcad23
                                       &st, sizeof(st));
Packit fcad23
        if (NULL == vb) {
Packit fcad23
            snmp_free_varbind(vl);
Packit fcad23
            return NULL;
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
    else
Packit fcad23
        --rs_index;
Packit fcad23
Packit fcad23
    name[col_pos] = COL_SNMPTLSTMCERTTOTSN_ROWSTATUS;
Packit fcad23
    rs = RS_CREATEANDGO;
Packit fcad23
    vb = snmp_varlist_add_variable(&vl, name, name_len, ASN_INTEGER,
Packit fcad23
                                   &rs, sizeof(rs));
Packit fcad23
    if (NULL == vb) {
Packit fcad23
        snmp_free_varbind(vl);
Packit fcad23
        return NULL;
Packit fcad23
    }
Packit fcad23
Packit fcad23
    if (row_status_index)
Packit fcad23
        *row_status_index = rs_index;
Packit fcad23
Packit fcad23
    return vl;
Packit fcad23
}
Packit fcad23
Packit fcad23
/** **************************************************************************
Packit fcad23
 *
Packit fcad23
 * param rows
Packit fcad23
 *
Packit fcad23
 */
Packit fcad23
netsnmp_variable_list *
Packit fcad23
params_row_create(const char *param_name, int hash_type, const char *fp,
Packit fcad23
                  uint32_t st, int *row_status_index)
Packit fcad23
{
Packit fcad23
    oid                    name[MAX_OID_LEN];
Packit fcad23
    int                    name_len, col_pos, rs_index = 2;
Packit fcad23
    u_char                 bin_fp[SNMP_MAXBUF_SMALL], *bin_fp_ptr = bin_fp;
Packit fcad23
    u_int                  rs;
Packit fcad23
    size_t                 bin_fp_len;
Packit fcad23
    netsnmp_variable_list *vl = NULL, *vb;
Packit fcad23
Packit fcad23
    netsnmp_require_ptr_LRV( param_name, NULL );
Packit fcad23
    netsnmp_require_ptr_LRV( fp, NULL );
Packit fcad23
Packit fcad23
    DEBUGMSGT(("params:create", "creating varbinds for %s params, fp %s\n",
Packit fcad23
               param_name, fp));
Packit fcad23
Packit fcad23
    /*
Packit fcad23
     * build base name
Packit fcad23
     */
Packit fcad23
    name_len = OID_LENGTH(paramsTbl);
Packit fcad23
    memcpy(name, paramsTbl, sizeof(paramsTbl));
Packit fcad23
    name[name_len++] = 1; /* entry */
Packit fcad23
    col_pos = name_len++; /* column */
Packit fcad23
    while (*param_name)
Packit fcad23
        name[name_len++] = *param_name++;
Packit fcad23
Packit fcad23
    bin_fp_len = sizeof(bin_fp);
Packit fcad23
    netsnmp_tls_fingerprint_build(hash_type, fp, &bin_fp_ptr, &bin_fp_len, 0);
Packit fcad23
Packit fcad23
    name[col_pos] = COLUMN_SNMPTLSTMPARAMSCLIENTFINGERPRINT;
Packit fcad23
    vl = snmp_varlist_add_variable(&vl, name, name_len, ASN_OCTET_STR,
Packit fcad23
                                   &bin_fp, bin_fp_len);
Packit fcad23
    netsnmp_require_ptr_LRV(vl, NULL);
Packit fcad23
Packit fcad23
    if (st) {
Packit fcad23
        name[col_pos] = COLUMN_SNMPTLSTMPARAMSSTORAGETYPE;
Packit fcad23
        vb = snmp_varlist_add_variable(&vl, name, name_len, ASN_INTEGER,
Packit fcad23
                                       &st, sizeof(st));
Packit fcad23
        if (NULL == vb) {
Packit fcad23
            snmp_free_varbind(vl);
Packit fcad23
            return NULL;
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
    else
Packit fcad23
        --rs_index;
Packit fcad23
Packit fcad23
    name[col_pos] = COLUMN_SNMPTLSTMPARAMSROWSTATUS;
Packit fcad23
    rs = RS_CREATEANDGO;
Packit fcad23
    vb = snmp_varlist_add_variable(&vl, name, name_len, ASN_INTEGER,
Packit fcad23
                                   &rs, sizeof(rs));
Packit fcad23
    if (NULL == vb) {
Packit fcad23
        snmp_free_varbind(vl);
Packit fcad23
        return NULL;
Packit fcad23
    }
Packit fcad23
Packit fcad23
    if (row_status_index)
Packit fcad23
        *row_status_index = rs_index;
Packit fcad23
Packit fcad23
    return vl;
Packit fcad23
}
Packit fcad23
Packit fcad23
/** **************************************************************************
Packit fcad23
 *
Packit fcad23
 * addr rows
Packit fcad23
 *
Packit fcad23
 */
Packit fcad23
netsnmp_variable_list *
Packit fcad23
addr_row_create(const char *target_name, int hash_type, const char *fp,
Packit fcad23
                const char *identity, uint32_t st, int *row_status_index)
Packit fcad23
{
Packit fcad23
    oid                    name[MAX_OID_LEN];
Packit fcad23
    int                    name_len, col_pos, rs_index = 3;
Packit fcad23
    u_char                 bin_fp[SNMP_MAXBUF_SMALL], *bin_fp_ptr = bin_fp;
Packit fcad23
    u_int                  rs;
Packit fcad23
    size_t                 bin_fp_len;
Packit fcad23
    netsnmp_variable_list *vl = NULL, *vb;
Packit fcad23
Packit fcad23
    netsnmp_require_ptr_LRV( target_name, NULL );
Packit fcad23
Packit fcad23
    DEBUGMSGT(("addr:create", "creating varbinds for %s addr, fp %s, id %s\n",
Packit fcad23
               target_name, fp, identity));
Packit fcad23
Packit fcad23
    /*
Packit fcad23
     * build base name
Packit fcad23
     */
Packit fcad23
    name_len = OID_LENGTH(addrTbl);
Packit fcad23
    memcpy(name, addrTbl, sizeof(addrTbl));
Packit fcad23
    name[name_len++] = 1; /* entry */
Packit fcad23
    col_pos = name_len++; /* column */
Packit fcad23
    while (*target_name)
Packit fcad23
        name[name_len++] = *target_name++;
Packit fcad23
Packit fcad23
    if (fp) {
Packit fcad23
        bin_fp_len = sizeof(bin_fp);
Packit fcad23
        netsnmp_tls_fingerprint_build(hash_type, fp, &bin_fp_ptr,
Packit fcad23
                                           &bin_fp_len, 0);
Packit fcad23
Packit fcad23
        name[col_pos] = COLUMN_SNMPTLSTMADDRSERVERFINGERPRINT;
Packit fcad23
        vl = snmp_varlist_add_variable(&vl, name, name_len, ASN_OCTET_STR,
Packit fcad23
                                       &bin_fp, bin_fp_len);
Packit fcad23
        netsnmp_require_ptr_LRV(vl, NULL);
Packit fcad23
    }
Packit fcad23
    else
Packit fcad23
        --rs_index;
Packit fcad23
Packit fcad23
    if (identity) {
Packit fcad23
        name[col_pos] = COLUMN_SNMPTLSTMADDRSERVERIDENTITY;
Packit fcad23
        vl = snmp_varlist_add_variable(&vl, name, name_len, ASN_OCTET_STR,
Packit fcad23
                                       identity, strlen(identity));
Packit fcad23
        netsnmp_require_ptr_LRV(vl, NULL);
Packit fcad23
    }
Packit fcad23
    else
Packit fcad23
        --rs_index;
Packit fcad23
Packit fcad23
    if (st) {
Packit fcad23
        name[col_pos] = COLUMN_SNMPTLSTMADDRSTORAGETYPE;
Packit fcad23
        vb = snmp_varlist_add_variable(&vl, name, name_len, ASN_INTEGER,
Packit fcad23
                                       &st, sizeof(st));
Packit fcad23
        if (NULL == vb) {
Packit fcad23
            snmp_free_varbind(vl);
Packit fcad23
            return NULL;
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
    else
Packit fcad23
        --rs_index;
Packit fcad23
Packit fcad23
    name[col_pos] = COLUMN_SNMPTLSTMADDRROWSTATUS;
Packit fcad23
    rs = RS_CREATEANDGO;
Packit fcad23
    vb = snmp_varlist_add_variable(&vl, name, name_len, ASN_INTEGER,
Packit fcad23
                                   &rs, sizeof(rs));
Packit fcad23
    if (NULL == vb) {
Packit fcad23
        snmp_free_varbind(vl);
Packit fcad23
        return NULL;
Packit fcad23
    }
Packit fcad23
Packit fcad23
    if (row_status_index)
Packit fcad23
        *row_status_index = rs_index;
Packit fcad23
Packit fcad23
    return vl;
Packit fcad23
}
Packit fcad23
Packit fcad23
/** **************************************************************************
Packit fcad23
 *
Packit fcad23
 * application code
Packit fcad23
 *
Packit fcad23
 */
Packit fcad23
static char         *_data = NULL, *_map_type_str = NULL, *_id_str = NULL;
Packit fcad23
static char         *_storage_type_str = NULL, *_fp_str = NULL;
Packit fcad23
static int           _storage_type = ST_NONE, _hash_type = NS_HASH_NONE;
Packit fcad23
static size_t        _data_len;
Packit fcad23
Packit fcad23
static void
Packit fcad23
optProc(int argc, char *const *argv, int opt)
Packit fcad23
{
Packit fcad23
    if ('C' != opt)
Packit fcad23
        return;
Packit fcad23
Packit fcad23
    while (*optarg) {
Packit fcad23
        switch (*optarg++) {
Packit fcad23
            case 'm':
Packit fcad23
                if (optind < argc)
Packit fcad23
                    _map_type_str = argv[optind++];
Packit fcad23
                else {
Packit fcad23
                    fprintf(stderr, "Bad -Cm option: no argument given\n");
Packit fcad23
                    exit(1);
Packit fcad23
                }
Packit fcad23
                break;
Packit fcad23
                
Packit fcad23
            case 'd':
Packit fcad23
                if (optind < argc) {
Packit fcad23
                    _data = argv[optind++];
Packit fcad23
                    _data_len = strlen(_data);
Packit fcad23
                }
Packit fcad23
                else {
Packit fcad23
                    fprintf(stderr, "Bad -Cd option: no argument given\n");
Packit fcad23
                    exit(1);
Packit fcad23
                }
Packit fcad23
                break;
Packit fcad23
Packit fcad23
	    case 's':
Packit fcad23
                if (optind < argc) {
Packit fcad23
                    if (isdigit(0xFF & argv[optind][0]))
Packit fcad23
                        _storage_type = atoi(argv[optind++]);
Packit fcad23
                    else
Packit fcad23
                        _storage_type_str = argv[optind++];
Packit fcad23
                }
Packit fcad23
                else {
Packit fcad23
                    fprintf(stderr, "Bad -Cs option: no argument given\n");
Packit fcad23
                    exit(1);
Packit fcad23
                }
Packit fcad23
		break;
Packit fcad23
                
Packit fcad23
	    case 'h':
Packit fcad23
                if (optind < argc) {
Packit fcad23
                    if (isdigit(0xFF & argv[optind][0]))
Packit fcad23
                        _hash_type = atoi(argv[optind++]);
Packit fcad23
                }
Packit fcad23
                else {
Packit fcad23
                    fprintf(stderr, "Bad -Ch option: no argument given\n");
Packit fcad23
                    exit(1);
Packit fcad23
                }
Packit fcad23
		break;
Packit fcad23
                
Packit fcad23
	    case 'f':
Packit fcad23
                if (optind < argc)
Packit fcad23
                    _fp_str = argv[optind++];
Packit fcad23
                else {
Packit fcad23
                    fprintf(stderr, "Bad -Cf option: no argument given\n");
Packit fcad23
                    exit(1);
Packit fcad23
                }
Packit fcad23
		break;
Packit fcad23
                
Packit fcad23
	    case 'i':
Packit fcad23
                if (optind < argc)
Packit fcad23
                    _id_str = argv[optind++];
Packit fcad23
                else {
Packit fcad23
                    fprintf(stderr, "Bad -Ci option: no argument given\n");
Packit fcad23
                    exit(1);
Packit fcad23
                }
Packit fcad23
		break;
Packit fcad23
                
Packit fcad23
            default:
Packit fcad23
                fprintf(stderr, "Unknown flag passed to -C: %c\n",
Packit fcad23
                        optarg[-1]);
Packit fcad23
                exit(1);
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
}
Packit fcad23
Packit fcad23
void
Packit fcad23
_parse_storage_type(const char *arg)
Packit fcad23
{
Packit fcad23
    netsnmp_pdu dummy;
Packit fcad23
    oid name[] = { SNMP_TLS_TM_CERT_TABLE, 1,
Packit fcad23
                   COL_SNMPTLSTMCERTTOTSN_STORAGETYPE };
Packit fcad23
    int name_len = OID_LENGTH(name);
Packit fcad23
Packit fcad23
    if (NULL == arg)
Packit fcad23
        return;
Packit fcad23
Packit fcad23
    memset(&dummy, 0x00, sizeof(dummy));
Packit fcad23
    snmp_add_var(&dummy, name, name_len, 'i', arg);
Packit fcad23
    if (dummy.variables) {
Packit fcad23
        _storage_type = *dummy.variables->val.integer;
Packit fcad23
        snmp_free_varbind(dummy.variables);
Packit fcad23
    }
Packit fcad23
    else {
Packit fcad23
        fprintf(stderr, "unknown storage type %s for -Cs\n", arg);
Packit fcad23
        exit(1);
Packit fcad23
    }
Packit fcad23
Packit fcad23
    return;
Packit fcad23
}
Packit fcad23
Packit fcad23
void
Packit fcad23
usage(void)
Packit fcad23
{
Packit fcad23
    fprintf(stderr, "USAGE: snmptls [-Cm mapTypeOID] [-Cd data] [-Cs storageType] ");
Packit fcad23
    snmp_parse_args_usage(stderr);
Packit fcad23
    fprintf(stderr, "<command> [command options]\n\n");
Packit fcad23
    snmp_parse_args_descriptions(stderr);
Packit fcad23
    fprintf(stderr, "  [options]   certToSecName add <priority> <hashType> <fingerprint>\n");
Packit fcad23
    fprintf(stderr, "\t-Cm\t\tMaptype; [snmpTlstmCertCommonName|snmpTlstmCertSANRFC822Name|snmpTlstmCertSANIpAddress|snmpTlstmCertSANDNSName|snmpTlstmCertSpecified]\n");
Packit fcad23
    fprintf(stderr, "\t\t\t(default is snmpTlstmCertSpecified)\n");
Packit fcad23
    fprintf(stderr, "\t-Cd\t\tData; data for snmpTlstmCertSpecified.\n");
Packit fcad23
    fprintf(stderr, "\t-Cs\t\tstorageType; default is nonVolatile.\n");
Packit fcad23
Packit fcad23
    fprintf(stderr, "  [options]   targetParamsFingerprint add <params-name> <hashType> <fingerprint>\n");
Packit fcad23
    fprintf(stderr, "\t-Cs\t\tstorageType; default is nonVolatile.\n");
Packit fcad23
Packit fcad23
    fprintf(stderr, "  [options]   targetAddr add <target-name> <hashType> [<hash_type> <remote-fingerprint>] [server-identity]\n");
Packit fcad23
    fprintf(stderr, "\t-Cs\t\tstorageType; default is nonVolatile.\n");
Packit fcad23
Packit fcad23
    exit(1);
Packit fcad23
}
Packit fcad23
Packit fcad23
int
Packit fcad23
main(int argc, char **argv)
Packit fcad23
{
Packit fcad23
    netsnmp_session        session, *ss;
Packit fcad23
    netsnmp_variable_list *var_list = NULL;
Packit fcad23
    int                    arg, rs_idx = 0;
Packit fcad23
    u_int                  hash_type;
Packit fcad23
    char                  *fingerprint, *tmp;
Packit fcad23
Packit fcad23
    /*
Packit fcad23
     * get the common command line arguments 
Packit fcad23
     */
Packit fcad23
    switch (arg = snmp_parse_args(argc, argv, &session, "C:", optProc)) {
Packit fcad23
    case NETSNMP_PARSE_ARGS_ERROR:
Packit fcad23
        exit(1);
Packit fcad23
    case NETSNMP_PARSE_ARGS_SUCCESS_EXIT:
Packit fcad23
        exit(0);
Packit fcad23
    case NETSNMP_PARSE_ARGS_ERROR_USAGE:
Packit fcad23
        usage();
Packit fcad23
    default:
Packit fcad23
        break;
Packit fcad23
    }
Packit fcad23
Packit fcad23
    /*
Packit fcad23
     * Open an SNMP session.
Packit fcad23
     */
Packit fcad23
    SOCK_STARTUP;
Packit fcad23
    ss = snmp_open(&session);
Packit fcad23
    if (ss == NULL) {
Packit fcad23
        /*
Packit fcad23
         * diagnose snmp_open errors with the input netsnmp_session pointer 
Packit fcad23
         */
Packit fcad23
        snmp_sess_perror("snmptls", &session);
Packit fcad23
        SOCK_CLEANUP;
Packit fcad23
        exit(1);
Packit fcad23
    }
Packit fcad23
Packit fcad23
    if (strcmp(argv[arg], "certToSecName") == 0) {
Packit fcad23
Packit fcad23
        oid           map_type[MAX_OID_LEN];
Packit fcad23
        u_int         pri;
Packit fcad23
        size_t        map_type_len = 0;
Packit fcad23
Packit fcad23
        if (strcmp(argv[++arg], "add") != 0) {
Packit fcad23
            fprintf(stderr, "only add is supported at this time\n");
Packit fcad23
            exit(1);
Packit fcad23
        }
Packit fcad23
Packit fcad23
        pri = atoi(argv[++arg]);
Packit fcad23
        tmp = argv[++arg];
Packit fcad23
        hash_type = atoi(tmp);
Packit fcad23
        fingerprint = argv[++arg];
Packit fcad23
Packit fcad23
        DEBUGMSGT(("snmptls",
Packit fcad23
                   "create pri %d, hash type %d, fp %s",
Packit fcad23
                   pri, hash_type, fingerprint));
Packit fcad23
        if (_map_type_str) {
Packit fcad23
            map_type_len = MAX_OID_LEN;
Packit fcad23
            if (snmp_parse_oid(_map_type_str, map_type, &map_type_len) 
Packit fcad23
                == NULL) {
Packit fcad23
                snmp_perror(_map_type_str);
Packit fcad23
                exit(1);
Packit fcad23
            }
Packit fcad23
            DEBUGMSG(("snmptls", ", map type "));
Packit fcad23
            DEBUGMSGOID(("snmptls", map_type, map_type_len));
Packit fcad23
        }
Packit fcad23
        if (_data)
Packit fcad23
            DEBUGMSG(("snmptls", ", data %s", _data));
Packit fcad23
Packit fcad23
        _parse_storage_type(_storage_type_str);
Packit fcad23
Packit fcad23
        DEBUGMSG(("snmptls", "\n"));
Packit fcad23
        var_list = cert_row_create(pri, hash_type, fingerprint, map_type,
Packit fcad23
                                   map_type_len, (u_char*)_data, _data_len,
Packit fcad23
                                   _storage_type, &rs_idx);
Packit fcad23
    }
Packit fcad23
    else if (strcmp(argv[arg], "targetParamsFingerprint") == 0) {
Packit fcad23
Packit fcad23
        char * params_name;
Packit fcad23
Packit fcad23
        if (strcmp(argv[++arg], "add") != 0) {
Packit fcad23
            fprintf(stderr, "only add is supported at this time\n");
Packit fcad23
            exit(1);
Packit fcad23
        }
Packit fcad23
Packit fcad23
        params_name = argv[++arg];
Packit fcad23
        hash_type = atoi(argv[++arg]);
Packit fcad23
        fingerprint = argv[++arg];
Packit fcad23
        
Packit fcad23
        _parse_storage_type(_storage_type_str);
Packit fcad23
Packit fcad23
        DEBUGMSGT(("snmptls",
Packit fcad23
                   "create %s param fp, hash type %d, fp %s\n",
Packit fcad23
                   params_name, hash_type, fingerprint));
Packit fcad23
Packit fcad23
        var_list = params_row_create(params_name, hash_type, fingerprint,
Packit fcad23
                                     _storage_type, &rs_idx);
Packit fcad23
    }
Packit fcad23
Packit fcad23
    else if (strcmp(argv[arg], "targetAddr") == 0) {
Packit fcad23
Packit fcad23
        char * addr_name;
Packit fcad23
Packit fcad23
        if (strcmp(argv[++arg], "add") != 0) {
Packit fcad23
            fprintf(stderr, "only add is supported at this time\n");
Packit fcad23
            exit(1);
Packit fcad23
        }
Packit fcad23
Packit fcad23
        addr_name = argv[++arg];
Packit fcad23
        
Packit fcad23
        _parse_storage_type(_storage_type_str);
Packit fcad23
Packit fcad23
        DEBUGMSGT(("snmptls",
Packit fcad23
                   "create %s addr fp, hash type %d, fp %s, id %s\n",
Packit fcad23
                   addr_name, _hash_type, _fp_str, _id_str));
Packit fcad23
Packit fcad23
        var_list = addr_row_create(addr_name, _hash_type, _fp_str, _id_str,
Packit fcad23
                                     _storage_type, &rs_idx);
Packit fcad23
    }
Packit fcad23
Packit fcad23
    if (! var_list) {
Packit fcad23
        fprintf(stderr, "no command specified\n");
Packit fcad23
        usage();
Packit fcad23
    }
Packit fcad23
Packit fcad23
    netsnmp_row_create(ss, var_list, rs_idx);
Packit fcad23
Packit fcad23
    SOCK_CLEANUP;
Packit fcad23
    return 0;
Packit fcad23
}