Subject: Re: useradd: spaces and $ in usernames
To: None <tech-userlevel@netbsd.org>
From: Hubert Feyrer <hubert.feyrer@informatik.fh-regensburg.de>
List: tech-userlevel
Date: 11/16/2001 01:26:31
On Fri, 16 Nov 2001, Hubert Feyrer wrote:
> The following patch works at least on 1.5.3_ALPHA, and I'd like to commit
> it if there are no major objections:

Here's an update that even handles creating, deleting, copying of
skel-files properly!


 - Hubert

Index: user.c
===================================================================
RCS file: /cvsroot/basesrc/usr.sbin/user/user.c,v
retrieving revision 1.20.4.8
diff -u -r1.20.4.8 user.c
--- user.c	2001/02/26 18:01:17	1.20.4.8
+++ user.c	2001/11/16 00:20:49
@@ -243,7 +244,7 @@
 
 	(void) seteuid(uid);
 	/* we add the "|| true" to keep asystem() quiet if there is a non-zero exit status. */
-	(void) asystem("%s -rf %s > /dev/null 2>&1 || true", RM, dir);
+	(void) asystem("%s -rf '%s' > /dev/null 2>&1 || true", RM, dir);
 	(void) seteuid(0);
 	if (rmdir(dir) < 0) {
 		warnx("Unable to remove all files in `%s'\n", dir);
@@ -385,11 +386,11 @@
 	if (n == 0) {
 		warnx("No \"dot\" initialisation files found");
 	} else {
-		(void) asystem("cd %s; %s -rw -pe %s . %s", 
+		(void) asystem("cd '%s'; %s -rw -pe %s . '%s'", 
 				skeldir, PAX, (verbose) ? "-v" : "", dir);
 	}
-	(void) asystem("%s -R -h %d:%d %s", CHOWN, uid, gid, dir);
-	(void) asystem("%s -R u+w %s", CHMOD, dir);
+	(void) asystem("%s -R -h %d:%d '%s'", CHOWN, uid, gid, dir);
+	(void) asystem("%s -R u+w '%s'", CHMOD, dir);
 	return n;
 }
 
@@ -619,7 +621,7 @@
 	char	*cp;
 
 	for (cp = login ; *cp ; cp++) {
-		if (!isalnum(*cp) && *cp != '.' && *cp != '_' && *cp != '-') {
+		if (*cp == ':' || *cp == '\'') {
 			return 0;
 		}
 	}
@@ -971,7 +973,7 @@
 			(void) pw_abort();
 			errx(EXIT_FAILURE, "home directory `%s' already exists", home);
 		} else {
-			if (asystem("%s -p %s", MKDIR, home) != 0) {
+			if (asystem("%s -p '%s'", MKDIR, home) != 0) {
 				(void) close(ptmpfd);
 				(void) pw_abort();
 				err(EXIT_FAILURE, "can't mkdir `%s'", home);
@@ -1144,7 +1146,7 @@
 	}
 	if (up != NULL) {
 		if ((up->u_flags & F_MKDIR) &&
-		    asystem("%s %s %s", MV, homedir, pwp->pw_dir) != 0) {
+		    asystem("%s '%s' '%s'", MV, homedir, pwp->pw_dir) != 0) {
 			(void) close(ptmpfd);
 			(void) pw_abort();
 			err(EXIT_FAILURE, "can't move `%s' to `%s'",

-- 
Want to get a clue on IPv6 but don't know where to start? Try this:
* Basics -> http://www.onlamp.com/pub/a/onlamp/2001/05/24/ipv6_tutorial.html
* Setup  -> http://www.onlamp.com/pub/a/onlamp/2001/06/01/ipv6_tutorial.html 
Of course with your #1 IPv6 ready operating system -> http://www.NetBSD.org/