[Pkg-shadow-commits] r1978 - in upstream/trunk: . libmisc man src

nekral-guest at alioth.debian.org nekral-guest at alioth.debian.org
Sun Apr 27 00:24:51 UTC 2008


Author: nekral-guest
Date: 2008-04-27 00:24:49 +0000 (Sun, 27 Apr 2008)
New Revision: 1978

Modified:
   upstream/trunk/ChangeLog
   upstream/trunk/NEWS
   upstream/trunk/libmisc/fields.c
   upstream/trunk/man/chfn.1.xml
   upstream/trunk/src/chfn.c
Log:
Allow non-US-ASCII characters in the GECOS fields ("name", "room number",
and "other info" fields).


Modified: upstream/trunk/ChangeLog
===================================================================
--- upstream/trunk/ChangeLog	2008-04-22 20:54:58 UTC (rev 1977)
+++ upstream/trunk/ChangeLog	2008-04-27 00:24:49 UTC (rev 1978)
@@ -1,3 +1,9 @@
+2008-04-27  Nicolas François  <nicolas.francois at centraliens.net>
+
+	* NEWS, libmisc/fields.c, src/chfn.c, man/chfn.1.xml: Allow
+	non-US-ASCII characters in the GECOS fields ("name", "room
+	number", and "other info" fields).
+
 2008-04-17  Nicolas François  <nicolas.francois at centraliens.net>
 
 	* NEWS, src/newgrp.c: Fix compilation failure when compiled with

Modified: upstream/trunk/NEWS
===================================================================
--- upstream/trunk/NEWS	2008-04-22 20:54:58 UTC (rev 1977)
+++ upstream/trunk/NEWS	2008-04-27 00:24:49 UTC (rev 1978)
@@ -9,6 +9,9 @@
     file; and fail if the feature is requested but not present on the
     system.
   * Fix build failure when configured with audit support.
+- chfn
+  * Allow non-US-ASCII characters in the GECOS fields ("name", "room
+    number", and "other info" fields).
 
 shadow-4.1.0 -> shadow-4.1.1						02-04-2008
 

Modified: upstream/trunk/libmisc/fields.c
===================================================================
--- upstream/trunk/libmisc/fields.c	2008-04-22 20:54:58 UTC (rev 1977)
+++ upstream/trunk/libmisc/fields.c	2008-04-27 00:24:49 UTC (rev 1978)
@@ -38,21 +38,31 @@
 /*
  * valid_field - insure that a field contains all legal characters
  *
- * The supplied field is scanned for non-printing and other illegal
- * characters.  If any illegal characters are found, valid_field
- * returns -1.  Zero is returned for success.
+ * The supplied field is scanned for non-printable and other illegal
+ * characters.
+ *  + -1 is returned if an illegal character is present.
+ *  +  1 is returned if no illegal characters are present, but the field
+ *       contains a non-printable character.
+ *  +  0 is returned otherwise.
  */
 int valid_field (const char *field, const char *illegal)
 {
 	const char *cp;
+	int err = 0;
 
-	for (cp = field;
-	     *cp && isprint (*cp & 0x7F) && !strchr (illegal, *cp); cp++);
+	for (cp = field; *cp && !strchr (illegal, *cp); cp++);
 
-	if (*cp)
-		return -1;
-	else
-		return 0;
+	if (*cp) {
+		err = -1;
+	} else {
+		for (cp = field; *cp && isprint (*cp); cp++);
+
+		if (*cp) {
+			err = 1;
+		}
+	}
+
+	return err;
 }
 
 /*

Modified: upstream/trunk/man/chfn.1.xml
===================================================================
--- upstream/trunk/man/chfn.1.xml	2008-04-22 20:54:58 UTC (rev 1977)
+++ upstream/trunk/man/chfn.1.xml	2008-04-27 00:24:49 UTC (rev 1978)
@@ -46,14 +46,17 @@
       GECOS field.
     </para>
 
-    <para>The only restriction placed on the contents of the fields is that
-      no control characters may be present, nor any of comma, colon, or
-      equal sign. The <emphasis remap='I'>other</emphasis> field does not
-      have this restriction, and is used to store accounting information
-      used by other applications.
+    <para>
+      These fields must not contain any colons. Except for the
+      <emphasis remap='I'>other</emphasis> field, they should not contain
+      any comma or equal sign. It is also recommended to avoid
+      non-US-ASCII characters, but this is only enforced for the phone
+      numbers. The <emphasis remap='I'>other</emphasis> field is used to
+      store accounting information used by other applications.
     </para>
 
-    <para> If none of the options are selected, <command>chfn</command>
+    <para>
+      If none of the options are selected, <command>chfn</command>
       operates in an interactive fashion, prompting the user with the
       current values for all of the fields. Enter the new value to change
       the field, or leave the line blank to use the current value. The

Modified: upstream/trunk/src/chfn.c
===================================================================
--- upstream/trunk/src/chfn.c	2008-04-22 20:54:58 UTC (rev 1977)
+++ upstream/trunk/src/chfn.c	2008-04-27 00:24:49 UTC (rev 1978)
@@ -536,12 +536,19 @@
  */
 static void check_fields (void)
 {
-	if (valid_field (fullnm, ":,=")) {
+	int err;
+	err = valid_field (fullnm, ":,=");
+	if (err > 0) {
+		fprintf (stderr, _("%s: name with non-ASCII characters: '%s'\n"), Prog, fullnm);
+	} else if (err < 0) {
 		fprintf (stderr, _("%s: invalid name: '%s'\n"), Prog, fullnm);
 		closelog ();
 		exit (E_NOPERM);
 	}
-	if (valid_field (roomno, ":,=")) {
+	err = valid_field (roomno, ":,=");
+	if (err > 0) {
+		fprintf (stderr, _("%s: room number with non-ASCII characters: '%s'\n"), Prog, roomno);
+	} else if (err < 0) {
 		fprintf (stderr, _("%s: invalid room number: '%s'\n"),
 		         Prog, roomno);
 		closelog ();
@@ -559,7 +566,10 @@
 		closelog ();
 		exit (E_NOPERM);
 	}
-	if (valid_field (slop, ":")) {
+	err = valid_field (slop, ":");
+	if (err > 0) {
+		fprintf (stderr, _("%s: '%s' contains non-ASCII characters\n"), Prog, slop);
+	} else if (err < 0) {
 		fprintf (stderr,
 		         _("%s: '%s' contains illegal characters\n"),
 		         Prog, slop);




More information about the Pkg-shadow-commits mailing list