Commit e9ee30da authored by Doug MacEachern's avatar Doug MacEachern
Browse files

moving SSLVerifyClient directive parsing into ssl_cmd_verify_parse

function, which can also be used for SSLProxyVerify directive.

dropping support for undocumented integer form of levels (0..3)


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk/modules/ssl@93870 13f79535-47bb-0310-9956-ffa450edef68
parent 10e208de
Loading
Loading
Loading
Loading
+29 −15
Changes for ssl_engine_config.c: 29 added lines, 15 removed lines.
Original line number Diff line number Diff line
@@ -722,27 +722,41 @@ const char *ssl_cmd_SSLCARevocationFile(cmd_parms *cmd, void *ctx,
    return NULL;
}

const char *ssl_cmd_SSLVerifyClient(cmd_parms *cmd, void *ctx,
                                    const char *level)
static const char *ssl_cmd_verify_parse(cmd_parms *parms,
                                        const char *arg,
                                        ssl_verify_t *id)
{
    SSLDirConfigRec *dc = (SSLDirConfigRec *)ctx;
    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
    ssl_verify_t id;

    if (strEQ(level, "0") || strcEQ(level, "none")) {
        id = SSL_CVERIFY_NONE;
    if (strcEQ(arg, "none") || strcEQ(arg, "off")) {
        *id = SSL_CVERIFY_NONE;
    }
    else if (strEQ(level, "1") || strcEQ(level, "optional")) {
        id = SSL_CVERIFY_OPTIONAL;
    else if (strcEQ(arg, "optional")) {
        *id = SSL_CVERIFY_OPTIONAL;
    }
    else if (strEQ(level, "2") || strcEQ(level, "require")) {
        id = SSL_CVERIFY_REQUIRE;
    else if (strcEQ(arg, "require") || strcEQ(arg, "on")) {
        *id = SSL_CVERIFY_REQUIRE;
    }
    else if (strEQ(level, "3") || strcEQ(level, "optional_no_ca")) {
        id = SSL_CVERIFY_OPTIONAL_NO_CA;
    else if (strcEQ(arg, "optional_no_ca")) {
        *id = SSL_CVERIFY_OPTIONAL_NO_CA;
    }
    else {
        return "SSLVerifyClient: Invalid argument";
        return apr_pstrcat(parms->temp_pool, parms->cmd->name,
                           ": Invalid argument '", arg, "'",
                           NULL);
    }

    return NULL;
}

const char *ssl_cmd_SSLVerifyClient(cmd_parms *cmd, void *ctx,
                                    const char *arg)
{
    SSLDirConfigRec *dc = (SSLDirConfigRec *)ctx;
    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
    ssl_verify_t id;
    const char *err;

    if ((err = ssl_cmd_verify_parse(cmd, arg, &id))) {
        return err;
    }
    
    if (!(cmd->path || dc)) {