~ubuntu-branches/ubuntu/trusty/apr-util/trusty-proposed

« back to all changes in this revision

Viewing changes to crypto/apr_crypto.c

  • Committer: Package Import Robot
  • Author(s): Stefan Fritsch
  • Date: 2013-05-05 15:43:34 UTC
  • mfrom: (1.3.4)
  • Revision ID: package-import@ubuntu.com-20130505154334-ljd2tn8515nf96mo
Tags: 1.5.2-1
* New upstream release.
* Ship find_apu.m4 in libaprutil1-dev. Closes: #699327

Show diffs side-by-side

added added

removed removed

Lines of Context:
68
68
} apr_crypto_clear_t;
69
69
 
70
70
#if !APU_DSO_BUILD
71
 
#define DRIVER_LOAD(name,driver,pool,params) \
 
71
#define DRIVER_LOAD(name,driver_name,pool,params,rv,result) \
72
72
    {   \
73
 
        extern const apr_crypto_driver_t driver; \
74
 
        apr_hash_set(drivers,name,APR_HASH_KEY_STRING,&driver); \
75
 
        if (driver.init) {     \
76
 
            driver.init(pool, params); \
 
73
        extern const apr_crypto_driver_t driver_name; \
 
74
        apr_hash_set(drivers,name,APR_HASH_KEY_STRING,&driver_name); \
 
75
        if (driver_name.init) {     \
 
76
            rv = driver_name.init(pool, params, result); \
77
77
        }  \
 
78
        *driver = &driver_name; \
78
79
    }
79
80
#endif
80
81
 
107
108
#endif
108
109
    drivers = apr_hash_make(pool);
109
110
 
110
 
#if !APU_DSO_BUILD
111
 
    /* Load statically-linked drivers: */
112
 
#if APU_HAVE_OPENSSL
113
 
    DRIVER_LOAD("openssl", apr_crypto_openssl_driver, pool, params);
114
 
#endif
115
 
#if APU_HAVE_NSS
116
 
    DRIVER_LOAD("nss", apr_crypto_nss_driver, pool, params);
117
 
#endif
118
 
#if APU_HAVE_MSCAPI
119
 
    DRIVER_LOAD("mscapi", apr_crypto_mscapi_driver, pool, params);
120
 
#endif
121
 
#if APU_HAVE_MSCNG
122
 
    DRIVER_LOAD("mscng", apr_crypto_mscng_driver, pool, params);
123
 
#endif
124
 
#endif /* APU_DSO_BUILD */
125
 
 
126
111
    apr_pool_cleanup_register(pool, NULL, apr_crypto_term,
127
112
            apr_pool_cleanup_null);
128
113
 
165
150
    apr_dso_handle_sym_t symbol;
166
151
#endif
167
152
    apr_status_t rv;
168
 
    int rc = 0;
 
153
 
 
154
    if (result) {
 
155
        *result = NULL; /* until further notice */
 
156
    }
169
157
 
170
158
#if APU_DSO_BUILD
171
159
    rv = apu_dso_mutex_lock();
197
185
#endif
198
186
    apr_snprintf(symname, sizeof(symname), "apr_crypto_%s_driver", name);
199
187
    rv = apu_dso_load(&dso, &symbol, modname, symname, pool);
200
 
    if (rv != APR_SUCCESS) { /* APR_EDSOOPEN or APR_ESYMNOTFOUND? */
201
 
        if (rv == APR_EINIT) { /* previously loaded?!? */
202
 
            name = apr_pstrdup(pool, name);
203
 
            apr_hash_set(drivers, name, APR_HASH_KEY_STRING, *driver);
204
 
            rv = APR_SUCCESS;
 
188
    if (rv == APR_SUCCESS || rv == APR_EINIT) { /* previously loaded?!? */
 
189
        *driver = symbol;
 
190
        name = apr_pstrdup(pool, name);
 
191
        apr_hash_set(drivers, name, APR_HASH_KEY_STRING, *driver);
 
192
        rv = APR_SUCCESS;
 
193
        if ((*driver)->init) {
 
194
            rv = (*driver)->init(pool, params, result);
205
195
        }
206
 
        goto unlock;
207
 
    }
208
 
    *driver = symbol;
209
 
    if ((*driver)->init) {
210
 
        rv = (*driver)->init(pool, params, &rc);
211
 
    }
212
 
    name = apr_pstrdup(pool, name);
213
 
    apr_hash_set(drivers, name, APR_HASH_KEY_STRING, *driver);
214
 
 
215
 
    unlock: apu_dso_mutex_unlock();
216
 
 
217
 
    if (APR_SUCCESS != rv && result) {
 
196
    }
 
197
    apu_dso_mutex_unlock();
 
198
 
 
199
    if (APR_SUCCESS != rv && result && !*result) {
218
200
        char *buffer = apr_pcalloc(pool, ERROR_SIZE);
219
201
        apu_err_t *err = apr_pcalloc(pool, sizeof(apu_err_t));
220
202
        if (err && buffer) {
221
203
            apr_dso_error(dso, buffer, ERROR_SIZE - 1);
222
204
            err->msg = buffer;
223
205
            err->reason = modname;
224
 
            err->rc = rc;
225
206
            *result = err;
226
207
        }
227
208
    }
228
209
 
229
210
#else /* not builtin and !APR_HAS_DSO => not implemented */
230
211
    rv = APR_ENOTIMPL;
 
212
 
 
213
    /* Load statically-linked drivers: */
 
214
#if APU_HAVE_OPENSSL
 
215
    if (name[0] == 'o' && !strcmp(name, "openssl")) {
 
216
        DRIVER_LOAD("openssl", apr_crypto_openssl_driver, pool, params, rv, result);
 
217
    }
 
218
#endif
 
219
#if APU_HAVE_NSS
 
220
    if (name[0] == 'n' && !strcmp(name, "nss")) {
 
221
        DRIVER_LOAD("nss", apr_crypto_nss_driver, pool, params, rv, result);
 
222
    }
 
223
#endif
 
224
#if APU_HAVE_MSCAPI
 
225
    if (name[0] == 'm' && !strcmp(name, "mscapi")) {
 
226
        DRIVER_LOAD("mscapi", apr_crypto_mscapi_driver, pool, params, rv, result);
 
227
    }
 
228
#endif
 
229
#if APU_HAVE_MSCNG
 
230
    if (name[0] == 'm' && !strcmp(name, "mscng")) {
 
231
        DRIVER_LOAD("mscng", apr_crypto_mscng_driver, pool, params, rv, result);
 
232
    }
 
233
#endif
 
234
 
231
235
#endif
232
236
 
233
237
    return rv;