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

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

Conflicts:
	agent/helpers/old_api.c
	agent/helpers/table_dataset.c
	include/net-snmp/library/tools.h
	man/netsnmp_util.3
	snmplib/snmptsm.c
	snmplib/snmpusm.c
	win32/libsnmp_dll/libsnmp.def
diff --git a/agent/agent_trap.c b/agent/agent_trap.c
index 4c7a4d9..f5dbcca 100644
--- a/agent/agent_trap.c
+++ b/agent/agent_trap.c
@@ -929,7 +929,7 @@
             u_char          tmp[SPRINT_MAX_LEN];
 
             len = snmpv3_get_engineID(tmp, sizeof(tmp));
-            memdup(&pdu->securityEngineID, tmp, len);
+            pdu->securityEngineID = netsnmp_memdup(tmp, len);
             pdu->securityEngineIDLen = len;
         }
 
@@ -1258,7 +1258,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 658a96a..2d07b69 100644
--- a/agent/helpers/instance.c
+++ b/agent/helpers/instance.c
@@ -533,7 +533,7 @@
         /*
          * store old info for undo later 
          */
-        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);
@@ -652,7 +652,7 @@
         /*
          * store old info for undo later 
          */
-        memdup((u_char **) & it_save, (u_char *) it, sizeof(long));
+        it_save = netsnmp_memdup(it, sizeof(long));
         if (it_save == NULL) {
             netsnmp_set_request_error(reqinfo, requests,
                                       SNMP_ERR_RESOURCEUNAVAILABLE);
@@ -735,7 +735,7 @@
         /*
          * store old info for undo later 
          */
-        memdup((u_char **) & it_save, (u_char *) it, sizeof(int));
+        it_save = netsnmp_memdup(it, sizeof(int));
         if (it_save == NULL) {
             netsnmp_set_request_error(reqinfo, requests,
                                       SNMP_ERR_RESOURCEUNAVAILABLE);
@@ -851,7 +851,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);
@@ -951,7 +951,7 @@
         /*
          * store old info for undo later 
          */
-        memdup((u_char **) & it_save, (u_char *) it, sizeof(u_int));
+        it_save = netsnmp_memdup(it, sizeof(u_int));
         if (it_save == NULL) {
             netsnmp_set_request_error(reqinfo, requests,
                                       SNMP_ERR_RESOURCEUNAVAILABLE);
diff --git a/agent/helpers/old_api.c b/agent/helpers/old_api.c
index a42e904..fdc8bd6 100644
--- a/agent/helpers/old_api.c
+++ b/agent/helpers/old_api.c
@@ -80,9 +80,9 @@
         if (reginfo == NULL)
             return SNMP_ERR_GENERR;
 
-        memdup((u_char **) &vp,
-               (void *) (struct variable *) ((char *) var + varsize * i),
-               varsize);
+        vp = netsnmp_memdup((const struct variable *)
+                            ((const char *) var + varsize * i),
+                            varsize);
 
         reginfo->handler = get_old_api_handler();
         reginfo->handlerName = strdup(moduleName);
diff --git a/agent/helpers/table_data.c b/agent/helpers/table_data.c
index 88df5b1..c3a7f9e 100644
--- a/agent/helpers/table_data.c
+++ b/agent/helpers/table_data.c
@@ -74,8 +74,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 227cdef..2403b2f 100644
--- a/agent/helpers/table_dataset.c
+++ b/agent/helpers/table_dataset.c
@@ -212,16 +212,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;
@@ -296,8 +296,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 dea5219..cf166e3 100644
--- a/agent/helpers/table_tdata.c
+++ b/agent/helpers/table_tdata.c
@@ -104,8 +104,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/disman/expression/expExpressionTable.c b/agent/mibgroup/disman/expression/expExpressionTable.c
index 53ca52a..5aab952 100644
--- a/agent/mibgroup/disman/expression/expExpressionTable.c
+++ b/agent/mibgroup/disman/expression/expExpressionTable.c
@@ -560,8 +560,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;
 
@@ -735,8 +734,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 f61ac1f..fcadfe7 100644
--- a/agent/mibgroup/disman/expression/expObjectTable.c
+++ b/agent/mibgroup/disman/expression/expObjectTable.c
@@ -152,9 +152,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);
 
@@ -548,8 +547,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;
 
@@ -807,8 +805,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;
@@ -1071,8 +1069,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 786eee3..77dbe10 100644
--- a/agent/mibgroup/disman/mteObjectsTable.c
+++ b/agent/mibgroup/disman/mteObjectsTable.c
@@ -403,8 +403,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 32db0b8..137e097 100644
--- a/agent/mibgroup/disman/mteTriggerDeltaTable.c
+++ b/agent/mibgroup/disman/mteTriggerDeltaTable.c
@@ -217,8 +217,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 48f1fcd..c5761b5 100644
--- a/agent/mibgroup/disman/mteTriggerExistenceTable.c
+++ b/agent/mibgroup/disman/mteTriggerExistenceTable.c
@@ -250,8 +250,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;
 
@@ -342,8 +342,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;
 
@@ -434,8 +434,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;
 
@@ -526,8 +526,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;
 
@@ -618,8 +618,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;
 
@@ -709,8 +709,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 c260d12..5a2bd7b 100644
--- a/agent/mibgroup/disman/mteTriggerTable.c
+++ b/agent/mibgroup/disman/mteTriggerTable.c
@@ -228,9 +228,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;
@@ -1584,8 +1583,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;
 
@@ -1672,8 +1670,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;
 
@@ -1845,8 +1842,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;
 
@@ -2024,8 +2020,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;
 
@@ -2114,8 +2109,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;
 
@@ -2375,8 +2370,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;
 
@@ -2465,8 +2460,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;
 
@@ -3036,16 +3030,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",
@@ -3364,9 +3359,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 c99e175..28b33d8 100644
--- a/agent/mibgroup/disman/mteTriggerThresholdTable.c
+++ b/agent/mibgroup/disman/mteTriggerThresholdTable.c
@@ -750,8 +750,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;
 
@@ -842,8 +842,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;
 
@@ -934,8 +934,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;
 
@@ -1026,8 +1026,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;
 
@@ -1118,8 +1118,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;
 
@@ -1210,8 +1210,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;
 
@@ -1302,9 +1302,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;
@@ -1396,8 +1395,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;
 
@@ -1489,9 +1488,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;
@@ -1583,8 +1581,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 db473be..35218f8 100644
--- a/agent/mibgroup/disman/ping/pingCtlTable.c
+++ b/agent/mibgroup/disman/ping/pingCtlTable.c
@@ -1384,9 +1384,10 @@
                 StorageNew->pingResultsRttSumOfSquares + rtt * rtt;
 
 	    StorageNew->pingResultsLastGoodProbe_time = timep;
-            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);
 
