Merge branch 'V5-6-patches' into V5-7-patches

* V5-6-patches:
  CHANGES: snmplib: Rename memdup() into netsnmp_memdup()

Conflicts:
	agent/agent_trap.c
	agent/helpers/instance.c
	agent/helpers/old_api.c
	agent/mibgroup/disman/ping/pingCtlTable.c
	snmplib/snmp_api.c
	snmplib/snmpv3.c
	snmplib/transports/snmpTLSTCPDomain.c
diff --git a/agent/agent_trap.c b/agent/agent_trap.c
index dfa9dcf..080b8bf 100644
--- a/agent/agent_trap.c
+++ b/agent/agent_trap.c
@@ -938,7 +938,7 @@
             u_char          tmp[SPRINT_MAX_LEN];
 
             int len = snmpv3_get_engineID(tmp, sizeof(tmp));
-            memdup(&pdu->securityEngineID, tmp, len);
+            pdu->securityEngineID = netsnmp_memdup(tmp, len);
             pdu->securityEngineIDLen = len;
         }
 
@@ -1273,7 +1273,7 @@
             u_char          tmp[SPRINT_MAX_LEN];
 
             len = snmpv3_get_engineID( tmp, sizeof(tmp));
-            memdup(&ss->securityEngineID, tmp, len);
+            ss->securityEngineID = netsnmp_memdup(tmp, len);
             ss->securityEngineIDLen = len;
     }
 
diff --git a/agent/helpers/instance.c b/agent/helpers/instance.c
index a187d58..a5ee841 100644
--- a/agent/helpers/instance.c
+++ b/agent/helpers/instance.c
@@ -656,7 +656,7 @@
             return SNMP_ERR_NOERROR;
         }
 
