Commit 4a0d3ba6 authored by Nils Goroll's avatar Nils Goroll
parent 084bc7db
...@@ -71,7 +71,7 @@ struct vmod_hoailona_hosts { ...@@ -71,7 +71,7 @@ struct vmod_hoailona_hosts {
struct policyitem { struct policyitem {
VSLIST_ENTRY(policyitem) list; VSLIST_ENTRY(policyitem) list;
struct vmod_hoailona_policy *policy; struct vmod_hoailona_policy *policy;
}; };
typedef VSLIST_HEAD(policyhead, policyitem) policyhead_t; typedef VSLIST_HEAD(policyhead, policyitem) policyhead_t;
...@@ -81,9 +81,11 @@ struct policy_task { ...@@ -81,9 +81,11 @@ struct policy_task {
#define VMOD_HOAILONA_POLICY_TASK_MAGIC 0x5fc90249 #define VMOD_HOAILONA_POLICY_TASK_MAGIC 0x5fc90249
struct host *host; struct host *host;
struct assignment *assignment; struct assignment *assignment;
struct vmod_hoailona_policy *policy; struct vmod_hoailona_policy *policy;
}; };
#define BLOB_VMOD_HOAILONA_SECRET_TYPE 0xaa50e92c
static inline void static inline void
WS_Contains(struct ws * const restrict ws, const void * const restrict ptr, WS_Contains(struct ws * const restrict ws, const void * const restrict ptr,
const size_t len) const size_t len)
...@@ -136,11 +138,13 @@ VCL_VOID ...@@ -136,11 +138,13 @@ VCL_VOID
vmod_policy__init(VRT_CTX, struct vmod_hoailona_policy **policyp, vmod_policy__init(VRT_CTX, struct vmod_hoailona_policy **policyp,
const char *vcl_name, struct vmod_priv *init_task, const char *vcl_name, struct vmod_priv *init_task,
VCL_ENUM policys, VCL_DURATION ttl, VCL_STRING description, VCL_ENUM policys, VCL_DURATION ttl, VCL_STRING description,
VCL_BLOB secret, VCL_INT start_offset) VCL_BLOB secret_in, VCL_INT start_offset)
{ {
struct vmod_hoailona_policy *policy; struct vmod_hoailona_policy *policy;
policyhead_t *policyhead; policyhead_t *policyhead;
struct policyitem *item; struct policyitem *item;
struct vrt_blob *secret;
unsigned char *spc;
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(ctx->ws, WS_MAGIC); CHECK_OBJ_NOTNULL(ctx->ws, WS_MAGIC);
...@@ -197,14 +201,20 @@ vmod_policy__init(VRT_CTX, struct vmod_hoailona_policy **policyp, ...@@ -197,14 +201,20 @@ vmod_policy__init(VRT_CTX, struct vmod_hoailona_policy **policyp,
policy->description = strdup(description); policy->description = strdup(description);
else else
AZ(policy->description); AZ(policy->description);
if (secret != NULL) { if (secret_in != NULL && secret_in->len > 0) {
policy->secret = malloc(sizeof(*secret)); AN(secret_in->blob);
AN(policy->secret); spc = malloc(sizeof(*secret) + secret_in->len);
policy->secret->len = secret->len; AN(spc);
policy->secret->priv = malloc(secret->len);
AN(policy->secret->priv); secret = (void *)spc;
memcpy(policy->secret->priv, secret->priv, secret->len); spc += sizeof(*secret);
policy->secret->free = NULL;
memcpy(spc, secret_in->blob, secret_in->len);
secret->blob = spc;
secret->len = secret_in->len;
secret->type = BLOB_VMOD_HOAILONA_SECRET_TYPE;
policy->secret = secret;
} }
else else
AZ(policy->secret); AZ(policy->secret);
...@@ -227,9 +237,8 @@ vmod_policy__fini(struct vmod_hoailona_policy **policyp) ...@@ -227,9 +237,8 @@ vmod_policy__fini(struct vmod_hoailona_policy **policyp)
if (policy->description != NULL) if (policy->description != NULL)
free(policy->description); free(policy->description);
if (policy->secret != NULL) { if (policy->secret != NULL) {
AN(policy->secret->priv); // single allocation including blob
free(policy->secret->priv); free(policy->freeptr);
free(policy->secret);
} }
FREE_OBJ(policy); FREE_OBJ(policy);
} }
......
...@@ -49,7 +49,10 @@ struct vmod_hoailona_policy { ...@@ -49,7 +49,10 @@ struct vmod_hoailona_policy {
#define VMOD_HOAILONA_POLICY_MAGIC 0xf729cbfa #define VMOD_HOAILONA_POLICY_MAGIC 0xf729cbfa
char *vcl_name; char *vcl_name;
char *description; char *description;
struct vmod_priv *secret; union {
VCL_BLOB secret;
void *freeptr;
};
VCL_DURATION ttl; VCL_DURATION ttl;
enum policy_type type; enum policy_type type;
VCL_INT start_offset; VCL_INT start_offset;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment