svn commit: r201673 - user/ed/utmpx/lib/libc/gen

Ed Schouten ed at FreeBSD.org
Wed Jan 6 21:11:38 UTC 2010


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)


More information about the svn-src-user mailing list