Commit 35f82e2b authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Pass either vclsrc or vclfilename to the VCC compiler, and eliminate

the VCL fileopening logic in mgt so we have it only one place.
parent f1d9f827
......@@ -161,7 +161,7 @@ void STV_Config_Transient(void);
/* mgt_vcc.c */
char *mgt_VccCompile(struct cli *, const char *vclname, const char *vclsrc,
int C_flag);
const char *vclsrcfile, int C_flag);
void mgt_vcc_init(void);
void mgt_vcl_init(void);
......
......@@ -52,7 +52,8 @@ struct vcc_priv {
unsigned magic;
#define VCC_PRIV_MAGIC 0x70080cb8
char *dir;
const char *src;
const char *vclsrc;
const char *vclsrcfile;
char *csrcfile;
char *libfile;
};
......@@ -99,7 +100,7 @@ run_vcc(void *priv)
VCP_Err_Unref(vcp, mgt_vcc_err_unref);
VCP_Allow_InlineC(vcp, mgt_vcc_allow_inline_c);
VCP_Unsafe_Path(vcp, mgt_vcc_unsafe_path);
csrc = VCC_Compile(vcp, sb, vp->src);
csrc = VCC_Compile(vcp, sb, vp->vclsrc, vp->vclsrcfile);
AZ(VSB_finish(sb));
if (VSB_len(sb))
printf("%s", VSB_data(sb));
......@@ -251,7 +252,7 @@ mgt_vcc_compile(struct vcc_priv *vp, struct vsb *sb, int C_flag)
char *
mgt_VccCompile(struct cli *cli, const char *vclname, const char *vclsrc,
int C_flag)
const char *vclsrcfile, int C_flag)
{
struct vcc_priv vp;
struct vsb *sb;
......@@ -263,7 +264,8 @@ mgt_VccCompile(struct cli *cli, const char *vclname, const char *vclsrc,
XXXAN(sb);
INIT_OBJ(&vp, VCC_PRIV_MAGIC);
vp.src = vclsrc;
vp.vclsrc = vclsrc;
vp.vclsrcfile = vclsrcfile;
VSB_printf(sb, "vcl_%s", vclname);
AZ(VSB_finish(sb));
......@@ -271,7 +273,6 @@ mgt_VccCompile(struct cli *cli, const char *vclname, const char *vclsrc,
AN(vp.dir);
VJ_make_vcldir(vp.dir);
VSB_clear(sb);
VSB_printf(sb, "%s/%s", vp.dir, VGC_SRC);
AZ(VSB_finish(sb));
......
......@@ -43,7 +43,6 @@
#include "vcli.h"
#include "vcli_priv.h"
#include "vev.h"
#include "vfil.h"
#include "vtim.h"
#include "mgt_cli.h"
......@@ -60,7 +59,6 @@ struct vclprog {
static VTAILQ_HEAD(, vclprog) vclhead = VTAILQ_HEAD_INITIALIZER(vclhead);
static struct vclprog *active_vcl;
static struct vev *e_poker;
static struct vfil_path *vcl_path;
/*--------------------------------------------------------------------*/
......@@ -160,7 +158,7 @@ mgt_vcl_setstate(struct vclprog *vp, int warm)
static void
mgt_new_vcl(struct cli *cli, const char *vclname, const char *vclsrc,
const char *state, int C_flag)
const char *vclsrcfile, const char *state, int C_flag)
{
unsigned status;
char *lib, *p;
......@@ -178,7 +176,7 @@ mgt_new_vcl(struct cli *cli, const char *vclname, const char *vclsrc,
return;
}
lib = mgt_VccCompile(cli, vclname, vclsrc, C_flag);
lib = mgt_VccCompile(cli, vclname, vclsrc, vclsrcfile, C_flag);
if (lib == NULL)
return;
......@@ -210,7 +208,7 @@ mgt_vcc_default(struct cli *cli, const char *b_arg, const char *vclsrc,
if (b_arg == NULL) {
AN(vclsrc);
mgt_new_vcl(cli, "boot", vclsrc, NULL, C_flag);
mgt_new_vcl(cli, "boot", vclsrc, NULL, NULL, C_flag);
return;
}
......@@ -220,7 +218,7 @@ mgt_vcc_default(struct cli *cli, const char *b_arg, const char *vclsrc,
"backend default {\n"
" .host = \"%s\";\n"
"}\n", b_arg);
mgt_new_vcl(cli, "boot", buf, NULL, C_flag);
mgt_new_vcl(cli, "boot", buf, NULL, NULL, C_flag);
}
/*--------------------------------------------------------------------*/
......@@ -264,13 +262,12 @@ mcf_vcl_inline(struct cli *cli, const char * const *av, void *priv)
return;
}
mgt_new_vcl(cli, av[2], av[3], av[4], 0);
mgt_new_vcl(cli, av[2], av[3], NULL, av[4], 0);
}
void
mcf_vcl_load(struct cli *cli, const char * const *av, void *priv)
{
char *vcl, *fn;
struct vclprog *vp;
(void)priv;
......@@ -281,17 +278,7 @@ mcf_vcl_load(struct cli *cli, const char * const *av, void *priv)
return;
}
VFIL_setpath(&vcl_path, mgt_vcl_dir);
if (VFIL_searchpath(vcl_path, NULL, &vcl, av[3], &fn)) {
VCLI_Out(cli, "Cannot open '%s'", fn != NULL ? fn : av[3]);
REPLACE(fn, NULL);
VCLI_SetResult(cli, CLIS_PARAM);
return;
}
REPLACE(fn, NULL);
mgt_new_vcl(cli, av[2], vcl, av[4], 0);
free(vcl);
mgt_new_vcl(cli, av[2], NULL, av[3], av[4], 0);
}
static struct vclprog *
......
......@@ -13,7 +13,7 @@ varnish v1 -vcl+backend {
varnish v1 -cliok "param.set vcc_unsafe_path off"
varnish v1 -errvcl {Include path is unsafe} {
varnish v1 -errvcl {' is unsafe} {
backend default {
.host = "${s1_sock}";
}
......
......@@ -38,4 +38,5 @@ void VCP_Err_Unref(struct vcp *tl, unsigned u);
void VCP_Allow_InlineC(struct vcp *tl, unsigned u);
void VCP_Unsafe_Path(struct vcp *tl, unsigned u);
char *VCC_Compile(const struct vcp *, struct vsb *sb, const char *b);
char *VCC_Compile(const struct vcp *, struct vsb *sb,
const char *vclsrc, const char *vclsrcfile);
......@@ -456,7 +456,7 @@ vcc_file_source(const struct vcp * const vcp, struct vsb *sb, const char *fn)
struct source *sp;
if (!vcp->unsafe_path && strchr(fn, '/') != NULL) {
VSB_printf(sb, "Include path is unsafe '%s'\n", fn);
VSB_printf(sb, "VCL filename '%s' is unsafe.\n", fn);
return (NULL);
}
f = NULL;
......@@ -753,12 +753,19 @@ vcc_CompileSource(const struct vcp * const vcp, struct vsb *sb,
*/
char *
VCC_Compile(const struct vcp *vcp, struct vsb *sb, const char *b)
VCC_Compile(const struct vcp *vcp, struct vsb *sb,
const char *vclsrc, const char *vclsrcfile)
{
struct source *sp;
char *r;
sp = vcc_new_source(b, NULL, "input");
if (vclsrc != NULL) {
AZ(vclsrcfile);
sp = vcc_new_source(vclsrc, NULL, "input");
} else {
AN(vclsrcfile);
sp = vcc_file_source(vcp, sb, vclsrcfile);
}
if (sp == NULL)
return (NULL);
r = vcc_CompileSource(vcp, sb, sp);
......
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