curves can be set in both client and server
[openssl.git] / ssl / ssl_conf.c
index 20e43a8d9b4e6976d84cdfb4b148d8076978bf5e..0de97f8a78889196e55ae1aa8f64509cc62a423c 100644 (file)
@@ -246,8 +246,6 @@ static int cmd_client_sigalgs(SSL_CONF_CTX *cctx, const char *value)
 static int cmd_curves(SSL_CONF_CTX *cctx, const char *value)
        {
        int rv;
-       if (!(cctx->flags & SSL_CONF_FLAG_CLIENT))
-               return -2;
        if (cctx->ssl)
                rv = SSL_set1_curves_list(cctx->ssl, value);
        /* NB: ctx == NULL performs syntax checking only */
@@ -319,7 +317,7 @@ static int cmd_cipher_list(SSL_CONF_CTX *cctx, const char *value)
                rv = SSL_CTX_set_cipher_list(cctx->ctx, value);
        if (cctx->ssl)
                rv = SSL_set_cipher_list(cctx->ssl, value);
-       return rv;
+       return rv > 0;
        }
 
 static int cmd_protocol(SSL_CONF_CTX *cctx, const char *value)
@@ -434,16 +432,20 @@ int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value)
 
        if (runcmd)
                {
+               int rv;
                if (value == NULL)
                        return -3;
-               if (t->cmd(cctx, value))
+               rv = t->cmd(cctx, value);
+               if (rv > 0)
                        return 2;
+               if (rv == -2)
+                       return -2;
                if (cctx->flags & SSL_CONF_FLAG_SHOW_ERRORS)
                        {
                        SSLerr(SSL_F_SSL_CONF_CTX_CMD, SSL_R_BAD_VALUE);
                        ERR_add_error_data(4, "cmd=", cmd, ", value=", value);
                        }
-               return -1;
+               return 0;
                }
 
        if (cctx->flags & SSL_CONF_FLAG_CMDLINE)
@@ -464,7 +466,7 @@ int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value)
 int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv)
        {
        int rv;
-       const char *arg, *argn;
+       const char *arg = NULL, *argn;
        if (pargc && *pargc == 0)
                return 0;
        if (!pargc || *pargc > 0)