Commit c89fa75a authored by Graham Leggett's avatar Graham Leggett
Browse files

mod_session: Use apr_status_t as a return code across the mod_session API,

clarify where we ignore errors and why.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1209603 13f79535-47bb-0310-9956-ffa450edef68
parent 27bdc1e7
Loading
Loading
Loading
Loading
+2 −1
Changes for include/ap_mmn.h: 2 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -371,12 +371,13 @@
 * 20111121.0 (2.5.0-dev)  Pass ap_errorlog_info struct to error_log hook,
 *                         add pool to ap_errorlog_info.
 * 20111201.0 (2.5.0-dev)  Add invalidate_entity() to the cache provider.
 * 20111202.0 (2.5.0-dev)  Use apr_status_t across mod_session API.
 */

#define MODULE_MAGIC_COOKIE 0x41503234UL /* "AP24" */

#ifndef MODULE_MAGIC_NUMBER_MAJOR
#define MODULE_MAGIC_NUMBER_MAJOR 20111201
#define MODULE_MAGIC_NUMBER_MAJOR 20111202
#endif
#define MODULE_MAGIC_NUMBER_MINOR 0                   /* 0...n */

+31 −14
Changes for modules/session/mod_session.c: 31 added lines, 14 removed lines.
Original line number Diff line number Diff line
@@ -88,8 +88,7 @@ static int session_included(request_rec * r, session_dir_conf * conf)
 * @param r The request
 * @param z A pointer to where the session will be written.
 */
