r3006 - trunk/varnish-cache/bin/varnishd
phk at projects.linpro.no
phk at projects.linpro.no
Wed Jul 23 23:04:12 CEST 2008
Author: phk
Date: 2008-07-23 23:04:12 +0200 (Wed, 23 Jul 2008)
New Revision: 3006
Modified:
trunk/varnish-cache/bin/varnishd/mgt_vcc.c
Log:
Prevent loading multiple VCL's with the same name if the client is not
there to stop us.
Fixes #281
Modified: trunk/varnish-cache/bin/varnishd/mgt_vcc.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/mgt_vcc.c 2008-07-23 20:57:40 UTC (rev 3005)
+++ trunk/varnish-cache/bin/varnishd/mgt_vcc.c 2008-07-23 21:04:12 UTC (rev 3006)
@@ -393,16 +393,27 @@
free(vp);
}
+static struct vclprog *
+mgt_vcc_byname(const char *name)
+{
+ struct vclprog *vp;
+
+ VTAILQ_FOREACH(vp, &vclhead, list)
+ if (!strcmp(name, vp->name))
+ return (vp);
+ return (NULL);
+}
+
+
static int
mgt_vcc_delbyname(const char *name)
{
struct vclprog *vp;
- VTAILQ_FOREACH(vp, &vclhead, list) {
- if (!strcmp(name, vp->name)) {
- mgt_vcc_del(vp);
- return (0);
- }
+ vp = mgt_vcc_byname(name);
+ if (vp != NULL) {
+ mgt_vcc_del(vp);
+ return (0);
}
return (1);
}
@@ -541,9 +552,17 @@
char *vf, *p = NULL;
struct vsb *sb;
unsigned status;
+ struct vclprog *vp;
(void)priv;
+ vp = mgt_vcc_byname(av[2]);
+ if (vp != NULL) {
+ cli_out(cli, "Already a VCL program named %s", av[2]);
+ cli_result(cli, CLIS_PARAM);
+ return;
+ }
+
sb = vsb_newauto();
XXXAN(sb);
vf = mgt_VccCompile(sb, av[3], NULL, 0);
@@ -575,8 +594,15 @@
struct vsb *sb;
unsigned status;
char *p = NULL;
+ struct vclprog *vp;
(void)priv;
+ vp = mgt_vcc_byname(av[2]);
+ if (vp != NULL) {
+ cli_out(cli, "Already a VCL program named %s", av[2]);
+ cli_result(cli, CLIS_PARAM);
+ return;
+ }
sb = vsb_newauto();
XXXAN(sb);
@@ -607,9 +633,9 @@
{
struct vclprog *vp;
- VTAILQ_FOREACH(vp, &vclhead, list)
- if (!strcmp(vp->name, name))
- return (vp);
+ vp = mgt_vcc_byname(name);
+ if (vp != NULL)
+ return (vp);
cli_result(cli, CLIS_PARAM);
cli_out(cli, "No configuration named %s known.", name);
return (NULL);
More information about the varnish-commit
mailing list