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