* @param expiry Absolute time at which the object expires
* @param data Data to store; binary blob
* @param datalen Length of data blob
+ * @param pool Pool for temporary allocations.
+ * @return APR status value.
*/
apr_status_t (*store)(ap_socache_instance_t *instance, server_rec *s,
const unsigned char *id, unsigned int idlen,
time_t expiry,
- unsigned char *data, unsigned int datalen);
+ unsigned char *data, unsigned int datalen,
+ apr_pool_t *pool);
/**
* Retrieve a cached object.
* @param datalen On entry, length of data buffer; on exit, the
* number of bytes written to the data buffer.
* @param pool Pool for temporary allocations.
+ * @return APR status value; APR_NOTFOUND if the object was not
+ * found
*/
apr_status_t (*retrieve)(ap_socache_instance_t *instance, server_rec *s,
const unsigned char *id, unsigned int idlen,
* @param idlen Length of id blob
* @param pool Pool for temporary allocations.
*/
- void (*remove)(ap_socache_instance_t *instance, server_rec *s,
- const unsigned char *id, unsigned int idlen,
- apr_pool_t *pool);
+ apr_status_t (*remove)(ap_socache_instance_t *instance, server_rec *s,
+ const unsigned char *id, unsigned int idlen,
+ apr_pool_t *pool);
/** Dump the status of a cache instance for mod_status. Will use
* the ap_r* interfaces to produce appropriate status output.
static void socache_dbm_expire(ap_socache_instance_t *ctx, server_rec *s);
-static void socache_dbm_remove(ap_socache_instance_t *ctx, server_rec *s,
- const unsigned char *id, unsigned int idlen,
- apr_pool_t *p);
+static apr_status_t socache_dbm_remove(ap_socache_instance_t *ctx,
+ server_rec *s, const unsigned char *id,
+ unsigned int idlen, apr_pool_t *p);
static const char *socache_dbm_create(ap_socache_instance_t **context,
const char *arg,
return;
}
-static apr_status_t socache_dbm_store(ap_socache_instance_t *ctx, server_rec *s,
- const unsigned char *id, unsigned int idlen,
- time_t expiry, unsigned char *ucaData,
- unsigned int nData)
+static apr_status_t socache_dbm_store(ap_socache_instance_t *ctx,
+ server_rec *s, const unsigned char *id,
+ unsigned int idlen, time_t expiry,
+ unsigned char *ucaData,
+ unsigned int nData, apr_pool_t *pool)
{
apr_dbm_t *dbm;
apr_datum_t dbmkey;
return APR_SUCCESS;
}
-static void socache_dbm_remove(ap_socache_instance_t *ctx, server_rec *s,
- const unsigned char *id, unsigned int idlen,
- apr_pool_t *p)
+static apr_status_t socache_dbm_remove(ap_socache_instance_t *ctx,
+ server_rec *s, const unsigned char *id,
+ unsigned int idlen, apr_pool_t *p)
{
apr_dbm_t *dbm;
apr_datum_t dbmkey;
"Cannot open SSLSessionCache DBM file `%s' for writing "
"(delete)",
ctx->data_file);
- return;
+ return rv;
}
apr_dbm_delete(dbm, dbmkey);
apr_dbm_close(dbm);
- return;
+ return APR_SUCCESS;
}
static void socache_dbm_expire(ap_socache_instance_t *ctx, server_rec *s)
static apr_status_t socache_dc_store(ap_socache_instance_t *ctx, server_rec *s,
const unsigned char *id, unsigned int idlen,
time_t timeout,
- unsigned char *der, unsigned int der_len)
+ unsigned char *der, unsigned int der_len,
+ apr_pool_t *p)
{
/* !@#$%^ - why do we deal with *absolute* time anyway??? */
timeout -= time(NULL);
return APR_SUCCESS;
}
-static void socache_dc_remove(ap_socache_instance_t *ctx, server_rec *s,
- const unsigned char *id, unsigned int idlen,
- apr_pool_t *p)
+static apr_status_t socache_dc_remove(ap_socache_instance_t *ctx,
+ server_rec *s, const unsigned char *id,
+ unsigned int idlen, apr_pool_t *p)
{
/* Remove any corresponding session from the distributed cache context */
if (!DC_CTX_remove_session(ctx->dc, id, idlen)) {
ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "distributed scache 'remove_session' MISS");
+ return APR_NOTFOUND;
} else {
ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "distributed scache 'remove_session' HIT");
+ return APR_SUCCESS;
}
}
static apr_status_t socache_mc_store(ap_socache_instance_t *ctx, server_rec *s,
const unsigned char *id, unsigned int idlen,
time_t timeout,
- unsigned char *ucaData, unsigned int nData)
+ unsigned char *ucaData, unsigned int nData,
+ apr_pool_t *p)
{
char buf[MC_KEY_LEN];
apr_status_t rv;
return APR_SUCCESS;
}
-static apr_status_t socache_mc_retrieve(ap_socache_instance_t *ctx,
- server_rec *s,
+static apr_status_t socache_mc_retrieve(ap_socache_instance_t *ctx, server_rec *s,
const unsigned char *id, unsigned int idlen,
unsigned char *dest, unsigned int *destlen,
apr_pool_t *p)
return APR_SUCCESS;
}
-static void socache_mc_remove(ap_socache_instance_t *ctx, server_rec *s,
- const unsigned char *id, unsigned int idlen,
- apr_pool_t *p)
+static apr_status_t socache_mc_remove(ap_socache_instance_t *ctx, server_rec *s,
+ const unsigned char *id,
+ unsigned int idlen, apr_pool_t *p)
{
char buf[MC_KEY_LEN];
apr_status_t rv;
if (socache_mc_id2key(ctx, id, idlen, buf, sizeof buf)) {
- return;
+ return APR_EINVAL;
}
rv = apr_memcache_delete(ctx->mc, buf, 0);
ap_log_error(APLOG_MARK, APLOG_DEBUG, rv, s,
"scache_mc: error deleting key '%s' ",
buf);
- return;
}
+
+ return rv;
}
static void socache_mc_status(ap_socache_instance_t *ctx, request_rec *r, int flags)
}
static apr_status_t socache_shmcb_store(ap_socache_instance_t *ctx,
- server_rec *s,
- const unsigned char *id, unsigned int idlen,
- time_t timeout,
+ server_rec *s, const unsigned char *id,
+ unsigned int idlen, time_t timeout,
unsigned char *encoded,
- unsigned int len_encoded)
+ unsigned int len_encoded,
+ apr_pool_t *p)
{
SHMCBHeader *header = ctx->header;
SHMCBSubcache *subcache = SHMCB_MASK(header, id);
return rv == 0 ? APR_SUCCESS : APR_EGENERAL;
}
-static void socache_shmcb_remove(ap_socache_instance_t *ctx, server_rec *s,
- const unsigned char *id, unsigned int idlen,
- apr_pool_t *p)
+static apr_status_t socache_shmcb_remove(ap_socache_instance_t *ctx,
+ server_rec *s, const unsigned char *id,
+ unsigned int idlen, apr_pool_t *p)
{
SHMCBHeader *header = ctx->header;
SHMCBSubcache *subcache = SHMCB_MASK(header, id);
+ apr_status_t rv;
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
"socache_shmcb_remove (0x%02x -> subcache %d)",
if (idlen < 4) {
ap_log_error(APLOG_MARK, APLOG_ERR, 0, s, "unusably short session_id provided "
"(%u bytes)", idlen);
- return;
+ return APR_EINVAL;
}
- if (shmcb_subcache_remove(s, header, subcache, id, idlen))
+ if (shmcb_subcache_remove(s, header, subcache, id, idlen) == 0) {
header->stat_removes_hit++;
- else
+ rv = APR_SUCCESS;
+ } else {
header->stat_removes_miss++;
+ rv = APR_NOTFOUND;
+ }
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
"leaving socache_shmcb_remove successfully");
+
+ return rv;
}
static void socache_shmcb_status(ap_socache_instance_t *ctx,
}
rv = mc->sesscache->store(mc->sesscache_context, s, id, idlen,
- expiry, encoded, len);
+ expiry, encoded, len, p);
if (mc->sesscache->flags & AP_SOCACHE_FLAG_NOTMPSAFE) {
ssl_mutex_off(s);