aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacques Vidrine <nectar@FreeBSD.org>2003-01-29 02:25:30 +0000
committerJacques Vidrine <nectar@FreeBSD.org>2003-01-29 02:25:30 +0000
commit6e955c8f09387c9e78e612f5f410b3c926eb23a4 (patch)
tree6c0c941177c3581e090e17f5ba10ecb4cd203096
parent5c87c606cde085944937b11c908b8c1232fef219 (diff)
downloadsrc-6e955c8f09387c9e78e612f5f410b3c926eb23a4.tar.gz
src-6e955c8f09387c9e78e612f5f410b3c926eb23a4.zip
= Fix a bug in UI_UTIL_read_pw's error handling that caused
des_read_pw_string to break (and thus rather mysteriously breaking utilities such as kinit). = Enable the BSD /dev/crypto interface. (These changes are being imported on the vendor branch, as they have already been accepted and committed to the OpenSSL CVS repository.)
Notes
Notes: svn path=/vendor-crypto/openssl/dist/; revision=110018
-rw-r--r--crypto/openssl/crypto/engine/eng_all.c12
-rw-r--r--crypto/openssl/crypto/engine/hw_cryptodev.c38
-rw-r--r--crypto/openssl/crypto/evp/c_all.c4
-rw-r--r--crypto/openssl/crypto/ui/ui_lib.c2
-rw-r--r--crypto/openssl/crypto/ui/ui_util.c6
5 files changed, 33 insertions, 29 deletions
diff --git a/crypto/openssl/crypto/engine/eng_all.c b/crypto/openssl/crypto/engine/eng_all.c
index e4d48dae8544..0f6992a40dbf 100644
--- a/crypto/openssl/crypto/engine/eng_all.c
+++ b/crypto/openssl/crypto/engine/eng_all.c
@@ -95,19 +95,19 @@ void ENGINE_load_builtin_engines(void)
#ifndef OPENSSL_NO_HW_4758_CCA
ENGINE_load_4758cca();
#endif
-#ifdef __OpenBSD__
+#if defined(__OpenBSD__) || defined(__FreeBSD__)
ENGINE_load_cryptodev();
#endif
#endif
}
-#ifdef __OpenBSD__
-void ENGINE_setup_openbsd(void) {
- static int openbsd_default_loaded = 0;
- if (!openbsd_default_loaded) {
+#if defined(__OpenBSD__) || defined(__FreeBSD__)
+void ENGINE_setup_bsd_cryptodev(void) {
+ static int bsd_cryptodev_default_loaded = 0;
+ if (!bsd_cryptodev_default_loaded) {
ENGINE_load_cryptodev();
ENGINE_register_all_complete();
}
- openbsd_default_loaded=1;
+ bsd_cryptodev_default_loaded=1;
}
#endif
diff --git a/crypto/openssl/crypto/engine/hw_cryptodev.c b/crypto/openssl/crypto/engine/hw_cryptodev.c
index be7ed6bb3f80..40af97ac248b 100644
--- a/crypto/openssl/crypto/engine/hw_cryptodev.c
+++ b/crypto/openssl/crypto/engine/hw_cryptodev.c
@@ -33,31 +33,28 @@
#include <openssl/engine.h>
#include <openssl/evp.h>
-#ifndef __OpenBSD__
-
-void
-ENGINE_load_cryptodev(void)
-{
- /* This is a NOP unless __OpenBSD__ is defined */
- return;
-}
-
-#else /* __OpenBSD__ */
-
-#include <sys/types.h>
+#if (defined(__unix__) || defined(unix)) && !defined(USG)
#include <sys/param.h>
+# if (OpenBSD >= 200112) || ((__FreeBSD_version >= 470101 && __FreeBSD_version < 500000) || __FreeBSD_version >= 500041)
+# define HAVE_CRYPTODEV
+# endif
+# if (OpenBSD >= 200110)
+# define HAVE_SYSLOG_R
+# endif
+#endif
-#if OpenBSD < 200112
+#ifndef HAVE_CRYPTODEV
void
ENGINE_load_cryptodev(void)
{
- /* This is a NOP unless we have release 3.0 (released december 2001) */
+ /* This is a NOP on platforms without /dev/crypto */
return;
}
-#else /* OpenBSD 3.0 or above */
+#else
+#include <sys/types.h>
#include <crypto/cryptodev.h>
#include <sys/ioctl.h>
#include <errno.h>
@@ -1032,12 +1029,18 @@ static DH_METHOD cryptodev_dh = {
static int
cryptodev_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)())
{
+#ifdef HAVE_SYSLOG_R
struct syslog_data sd = SYSLOG_DATA_INIT;
+#endif
switch (cmd) {
default:
+#ifdef HAVE_SYSLOG_R
syslog_r(LOG_ERR, &sd,
"cryptodev_ctrl: unknown command %d", cmd);
+#else
+ syslog(LOG_ERR, "cryptodev_ctrl: unknown command %d", cmd);
+#endif
break;
}
return (1);
@@ -1064,7 +1067,7 @@ ENGINE_load_cryptodev(void)
close(fd);
if (!ENGINE_set_id(engine, "cryptodev") ||
- !ENGINE_set_name(engine, "OpenBSD cryptodev engine") ||
+ !ENGINE_set_name(engine, "BSD cryptodev engine") ||
!ENGINE_set_ciphers(engine, cryptodev_engine_ciphers) ||
!ENGINE_set_digests(engine, cryptodev_engine_digests) ||
!ENGINE_set_ctrl_function(engine, cryptodev_ctrl) ||
@@ -1126,5 +1129,4 @@ ENGINE_load_cryptodev(void)
ERR_clear_error();
}
-#endif /* OpenBSD 3.0 or above */
-#endif /* __OpenBSD__ */
+#endif /* HAVE_CRYPTODEV */
diff --git a/crypto/openssl/crypto/evp/c_all.c b/crypto/openssl/crypto/evp/c_all.c
index 1bd54d791e3a..af3dd261629a 100644
--- a/crypto/openssl/crypto/evp/c_all.c
+++ b/crypto/openssl/crypto/evp/c_all.c
@@ -73,7 +73,7 @@ void OPENSSL_add_all_algorithms_noconf(void)
{
OpenSSL_add_all_ciphers();
OpenSSL_add_all_digests();
-#ifdef __OpenBSD__
- ENGINE_setup_openbsd();
+#if defined(__OpenBSD__) || defined(__FreeBSD__)
+ ENGINE_setup_bsd_cryptodev();
#endif
}
diff --git a/crypto/openssl/crypto/ui/ui_lib.c b/crypto/openssl/crypto/ui/ui_lib.c
index 1dad878ff6d8..13e5f20dcb2a 100644
--- a/crypto/openssl/crypto/ui/ui_lib.c
+++ b/crypto/openssl/crypto/ui/ui_lib.c
@@ -237,7 +237,7 @@ static int general_allocate_boolean(UI *ui,
return ret;
}
-/* Returns the index to the place in the stack or 0 for error. Uses a
+/* Returns the index to the place in the stack or -1 for error. Uses a
direct reference to the prompt. */
int UI_add_input_string(UI *ui, const char *prompt, int flags,
char *result_buf, int minsize, int maxsize)
diff --git a/crypto/openssl/crypto/ui/ui_util.c b/crypto/openssl/crypto/ui/ui_util.c
index ee9730d5e2f8..46bc8c1a9a08 100644
--- a/crypto/openssl/crypto/ui/ui_util.c
+++ b/crypto/openssl/crypto/ui/ui_util.c
@@ -78,12 +78,14 @@ int UI_UTIL_read_pw(char *buf,char *buff,int size,const char *prompt,int verify)
if (ui)
{
ok = UI_add_input_string(ui,prompt,0,buf,0,size-1);
- if (ok == 0 && verify)
+ if (ok >= 0 && verify)
ok = UI_add_verify_string(ui,prompt,0,buff,0,size-1,
buf);
- if (ok == 0)
+ if (ok >= 0)
ok=UI_process(ui);
UI_free(ui);
}
+ if (ok > 0)
+ ok = 0;
return(ok);
}