MacOS X(Yosemite)でシステムアカウントの誤動作が発生しますか?

MacOS X(Yosemite)でシステムアカウントの誤動作が発生しますか?

すべてのUnix(CentOS、FreeBSD、MacOS X)でシステムアカウントをデフォルトのセキュリティルールとして有効にします。

MacOS X(Yosemite、10.10.3)でバグのある動作を見つけて修正しようとしています。

最近終了した一連のプロセスの分析を実行するたびに、プロセスは実際に終了しましlastcommたが、日付は次の例のように将来のものです。

••My_Mac••$lastcomm |もっと見る
lastcomm -X bob ttys007 0.00秒 7月26日 月曜日 14:13 (0:00:03.05)
もっと見る - bob ttys007 0.00秒 7月26日 月曜日 14:13 (0:00:03.05)
stty - bob ttys007 0.00秒 7月26日 月曜日 14:13 (0:00:00.05)
path_helpe - bob ttys007 0.00秒 7月26日 月曜日 14:13 (0:00:00.50)
sshd -SF _sshd__ 0.00秒 1月27日 月曜日 17:31 (0:00:04.91)
procmail -S bob __ 0.00秒月 7月26日 14:11 (0:00:00.09)
cron -F root __ 0.00秒 6月1日 月曜日 13:10 (0:00:00.33)
sendmail -S root __ 0.00秒 6月1日 月曜日 13:10 (0:00:00.31)
postdrop - ルート__ 0.00秒月6月1日13:10(0:00:00.09)
[...]
••My_Mac••$日付
2015年6月1日月曜日13:12:07 CEST
••My_Mac••$

まず、問題は間違った時間帯ほど単純ではありません。

7月26日14時13分(間違ったタイムスタンプ)と6月1日13時10分(正しいタイムスタンプ)は数日差があります。

dateこれは誤用による大きな時間ドリフトでもありません。さらに、このサーバーはntpポリシー1ntpサーバーで同期されます。


他の人もこのような不適切な行動を見たことがありますか?
この問題をよりよく研究する方法を見つけましたか?
これは既知のバグですか?

ベストアンサー1

ElCapitan(MacOSX 10.11..)でも同じ誤動作が見つかりました。調査の結果、/var/account/acctファイルのタイムスタンプデータが正しいことが確認されました。 lastcomm.cのソースコードのコンパイル
http://opensource.apple.com/tarballs/shell_cmds/shell_cmds-187.tar.gz
コンパイラメッセージを表示する「警告: 'u_int32_t *'( 'unsigned int *'とも呼ばれます)を 'const time_t *'( 'const long *'とも呼ばれます)型の引数に渡した互換性のないポインタ型。

次のパッチは無効なアカウントのタイムスタンプを修正します。エルキャピタンで。 Yosemite(10.10..)以前のバージョンで動作できます。

***最終連絡.c 2016/08/26 19:44:23 1.1
---lastcomm.c 2016/08/27 00:30:49 1.2
****************
*** 135,138****
---135,140----
        if (!*argv || リクエスト(argv, &ab)) {

+ time_t時間が長い。
+ 時間 = ab.ac_btime;
            t = 拡張(ab.ac_utime) + 拡張(ab.ac_stime);
            (間違った)printf(
****************
*** 144,148****
                 user_from_uid(ab.ac_uid, 0), UT_LINESIZE,
                 UT_LINESIZE、getdev(ab.ac_tty)、
! t /(ダブル)AHZ、ctime(&ab.ac_btime));
            デルタ=拡張(ab.ac_etime)/(ダブル)AHZ;
            printf(" (%1.0f:%02.0f:%05.2f)\n",
--- 146,150----
                 user_from_uid(ab.ac_uid, 0), UT_LINESIZE,
                 UT_LINESIZE、getdev(ab.ac_tty)、
! t /(ダブル)AHZ、ctime(&timelong));
            デルタ=拡張(ab.ac_etime)/(ダブル)AHZ;
            printf(" (%1.0f:%02.0f:%05.2f)\n",

おすすめ記事