/** * 更新ログから署名情報の収集 * @return array * $rc[ USER-AGENT ][ ホスト名 ][ ユーザ名 ] の配列を戻す * @static */ function summary_signature() { global $log; if (!$log['update']['use']) { return ''; } $sum = array(); $data = log::log_summary('update'); $name = log::get_log_field('update'); foreach ($data as $_data) { foreach ($_data as $line) { $field = log::line2field($line, $name); if (empty($field['ua'])) { continue; } $user = log::guess_user($field['user'], $field['ntlm'], $field['sig']); if (empty($user)) { continue; } $sum[$field['ua']][$field['host']][$user] = ''; } } return $sum; }
/** * ユーザ名推測 */ function logview_guess_user($data, $guess) { // 確定的な情報 $user = isset($data['user']) ? $data['user'] : ''; $ntlm = isset($data['ntlm']) ? $data['ntlm'] : ''; $sig = isset($data['sig']) ? $data['sig'] : ''; $now_user = log::guess_user($user, $ntlm, $sig); if (!empty($now_user)) { return $now_user; } // 見做し if (!isset($data['ua'])) { return ''; } if (!isset($guess[$data['ua']])) { return ''; } // USER-AGENT が一致したデータがあるか if (!isset($data['host'])) { return ''; } $user = ''; $level = 0; // とりあえずホスト名は完全一致 foreach ($guess[$data['ua']] as $_host => $val1) { list($sw, $lvl) = log::check_host($data['host'], $_host, $level); // ホスト名の一致確認 if (!$sw) { continue; } // ホスト名が一致しない // UA が等しく、同じIPなものの、複数ユーザまたは改変した場合は、複数人分出力 foreach ($val1 as $_user => $val2) { if (!empty($user)) { $user .= ' / '; } $user .= $_user; } } return $user; }