None of the DSO_METHOD's were handling anything except generic messages.
These are now processed inside DSO_ctrl() itself.
diff --git a/crypto/dso/dso_dl.c b/crypto/dso/dso_dl.c
index 69810fc..7a6770e 100644
--- a/crypto/dso/dso_dl.c
+++ b/crypto/dso/dso_dl.c
@@ -81,8 +81,8 @@
 static int dl_unbind_func(DSO *dso, char *symname, DSO_FUNC_TYPE symptr);
 static int dl_init(DSO *dso);
 static int dl_finish(DSO *dso);
-#endif
 static int dl_ctrl(DSO *dso, int cmd, long larg, void *parg);
+#endif
 
 static DSO_METHOD dso_meth_dl = {
 	"OpenSSL 'dl' shared library method",
@@ -95,7 +95,7 @@
 	NULL, /* unbind_var */
 	NULL, /* unbind_func */
 #endif
-	dl_ctrl,
+	NULL, /* ctrl */
 	NULL, /* init */
 	NULL  /* finish */
 	};
@@ -224,28 +224,4 @@
 	return((DSO_FUNC_TYPE)sym);
 	}
 
-static int dl_ctrl(DSO *dso, int cmd, long larg, void *parg)
-	{
-	if(dso == NULL)
-		{
-		DSOerr(DSO_F_DL_CTRL,ERR_R_PASSED_NULL_PARAMETER);
-		return(-1);
-		}
-	switch(cmd)
-		{
-	case DSO_CTRL_GET_FLAGS:
-		return dso->flags;
-	case DSO_CTRL_SET_FLAGS:
-		dso->flags = (int)larg;
-		return(0);
-	case DSO_CTRL_OR_FLAGS:
-		dso->flags |= (int)larg;
-		return(0);
-	default:
-		break;
-		}
-	DSOerr(DSO_F_DL_CTRL,DSO_R_UNKNOWN_COMMAND);
-	return(-1);
-	}
-
 #endif /* DSO_DL */
diff --git a/crypto/dso/dso_dlfcn.c b/crypto/dso/dso_dlfcn.c
index e709c72..07bbf37 100644
--- a/crypto/dso/dso_dlfcn.c
+++ b/crypto/dso/dso_dlfcn.c
@@ -82,8 +82,8 @@
 static int dlfcn_unbind(DSO *dso, char *symname, void *symptr);
 static int dlfcn_init(DSO *dso);
 static int dlfcn_finish(DSO *dso);
-#endif
 static long dlfcn_ctrl(DSO *dso, int cmd, long larg, void *parg);
+#endif
 
 static DSO_METHOD dso_meth_dlfcn = {
 	"OpenSSL 'dlfcn' shared library method",
@@ -96,7 +96,7 @@
 	NULL, /* unbind_var */
 	NULL, /* unbind_func */
 #endif
-	dlfcn_ctrl,
+	NULL, /* ctrl */
 	NULL, /* init */
 	NULL  /* finish */
 	};
@@ -249,28 +249,4 @@
 	return(sym);
 	}
 
-static long dlfcn_ctrl(DSO *dso, int cmd, long larg, void *parg)
-	{
-	if(dso == NULL)
-		{
-		DSOerr(DSO_F_DLFCN_CTRL,ERR_R_PASSED_NULL_PARAMETER);
-		return(-1);
-		}
-	switch(cmd)
-		{
-	case DSO_CTRL_GET_FLAGS:
-		return dso->flags;
-	case DSO_CTRL_SET_FLAGS:
-		dso->flags = (int)larg;
-		return(0);
-	case DSO_CTRL_OR_FLAGS:
-		dso->flags |= (int)larg;
-		return(0);
-	default:
-		break;
-		}
-	DSOerr(DSO_F_DLFCN_CTRL,DSO_R_UNKNOWN_COMMAND);
-	return(-1);
-	}
-
 #endif /* DSO_DLFCN */
diff --git a/crypto/dso/dso_vms.c b/crypto/dso/dso_vms.c
index 8ff7090..948f7a1 100644
--- a/crypto/dso/dso_vms.c
+++ b/crypto/dso/dso_vms.c
@@ -87,8 +87,8 @@
 static int vms_unbind_func(DSO *dso, char *symname, DSO_FUNC_TYPE symptr);
 static int vms_init(DSO *dso);
 static int vms_finish(DSO *dso);
-#endif
 static long vms_ctrl(DSO *dso, int cmd, long larg, void *parg);
+#endif
 
 static DSO_METHOD dso_meth_vms = {
 	"OpenSSL 'VMS' shared library method",
@@ -101,7 +101,7 @@
 	NULL, /* unbind_var */
 	NULL, /* unbind_func */
 #endif
-	vms_ctrl,
+	NULL, /* ctrl */
 	NULL, /* init */
 	NULL  /* finish */
 	};
@@ -344,28 +344,4 @@
 	return sym;
 	}
 
-static long vms_ctrl(DSO *dso, int cmd, long larg, void *parg)
-        {
-        if(dso == NULL)
-                {
-                DSOerr(DSO_F_VMS_CTRL,ERR_R_PASSED_NULL_PARAMETER);
-                return(-1);
-                }
-        switch(cmd)
-                {
-        case DSO_CTRL_GET_FLAGS:
-                return dso->flags;
-        case DSO_CTRL_SET_FLAGS:
-                dso->flags = (int)larg;
-                return(0);
-        case DSO_CTRL_OR_FLAGS:
-                dso->flags |= (int)larg;
-                return(0);
-        default:
-                break;
-                }
-        DSOerr(DSO_F_VMS_CTRL,DSO_R_UNKNOWN_COMMAND);
-        return(-1);
-        }
-
 #endif /* VMS */
diff --git a/crypto/dso/dso_win32.c b/crypto/dso/dso_win32.c
index 7f1d904..412693d 100644
--- a/crypto/dso/dso_win32.c
+++ b/crypto/dso/dso_win32.c
@@ -80,8 +80,8 @@
 static int win32_unbind_func(DSO *dso, char *symname, DSO_FUNC_TYPE symptr);
 static int win32_init(DSO *dso);
 static int win32_finish(DSO *dso);
-#endif
 static long win32_ctrl(DSO *dso, int cmd, long larg, void *parg);
+#endif
 
 static DSO_METHOD dso_meth_win32 = {
 	"OpenSSL 'win32' shared library method",
@@ -94,7 +94,7 @@
 	NULL, /* unbind_var */
 	NULL, /* unbind_func */
 #endif
-	win32_ctrl,
+	NULL, /* ctrl */
 	NULL, /* init */
 	NULL  /* finish */
 	};
@@ -246,28 +246,4 @@
 	return((DSO_FUNC_TYPE)sym);
 	}
 
-static long win32_ctrl(DSO *dso, int cmd, long larg, void *parg)
-        {
-        if(dso == NULL)
-                {
-                DSOerr(DSO_F_WIN32_CTRL,ERR_R_PASSED_NULL_PARAMETER);
-                return(-1);
-                }
-        switch(cmd)
-                {
-        case DSO_CTRL_GET_FLAGS:
-                return dso->flags;
-        case DSO_CTRL_SET_FLAGS:
-                dso->flags = (int)larg;
-                return(0);
-        case DSO_CTRL_OR_FLAGS:
-                dso->flags |= (int)larg;
-                return(0);
-        default:
-                break;
-                }
-        DSOerr(DSO_F_WIN32_CTRL,DSO_R_UNKNOWN_COMMAND);
-        return(-1);
-        }
-
 #endif /* WIN32 */