]> git.pld-linux.org Git - packages/net-snmp.git/blame - net-snmp-loadave-writable.patch
- detect errors better, need to report error in RESERVE stages, COMMIT is too late
[packages/net-snmp.git] / net-snmp-loadave-writable.patch
CommitLineData
e9b6787d
ER
1--- net-snmp-5.4.2.1/agent/mibgroup/ucd-snmp/loadave.c~ 2009-12-21 21:00:10.094254079 +0200
2+++ net-snmp-5.4.2.1/agent/mibgroup/ucd-snmp/loadave.c 2009-12-21 22:02:45.398903148 +0200
3@@ -152,7 +152,7 @@
4 {ERRORNAME}},
5 {LOADAVE, ASN_OCTET_STR, RONLY, var_extensible_loadave, 1,
6 {LOADAVE}},
7- {LOADMAXVAL, ASN_OCTET_STR, RONLY, var_extensible_loadave, 1,
8+ {LOADMAXVAL, ASN_OCTET_STR, RWRITE, var_extensible_loadave, 1,
9 {LOADMAXVAL}},
10 {LOADAVEINT, ASN_INTEGER, RONLY, var_extensible_loadave, 1,
11 {LOADAVEINT}},
32156cff 12@@ -309,6 +309,63 @@
e9b6787d
ER
13 return 0;
14 }
15
16+static int
17+write_laConfig(int action,
18+ u_char * var_val,
19+ u_char var_val_type,
20+ size_t var_val_len,
21+ u_char * statP, oid * name, size_t name_len)
22+{
32156cff
ER
23+ static double laConfig = 0;
24+
25+ switch (action) {
26+ case RESERVE1:
27+ if (var_val_type != ASN_OCTET_STR) {
28+ DEBUGMSGTL(("ucd-snmp/loadave",
29+ "write to laConfig not ASN_OCTET_STR\n"));
30+ return SNMP_ERR_WRONGTYPE;
31+ }
32+ if (var_val_len > 8 || var_val_len <= 0) {
33+ DEBUGMSGTL(("ucd-snmp/loadave",
34+ "write to laConfig: bad length\n"));
35+ return SNMP_ERR_WRONGLENGTH;
36+ }
37+ break;
38+
39+ case RESERVE2:
40+ {
41+ u_char buf[8];
42+ int old_errno = errno;
00b0aba0 43+ double val;
32156cff
ER
44+ char *endp;
45+
46+ strncpy(buf, var_val, var_val_len);
47+ buf[var_val_len] = '\0';
48+ val = strtod(buf, &endp);
49+
50+ if (errno == ERANGE || *endp != '\0' || val < 0 || val > 65536.00) {
51+ errno = old_errno;
00b0aba0
ER
52+ DEBUGMSGTL(("ucd-snmp/loadave",
53+ "write to laConfig: invalid value\n"));
54+ return SNMP_ERR_WRONGVALUE;
55+ }
32156cff
ER
56+
57+ errno = old_errno;
58+
59+ laConfig = val;
60+ }
61+ break;
62+
63+ case COMMIT:
64+ {
65+ int idx = name[name_len - 1] - 1;
66+ maxload[idx] = laConfig;
00b0aba0 67+ }
e9b6787d 68+ }
32156cff 69+
e9b6787d
ER
70+ return SNMP_ERR_NOERROR;
71+}
72+
73 u_char *
74 var_extensible_loadave(struct variable * vp,
75 oid * name,
32156cff 76@@ -328,6 +385,10 @@
e9b6787d
ER
77 case MIBINDEX:
78 long_ret = name[*length - 1];
79 return ((u_char *) (&long_ret));
80+ case LOADMAXVAL:
00b0aba0
ER
81+ /* setup write method, but don't return yet */
82+ *write_method = write_laConfig;
83+ break;
e9b6787d
ER
84 case ERRORNAME:
85 sprintf(errmsg, "Load-%d", ((name[*length - 1] == 1) ? 1 :
86 ((name[*length - 1] == 2) ? 5 : 15)));
This page took 0.468702 seconds and 4 git commands to generate.