Index: agent/mibgroup/snmpv3/usmUser.c
===================================================================
--- agent/mibgroup/snmpv3/usmUser.c	(revision 19724)
+++ agent/mibgroup/snmpv3/usmUser.c	(working copy)
@@ -104,6 +104,13 @@
     oid            *indexOid;
     int             i;
 
+    if (uptr->engineIDLen && !uptr->engineID) {
+        snmp_log(LOG_ERR,
+        "usm_generate_OID(name=%s, ID=%p, IDlen=%d) assert(!uptr->engineIDLen || (uptr->engineIDLen && uptr->engineID)) failed!\n",
+            uptr->name, uptr->engineID, uptr->engineIDLen);
+        uptr->engineIDLen = 0; // FIXME: hack to continue without engineID!
+    }
+
     *length = 2 + uptr->engineIDLen + strlen(uptr->name) + prefixLen;
     indexOid = (oid *) malloc(*length * sizeof(oid));
     if (indexOid) {
Index: agent/agent_trap.c
===================================================================
--- agent/agent_trap.c	(revision 19724)
+++ agent/agent_trap.c	(working copy)
@@ -930,7 +930,9 @@
 
             len = snmpv3_get_engineID(tmp, sizeof(tmp));
             memdup(&pdu->securityEngineID, tmp, len);
-            sess->securityEngineIDLen = len;
+            //XXX sess->securityEngineIDLen = len;
+            //FIXME: pdu was filled, not sess! So we should set the right length! ck
+            pdu->securityEngineIDLen = len;
         }
 
         result = snmp_send(sess, pdu);
Index: snmplib/snmpusm.c
===================================================================
--- snmplib/snmpusm.c	(revision 19724)
+++ snmplib/snmpusm.c	(working copy)
@@ -3124,10 +3124,15 @@
           if (ptr->engineIDLen == engineIDLen &&
             ((ptr->engineID == NULL && engineID == NULL) ||
              (ptr->engineID != NULL && engineID != NULL &&
-              memcmp(ptr->engineID, engineID, engineIDLen) == 0)))
+              memcmp(ptr->engineID, engineID, engineIDLen) == 0))) {
             return ptr;
+          }
           DEBUGMSGTL(("usm", "no match on engineID ("));
-          DEBUGMSGHEX(("usm", engineID, engineIDLen));
+          if (engineID) {
+            DEBUGMSGHEX(("usm", engineID, engineIDLen));
+          } else {
+            DEBUGMSGTL(("usm", "Empty EngineID"));
+          }
           DEBUGMSG(("usm", ")\n"));
         }
     }
@@ -3135,8 +3140,10 @@
     /*
      * return "" user used to facilitate engineID discovery 
      */
-    if (use_default && !strcmp(name, ""))
+    if (use_default && !strcmp(name, "")) {
+        DEBUGMSG(("usm", "use default noNameUser!\n"));
         return noNameUser;
+    }
     return NULL;
 }
 
