This diff adds support for the HP laserjet. The problem with this device
is that it only returns the engineid on probing, but only returns boots 
and time after a packet has been send with full auth/enc.

It's not an intrusive diff and allows us to easily walk this device
without resorting to tcpdump for the information and setting it via -e
and -Z, so I think it's worth having it.

diff --git a/usm.c b/usm.c
index ba2020c..f34a6c9 100644
--- a/usm.c
+++ b/usm.c
@@ -142,6 +142,12 @@ usm_doinit(struct snmp_agent *agent)
        agent->v3->level = level;
        usm->userlen = userlen;
 
+       /* Ugly hack for HP Laserjet */
+       if (!usm->engineidset || !usm->bootsset || !usm->timeset) {
+               if ((ber = snmp_get(agent, NULL, 0)) == NULL)
+                       return -1;
+               ber_free_element(ber);
+       }
        return 0;
 }
 
@@ -395,6 +401,14 @@ usm_parseparams(struct snmp_agent *agent, char *packet, 
size_t packetlen,
                        goto fail;
                }
        }
+       /*
+        * Don't assume these are set if both are zero.
+        * Ugly hack for HP Laserjet
+        */
+       if (usm->boots == 0 && usm->time == 0) {
+               usm->bootsset = 0;
+               usm->timeset = 0;
+       }
 
        if (userlen != usm->userlen ||
            memcmp(user, usm->user, userlen) != 0)

Reply via email to