From owner-svn-src-user@FreeBSD.ORG  Wed Jan  6 21:11:38 2010
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 04C32106566B;
	Wed,  6 Jan 2010 21:11:38 +0000 (UTC) (envelope-from ed@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id E87F98FC0A;
	Wed,  6 Jan 2010 21:11:37 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o06LBbpN040841;
	Wed, 6 Jan 2010 21:11:37 GMT (envelope-from ed@svn.freebsd.org)
Received: (from ed@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id o06LBb8q040837;
	Wed, 6 Jan 2010 21:11:37 GMT (envelope-from ed@svn.freebsd.org)
Message-Id: <201001062111.o06LBb8q040837@svn.freebsd.org>
From: Ed Schouten <ed@FreeBSD.org>
Date: Wed, 6 Jan 2010 21:11:37 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r201673 - user/ed/utmpx/lib/libc/gen
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Wed, 06 Jan 2010 21:11:38 -0000

Author: ed
Date: Wed Jan  6 21:11:37 2010
New Revision: 201673
URL: http://svn.freebsd.org/changeset/base/201673

Log:
  Treat ut_id as binary information, not a string.
  
  Looking at both the implementation from Solaris and NetBSD, ut_id isn't
  supposed to be a string. It makes sense, because I can imagine certain
  applications just write random binary data into this field to identify
  sessions.

Modified:
  user/ed/utmpx/lib/libc/gen/getutxent.c
  user/ed/utmpx/lib/libc/gen/pututxline.c
  user/ed/utmpx/lib/libc/gen/utxdb.h

Modified: user/ed/utmpx/lib/libc/gen/getutxent.c
==============================================================================
--- user/ed/utmpx/lib/libc/gen/getutxent.c	Wed Jan  6 20:54:04 2010	(r201672)
+++ user/ed/utmpx/lib/libc/gen/getutxent.c	Wed Jan  6 21:11:37 2010	(r201673)
@@ -101,7 +101,7 @@ futx_to_utx(const struct futx *fu, struc
 	case SHUTDOWN_TIME:
 		break;
 	case USER_PROCESS:
-		FTOU_STRING(fu, ut, id);
+		FTOU_ID(fu, ut);
 		FTOU_STRING(fu, ut, user);
 		FTOU_STRING(fu, ut, line);
 		/* Extension: host name. */
@@ -109,16 +109,16 @@ futx_to_utx(const struct futx *fu, struc
 		FTOU_PID(fu, ut);
 		break;
 	case INIT_PROCESS:
-		FTOU_STRING(fu, ut, id);
+		FTOU_ID(fu, ut);
 		FTOU_PID(fu, ut);
 		break;
 	case LOGIN_PROCESS:
-		FTOU_STRING(fu, ut, id);
+		FTOU_ID(fu, ut);
 		FTOU_STRING(fu, ut, user);
 		FTOU_PID(fu, ut);
 		break;
 	case DEAD_PROCESS:
-		FTOU_STRING(fu, ut, id);
+		FTOU_ID(fu, ut);
 		FTOU_PID(fu, ut);
 		break;
 	default:
@@ -202,7 +202,7 @@ getutxid(const struct utmpx *id)
 			case INIT_PROCESS:
 			case LOGIN_PROCESS:
 			case DEAD_PROCESS:
-				if (strncmp(fu->fu_id, id->ut_id,
+				if (memcmp(fu->fu_id, id->ut_id,
 				    MIN(sizeof fu->fu_id, sizeof id->ut_id)) == 0)
 					goto found;
 			}

Modified: user/ed/utmpx/lib/libc/gen/pututxline.c
==============================================================================
--- user/ed/utmpx/lib/libc/gen/pututxline.c	Wed Jan  6 20:54:04 2010	(r201672)
+++ user/ed/utmpx/lib/libc/gen/pututxline.c	Wed Jan  6 21:11:37 2010	(r201673)
@@ -69,7 +69,7 @@ utx_to_futx(const struct utmpx *ut, stru
 	case SHUTDOWN_TIME:
 		break;
 	case USER_PROCESS:
-		UTOF_STRING(ut, fu, id);
+		UTOF_ID(ut, fu);
 		UTOF_STRING(ut, fu, user);
 		UTOF_STRING(ut, fu, line);
 		/* Extension: host name. */
@@ -77,16 +77,16 @@ utx_to_futx(const struct utmpx *ut, stru
 		UTOF_PID(ut, fu);
 		break;
 	case INIT_PROCESS:
-		UTOF_STRING(ut, fu, id);
+		UTOF_ID(ut, fu);
 		UTOF_PID(ut, fu);
 		break;
 	case LOGIN_PROCESS:
-		UTOF_STRING(ut, fu, id);
+		UTOF_ID(ut, fu);
 		UTOF_STRING(ut, fu, user);
 		UTOF_PID(ut, fu);
 		break;
 	case DEAD_PROCESS:
-		UTOF_STRING(ut, fu, id);
+		UTOF_ID(ut, fu);
 		UTOF_PID(ut, fu);
 		break;
 	default:
@@ -121,7 +121,7 @@ utx_active_add(const struct futx *fu)
 		case USER_PROCESS:
 		case INIT_PROCESS:
 		case LOGIN_PROCESS:
-			if (strncmp(fu->fu_id, fe.fu_id, sizeof fe.fu_id) != 0)
+			if (memcmp(fu->fu_id, fe.fu_id, sizeof fe.fu_id) != 0)
 				continue;
 			/* FALLTHROUGH */
 		default:
@@ -156,7 +156,7 @@ utx_active_remove(struct futx *fu)
 		case USER_PROCESS:
 		case INIT_PROCESS:
 		case LOGIN_PROCESS:
-			if (strncmp(fu->fu_id, fe.fu_id, sizeof fe.fu_id) != 0)
+			if (memcmp(fu->fu_id, fe.fu_id, sizeof fe.fu_id) != 0)
 				continue;
 
 			/*

Modified: user/ed/utmpx/lib/libc/gen/utxdb.h
==============================================================================
--- user/ed/utmpx/lib/libc/gen/utxdb.h	Wed Jan  6 20:54:04 2010	(r201672)
+++ user/ed/utmpx/lib/libc/gen/utxdb.h	Wed Jan  6 21:11:37 2010	(r201673)
@@ -60,6 +60,10 @@ struct futx {
 	strncpy((ut)->ut_ ## field, (fu)->fu_ ## field,		\
 	    MIN(sizeof (ut)->ut_ ## field - 1, sizeof (fu)->fu_ ## field)); \
 } while (0)
+#define	FTOU_ID(fu, ut) do { \
+	memcpy((ut)->ut_id, (fu)->fu_id,				\
+	    MIN(sizeof (ut)->ut_id, sizeof (fu)->fu_id));		\
+} while (0)
 #define	FTOU_PID(fu, ut) do { \
 	(ut)->ut_pid = be32toh((fu)->fu_pid);				\
 } while (0)
@@ -77,6 +81,10 @@ struct futx {
 	strncpy((fu)->fu_ ## field, (ut)->ut_ ## field,		\
 	    MIN(sizeof (fu)->fu_ ## field, sizeof (ut)->ut_ ## field));	\
 } while (0)
+#define	UTOF_ID(ut, fu) do { \
+	memcpy((fu)->fu_id, (ut)->ut_id,				\
+	    MIN(sizeof (fu)->fu_id, sizeof (ut)->ut_id));		\
+} while (0)
 #define	UTOF_PID(ut, fu) do { \
 	(fu)->fu_pid = htobe32((ut)->ut_pid);				\
 } while (0)