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