@@ -1420,8 +1421,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;
@@ -1512,8 +1515,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;
@@ -4993,8 +4997,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;
@@ -5283,8 +5289,10 @@
     StorageNew->pingResultsRttSumOfSquares = *tsum2;
 
     StorageNew->pingResultsLastGoodProbe_time = timep;
-    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) {
@@ -5319,8 +5327,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 6cc9571..46fe97d 100644
--- a/agent/mibgroup/disman/traceroute/traceRouteCtlTable.c
+++ b/agent/mibgroup/disman/traceroute/traceRouteCtlTable.c
@@ -4482,7 +4482,7 @@
                             if (old_HopsAddress[k] == NULL) {
                                 exit(1);
                             }
-                            memdup((u_char **) & old_HopsAddress[k],
+                            old_HopsAddress[k] = netsnmp_memdup(
                                    StorageTmp->traceRouteHopsIpTgtAddress,
                                    StorageTmp->
                                    traceRouteHopsIpTgtAddressLen + 1);
@@ -4769,9 +4769,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 {
@@ -4845,9 +4846,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);
@@ -4866,9 +4868,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) {
@@ -5166,7 +5170,7 @@
                             if (old_HopsAddress[k] == NULL) {
                                 exit(1);
                             }
-                            memdup((u_char **) & old_HopsAddress[k],
+                            old_HopsAddress[k] = netsnmp_memdup(
                                    StorageTmp->traceRouteHopsIpTgtAddress,
                                    StorageTmp->
                                    traceRouteHopsIpTgtAddressLen + 1);
@@ -5403,7 +5407,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);
 
@@ -5479,8 +5483,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);
@@ -5503,9 +5507,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 45ef993..833a4f7 100644
--- a/agent/mibgroup/examples/delayed_instance.c
+++ b/agent/mibgroup/examples/delayed_instance.c
@@ -194,8 +194,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 3a1a428..b691a7f 100644
--- a/agent/mibgroup/examples/netSnmpHostsTable.c
+++ b/agent/mibgroup/examples/netSnmpHostsTable.c
@@ -254,8 +254,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
@@ -293,8 +292,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
@@ -331,8 +329,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
@@ -369,8 +366,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/ip-mib/ip_scalars.c b/agent/mibgroup/ip-mib/ip_scalars.c
index 7f6087d..78021a9 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
@@ -244,8 +243,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 172f284..099e39f 100644
--- a/agent/mibgroup/mibII/ipCidrRouteTable.c
+++ b/agent/mibgroup/mibII/ipCidrRouteTable.c
@@ -649,8 +649,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);
                     }
@@ -666,8 +665,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);
                     }
@@ -683,8 +681,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);
                     }
@@ -701,8 +698,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);
                     }
@@ -718,8 +714,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);
                     }
@@ -735,8 +730,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);
                     }
