aboutsummaryrefslogtreecommitdiff
path: root/src/os/unix/ngx_user.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/os/unix/ngx_user.c')
-rw-r--r--src/os/unix/ngx_user.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/os/unix/ngx_user.c b/src/os/unix/ngx_user.c
index fe2f79489..22eafd20e 100644
--- a/src/os/unix/ngx_user.c
+++ b/src/os/unix/ngx_user.c
@@ -27,11 +27,18 @@ ngx_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
{
char *value;
size_t len;
+ ngx_err_t err;
struct crypt_data cd;
+ ngx_set_errno(0);
+
+ cd.initialized = 0;
+
value = crypt_r((char *) key, (char *) salt, &cd);
- if (value) {
+ err = ngx_errno;
+
+ if (err == 0) {
len = ngx_strlen(value);
*encrypted = ngx_palloc(pool, len);
@@ -41,6 +48,8 @@ ngx_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
}
}
+ ngx_log_error(NGX_LOG_CRIT, pool->log, err, "crypt_r() failed");
+
return NGX_ERROR;
}
@@ -51,7 +60,7 @@ ngx_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
{
char *value;
size_t len;
- ngx_int_t rc;
+ ngx_err_t err;
#if (NGX_THREADS && NGX_NONREENTRANT_CRYPT)
@@ -63,7 +72,7 @@ ngx_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
#endif
- rc = NGX_ERROR;
+ ngx_set_errno(0);
value = crypt((char *) key, (char *) salt);
@@ -73,15 +82,23 @@ ngx_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
*encrypted = ngx_palloc(pool, len);
if (*encrypted) {
ngx_memcpy(*encrypted, value, len + 1);
- rc = NGX_OK;
}
+
+#if (NGX_THREADS && NGX_NONREENTRANT_CRYPT)
+ ngx_mutex_unlock(ngx_crypt_mutex);
+#endif
+ return NGX_OK;
}
+ err = ngx_errno;
+
#if (NGX_THREADS && NGX_NONREENTRANT_CRYPT)
ngx_mutex_unlock(ngx_crypt_mutex);
#endif
- return rc;
+ ngx_log_error(NGX_LOG_CRIT, pool->log, err, "crypt() failed");
+
+ return NGX_ERROR;
}
#endif