Andy Sy | 9 Nov 11:13
Favicon
Gravatar

popa3d-vname, allowing hierarchies for "domain:directory" in vnamemap

Hi all,

I am using hhg's patch at

   http://hhg.to/popa3d/popa3d-0.6.3-vname-2.diff

but it doesn't seem to support directory hierarchies for
directory values in vnamemap. e.g.

   "mydomain.com:mydomain"

works, but

   "mydomain.com:anotherdir/mydomain"

won't.

I wrote the attached patch to allow the above to happen,
but is this safe?

Note that the patch can be applied to unpatched 1.0.2
and result in compilable virtual.c, but only makes
sense when popa3d-0.6.3-vname-2.diff is also applied.

- Andy

============================
http://webmechs.com/webpress
The Webmechs Webpress Blog
--- virtual.c.orig	2010-11-09 10:06:10.829767335 +0000
+++ virtual.c	2010-11-09 10:06:15.847769298 +0000
@@ -127,6 +127,7 @@ struct passwd *virtual_userpass(char *us
 	char *address, *pathname;
 	char *template, *passwd;
 	int fail;
+    int vname_lookup_fail=1;
 	int fd, size;

 	*known = 0;
@@ -137,7 +138,9 @@ struct passwd *virtual_userpass(char *us
 	virtual_spool = NULL;

 #if VIRTUAL_VNAME
-	if (!(address = vname_lookup(user)))
+	if (address = vname_lookup(user))
+      vname_lookup_fail=0;
+    else
 #endif
 	if (!(address = lookup())) return NULL;

@@ -154,7 +157,7 @@ struct passwd *virtual_userpass(char *us
 	}

 /* This "can't happen", but is just too critical to not check explicitly */
-	if (strchr(address, '/') || strchr(user, '/'))
+	if ( vname_lookup_fail && (strchr(address, '/') || strchr(user, '/')) )
 		return NULL;

 	pathname = concat(VIRTUAL_HOME_PATH, "/", address, NULL);

Gmane