-        memdup((u_char **) & it_save, (u_char *)&it, sizeof(u_long));
+        it_save = netsnmp_memdup(&it, sizeof(u_long));
         if (it_save == NULL) {
             netsnmp_set_request_error(reqinfo, requests,
                                       SNMP_ERR_RESOURCEUNAVAILABLE);
diff --git a/agent/helpers/table_data.c b/agent/helpers/table_data.c
index 75ddc1d..659d903 100644
--- a/agent/helpers/table_data.c
+++ b/agent/helpers/table_data.c
@@ -96,8 +96,7 @@
     if (!row)
         return NULL;
 
-    memdup((u_char **) & newrow, (u_char *) row,
-           sizeof(netsnmp_table_row));
+    newrow = netsnmp_memdup(row, sizeof(netsnmp_table_row));
     if (!newrow)
         return NULL;
 
diff --git a/agent/helpers/table_dataset.c b/agent/helpers/table_dataset.c
index d993993..931c27a 100644
--- a/agent/helpers/table_dataset.c
+++ b/agent/helpers/table_dataset.c
@@ -246,16 +246,16 @@
              (netsnmp_table_data_set_storage **) &(newrow->data); data;
              newrowdata = &((*newrowdata)->next), data = data->next) {
 
-            memdup((u_char **) newrowdata, (u_char *) data,
-                   sizeof(netsnmp_table_data_set_storage));
+            *newrowdata = netsnmp_memdup(data,
+                sizeof(netsnmp_table_data_set_storage));
             if (!*newrowdata) {
                 netsnmp_table_dataset_delete_row(newrow);
                 return NULL;
             }
 
             if (data->data.voidp) {
-                memdup((u_char **) & ((*newrowdata)->data.voidp),
-                       (u_char *) data->data.voidp, data->data_len);
+                (*newrowdata)->data.voidp =
+                    netsnmp_memdup(data->data.voidp, data->data_len);
                 if (!(*newrowdata)->data.voidp) {
                     netsnmp_table_dataset_delete_row(newrow);
                     return NULL;
@@ -331,8 +331,7 @@
     new_col->writable = writable;
     new_col->column = column;
     if (default_value) {
-        memdup((u_char **) & (new_col->data.voidp),
-               (u_char *) default_value, default_value_len);
+        new_col->data.voidp = netsnmp_memdup(default_value, default_value_len);
         new_col->data_len = default_value_len;
     }
     if (table_set->default_row == NULL)
diff --git a/agent/helpers/table_tdata.c b/agent/helpers/table_tdata.c
index 5bdb26a..8865084 100644
--- a/agent/helpers/table_tdata.c
+++ b/agent/helpers/table_tdata.c
@@ -125,8 +125,7 @@
     if (!row)
         return NULL;
 
-    memdup((u_char **) & newrow, (u_char *) row,
-           sizeof(netsnmp_tdata_row));
+    newrow = netsnmp_memdup(row, sizeof(netsnmp_tdata_row));
     if (!newrow)
         return NULL;
 
diff --git a/agent/mibgroup/agentx/subagent.c b/agent/mibgroup/agentx/subagent.c
index b3da321..1f9d31c 100644
--- a/agent/mibgroup/agentx/subagent.c
+++ b/agent/mibgroup/agentx/subagent.c
@@ -768,7 +768,7 @@
 
     DEBUGMSGTL(("agentx/subagent",
                 "registering callbacks for session %p\n", s));
-    memdup((u_char **)&sess_p, &s, sizeof(s));
+    sess_p = netsnmp_memdup(&s, sizeof(s));
     netsnmp_assert(sess_p);
     s->myvoid = sess_p;
     if (!sess_p)
diff --git a/agent/mibgroup/disman/expression/expExpressionTable.c b/agent/mibgroup/disman/expression/expExpressionTable.c
index ce3b0db..212952d 100644
--- a/agent/mibgroup/disman/expression/expExpressionTable.c
+++ b/agent/mibgroup/disman/expression/expExpressionTable.c
@@ -563,8 +563,7 @@
          */
         tmpvar = StorageTmp->expExpression;
         tmplen = StorageTmp->expExpressionLen;
-        memdup((u_char **) & StorageTmp->expExpression, var_val,
-               var_val_len);
+        StorageTmp->expExpression = netsnmp_memdup(var_val, var_val_len);
         StorageTmp->expExpressionLen = var_val_len;
         break;
 
@@ -738,8 +737,7 @@
          */
         tmpvar = StorageTmp->expExpressionComment;
         tmplen = StorageTmp->expExpressionCommentLen;
-        memdup((u_char **) & StorageTmp->expExpressionComment, var_val,
-               var_val_len);
+        StorageTmp->expExpressionComment = netsnmp_memdup(var_val, var_val_len);
         StorageTmp->expExpressionCommentLen = var_val_len;
         break;
 
diff --git a/agent/mibgroup/disman/expression/expObjectTable.c b/agent/mibgroup/disman/expression/expObjectTable.c
index e56f25a..e057f56 100644
--- a/agent/mibgroup/disman/expression/expObjectTable.c
+++ b/agent/mibgroup/disman/expression/expObjectTable.c
@@ -156,9 +156,8 @@
 
     StorageNew->expObjectIDWildcard = EXPOBJCETIDWILDCARD_FALSE;
     StorageNew->expObjectSampleType = EXPOBJCETSAMPLETYPE_ABSOLUTEVALUE;
-    memdup((unsigned char **)
-           &(StorageNew->expObjectDeltaDiscontinuityID),
-           (unsigned char *) TimeInstance, sizeof(TimeInstance));
+    StorageNew->expObjectDeltaDiscontinuityID =
+        netsnmp_memdup(TimeInstance, sizeof(TimeInstance));
     StorageNew->expObjectDeltaDiscontinuityIDLen =
         sizeof(TimeInstance) / sizeof(oid);
 
@@ -552,8 +551,7 @@
          */
         tmpvar = StorageTmp->expObjectID;
         tmplen = StorageTmp->expObjectIDLen;
-        memdup((u_char **) & StorageTmp->expObjectID, var_val,
-               var_val_len);
+        StorageTmp->expObjectID = netsnmp_memdup(var_val, var_val_len);
         StorageTmp->expObjectIDLen = var_val_len / sizeof(oid);
         break;
 
@@ -811,8 +809,8 @@
          */
         tmpvar = StorageTmp->expObjectDeltaDiscontinuityID;
         tmplen = StorageTmp->expObjectDeltaDiscontinuityIDLen;
-        memdup((u_char **) & StorageTmp->expObjectDeltaDiscontinuityID,
-               var_val, var_val_len);
+        StorageTmp->expObjectDeltaDiscontinuityID =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->expObjectDeltaDiscontinuityIDLen =
             var_val_len / sizeof(oid);
         break;
@@ -1075,8 +1073,7 @@
          */
         tmpvar = StorageTmp->expObjectConditional;
         tmplen = StorageTmp->expObjectConditionalLen;
-        memdup((u_char **) & StorageTmp->expObjectConditional, var_val,
-               var_val_len);
+        StorageTmp->expObjectConditional = netsnmp_memdup(var_val, var_val_len);
         StorageTmp->expObjectConditionalLen = var_val_len / sizeof(oid);
         break;
 
diff --git a/agent/mibgroup/disman/mteObjectsTable.c b/agent/mibgroup/disman/mteObjectsTable.c
index c3f331d..09ceb2a 100644
--- a/agent/mibgroup/disman/mteObjectsTable.c
+++ b/agent/mibgroup/disman/mteObjectsTable.c
@@ -437,8 +437,7 @@
          */
         tmpvar = StorageTmp->mteObjectsID;
         tmplen = StorageTmp->mteObjectsIDLen;
-        memdup((u_char **) & StorageTmp->mteObjectsID, var_val,
-               var_val_len);
+        StorageTmp->mteObjectsID = netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteObjectsIDLen = var_val_len / sizeof(oid);
         break;
 
diff --git a/agent/mibgroup/disman/mteTriggerDeltaTable.c b/agent/mibgroup/disman/mteTriggerDeltaTable.c
index b5d2244..c829e6a 100644
--- a/agent/mibgroup/disman/mteTriggerDeltaTable.c
+++ b/agent/mibgroup/disman/mteTriggerDeltaTable.c
@@ -243,8 +243,8 @@
          */
         tmpvar = StorageTmp->mteTriggerDeltaDiscontinuityID;
         tmplen = StorageTmp->mteTriggerDeltaDiscontinuityIDLen;
-        memdup((u_char **) & StorageTmp->mteTriggerDeltaDiscontinuityID,
-               var_val, var_val_len);
+        StorageTmp->mteTriggerDeltaDiscontinuityID =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerDeltaDiscontinuityIDLen =
             var_val_len / sizeof(oid);
         break;
diff --git a/agent/mibgroup/disman/mteTriggerExistenceTable.c b/agent/mibgroup/disman/mteTriggerExistenceTable.c
index fdfdaf2..4e6b64b 100644
--- a/agent/mibgroup/disman/mteTriggerExistenceTable.c
+++ b/agent/mibgroup/disman/mteTriggerExistenceTable.c
@@ -293,8 +293,8 @@
          */
         tmpvar = StorageTmp->mteTriggerExistenceTest;
         tmplen = StorageTmp->mteTriggerExistenceTestLen;
-        memdup((u_char **) & StorageTmp->mteTriggerExistenceTest, var_val,
-               var_val_len);
+        StorageTmp->mteTriggerExistenceTest =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerExistenceTestLen = var_val_len;
         break;
 
@@ -385,8 +385,8 @@
          */
         tmpvar = StorageTmp->mteTriggerExistenceStartup;
         tmplen = StorageTmp->mteTriggerExistenceStartupLen;
-        memdup((u_char **) & StorageTmp->mteTriggerExistenceStartup,
-               var_val, var_val_len);
+        StorageTmp->mteTriggerExistenceStartup =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerExistenceStartupLen = var_val_len;
         break;
 
@@ -477,8 +477,8 @@
          */
         tmpvar = StorageTmp->mteTriggerExistenceObjectsOwner;
         tmplen = StorageTmp->mteTriggerExistenceObjectsOwnerLen;
-        memdup((u_char **) & StorageTmp->mteTriggerExistenceObjectsOwner,
-               var_val, var_val_len);
+        StorageTmp->mteTriggerExistenceObjectsOwner =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerExistenceObjectsOwnerLen = var_val_len;
         break;
 
@@ -569,8 +569,8 @@
          */
         tmpvar = StorageTmp->mteTriggerExistenceObjects;
         tmplen = StorageTmp->mteTriggerExistenceObjectsLen;
-        memdup((u_char **) & StorageTmp->mteTriggerExistenceObjects,
-               var_val, var_val_len);
+        StorageTmp->mteTriggerExistenceObjects =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerExistenceObjectsLen = var_val_len;
         break;
 
@@ -661,8 +661,8 @@
          */
         tmpvar = StorageTmp->mteTriggerExistenceEventOwner;
         tmplen = StorageTmp->mteTriggerExistenceEventOwnerLen;
-        memdup((u_char **) & StorageTmp->mteTriggerExistenceEventOwner,
-               var_val, var_val_len);
+        StorageTmp->mteTriggerExistenceEventOwner =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerExistenceEventOwnerLen = var_val_len;
         break;
 
@@ -752,8 +752,8 @@
          */
         tmpvar = StorageTmp->mteTriggerExistenceEvent;
         tmplen = StorageTmp->mteTriggerExistenceEventLen;
-        memdup((u_char **) & StorageTmp->mteTriggerExistenceEvent, var_val,
-               var_val_len);
+        StorageTmp->mteTriggerExistenceEvent =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerExistenceEventLen = var_val_len;
         break;
 
diff --git a/agent/mibgroup/disman/mteTriggerTable.c b/agent/mibgroup/disman/mteTriggerTable.c
index a2306f7..80a45a3 100644
--- a/agent/mibgroup/disman/mteTriggerTable.c
+++ b/agent/mibgroup/disman/mteTriggerTable.c
@@ -283,9 +283,8 @@
     StorageNew->mteTriggerObjectsOwner = strdup("");
     StorageNew->mteTriggerObjects = strdup("");
     StorageNew->mteTriggerEnabled = MTETRIGGERENABLED_FALSE;
-    memdup((unsigned char **)
-           &(StorageNew->mteTriggerDeltaDiscontinuityID),
-           (unsigned char *) sysUpTimeInstance, sizeof(sysUpTimeInstance));
+    StorageNew->mteTriggerDeltaDiscontinuityID =
+        netsnmp_memdup(sysUpTimeInstance, sizeof(sysUpTimeInstance));
     StorageNew->mteTriggerDeltaDiscontinuityIDLen =
         sizeof(sysUpTimeInstance) / sizeof(oid);
     StorageNew->mteTriggerDeltaDiscontinuityIDWildcard = TV_FALSE;
@@ -1678,8 +1677,7 @@
          */
         tmpvar = StorageTmp->mteTriggerComment;
         tmplen = StorageTmp->mteTriggerCommentLen;
-        memdup((u_char **) & StorageTmp->mteTriggerComment, var_val,
-               var_val_len);
+        StorageTmp->mteTriggerComment = netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerCommentLen = var_val_len;
         break;
 
@@ -1766,8 +1764,7 @@
          */
         tmpvar = StorageTmp->mteTriggerTest;
         tmplen = StorageTmp->mteTriggerTestLen;
-        memdup((u_char **) & StorageTmp->mteTriggerTest, var_val,
-               var_val_len);
+        StorageTmp->mteTriggerTest = netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerTestLen = var_val_len;
         break;
 
@@ -1939,8 +1936,7 @@
          */
         tmpvar = StorageTmp->mteTriggerValueID;
         tmplen = StorageTmp->mteTriggerValueIDLen;
-        memdup((u_char **) & StorageTmp->mteTriggerValueID, var_val,
-               var_val_len);
+        StorageTmp->mteTriggerValueID = netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerValueIDLen = var_val_len / sizeof(oid);
         break;
 
@@ -2118,8 +2114,7 @@
          */
         tmpvar = StorageTmp->mteTriggerTargetTag;
         tmplen = StorageTmp->mteTriggerTargetTagLen;
-        memdup((u_char **) & StorageTmp->mteTriggerTargetTag, var_val,
-               var_val_len);
+        StorageTmp->mteTriggerTargetTag = netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerTargetTagLen = var_val_len;
         break;
 
@@ -2208,8 +2203,8 @@
          */
         tmpvar = StorageTmp->mteTriggerContextName;
         tmplen = StorageTmp->mteTriggerContextNameLen;
-        memdup((u_char **) & StorageTmp->mteTriggerContextName, var_val,
-               var_val_len);
+        StorageTmp->mteTriggerContextName =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerContextNameLen = var_val_len;
         break;
 
@@ -2469,8 +2464,8 @@
          */
         tmpvar = StorageTmp->mteTriggerObjectsOwner;
         tmplen = StorageTmp->mteTriggerObjectsOwnerLen;
-        memdup((u_char **) & StorageTmp->mteTriggerObjectsOwner, var_val,
-               var_val_len);
+        StorageTmp->mteTriggerObjectsOwner =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerObjectsOwnerLen = var_val_len;
         break;
 
@@ -2559,8 +2554,7 @@
          */
         tmpvar = StorageTmp->mteTriggerObjects;
         tmplen = StorageTmp->mteTriggerObjectsLen;
-        memdup((u_char **) & StorageTmp->mteTriggerObjects, var_val,
-               var_val_len);
+        StorageTmp->mteTriggerObjects = netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerObjectsLen = var_val_len;
         break;
 
@@ -3133,16 +3127,17 @@
     pdu->securityLevel = item->pdu_securityLevel;
     pdu->tDomain = item->pdu_tDomain;
     pdu->tDomainLen = item->pdu_tDomainLen;
-    memdup((u_char **) & pdu->transport_data, item->pdu_transport,
-           item->pdu_transportLen);
+    pdu->transport_data = netsnmp_memdup(item->pdu_transport,
+                                         item->pdu_transportLen);
     pdu->transport_data_length = item->pdu_transportLen;
-    memdup(&pdu->community, item->pdu_community, item->pdu_community_len);
+    pdu->community = netsnmp_memdup(item->pdu_community,
+                                    item->pdu_community_len);
     pdu->community_len = item->pdu_community_len;
-    memdup((u_char **) & pdu->contextName, item->mteTriggerContextName,
-           item->mteTriggerContextNameLen);
+    pdu->contextName = netsnmp_memdup(item->mteTriggerContextName,
+                                      item->mteTriggerContextNameLen);
     pdu->contextNameLen = item->mteTriggerContextNameLen;
-    memdup((u_char **) & pdu->securityName, item->pdu_securityName,
-           item->pdu_securityNameLen);
+    pdu->securityName = netsnmp_memdup(item->pdu_securityName,
+                                       item->pdu_securityNameLen);
     pdu->securityNameLen = item->pdu_securityNameLen;
     DEBUGMSGTL(("mteTriggerTable",
                 "accessing locally with secName \"%s\" community \"%s\"\n",
@@ -3460,9 +3455,8 @@
          */
         if (response->errstat == SNMPERR_SUCCESS &&
             response->variables->val.integer)
-            memdup((unsigned char **) &value,
-                   (unsigned char *) response->variables->val.integer,
-                   sizeof(*response->variables->val.integer));
+            value = netsnmp_memdup(response->variables->val.integer,
+                                   sizeof(*response->variables->val.integer));
         else
             value = NULL;
 
diff --git a/agent/mibgroup/disman/mteTriggerThresholdTable.c b/agent/mibgroup/disman/mteTriggerThresholdTable.c
index 93c02b2..be963c1 100644
--- a/agent/mibgroup/disman/mteTriggerThresholdTable.c
+++ b/agent/mibgroup/disman/mteTriggerThresholdTable.c
@@ -837,8 +837,8 @@
          */
         tmpvar = StorageTmp->mteTriggerThresholdObjectsOwner;
         tmplen = StorageTmp->mteTriggerThresholdObjectsOwnerLen;
-        memdup((u_char **) & StorageTmp->mteTriggerThresholdObjectsOwner,
-               var_val, var_val_len);
+        StorageTmp->mteTriggerThresholdObjectsOwner =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerThresholdObjectsOwnerLen = var_val_len;
         break;
 
@@ -929,8 +929,8 @@
          */
         tmpvar = StorageTmp->mteTriggerThresholdObjects;
         tmplen = StorageTmp->mteTriggerThresholdObjectsLen;
-        memdup((u_char **) & StorageTmp->mteTriggerThresholdObjects,
-               var_val, var_val_len);
+        StorageTmp->mteTriggerThresholdObjects =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerThresholdObjectsLen = var_val_len;
         break;
 
@@ -1021,8 +1021,8 @@
          */
         tmpvar = StorageTmp->mteTriggerThresholdRisingEventOwner;
         tmplen = StorageTmp->mteTriggerThresholdRisingEventOwnerLen;
-        memdup((u_char **) & StorageTmp->
-               mteTriggerThresholdRisingEventOwner, var_val, var_val_len);
+        StorageTmp->mteTriggerThresholdRisingEventOwner =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerThresholdRisingEventOwnerLen = var_val_len;
         break;
 
@@ -1113,8 +1113,8 @@
          */
         tmpvar = StorageTmp->mteTriggerThresholdRisingEvent;
         tmplen = StorageTmp->mteTriggerThresholdRisingEventLen;
-        memdup((u_char **) & StorageTmp->mteTriggerThresholdRisingEvent,
-               var_val, var_val_len);
+        StorageTmp->mteTriggerThresholdRisingEvent =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerThresholdRisingEventLen = var_val_len;
         break;
 
@@ -1205,8 +1205,8 @@
          */
         tmpvar = StorageTmp->mteTriggerThresholdFallingEventOwner;
         tmplen = StorageTmp->mteTriggerThresholdFallingEventOwnerLen;
-        memdup((u_char **) & StorageTmp->
-               mteTriggerThresholdFallingEventOwner, var_val, var_val_len);
+        StorageTmp->mteTriggerThresholdFallingEventOwner =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerThresholdFallingEventOwnerLen = var_val_len;
         break;
 
@@ -1297,8 +1297,8 @@
          */
         tmpvar = StorageTmp->mteTriggerThresholdFallingEvent;
         tmplen = StorageTmp->mteTriggerThresholdFallingEventLen;
-        memdup((u_char **) & StorageTmp->mteTriggerThresholdFallingEvent,
-               var_val, var_val_len);
+        StorageTmp->mteTriggerThresholdFallingEvent =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerThresholdFallingEventLen = var_val_len;
         break;
 
@@ -1389,9 +1389,8 @@
          */
         tmpvar = StorageTmp->mteTriggerThresholdDeltaRisingEventOwner;
         tmplen = StorageTmp->mteTriggerThresholdDeltaRisingEventOwnerLen;
-        memdup((u_char **) & StorageTmp->
-               mteTriggerThresholdDeltaRisingEventOwner, var_val,
-               var_val_len);
+        StorageTmp->mteTriggerThresholdDeltaRisingEventOwner =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerThresholdDeltaRisingEventOwnerLen =
             var_val_len;
         break;
@@ -1483,8 +1482,8 @@
          */
         tmpvar = StorageTmp->mteTriggerThresholdDeltaRisingEvent;
         tmplen = StorageTmp->mteTriggerThresholdDeltaRisingEventLen;
-        memdup((u_char **) & StorageTmp->
-               mteTriggerThresholdDeltaRisingEvent, var_val, var_val_len);
+        StorageTmp->mteTriggerThresholdDeltaRisingEvent =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerThresholdDeltaRisingEventLen = var_val_len;
         break;
 
@@ -1576,9 +1575,8 @@
          */
         tmpvar = StorageTmp->mteTriggerThresholdDeltaFallingEventOwner;
         tmplen = StorageTmp->mteTriggerThresholdDeltaFallingEventOwnerLen;
-        memdup((u_char **) & StorageTmp->
-               mteTriggerThresholdDeltaFallingEventOwner, var_val,
-               var_val_len);
+        StorageTmp->mteTriggerThresholdDeltaFallingEventOwner =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerThresholdDeltaFallingEventOwnerLen =
             var_val_len;
         break;
@@ -1670,8 +1668,8 @@
          */
         tmpvar = StorageTmp->mteTriggerThresholdDeltaFallingEvent;
         tmplen = StorageTmp->mteTriggerThresholdDeltaFallingEventLen;
-        memdup((u_char **) & StorageTmp->
-               mteTriggerThresholdDeltaFallingEvent, var_val, var_val_len);
+        StorageTmp->mteTriggerThresholdDeltaFallingEvent =
+            netsnmp_memdup(var_val, var_val_len);
         StorageTmp->mteTriggerThresholdDeltaFallingEventLen = var_val_len;
         break;
 
diff --git a/agent/mibgroup/disman/ping/pingCtlTable.c b/agent/mibgroup/disman/ping/pingCtlTable.c
index b9add8f..87b09ef 100644
--- a/agent/mibgroup/disman/ping/pingCtlTable.c
+++ b/agent/mibgroup/disman/ping/pingCtlTable.c
@@ -1453,9 +1453,10 @@
 
 	    StorageNew->pingResultsLastGoodProbe_time = timep;
             free(StorageNew->pingResultsLastGoodProbe);
-            memdup(&StorageNew->pingResultsLastGoodProbe,
-		date_n_time(&timep,
-		    &StorageNew->pingResultsLastGoodProbeLen), 11);
+            StorageNew->pingResultsLastGoodProbe =
+                netsnmp_memdup(date_n_time(&timep,
+                                      &StorageNew->pingResultsLastGoodProbeLen),
+                               11);
 
             temp = SNMP_MALLOC_STRUCT(pingProbeHistoryTable_data);
 
@@ -1489,8 +1490,10 @@
             temp->pingProbeHistoryLastRC = 0;
 
 	    temp->pingProbeHistoryTime_time = timep;
-	    memdup(&temp->pingProbeHistoryTime,
-		date_n_time(&timep, &temp->pingProbeHistoryTimeLen), 11);
+            temp->pingProbeHistoryTime = 
+                netsnmp_memdup(date_n_time(&timep,
+                                           &temp->pingProbeHistoryTimeLen),
+                               11);
 
             if (StorageNew->pingResultsSendProbes == 1)
                 item->pingProbeHis = temp;
@@ -1568,8 +1571,9 @@
         temp->pingProbeHistoryLastRC = 1;
 
 	temp->pingProbeHistoryTime_time = timep;
-	memdup(&temp->pingProbeHistoryTime,
-	    date_n_time(&timep, &temp->pingProbeHistoryTimeLen), 11);
+	temp->pingProbeHistoryTime =
+            netsnmp_memdup(date_n_time(&timep, &temp->pingProbeHistoryTimeLen),
+                           11);
 
         if (StorageNew->pingResultsSendProbes == 1)
             item->pingProbeHis = temp;
@@ -5027,8 +5031,10 @@
                     temp->pingProbeHistoryLastRC = 1;
 
 		    temp->pingProbeHistoryTime_time = timep;
-		    memdup(&temp->pingProbeHistoryTime,
-			date_n_time(&timep, &temp->pingProbeHistoryTimeLen), 11);
+                    temp->pingProbeHistoryTime =
+                        netsnmp_memdup(date_n_time(&timep,
+                                               &temp->pingProbeHistoryTimeLen),
+                                       11);
 
                     if (StorageNew->pingResultsSendProbes == 1)
                         item->pingProbeHis = temp;
@@ -5320,8 +5326,10 @@
 
     StorageNew->pingResultsLastGoodProbe_time = timep;
     free(StorageNew->pingResultsLastGoodProbe);
-    memdup(&StorageNew->pingResultsLastGoodProbe,
-	date_n_time(&timep, &StorageNew->pingResultsLastGoodProbeLen), 11);
+    StorageNew->pingResultsLastGoodProbe =
+        netsnmp_memdup(date_n_time(&timep,
+                                   &StorageNew->pingResultsLastGoodProbeLen),
+                       11);
 
     /* ProbeHistory               */
     if (item->pingCtlMaxRows != 0) {
@@ -5356,8 +5364,9 @@
         temp->pingProbeHistoryLastRC = 0;
 
 	temp->pingProbeHistoryTime_time = timep;
-	memdup(&temp->pingProbeHistoryTime,
-	    date_n_time(&timep, &temp->pingProbeHistoryTimeLen), 11);
+	temp->pingProbeHistoryTime =
+            netsnmp_memdup(date_n_time(&timep, &temp->pingProbeHistoryTimeLen),
+                           11);
 
         if (StorageNew->pingResultsSendProbes == 1)
             item->pingProbeHis = temp;
diff --git a/agent/mibgroup/disman/traceroute/traceRouteCtlTable.c b/agent/mibgroup/disman/traceroute/traceRouteCtlTable.c
index 04143eb..b925c5e 100644
--- a/agent/mibgroup/disman/traceroute/traceRouteCtlTable.c
+++ b/agent/mibgroup/disman/traceroute/traceRouteCtlTable.c
@@ -4480,7 +4480,7 @@
                             if (old_HopsAddress[k] == NULL) {
                                 exit(1);
                             }
-                            memdup((u_char **) & old_HopsAddress[k],
+                            old_HopsAddress[k] = netsnmp_memdup(
                                    StorageTmp->traceRouteHopsIpTgtAddress,
                                    StorageTmp->
                                    traceRouteHopsIpTgtAddressLen + 1);
@@ -4767,9 +4767,10 @@
                     temp_his->traceRouteProbeHistoryLastRC = 0;
 
 		    temp_his->traceRouteProbeHistoryTime_time = timep;
-                    memdup(&temp_his->traceRouteProbeHistoryTime,
-                        date_n_time(&timep,
-			    &temp_his->traceRouteProbeHistoryTimeLen), 11);
+                    temp_his->traceRouteProbeHistoryTime =
+                        netsnmp_memdup(date_n_time(&timep,
+                                      &temp_his->traceRouteProbeHistoryTimeLen),
+                                       11);
                     if (probe == 0)
                         item->traceRouteProbeHis = temp_his;
                     else {
@@ -4843,9 +4844,10 @@
                     current->traceRouteHopsSentProbes = probe + 1;
                     current->traceRouteHopsProbeResponses = responseProbe;
 		    current->traceRouteHopsLastGoodProbe_time = timep;
-                    memdup(&current->traceRouteHopsLastGoodProbe,
-                        date_n_time(&timep,
-			    &current->traceRouteHopsLastGoodProbeLen), 11);
+                    current->traceRouteHopsLastGoodProbe =
+                        netsnmp_memdup(date_n_time(&timep,
+                                      &current->traceRouteHopsLastGoodProbeLen),
+                                       11);
                 }
 
                 (void) fflush(stdout);
@@ -4864,9 +4866,11 @@
                         StorageResults->traceRouteResultsTestSuccesses + 1;
 
 		    StorageResults->traceRouteResultsLastGoodPath_time = timep;
-                    memdup(&StorageResults->traceRouteResultsLastGoodPath,
-                        date_n_time(&timep,
-			    &StorageResults->traceRouteResultsLastGoodPathLen), 11);
+                    StorageResults->traceRouteResultsLastGoodPath =
+                        netsnmp_memdup(date_n_time(&timep,
+                                              &StorageResults->
+                                              traceRouteResultsLastGoodPathLen),
+                                       11);
                     if ((item->
                          traceRouteCtlTrapGeneration[0] &
                          TRACEROUTETRAPGENERATION_TESTCOMPLETED) != 0) {
@@ -5164,7 +5168,7 @@
                             if (old_HopsAddress[k] == NULL) {
                                 exit(1);
                             }
-                            memdup((u_char **) & old_HopsAddress[k],
+                            old_HopsAddress[k] = netsnmp_memdup(
                                    StorageTmp->traceRouteHopsIpTgtAddress,
                                    StorageTmp->
                                    traceRouteHopsIpTgtAddressLen + 1);
@@ -5401,7 +5405,7 @@
                     temp_his->traceRouteProbeHistoryLastRC = 0;
 
 		    temp_his->traceRouteProbeHistoryTime_time = timep;
-                    memdup(&temp_his->traceRouteProbeHistoryTime,
+                    temp_his->traceRouteProbeHistoryTime = netsnmp_memdup(
                         date_n_time(&timep,
 			    &temp_his->traceRouteProbeHistoryTimeLen), 11);
 
@@ -5477,8 +5481,8 @@
                     current->traceRouteHopsSentProbes = probe + 1;
                     current->traceRouteHopsProbeResponses = responseProbe;
 		    current->traceRouteHopsLastGoodProbe_time = timep;
-                    memdup(&current->traceRouteHopsLastGoodProbe,
-                        date_n_time(&timep,
+                    current->traceRouteHopsLastGoodProbe = 
+                        netsnmp_memdup(date_n_time(&timep,
 			    &current->traceRouteHopsLastGoodProbeLen), 11);
 
                     snmp_free_varbind(vars_hops);
@@ -5501,9 +5505,11 @@
                     StorageResults->traceRouteResultsTestSuccesses =
                         StorageResults->traceRouteResultsTestSuccesses + 1;
 		    StorageResults->traceRouteResultsLastGoodPath_time = timep;
-                    memdup(&StorageResults->traceRouteResultsLastGoodPath,
-                        date_n_time(&timep,
-			    &StorageResults->traceRouteResultsLastGoodPathLen), 11);
+                    StorageResults->traceRouteResultsLastGoodPath =
+                        netsnmp_memdup(date_n_time(&timep,
+                                                   &StorageResults->
+                                              traceRouteResultsLastGoodPathLen),
+                                       11);
                     if ((item->
                          traceRouteCtlTrapGeneration[0] &
                          TRACEROUTETRAPGENERATION_TESTCOMPLETED) != 0) {
diff --git a/agent/mibgroup/examples/delayed_instance.c b/agent/mibgroup/examples/delayed_instance.c
index ea59502..5d54569 100644
--- a/agent/mibgroup/examples/delayed_instance.c
+++ b/agent/mibgroup/examples/delayed_instance.c
@@ -195,8 +195,7 @@
         /*
          * store old value for UNDO support in the future. 
          */
-        memdup((u_char **) & delay_time_cache,
-               (u_char *) & delay_time, sizeof(delay_time));
+        delay_time_cache = netsnmp_memdup(&delay_time, sizeof(delay_time));
 
         /*
          * malloc failed 
diff --git a/agent/mibgroup/examples/netSnmpHostsTable.c b/agent/mibgroup/examples/netSnmpHostsTable.c
index f2aa0c7..8ea2d03 100644
--- a/agent/mibgroup/examples/netSnmpHostsTable.c
+++ b/agent/mibgroup/examples/netSnmpHostsTable.c
@@ -259,8 +259,7 @@
                     if (retval) {
                         ui = SNMP_MALLOC_STRUCT(undoInfo);
                         ui->len = retval_len;
-                        memdup((u_char **) & ui->ptr,
-                               (u_char *) retval, ui->len);
+                        ui->ptr = netsnmp_memdup(retval, ui->len);
                     }
 
                     /** check the new value, possibly against the
@@ -298,8 +297,7 @@
                     if (retval) {
                         ui = SNMP_MALLOC_STRUCT(undoInfo);
                         ui->len = retval_len;
-                        memdup((u_char **) & ui->ptr,
-                               (u_char *) retval, ui->len);
+                        ui->ptr = netsnmp_memdup(retval, ui->len);
                     }
 
                     /** check the new value, possibly against the
@@ -336,8 +334,7 @@
                     if (retval) {
                         ui = SNMP_MALLOC_STRUCT(undoInfo);
                         ui->len = retval_len;
-                        memdup((u_char **) & ui->ptr,
-                               (u_char *) retval, ui->len);
+                        ui->ptr = netsnmp_memdup(retval, ui->len);
                     }
 
                     /** check the new value, possibly against the
@@ -374,8 +371,7 @@
                     if (retval) {
                         ui = SNMP_MALLOC_STRUCT(undoInfo);
                         ui->len = retval_len;
-                        memdup((u_char **) & ui->ptr,
-                               (u_char *) retval, ui->len);
+                        ui->ptr = netsnmp_memdup(retval, ui->len);
                     }
 
                     /** check the new value, possibly against the
diff --git a/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c b/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c
index 6828ab2..23b50d0 100644
--- a/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c
+++ b/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c
@@ -1828,7 +1828,7 @@
     register_config_handler(NULL, row_token,
                             _ifXTable_container_row_restore, NULL, NULL);
     netsnmp_assert(container);
-    memdup((u_char **)&container_p, &container, sizeof(container));
+    container_p = netsnmp_memdup(&container, sizeof(container));
     netsnmp_assert(container_p);
     rc = snmp_register_callback(SNMP_CALLBACK_LIBRARY,
                                 SNMP_CALLBACK_STORE_DATA,
diff --git a/agent/mibgroup/ip-mib/ip_scalars.c b/agent/mibgroup/ip-mib/ip_scalars.c
index c8cc88a..9096269 100644
--- a/agent/mibgroup/ip-mib/ip_scalars.c
+++ b/agent/mibgroup/ip-mib/ip_scalars.c
@@ -141,8 +141,7 @@
                                           SNMP_ERR_NOCREATION);
             } else {
                 u_long *value_save;
-                memdup((u_char **) & value_save, (u_char *) &value,
-                       sizeof(value));
+                value_save = netsnmp_memdup(&value, sizeof(value));
                 if ( NULL == value_save )
                     netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_RESOURCEUNAVAILABLE);
                 else
@@ -241,8 +240,7 @@
                                           SNMP_ERR_NOCREATION);
             } else {
                 u_long *value_save;
-                memdup((u_char **) & value_save, (u_char *) &value,
-                       sizeof(value));
+                value_save = netsnmp_memdup(&value, sizeof(value));
                 if ( NULL == value_save )
                     netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_RESOURCEUNAVAILABLE);
                 else
@@ -346,8 +344,8 @@
         }
         else {
             u_long *value_save;
-            memdup((u_char **) & value_save, (u_char *) &value,
-                   sizeof(value));
+
+            value_save = netsnmp_memdup(&value, sizeof(value));
             if ( NULL == value_save ) {
                 netsnmp_set_request_error(reqinfo, requests,
                                           SNMP_ERR_RESOURCEUNAVAILABLE);
diff --git a/agent/mibgroup/mibII/ipCidrRouteTable.c b/agent/mibgroup/mibII/ipCidrRouteTable.c
index c9ad6e7..8609bb0 100644
--- a/agent/mibgroup/mibII/ipCidrRouteTable.c
+++ b/agent/mibgroup/mibII/ipCidrRouteTable.c
@@ -655,8 +655,7 @@
                     if (retval) {
                         ui = SNMP_MALLOC_STRUCT(undoInfo);
                         ui->len = retval_len;
-                        memdup((u_char **) & ui->ptr,
-                               (u_char *) retval, ui->len);
+                        ui->ptr = netsnmp_memdup(retval, ui->len);
                         netsnmp_oid_stash_add_data(&undoStorage,
                                                    suffix, suffix_len, ui);
                     }
@@ -672,8 +671,7 @@
                     if (retval) {
                         ui = SNMP_MALLOC_STRUCT(undoInfo);
                         ui->len = retval_len;
-                        memdup((u_char **) & ui->ptr,
-                               (u_char *) retval, ui->len);
+                        ui->ptr = netsnmp_memdup(retval, ui->len);
                         netsnmp_oid_stash_add_data(&undoStorage,
                                                    suffix, suffix_len, ui);
                     }
@@ -689,8 +687,7 @@
                     if (retval) {
                         ui = SNMP_MALLOC_STRUCT(undoInfo);
                         ui->len = retval_len;
-                        memdup((u_char **) & ui->ptr,
-                               (u_char *) retval, ui->len);
+                        ui->ptr = netsnmp_memdup(retval, ui->len);
                         netsnmp_oid_stash_add_data(&undoStorage,
                                                    suffix, suffix_len, ui);
                     }
@@ -707,8 +704,7 @@
                     if (retval) {
                         ui = SNMP_MALLOC_STRUCT(undoInfo);
                         ui->len = retval_len;
-                        memdup((u_char **) & ui->ptr,
-                               (u_char *) retval, ui->len);
+                        ui->ptr = netsnmp_memdup(retval, ui->len);
                         netsnmp_oid_stash_add_data(&undoStorage,
                                                    suffix, suffix_len, ui);
                     }
@@ -724,8 +720,7 @@
                     if (retval) {
                         ui = SNMP_MALLOC_STRUCT(undoInfo);
                         ui->len = retval_len;
-                        memdup((u_char **) & ui->ptr,
-                               (u_char *) retval, ui->len);
+                        ui->ptr = netsnmp_memdup(retval, ui->len);
                         netsnmp_oid_stash_add_data(&undoStorage,
                                                    suffix, suffix_len, ui);
                     }
@@ -741,8 +736,7 @@
                     if (retval) {
                         ui = SNMP_MALLOC_STRUCT(undoInfo);
                         ui->len = retval_len;
-                        memdup((u_char **) & ui->ptr,
-                               (u_char *) retval, ui->len);
+                        ui->ptr = netsnmp_memdup(retval, ui->len);
                         netsnmp_oid_stash_add_data(&undoStorage,
                                                    suffix, suffix_len, ui);
                     }
@@ -758,8 +752,7 @@
                     if (retval) {
                         ui = SNMP_MALLOC_STRUCT(undoInfo);
                         ui->len = retval_len;
-                        memdup((u_char **) & ui->ptr,
-                               (u_char *) retval, ui->len);
+                        ui->ptr = netsnmp_memdup(retval, ui->len);
                         netsnmp_oid_stash_add_data(&undoStorage,
                                                    suffix, suffix_len, ui);
                     }
@@ -775,8 +768,7 @@
                     if (retval) {
                         ui = SNMP_MALLOC_STRUCT(undoInfo);
                         ui->len = retval_len;
-                        memdup((u_char **) & ui->ptr,
-                               (u_char *) retval, ui->len);
+                        ui->ptr = netsnmp_memdup(retval, ui->len);
                         netsnmp_oid_stash_add_data(&undoStorage,
                                                    suffix, suffix_len, ui);
                     }
@@ -792,8 +784,7 @@
                     if (retval) {
                         ui = SNMP_MALLOC_STRUCT(undoInfo);
                         ui->len = retval_len;
-                        memdup((u_char **) & ui->ptr,
-                               (u_char *) retval, ui->len);
+                        ui->ptr = netsnmp_memdup(retval, ui->len);
                         netsnmp_oid_stash_add_data(&undoStorage,
                                                    suffix, suffix_len, ui);
                     }
@@ -809,8 +800,7 @@
                     if (retval) {
                         ui = SNMP_MALLOC_STRUCT(undoInfo);
                         ui->len = retval_len;
-                        memdup((u_char **) & ui->ptr,
-                               (u_char *) retval, ui->len);
+                        ui->ptr = netsnmp_memdup(retval, ui->len);
                         netsnmp_oid_stash_add_data(&undoStorage,
                                                    suffix, suffix_len, ui);
                     }
diff --git a/agent/mibgroup/notification/snmpNotifyFilterProfileTable.c b/agent/mibgroup/notification/snmpNotifyFilterProfileTable.c
index b12cdc8..e9b11d3 100644
--- a/agent/mibgroup/notification/snmpNotifyFilterProfileTable.c
+++ b/agent/mibgroup/notification/snmpNotifyFilterProfileTable.c
@@ -664,8 +664,8 @@
                 SNMP_MALLOC_STRUCT(snmpNotifyFilterProfileTable_data);
             if (StorageNew == NULL)
                 return SNMP_ERR_GENERR;
-            memdup((u_char **) & (StorageNew->snmpTargetParamsName),
-                   vars->val.string, vars->val_len);
+            StorageNew->snmpTargetParamsName =
+                netsnmp_memdup(vars->val.string, vars->val_len);
             StorageNew->snmpTargetParamsNameLen = vars->val_len;
             StorageNew->snmpNotifyFilterProfileStorType = ST_NONVOLATILE;
 
diff --git a/agent/mibgroup/notification/snmpNotifyTable.c b/agent/mibgroup/notification/snmpNotifyTable.c
index 5c369d7..91adb2f 100644
--- a/agent/mibgroup/notification/snmpNotifyTable.c
+++ b/agent/mibgroup/notification/snmpNotifyTable.c
@@ -326,7 +326,7 @@
         return 0;
     }
     ptr = snmpTargetAddrTable_create();
-    memdup((u_char**)&ptr->nameData, buf, bufLen);
+    ptr->nameData = netsnmp_memdup(buf, bufLen);
     ptr->nameLen = bufLen;
     memcpy(ptr->tDomain, t->domain, t->domain_length * sizeof(oid));
     ptr->tDomainLen = t->domain_length;
diff --git a/agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.c b/agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.c
index ed3beaa..4040e3f 100644
--- a/agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.c
+++ b/agent/mibgroup/snmp-notification-mib/snmpNotifyFilterTable/snmpNotifyFilterTable_interface.c
@@ -2044,7 +2044,7 @@
     register_config_handler(NULL, row_token,
                             _snmpNotifyFilterTable_container_row_restore,
                             NULL, NULL);
-    memdup((u_char **)&container_p, &container, sizeof(container));
+    container_p = netsnmp_memdup(&container, sizeof(container));
     netsnmp_assert(container_p);
     rc = snmp_register_callback(SNMP_CALLBACK_LIBRARY,
                                 SNMP_CALLBACK_STORE_DATA,
diff --git a/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_set.c b/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_set.c
index 8536105..567d20e 100644
--- a/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_set.c
+++ b/agent/mibgroup/snmp-usm-dh-objects-mib/usmDHUserKeyTable/usmDHUserKeyTable_data_set.c
@@ -100,7 +100,7 @@
          * copy right most bits, per the object requirements 
          */
         SNMP_FREE(*replkey);
-        memdup(replkey, key + key_len - replkey_size, replkey_size);
+        *replkey = netsnmp_memdup(key + key_len - replkey_size, replkey_size);
 
         return MFD_SUCCESS;
     }
@@ -585,8 +585,8 @@
     undouser = rowreq_ctx->undo;
 
     undouser->authKeyLen = rowreq_ctx->data->authKeyLen;
-    memdup(&undouser->authKey, rowreq_ctx->data->authKey,
-           rowreq_ctx->data->authKeyLen);
+    undouser->authKey = netsnmp_memdup(rowreq_ctx->data->authKey,
+                                       rowreq_ctx->data->authKeyLen);
 
     return MFD_SUCCESS;
 }                               /* usmDHUserAuthKeyChange_undo_setup */
@@ -970,8 +970,8 @@
     undouser = rowreq_ctx->undo;
 
     undouser->privKeyLen = rowreq_ctx->data->privKeyLen;
-    memdup(&undouser->privKey, rowreq_ctx->data->privKey,
-           rowreq_ctx->data->privKeyLen);
+    undouser->privKey = netsnmp_memdup(rowreq_ctx->data->privKey,
+                                       rowreq_ctx->data->privKeyLen);
 
     return MFD_SUCCESS;
 }                               /* usmDHUserPrivKeyChange_undo_setup */
diff --git a/agent/mibgroup/snmpv3/usmUser.c b/agent/mibgroup/snmpv3/usmUser.c
index 41c525a..9f0503d 100644
--- a/agent/mibgroup/snmpv3/usmUser.c
+++ b/agent/mibgroup/snmpv3/usmUser.c
@@ -901,7 +901,7 @@
         resetOnFail = 1;
         oldkey = uptr->authKey;
         oldkeylen = uptr->authKeyLen;
-        memdup(&uptr->authKey, buf, buflen);
+        uptr->authKey = netsnmp_memdup(buf, buflen);
         if (uptr->authKey == NULL) {
             return SNMP_ERR_RESOURCEUNAVAILABLE;
         }
@@ -1149,7 +1149,7 @@
         resetOnFail = 1;
         oldkey = uptr->privKey;
         oldkeylen = uptr->privKeyLen;
-        memdup(&uptr->privKey, buf, buflen);
+        uptr->privKey = netsnmp_memdup(buf, buflen);
         if (uptr->privKey == NULL) {
             return SNMP_ERR_RESOURCEUNAVAILABLE;
         }
diff --git a/agent/mibgroup/testhandler.c b/agent/mibgroup/testhandler.c
index 8951319..f7468f0 100644
--- a/agent/mibgroup/testhandler.c
+++ b/agent/mibgroup/testhandler.c
@@ -346,8 +346,7 @@
         /*
          * store old info for undo later 
          */
-        memdup((u_char **) & accesses_cache,
-               (u_char *) & accesses, sizeof(accesses));
+        accesses_cache = netsnmp_memdup(&accesses, sizeof(accesses));
         if (accesses_cache == NULL) {
             netsnmp_set_request_error(reqinfo, requests,
                                       SNMP_ERR_RESOURCEUNAVAILABLE);
diff --git a/agent/mibgroup/utilities/iquery.c b/agent/mibgroup/utilities/iquery.c
index e2aea74..860590f 100644
--- a/agent/mibgroup/utilities/iquery.c
+++ b/agent/mibgroup/utilities/iquery.c
@@ -85,7 +85,7 @@
 
     if ( s && s->securityEngineIDLen == 0 ) {
         elen = snmpv3_get_engineID(eID, sizeof(eID));
-        memdup( &(s->securityEngineID), eID, elen );
+        s->securityEngineID = netsnmp_memdup(eID, elen);
         s->securityEngineIDLen = elen;
     }
     return SNMPERR_SUCCESS;
@@ -189,13 +189,13 @@
         ss->version       = version;
         ss->securityModel = secModel;
         ss->securityLevel = secLevel;
-        memdup( &(ss->securityEngineID), engineID, engIDLen );
+        ss->securityEngineID = netsnmp_memdup(engineID, engIDLen);
         ss->securityEngineIDLen = engIDLen;
         if ( version == SNMP_VERSION_3 ) {
             ss->securityNameLen = strlen(secName);
-            memdup((u_char**)&(ss->securityName), (u_char*)secName, ss->securityNameLen);
+            ss->securityName = netsnmp_memdup(secName, ss->securityNameLen);
         } else {
-            memdup( &(ss->community), secName, strlen(secName));
+            ss->community = netsnmp_memdup(secName, strlen(secName));
             ss->community_len = strlen(secName);
         }
         ss->myvoid = netsnmp_check_outstanding_agent_requests;
diff --git a/agent/mibgroup/utilities/override.c b/agent/mibgroup/utilities/override.c
index 2b083a9..48ac281 100644
--- a/agent/mibgroup/utilities/override.c
+++ b/agent/mibgroup/utilities/override.c
@@ -57,9 +57,9 @@
         break;
 
     case MODE_SET_RESERVE2:
-        if (memdup((u_char **) &data->set_space,
-                   requests->requestvb->val.string,
-                   requests->requestvb->val_len) == SNMPERR_GENERR)
+        data->set_space = netsnmp_memdup(requests->requestvb->val.string,
+                                         requests->requestvb->val_len);
+        if (!data->set_space)
             netsnmp_set_request_error(reqinfo, requests,
                                       SNMP_ERR_RESOURCEUNAVAILABLE);
         break;
diff --git a/apps/snmptrapd_sql.c b/apps/snmptrapd_sql.c
index 90d8e04..671e542 100644
--- a/apps/snmptrapd_sql.c
+++ b/apps/snmptrapd_sql.c
@@ -882,7 +882,7 @@
                                &buf_val_len_t, 1, var, 0, 0, 0);
         sqlvb->val_len = buf_val_len_t;
 #else
-        memdup(&sqlvb->val, var->val.string, var->val_len);
+        sqlvb->val = netsnmp_memdup(var->val.string, var->val_len);
         sqlvb->val_len = var->val_len;
 #endif
 
diff --git a/include/net-snmp/library/tools.h b/include/net-snmp/library/tools.h
index bd3b0b8..2634b34 100644
--- a/include/net-snmp/library/tools.h
+++ b/include/net-snmp/library/tools.h
@@ -207,7 +207,7 @@
     u_char         *malloc_random(size_t * size);
     u_char         *malloc_zero(size_t size);
     NETSNMP_IMPORT
-    int             memdup(u_char ** to, const void * from, size_t size);
+    void           *netsnmp_memdup(const void * from, size_t size);
 
     void            netsnmp_check_definedness(const void *packet,
                                               size_t length);
diff --git a/local/mib2c.iterate_access.conf b/local/mib2c.iterate_access.conf
index c211fd3..a38ac20 100644
--- a/local/mib2c.iterate_access.conf
+++ b/local/mib2c.iterate_access.conf
@@ -292,8 +292,7 @@
                                 if (retval) {
                                     ui = SNMP_MALLOC_STRUCT(undoInfo);
                                     ui->len = retval_len;
-                                    memdup((u_char **) &ui->ptr,
-                                           retval, ui->len);
+                                    ui->ptr = netsnmp_memdup(retval, ui->len);
                                 }
 
                     /** check the new value, possibly against the
diff --git a/perl/SNMP/SNMP.xs b/perl/SNMP/SNMP.xs
index 250a0b0..437cecd 100644
--- a/perl/SNMP/SNMP.xs
+++ b/perl/SNMP/SNMP.xs
@@ -2689,9 +2689,9 @@
            }
            if (session.securityLevel >= SNMP_SEC_LEVEL_AUTHNOPRIV) {
                if (auth_localized_key_len) {
-                   memdup(&session.securityAuthLocalKey,
-                          (u_char*)auth_localized_key,
-                          auth_localized_key_len);
+                   session.securityAuthLocalKey =
+                       netsnmp_memdup(auth_localized_key,
+                                      auth_localized_key_len);
                    session.securityAuthLocalKeyLen = auth_localized_key_len;
                } else if (auth_master_key_len) {
                    session.securityAuthKeyLen =
@@ -2739,9 +2739,9 @@
            }
            if (session.securityLevel >= SNMP_SEC_LEVEL_AUTHPRIV) {
                if (priv_localized_key_len) {
-                   memdup(&session.securityPrivLocalKey,
-                          (u_char*)priv_localized_key,
-                          priv_localized_key_len);
+                   session.securityPrivLocalKey =
+                       netsnmp_memdup(priv_localized_key,
+                                      priv_localized_key_len);
                    session.securityPrivLocalKeyLen = priv_localized_key_len;
                } else if (priv_master_key_len) {
                    session.securityPrivKeyLen =
diff --git a/python/netsnmp/client_intf.c b/python/netsnmp/client_intf.c
index 512f999..8b8805d 100644
--- a/python/netsnmp/client_intf.c
+++ b/python/netsnmp/client_intf.c
@@ -833,7 +833,7 @@
                 ret = FAILURE;
                 addr = 0;
             }
-            memdup((u_char **)&vars->val.integer, &addr, sizeof(addr));
+            vars->val.integer = netsnmp_memdup(&addr, sizeof(addr));
             vars->val_len = sizeof(addr);
         }
         break;
diff --git a/snmplib/md5.c b/snmplib/md5.c
index fbfd43f..1ce0727 100644
--- a/snmplib/md5.c
+++ b/snmplib/md5.c
@@ -469,7 +469,7 @@
          * this relies on the ability to use integer math and thus we
          * must rely on data that aligns on 32-bit-word-boundries 
          */
-        memdup(&newdata, data, len);
+        newdata = netsnmp_memdup(data, len);
         cp = newdata;
     } else {
         cp = data;
diff --git a/snmplib/scapi.c b/snmplib/scapi.c
index dcb7af1..16ac829 100644
--- a/snmplib/scapi.c
+++ b/snmplib/scapi.c
@@ -1215,7 +1215,7 @@
          * this relies on the ability to use integer math and thus we
          * must rely on data that aligns on 32-bit-word-boundries 
          */
-        memdup(&newdata, data, len);
+        newdata = netsnmp_memdup(data, len);
         cp = newdata;
     } else {
         cp = data;
@@ -1313,7 +1313,7 @@
          * this relies on the ability to use integer math and thus we
          * must rely on data that aligns on 32-bit-word-boundries 
          */
-        memdup(&newdata, data, len);
+        newdata = netsnmp_memdup(data, len);
         cp = newdata;
     } else {
         cp = data;
diff --git a/snmplib/snmp_api.c b/snmplib/snmp_api.c
index ba5ba83..a713399 100644
--- a/snmplib/snmp_api.c
+++ b/snmplib/snmp_api.c
@@ -1282,8 +1282,8 @@
     }
     pdu->securityLevel = SNMP_SEC_LEVEL_NOAUTH;
     pdu->securityModel = session->securityModel;
-    if (memdup(&pdu->contextEngineID, probeEngineID, probeEngineID_len) !=
-        SNMPERR_SUCCESS) {
+    pdu->contextEngineID = netsnmp_memdup(probeEngineID, probeEngineID_len);
+    if (!pdu->contextEngineID) {
         snmp_log(LOG_ERR, "failed to clone memory for rfc5343 probe\n");
         snmp_free_pdu(pdu);
         return SNMP_ERR_GENERR;
@@ -1310,18 +1310,20 @@
         ASN_OCTET_STR == response->variables->type  &&
         NULL != response->variables->val.string &&
         response->variables->val_len > 0) {
-        if (memdup(&session->contextEngineID,
-                   response->variables->val.string,
-                   response->variables->val_len) != SNMPERR_SUCCESS) {
+        session->contextEngineID =
+            netsnmp_memdup(response->variables->val.string,
+                           response->variables->val_len);
+        if (!session->contextEngineID) {
             snmp_log(LOG_ERR, "failed rfc5343 contextEngineID probing: memory allocation failed\n");
             return SNMP_ERR_GENERR;
         }
         
         /* technically there likely isn't a securityEngineID but just
            in case anyone goes looking we might as well have one */
-        if (memdup(&session->securityEngineID,
-                   response->variables->val.string,
-                   response->variables->val_len) != SNMPERR_SUCCESS) {
+        session->securityEngineID =
+            netsnmp_memdup(response->variables->val.string,
+                           response->variables->val_len);
+        if (!session->securityEngineID) {
             snmp_log(LOG_ERR, "failed rfc5343 securityEngineID probing: memory allocation failed\n");
             return SNMP_ERR_GENERR;
         }
diff --git a/snmplib/snmpksm.c b/snmplib/snmpksm.c
index 4c77465..7d30612 100644
--- a/snmplib/snmpksm.c
+++ b/snmplib/snmpksm.c
@@ -279,22 +279,18 @@
 {
     struct ksm_cache_entry *entry;
     int             bucket;
-    int             retval;
 
     entry = SNMP_MALLOC_STRUCT(ksm_cache_entry);
-
     if (!entry)
         return SNMPERR_MALLOC;
 
     entry->msgid = msgid;
     entry->auth_context = auth_context;
     entry->refcount = 1;
-
-    retval = memdup(&entry->secName, secName, secNameLen);
-
-    if (retval != SNMPERR_SUCCESS) {
+    entry->secName = netsnmp_memdup(secName, secNameLen);
+    if (secName && !entry->secName) {
         free(entry);
-        return retval;
+        return SNMPERR_GENERR;
     }
 
     entry->secNameLen = secNameLen;
diff --git a/snmplib/snmptsm.c b/snmplib/snmptsm.c
index bf4b612..42de682 100644
--- a/snmplib/snmptsm.c
+++ b/snmplib/snmptsm.c
@@ -151,8 +151,8 @@
        which was already copied by snmp_clone_pdu before handing it to
        us. */
 
-    memdup((u_char **) &newref->tmStateRef, oldref->tmStateRef,
-           sizeof(*oldref->tmStateRef));
+    newref->tmStateRef = netsnmp_memdup(oldref->tmStateRef,
+                                        sizeof(*oldref->tmStateRef));
     return SNMPERR_SUCCESS;
 }
 
@@ -367,11 +367,9 @@
     }
 
     /* put the transport state reference into the PDU for the transport */
-    if (SNMPERR_SUCCESS !=
-        memdup((u_char **) &parms->pdu->transport_data,
-               tmStateRef, sizeof(*tmStateRef))) {
+    parms->pdu->transport_data = netsnmp_memdup(tmStateRef, sizeof(*tmStateRef));
+    if (!parms->pdu->transport_data)
         snmp_log(LOG_ERR, "tsm: malloc failure\n");
-    }
     parms->pdu->transport_data_length = sizeof(*tmStateRef);
 
     if (tmStateRefLocal)
diff --git a/snmplib/snmpusm.c b/snmplib/snmpusm.c
index d8d8932..6a9cec3 100644
--- a/snmplib/snmpusm.c
+++ b/snmplib/snmpusm.c
@@ -2922,8 +2922,9 @@
         /*
          * copy in the engineID 
          */
-        if (memdup(&user->engineID, session->securityEngineID,
-                   session->securityEngineIDLen) != SNMPERR_SUCCESS) {
+        user->engineID = netsnmp_memdup(session->securityEngineID,
+                                        session->securityEngineIDLen);
+        if (session->securityEngineID && !user->engineID) {
             usm_free_user(user);
             return SNMPERR_GENERR;
         }
@@ -2970,8 +2971,9 @@
             && session->securityAuthLocalKeyLen != 0) {
             /* already localized key passed in.  use it */
             SNMP_FREE(user->authKey);
-            if (memdup(&user->authKey, session->securityAuthLocalKey,
-                       session->securityAuthLocalKeyLen) != SNMPERR_SUCCESS) {
+            user->authKey = netsnmp_memdup(session->securityAuthLocalKey,
+                                           session->securityAuthLocalKeyLen);
+            if (!user->authKey) {
                 usm_free_user(user);
                 return SNMPERR_GENERR;
             }
@@ -3017,8 +3019,9 @@
             && session->securityPrivLocalKeyLen != 0) {
             /* already localized key passed in.  use it */
             SNMP_FREE(user->privKey);
-            if (memdup(&user->privKey, session->securityPrivLocalKey,
-                       session->securityPrivLocalKeyLen) != SNMPERR_SUCCESS) {
+            user->privKey = netsnmp_memdup(session->securityPrivLocalKey,
+                                           session->securityPrivLocalKeyLen);
+            if (!user->privKey) {
                 usm_free_user(user);
                 return SNMPERR_GENERR;
             }
@@ -4512,7 +4515,8 @@
         /*
          * assume the same as the authentication key 
          */
-        memdup(&newuser->privKey, newuser->authKey, newuser->authKeyLen);
+        newuser->privKey = netsnmp_memdup(newuser->authKey,
+                                          newuser->authKeyLen);
         newuser->privKeyLen = newuser->authKeyLen;
     } else {
         cp = copy_nword(cp, buf, sizeof(buf));
diff --git a/snmplib/tools.c b/snmplib/tools.c
index 9bcb688..29e5fef 100644
--- a/snmplib/tools.c
+++ b/snmplib/tools.c
@@ -263,31 +263,26 @@
 }                               /* end malloc_random() */
 #endif /* NETSNMP_FEATURE_REMOVE_USM_SCAPI */
 
-/** Duplicates a memory block.
- *  Copies a existing memory location from a pointer to another, newly
-    malloced, pointer.
-
- *	@param to       Pointer to allocate and copy memory to.
- *      @param from     Pointer to copy memory from.
- *      @param size     Size of the data to be copied.
+/**
+ * Duplicates a memory block.
+ *
+ * @param[in] from Pointer to copy memory from.
+ * @param[in] size Size of the data to be copied.
  *      
- *	@return SNMPERR_SUCCESS	on success, SNMPERR_GENERR on failure.
+ * @return Pointer to the duplicated memory block, or NULL if memory allocation
+ * failed.
  */
-int
-memdup(u_char ** to, const void * from, size_t size)
+void *netsnmp_memdup(const void *from, size_t size)
 {
-    if (to == NULL)
-        return SNMPERR_GENERR;
-    if (from == NULL) {
-        *to = NULL;
-        return SNMPERR_SUCCESS;
-    }
-    if ((*to = (u_char *) malloc(size)) == NULL)
-        return SNMPERR_GENERR;
-    memcpy(*to, from, size);
-    return SNMPERR_SUCCESS;
+    void *to = NULL;
 
-}                               /* end memdup() */
+    if (from) {
+        to = malloc(size);
+        if (to)
+            memcpy(to, from, size);
+    }
+    return to;
+}                               /* end netsnmp_memdup() */
 
 #ifndef NETSNMP_FEATURE_REMOVE_NETSNMP_CHECK_DEFINEDNESS
 /**
diff --git a/snmplib/transports/snmpDTLSUDPDomain.c b/snmplib/transports/snmpDTLSUDPDomain.c
index 9c56d19..b7dc767 100644
--- a/snmplib/transports/snmpDTLSUDPDomain.c
+++ b/snmplib/transports/snmpDTLSUDPDomain.c
@@ -588,8 +588,8 @@
                buf, size);
         cachep->write_cache_len = newsize;
     } else {
-        if (SNMPERR_SUCCESS !=
-            memdup((u_char **) &cachep->write_cache, buf, size)) {
+        cachep->write_cache = netsnmp_memdup(buf, size);
+        if (!cachep->write_cache) {
             /* ack! malloc failure */
             /* XXX: free and close */
             return SNMPERR_GENERR;
diff --git a/snmplib/transports/snmpTLSTCPDomain.c b/snmplib/transports/snmpTLSTCPDomain.c
index a92091e..473d02c 100644
--- a/snmplib/transports/snmpTLSTCPDomain.c
+++ b/snmplib/transports/snmpTLSTCPDomain.c
@@ -134,8 +134,8 @@
     if (oldtlsdata->trust_cert)
         newtlsdata->trust_cert = strdup(oldtlsdata->trust_cert);
     if (oldtlsdata->addr)
-        memdup((u_char**)&newtlsdata->addr, oldtlsdata->addr,
-               sizeof(*oldtlsdata->addr));
+        newtlsdata->addr = netsnmp_memdup(oldtlsdata->addr,
+                                          sizeof(*oldtlsdata->addr));
 
     return 0;
 }