Date: Wed, 6 Jan 2010 21:11:37 +0000 (UTC) From: Ed Schouten <ed@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r201673 - user/ed/utmpx/lib/libc/gen Message-ID: <201001062111.o06LBb8q040837@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201001062111.o06LBb8q040837>