@@ -752,8 +746,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);
                     }
@@ -769,8 +762,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);
                     }
@@ -786,8 +778,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);
                     }
@@ -803,8 +794,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 0088e0c..c3fc363 100644
--- a/agent/mibgroup/notification/snmpNotifyFilterProfileTable.c
+++ b/agent/mibgroup/notification/snmpNotifyFilterProfileTable.c
@@ -649,8 +649,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/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 13c0595..891f9fc 100644
--- a/agent/mibgroup/snmpv3/usmUser.c
+++ b/agent/mibgroup/snmpv3/usmUser.c
@@ -883,7 +883,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;
         }
@@ -1133,7 +1133,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 193ca17..c0866dd 100644
--- a/agent/mibgroup/testhandler.c
+++ b/agent/mibgroup/testhandler.c
@@ -339,8 +339,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 d1f7efc..3beebc6 100644
--- a/agent/mibgroup/utilities/iquery.c
+++ b/agent/mibgroup/utilities/iquery.c
@@ -75,7 +75,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;
@@ -175,13 +175,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 deadf0e..d50b6e4 100644
--- a/agent/mibgroup/utilities/override.c
+++ b/agent/mibgroup/utilities/override.c
@@ -56,9 +56,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 ac17711..ce25423 100644
--- a/apps/snmptrapd_sql.c
+++ b/apps/snmptrapd_sql.c
@@ -879,7 +879,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 c2b6179..9ac4fa5 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);
 
     NETSNMP_IMPORT
     u_int           netsnmp_binary_to_hex(u_char ** dest, size_t *dest_len,
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 2417bc7..9c7fcb9 100644
--- a/perl/SNMP/SNMP.xs
+++ b/perl/SNMP/SNMP.xs
@@ -2688,9 +2688,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 =
@@ -2738,9 +2738,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 7bbd7bb..9f726f5 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 3409227..e42f6c6 100644
--- a/snmplib/scapi.c
+++ b/snmplib/scapi.c
@@ -1205,7 +1205,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;
@@ -1303,7 +1303,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 e900a23..e40bb1d 100644
--- a/snmplib/snmp_api.c
+++ b/snmplib/snmp_api.c
@@ -1257,8 +1257,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;
@@ -1285,18 +1285,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;
         }
@@ -1895,8 +1897,9 @@
         /*
          * copy in the engineID 
          */
-        if (memdup(&user->engineID, session->securityEngineID,
-                   session->securityEngineIDLen) != SNMPERR_SUCCESS) {
+        user->engineID = netsnmp_memdup(session->securityEngineID,
+                                        session->securityEngineIDLen);
+        if (!user->engineID) {
             usm_free_user(user);
             return SNMPERR_GENERR;
         }
@@ -1943,8 +1946,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;
             }
@@ -1990,8 +1994,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;
             }
diff --git a/snmplib/snmpksm.c b/snmplib/snmpksm.c
index 79e54f4..4b64003 100644
--- a/snmplib/snmpksm.c
+++ b/snmplib/snmpksm.c
@@ -269,22 +269,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 955744a..a38c632 100644
--- a/snmplib/snmptsm.c
+++ b/snmplib/snmptsm.c
@@ -141,8 +141,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;
 }
 
@@ -357,11 +357,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/snmpv3.c b/snmplib/snmpv3.c
index 7712b8b..8b49362 100644
--- a/snmplib/snmpv3.c
+++ b/snmplib/snmpv3.c
@@ -950,7 +950,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 f491ee1..f9951b9 100644
--- a/snmplib/tools.c
+++ b/snmplib/tools.c
@@ -231,31 +231,26 @@
 
 }                               /* end malloc_random() */
 
-/** 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() */
 
 /** copies a (possible) unterminated string of a given length into a
  *  new buffer and null terminates it as well (new buffer MAY be one
diff --git a/snmplib/transports/snmpDTLSUDPDomain.c b/snmplib/transports/snmpDTLSUDPDomain.c
index 4856b2b..98c26f8 100644
--- a/snmplib/transports/snmpDTLSUDPDomain.c
+++ b/snmplib/transports/snmpDTLSUDPDomain.c
@@ -525,8 +525,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 86a0fdd..e380bd5 100644
--- a/snmplib/transports/snmpTLSTCPDomain.c
+++ b/snmplib/transports/snmpTLSTCPDomain.c
@@ -130,7 +130,7 @@
     if (oldtlsdata->trust_cert)
         newtlsdata->trust_cert = strdup(oldtlsdata->trust_cert);
     if (oldtlsdata->remote_addr)
-        memdup((u_char**)&newtlsdata->remote_addr, oldtlsdata->remote_addr,
+        newtlsdata->remote_addr = netsnmp_memdup(oldtlsdata->remote_addr,
                sizeof(netsnmp_indexed_addr_pair));
 
     return 0;