Fix symlink following bug in chmod -R and friends.  Allow SYSV style
'chown foo:bar' in addition to 'chown foo.bar', and fix a bug in the
busybox globbing routine such that 'find /dir -name [i]' no longer
segfaults.
 -Erik
diff --git a/chmod_chown_chgrp.c b/chmod_chown_chgrp.c
index 8dd7670..fb93f3f 100644
--- a/chmod_chown_chgrp.c
+++ b/chmod_chown_chgrp.c
@@ -48,7 +48,7 @@
 
 	"\nOptions:\n\t-R\tchange files and directories recursively\n";
 static const char chown_usage[] =
-	"chown [OPTION]...  OWNER[.[GROUP] FILE...\n\n"
+	"chown [OPTION]...  OWNER[<.|:>[GROUP] FILE...\n\n"
 	"Change the owner and/or group of each FILE to OWNER and/or GROUP.\n"
 
 	"\nOptions:\n\t-R\tchange files and directories recursively\n";
@@ -140,6 +140,8 @@
 				goto bad_group;
 		} else {
 			groupName = strchr(*argv, '.');
+			if (groupName == NULL)
+				groupName = strchr(*argv, ':');
 			if (groupName) {
 				*groupName++ = '\0';
 				gid = strtoul(groupName, &p, 10);
@@ -169,7 +171,7 @@
 		fatalError( "%s: too few arguments\n", invocationName);
 	}
 	while (argc-- > 1) {
-		if (recursiveAction (*(++argv), recursiveFlag, TRUE, FALSE, 
+		if (recursiveAction (*(++argv), recursiveFlag, FALSE, FALSE, 
 					fileAction, fileAction, NULL) == FALSE)
 			exit(FALSE);
 	}
diff --git a/utility.c b/utility.c
index 0045e4d..773f6a8 100644
--- a/utility.c
+++ b/utility.c
@@ -1058,6 +1058,7 @@
 	const char *retryText;
 	int ch;
 	int found;
+	int len;
 
 	retryPat = NULL;
 	retryText = NULL;
@@ -1084,13 +1085,17 @@
 				if (*text == ch)
 					found = TRUE;
 			}
-			if (found == FALSE)
-				continue;
+			len=strlen(text);
+			if (found == FALSE && len!=0) {
+				return FALSE;
+			}
 			if (found == TRUE) {
-				//printf("Got a match.  pattern='%s'  text='%s'\n", pattern, text);
-				if (retryPat || retryText) {
-					pattern = retryPat;
-					text = ++retryText;
+				if (strlen(pattern)==0 && len==1) {
+					return TRUE;
+				}
+				if (len!=0) {
+					text++;
+					continue;
 				}
 			}