Ticket #1458: 1.diff

File 1.diff, 10.4 KB (added by crasyangel.lhy@…, 8 years ago)

use local variable when calling ngx_conf_full_name

  • src/event/ngx_event_openssl.c

    diff -r d00a24dd3dee src/event/ngx_event_openssl.c
    a b  
    374374    BIO         *bio;
    375375    X509        *x509;
    376376    u_long       n;
    377     ngx_str_t   *pwd;
     377    ngx_str_t   *pwd, cn, kn;
    378378    ngx_uint_t   tries;
    379379
    380     if (ngx_conf_full_name(cf->cycle, cert, 1) != NGX_OK) {
     380    cn = *cert;
     381
     382    if (ngx_conf_full_name(cf->cycle, &cn, 1) != NGX_OK) {
    381383        return NGX_ERROR;
    382384    }
    383385
     
    387389     * it here
    388390     */
    389391
    390     bio = BIO_new_file((char *) cert->data, "r");
     392    bio = BIO_new_file((char *) cn.data, "r");
    391393    if (bio == NULL) {
    392394        ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
    393                       "BIO_new_file(\"%s\") failed", cert->data);
     395                      "BIO_new_file(\"%s\") failed", cn.data);
    394396        return NGX_ERROR;
    395397    }
    396398
    397399    x509 = PEM_read_bio_X509_AUX(bio, NULL, NULL, NULL);
    398400    if (x509 == NULL) {
    399401        ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
    400                       "PEM_read_bio_X509_AUX(\"%s\") failed", cert->data);
     402                      "PEM_read_bio_X509_AUX(\"%s\") failed", cn.data);
    401403        BIO_free(bio);
    402404        return NGX_ERROR;
    403405    }
    404406
    405407    if (SSL_CTX_use_certificate(ssl->ctx, x509) == 0) {
    406408        ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
    407                       "SSL_CTX_use_certificate(\"%s\") failed", cert->data);
     409                      "SSL_CTX_use_certificate(\"%s\") failed", cn.data);
    408410        X509_free(x509);
    409411        BIO_free(bio);
    410412        return NGX_ERROR;
    411413    }
    412414
    413     if (X509_set_ex_data(x509, ngx_ssl_certificate_name_index, cert->data)
     415    if (X509_set_ex_data(x509, ngx_ssl_certificate_name_index, cn.data)
    414416        == 0)
    415417    {
    416418        ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, "X509_set_ex_data() failed");
     
    458460            /* some real error */
    459461
    460462            ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
    461                           "PEM_read_bio_X509(\"%s\") failed", cert->data);
     463                          "PEM_read_bio_X509(\"%s\") failed", cn.data);
    462464            BIO_free(bio);
    463465            return NGX_ERROR;
    464466        }
     
    474476        if (SSL_CTX_add0_chain_cert(ssl->ctx, x509) == 0) {
    475477            ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
    476478                          "SSL_CTX_add0_chain_cert(\"%s\") failed",
    477                           cert->data);
     479                          cn.data);
    478480            X509_free(x509);
    479481            BIO_free(bio);
    480482            return NGX_ERROR;
     
    484486        if (SSL_CTX_add_extra_chain_cert(ssl->ctx, x509) == 0) {
    485487            ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
    486488                          "SSL_CTX_add_extra_chain_cert(\"%s\") failed",
    487                           cert->data);
     489                          cn.data);
    488490            X509_free(x509);
    489491            BIO_free(bio);
    490492            return NGX_ERROR;
     
    555557#endif
    556558    }
    557559
    558     if (ngx_conf_full_name(cf->cycle, key, 1) != NGX_OK) {
     560    kn = *key;
     561
     562    if (ngx_conf_full_name(cf->cycle, &kn, 1) != NGX_OK) {
    559563        return NGX_ERROR;
    560564    }
    561565
     
    575579
    576580    for ( ;; ) {
    577581
    578         if (SSL_CTX_use_PrivateKey_file(ssl->ctx, (char *) key->data,
     582        if (SSL_CTX_use_PrivateKey_file(ssl->ctx, (char *) kn.data,
    579583                                        SSL_FILETYPE_PEM)
    580584            != 0)
    581585        {
     
    589593        }
    590594
    591595        ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
    592                       "SSL_CTX_use_PrivateKey_file(\"%s\") failed", key->data);
     596                      "SSL_CTX_use_PrivateKey_file(\"%s\") failed", kn.data);
    593597        return NGX_ERROR;
    594598    }
    595599
     
    651655ngx_ssl_client_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert,
    652656    ngx_int_t depth)
    653657{
     658    ngx_str_t   cn;
     659
    654660    STACK_OF(X509_NAME)  *list;
    655661
    656662    SSL_CTX_set_verify(ssl->ctx, SSL_VERIFY_PEER, ngx_ssl_verify_callback);
     
    661667        return NGX_OK;
    662668    }
    663669
    664     if (ngx_conf_full_name(cf->cycle, cert, 1) != NGX_OK) {
     670    cn = *cert;
     671
     672    if (ngx_conf_full_name(cf->cycle, &cn, 1) != NGX_OK) {
    665673        return NGX_ERROR;
    666674    }
    667675
    668     if (SSL_CTX_load_verify_locations(ssl->ctx, (char *) cert->data, NULL)
     676    if (SSL_CTX_load_verify_locations(ssl->ctx, (char *) cn.data, NULL)
    669677        == 0)
    670678    {
    671679        ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
    672680                      "SSL_CTX_load_verify_locations(\"%s\") failed",
    673                       cert->data);
     681                      cn.data);
    674682        return NGX_ERROR;
    675683    }
    676684
     
    681689
    682690    ERR_clear_error();
    683691
    684     list = SSL_load_client_CA_file((char *) cert->data);
     692    list = SSL_load_client_CA_file((char *) cn.data);
    685693
    686694    if (list == NULL) {
    687695        ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
    688                       "SSL_load_client_CA_file(\"%s\") failed", cert->data);
     696                      "SSL_load_client_CA_file(\"%s\") failed", cn.data);
    689697        return NGX_ERROR;
    690698    }
    691699
     
    706714ngx_ssl_trusted_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert,
    707715    ngx_int_t depth)
    708716{
     717    ngx_str_t   cn;
     718
    709719    SSL_CTX_set_verify_depth(ssl->ctx, depth);
    710720
    711721    if (cert->len == 0) {
    712722        return NGX_OK;
    713723    }
    714724
    715     if (ngx_conf_full_name(cf->cycle, cert, 1) != NGX_OK) {
     725    cn = *cert;
     726
     727    if (ngx_conf_full_name(cf->cycle, &cn, 1) != NGX_OK) {
    716728        return NGX_ERROR;
    717729    }
    718730
    719     if (SSL_CTX_load_verify_locations(ssl->ctx, (char *) cert->data, NULL)
     731    if (SSL_CTX_load_verify_locations(ssl->ctx, (char *) cn.data, NULL)
    720732        == 0)
    721733    {
    722734        ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
    723735                      "SSL_CTX_load_verify_locations(\"%s\") failed",
    724                       cert->data);
     736                      cn.data);
    725737        return NGX_ERROR;
    726738    }
    727739
     
    739751ngx_int_t
    740752ngx_ssl_crl(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *crl)
    741753{
     754    ngx_str_t     cn;
     755
    742756    X509_STORE   *store;
    743757    X509_LOOKUP  *lookup;
    744758
     
    746760        return NGX_OK;
    747761    }
    748762
    749     if (ngx_conf_full_name(cf->cycle, crl, 1) != NGX_OK) {
     763    cn = *crl;
     764
     765    if (ngx_conf_full_name(cf->cycle, &cn, 1) != NGX_OK) {
    750766        return NGX_ERROR;
    751767    }
    752768
     
    766782        return NGX_ERROR;
    767783    }
    768784
    769     if (X509_LOOKUP_load_file(lookup, (char *) crl->data, X509_FILETYPE_PEM)
     785    if (X509_LOOKUP_load_file(lookup, (char *) cn.data, X509_FILETYPE_PEM)
    770786        == 0)
    771787    {
    772788        ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
    773                       "X509_LOOKUP_load_file(\"%s\") failed", crl->data);
     789                      "X509_LOOKUP_load_file(\"%s\") failed", cn.data);
    774790        return NGX_ERROR;
    775791    }
    776792
     
    896912    size_t               len;
    897913    ssize_t              n;
    898914    ngx_fd_t             fd;
    899     ngx_str_t           *pwd;
     915    ngx_str_t           *pwd, fn;
    900916    ngx_array_t         *passwords;
    901917    ngx_pool_cleanup_t  *cln;
    902918    u_char               buf[NGX_SSL_PASSWORD_BUFFER_SIZE];
    903919
    904     if (ngx_conf_full_name(cf->cycle, file, 1) != NGX_OK) {
     920    fn = *file;
     921
     922    if (ngx_conf_full_name(cf->cycle, &fn, 1) != NGX_OK) {
    905923        return NULL;
    906924    }
    907925
     
    915933    cln->handler = ngx_ssl_passwords_cleanup;
    916934    cln->data = passwords;
    917935
    918     fd = ngx_open_file(file->data, NGX_FILE_RDONLY, NGX_FILE_OPEN, 0);
     936    fd = ngx_open_file(fn.data, NGX_FILE_RDONLY, NGX_FILE_OPEN, 0);
    919937    if (fd == NGX_INVALID_FILE) {
    920938        ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno,
    921                            ngx_open_file_n " \"%s\" failed", file->data);
     939                           ngx_open_file_n " \"%s\" failed", fn.data);
    922940        return NULL;
    923941    }
    924942
     
    930948
    931949        if (n == -1) {
    932950            ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno,
    933                                ngx_read_fd_n " \"%s\" failed", file->data);
     951                               ngx_read_fd_n " \"%s\" failed", fn.data);
    934952            passwords = NULL;
    935953            goto cleanup;
    936954        }
     
    9821000
    9831001        if (len == NGX_SSL_PASSWORD_BUFFER_SIZE) {
    9841002            ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
    985                                "too long line in \"%s\"", file->data);
     1003                               "too long line in \"%s\"", fn.data);
    9861004            passwords = NULL;
    9871005            goto cleanup;
    9881006        }
     
    10061024
    10071025    if (ngx_close_file(fd) == NGX_FILE_ERROR) {
    10081026        ngx_conf_log_error(NGX_LOG_ALERT, cf, ngx_errno,
    1009                            ngx_close_file_n " \"%s\" failed", file->data);
     1027                           ngx_close_file_n " \"%s\" failed", fn.data);
    10101028    }
    10111029
    10121030    ngx_memzero(buf, NGX_SSL_PASSWORD_BUFFER_SIZE);
     
    10341052ngx_int_t
    10351053ngx_ssl_dhparam(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *file)
    10361054{
    1037     DH   *dh;
    1038     BIO  *bio;
     1055    ngx_str_t    fn;
     1056    DH          *dh;
     1057    BIO         *bio;
    10391058
    10401059    if (file->len == 0) {
    10411060        return NGX_OK;
    10421061    }
    10431062
     1063    fn = *file;
     1064
    10441065    if (ngx_conf_full_name(cf->cycle, file, 1) != NGX_OK) {
    10451066        return NGX_ERROR;
    10461067    }
    10471068
    1048     bio = BIO_new_file((char *) file->data, "r");
     1069    bio = BIO_new_file((char *) fn.data, "r");
    10491070    if (bio == NULL) {
    10501071        ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
    1051                       "BIO_new_file(\"%s\") failed", file->data);
     1072                      "BIO_new_file(\"%s\") failed", fn.data);
    10521073        return NGX_ERROR;
    10531074    }
    10541075
    10551076    dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
    10561077    if (dh == NULL) {
    10571078        ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
    1058                       "PEM_read_bio_DHparams(\"%s\") failed", file->data);
     1079                      "PEM_read_bio_DHparams(\"%s\") failed", fn.data);
    10591080        BIO_free(bio);
    10601081        return NGX_ERROR;
    10611082    }
     
    28692890    u_char                         buf[80];
    28702891    size_t                         size;
    28712892    ssize_t                        n;
    2872     ngx_str_t                     *path;
     2893    ngx_str_t                     *path, name;
    28732894    ngx_file_t                     file;
    28742895    ngx_uint_t                     i;
    28752896    ngx_array_t                   *keys;
     
    28892910    path = paths->elts;
    28902911    for (i = 0; i < paths->nelts; i++) {
    28912912
    2892         if (ngx_conf_full_name(cf->cycle, &path[i], 1) != NGX_OK) {
     2913        name = path[i];
     2914
     2915        if (ngx_conf_full_name(cf->cycle, &name, 1) != NGX_OK) {
    28932916            return NGX_ERROR;
    28942917        }
    28952918
    28962919        ngx_memzero(&file, sizeof(ngx_file_t));
    2897         file.name = path[i];
     2920        file.name = name;
    28982921        file.log = cf->log;
    28992922
    29002923        file.fd = ngx_open_file(file.name.data, NGX_FILE_RDONLY, 0, 0);