diff options
Diffstat (limited to 'local/mib2c.check_values.conf')
-rw-r--r-- | local/mib2c.check_values.conf | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/local/mib2c.check_values.conf b/local/mib2c.check_values.conf new file mode 100644 index 0000000..259ac1f --- /dev/null +++ b/local/mib2c.check_values.conf @@ -0,0 +1,154 @@ +@run mib2c.check_values_local.conf@ +## -*- c -*- +###################################################################### +## Do the .h file +###################################################################### +@open ${name}_checkfns.h@ +/* + * Note: this file originally auto-generated by mib2c using + * : mib2c.iterate.conf,v 5.6 2003/02/20 00:52:07 hardaker Exp $ + */ + +/*********************************************************************** + * This file is auto-generated and SHOULD NOT BE EDITED by hand. + * Modify the ${name}_checkfns_local.[ch] files insead. + * (so that you can regenerate this one as mib2c improvements are made) + ***********************************************************************/ +#ifndef $name.uc_CHECKFNS_H +#define $name.uc_CHECKFNS_H + +/** make sure we load the functions that you can modify */ +config_require(${name}_checkfns_local) + +@foreach $t table@ +/* these functions are designed to check incoming values for +columns in the $t table for legality with respect to +datatype and value. + */ + + @foreach $i column@ + @if $i.access =~ /(Write|Create)/@ + int check_${i}(int type, $i.decl *val, size_t val_len, $i.decl *old_val, size_t old_val_len); + @end@ + @end@ +@end@ + +#endif /* $name.uc_CHECKFNS_H */ + +###################################################################### +## Do the .c file +###################################################################### +@open ${name}_checkfns.c@ +/* + * Note: this file originally auto-generated by mib2c using + * $Id$ + */ + +/******************************************************************** + * NOTE NOTE NOTE + * This file is auto-generated and SHOULD NOT BE EDITED by hand. + * Modify the ${name}_checkfns_local.[ch] files insead so that you + * can regenerate this one as mib2c improvements are made. + ********************************************************************/ + +/* standard headers */ +#include <net-snmp/net-snmp-config.h> +#include <net-snmp/net-snmp-includes.h> +#include "${name}_checkfns.h" +#include "${name}_checkfns_local.h" +#include "${name}_enums.h" +@run mib2c.column_enums.conf@ + +@foreach $t table@ + @foreach $i column@ + @if $i.access =~ /(Write|Create)/@ +/** Decides if an incoming value for the $i mib node is legal. + * @param type The incoming data type. + * @param val The value to be checked. + * @param val_len The length of data stored in val (in bytes). + * @return 0 if the incoming value is legal, an SNMP error code otherwise. + */ + int + check_${i}(int type, $i.decl *val, size_t val_len, + $i.decl *old_val, size_t old_val_len) { + + int ret; + + /** Check to see that we were called legally */ + if (!val) + return SNMP_ERR_GENERR; + + /** Check the incoming type for correctness */ + if (type != $i.type) + return SNMP_ERR_WRONGTYPE; + + @if $i.type =~ /int/i@ + @eval $x = 0@ + @foreach $l, $v enum@ + @if $x == 0@ + /** Check the enums. Legal values will continue, others return error. */ + switch (*val) { + @eval $x = 1@ + @end@ + case $i.uc_$l.uc: + @end@ + @if $x == 1@ + break; + + /** not a legal enum value. return an error */ + default: + return SNMP_ERR_INCONSISTENTVALUE; + } + @end@ + ret = SNMP_ERR_NOERROR; + @eval $x = 0@ + @foreach $min $max range $i@ + @if $x == 0@ + /** Check the ranges of the passed value for legality */ + @eval $x = 1@ + if ( + @else@ + && + @end@ + !(*val >= $min && *val <= $max) + @end@ + @if $x != 0@ + ) { + return SNMP_ERR_WRONGVALUE; + } + @end@ + @end@ + @if $i.type =~ /str/i@ + @eval $x = 0@ + @foreach $min $max range $i@ + @if $x == 0@ + /** Check the ranges of the passed value for legality */ + @eval $x = 1@ + if ( + @else@ + && + @end@ + !(val_len >= $min && val_len <= $max) + @end@ + @if $x == 1@ + ) { + return SNMP_ERR_WRONGVALUE; + } + @end@ + @end@ + + @if "$i.syntax" eq "RowStatus"@ + if (ret = check_rowstatus_transition((old_val) ? *old_val : RS_NONEXISTENT, *val)) + return ret; + @end@ + @if "$i.syntax" eq "StorageType"@ + if (ret = check_storage_transition((old_val) ? *old_val : SNMP_STORAGE_NONE, *val)) + return ret; + @end@ + + /** looks ok, call the local version of the same function. */ + return check_${i}_local(type, val, val_len, old_val, old_val_len); + } + @end@ + @end@ +@end@ |