/* ??? We return errors but we ignore them thru-out. ??? */
static int ap_session_load(request_rec * r, session_rec ** z)
static apr_status_t ap_session_load(request_rec * r, session_rec ** z)
{

    session_dir_conf *dconf = ap_get_module_config(r->per_dir_config,
@@ -168,8 +167,7 @@ static int ap_session_load(request_rec * r, session_rec ** z)
 * @param r The request
 * @param z A pointer to where the session will be written.
 */
/* ??? We return errors but we ignore them thru-out. ??? */
static int ap_session_save(request_rec * r, session_rec * z)
static apr_status_t ap_session_save(request_rec * r, session_rec * z)
{
    if (z) {
        apr_time_t now = apr_time_now();
@@ -239,14 +237,21 @@ static int ap_session_save(request_rec * r, session_rec * z)
 * @param key The key to get.
 * @param value The buffer to write the value to.
 */
static void ap_session_get(request_rec * r, session_rec * z, const char *key, const char **value)
static apr_status_t ap_session_get(request_rec * r, session_rec * z,
        const char *key, const char **value)
{
    if (!z) {
        ap_session_load(r, &z); /* errors ignored?? */
        apr_status_t rv;
        rv = ap_session_load(r, &z);
        if (APR_SUCCESS != rv) {
            return rv;
        }
    }
    if (z && z->entries) {
        *value = apr_table_get(z->entries, key);
    }

    return OK;
}

/**
@@ -261,11 +266,15 @@ static void ap_session_get(request_rec * r, session_rec * z, const char *key, co
 * @param key The key to set. The existing key value will be replaced.
 * @param value The value to set.
 */
static void ap_session_set(request_rec * r, session_rec * z,
static apr_status_t ap_session_set(request_rec * r, session_rec * z,
        const char *key, const char *value)
{
    if (!z) {
        ap_session_load(r, &z); /* errors ignored?? */
        apr_status_t rv;
        rv = ap_session_load(r, &z);
        if (APR_SUCCESS != rv) {
            return rv;
        }
    }
    if (z) {
        if (value) {
@@ -276,6 +285,7 @@ static void ap_session_set(request_rec * r, session_rec * z,
        }
        z->dirty = 1;
    }
    return APR_SUCCESS;
}

static int identity_count(int *count, const char *key, const char *val)
@@ -314,7 +324,7 @@ static int identity_concat(char *buffer, const char *key, const char *val)
 * @param r The request pointer.
 * @param z A pointer to where the session will be written.
 */
static int session_identity_encode(request_rec * r, session_rec * z)
static apr_status_t session_identity_encode(request_rec * r, session_rec * z)
{

    char *buffer = NULL;
@@ -350,7 +360,7 @@ static int session_identity_encode(request_rec * r, session_rec * z)
 * @param r The request pointer.
 * @param z A pointer to where the session will be written.
 */
static int session_identity_decode(request_rec * r, session_rec * z)
static apr_status_t session_identity_decode(request_rec * r, session_rec * z)
{

    char *last = NULL;
@@ -421,7 +431,8 @@ static apr_status_t session_output_filter(ap_filter_t * f,
                                                      &session_module);

        /* load the session, or create one if necessary */
        ap_session_load(r, &z); /* errors ignored?? */
        /* when unset or on error, z will be NULL */
        ap_session_load(r, &z);
        if (!z || z->written) {
            r = r->next;
            continue;
@@ -440,7 +451,8 @@ static apr_status_t session_output_filter(ap_filter_t * f,
        }

        /* save away the session, and we're done */
        ap_session_save(r, z); /* errors ignored?? */
        /* when unset or on error, we've complained to the log */
        ap_session_save(r, z);

        r = r->next;
    }
@@ -478,9 +490,14 @@ static int session_fixups(request_rec * r)
                                                  &session_module);

    session_rec *z = NULL;
    ap_session_load(r, &z); /* errors ignored?? */

    if (conf->env) {
    /* if an error occurs or no session has been configured, we ignore
     * the broken session and allow it to be recreated from scratch on save
     * if necessary.
     */
    ap_session_load(r, &z);

    if (z && conf->env) {
        session_identity_encode(r, z);
        if (z->encoded) {
            apr_table_set(r->subprocess_env, HTTP_SESSION, z->encoded);
+14 −10
Changes for modules/session/mod_session.h: 14 added lines, 10 removed lines.
Original line number Diff line number Diff line
@@ -125,7 +125,7 @@ typedef struct {
 * @param r The request
 * @param z A pointer to where the session will be written.
 */
APR_DECLARE_EXTERNAL_HOOK(ap, SESSION, int, session_load,
APR_DECLARE_EXTERNAL_HOOK(ap, SESSION, apr_status_t, session_load,
        (request_rec * r, session_rec ** z))

/**
@@ -137,7 +137,7 @@ APR_DECLARE_EXTERNAL_HOOK(ap, SESSION, int, session_load,
 * @param r The request
 * @param z A pointer to where the session will be written.
 */
APR_DECLARE_EXTERNAL_HOOK(ap, SESSION, int, session_save,
APR_DECLARE_EXTERNAL_HOOK(ap, SESSION, apr_status_t, session_save,
        (request_rec * r, session_rec * z))

/**
@@ -150,7 +150,7 @@ APR_DECLARE_EXTERNAL_HOOK(ap, SESSION, int, session_save,
 * @param r The request
 * @param z A pointer to where the session will be written.
 */
APR_DECLARE_EXTERNAL_HOOK(ap, SESSION, int, session_encode,
APR_DECLARE_EXTERNAL_HOOK(ap, SESSION, apr_status_t, session_encode,
        (request_rec * r, session_rec * z))

/**
@@ -163,15 +163,19 @@ APR_DECLARE_EXTERNAL_HOOK(ap, SESSION, int, session_encode,
 * @param r The request
 * @param z A pointer to where the session will be written.
 */
APR_DECLARE_EXTERNAL_HOOK(ap, SESSION, int, session_decode,
APR_DECLARE_EXTERNAL_HOOK(ap, SESSION, apr_status_t, session_decode,
        (request_rec * r, session_rec * z))

APR_DECLARE_OPTIONAL_FN(void, ap_session_get, (request_rec * r, session_rec * z,
                                               const char *key, const char **value));
APR_DECLARE_OPTIONAL_FN(void, ap_session_set, (request_rec * r, session_rec * z,
                                               const char *key, const char *value));
APR_DECLARE_OPTIONAL_FN(int, ap_session_load, (request_rec *, session_rec **));
APR_DECLARE_OPTIONAL_FN(int, ap_session_save, (request_rec *, session_rec *));
APR_DECLARE_OPTIONAL_FN(
        apr_status_t,
        ap_session_get,
        (request_rec * r, session_rec * z, const char *key, const char **value));
APR_DECLARE_OPTIONAL_FN(apr_status_t, ap_session_set,
        (request_rec * r, session_rec * z, const char *key, const char *value));
APR_DECLARE_OPTIONAL_FN(apr_status_t, ap_session_load,
        (request_rec *, session_rec **));
APR_DECLARE_OPTIONAL_FN(apr_status_t, ap_session_save,
        (request_rec *, session_rec *));

/**
 * The name of the module.
+2 −2
Changes for modules/session/mod_session_cookie.c: 2 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ typedef struct {
 * @param r The request pointer.
 * @param z A pointer to where the session will be written.
 */
static int session_cookie_save(request_rec * r, session_rec * z)
static apr_status_t session_cookie_save(request_rec * r, session_rec * z)
{

    session_cookie_dir_conf *conf = ap_get_module_config(r->per_dir_config,
@@ -109,7 +109,7 @@ static int session_cookie_save(request_rec * r, session_rec * z)
 *
 * On success, this returns APR_SUCCESS.
 */
static int session_cookie_load(request_rec * r, session_rec ** z)
static apr_status_t session_cookie_load(request_rec * r, session_rec ** z)
{

    session_cookie_dir_conf *conf = ap_get_module_config(r->per_dir_config,
+7 −11
Changes for modules/session/mod_session_crypto.c: 7 added lines, 11 removed lines.
Original line number Diff line number Diff line
@@ -57,11 +57,6 @@ typedef struct {
    int library_set;
} session_crypto_conf;

AP_DECLARE(int) ap_session_crypto_encode(request_rec * r, session_rec * z);
AP_DECLARE(int) ap_session_crypto_decode(request_rec * r, session_rec * z);
AP_DECLARE(int) ap_session_crypto_init(apr_pool_t *p, apr_pool_t *plog,
        apr_pool_t *ptemp, server_rec *s);

/**
 * Initialise the encryption as per the current config.
 *
@@ -344,7 +339,7 @@ static apr_status_t decrypt_string(request_rec * r, const apr_crypto_t *f,
 * @param r The request pointer.
 * @param z A pointer to where the session will be written.
 */
AP_DECLARE(int) ap_session_crypto_encode(request_rec * r, session_rec * z)
static apr_status_t session_crypto_encode(request_rec * r, session_rec * z)
{

    char *encoded = NULL;
@@ -374,7 +369,8 @@ AP_DECLARE(int) ap_session_crypto_encode(request_rec * r, session_rec * z)
 * @param r The request pointer.
 * @param z A pointer to where the session will be written.
 */
AP_DECLARE(int) ap_session_crypto_decode(request_rec * r, session_rec * z)
static apr_status_t session_crypto_decode(request_rec * r,
        session_rec * z)
{

    char *encoded = NULL;
@@ -402,7 +398,7 @@ AP_DECLARE(int) ap_session_crypto_decode(request_rec * r, session_rec * z)
/**
 * Initialise the SSL in the post_config hook.
 */
AP_DECLARE(int) ap_session_crypto_init(apr_pool_t *p, apr_pool_t *plog,
static int session_crypto_init(apr_pool_t *p, apr_pool_t *plog,
        apr_pool_t *ptemp, server_rec *s)
{
    const apr_crypto_driver_t *driver = NULL;
@@ -605,9 +601,9 @@ static const command_rec session_crypto_cmds[] =

static void register_hooks(apr_pool_t * p)
{
    ap_hook_session_encode(ap_session_crypto_encode, NULL, NULL, APR_HOOK_LAST);
    ap_hook_session_decode(ap_session_crypto_decode, NULL, NULL, APR_HOOK_FIRST);
    ap_hook_post_config(ap_session_crypto_init, NULL, NULL, APR_HOOK_LAST);
    ap_hook_session_encode(session_crypto_encode, NULL, NULL, APR_HOOK_LAST);
    ap_hook_session_decode(session_crypto_decode, NULL, NULL, APR_HOOK_FIRST);
    ap_hook_post_config(session_crypto_init, NULL, NULL, APR_HOOK_LAST);
}

AP_DECLARE_MODULE(session_crypto) =