Openwall GNU/*/Linux - a small security-enhanced Linux distro for servers
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date: Tue, 09 Nov 2010 18:13:07 +0800
From: Andy Sy <andy.sy@...titans.com>
To: popa3d-users@...ts.openwall.com
Subject: 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);

Powered by blists - more mailing lists

Your e-mail address:

Powered by Openwall GNU/*/Linux - Powered by OpenVZ