16 個(gè)字元 (UT_HOSTSIZE) 則系統(tǒng)會(huì)以 IP 紀(jì)錄,因此你打 last 就會(huì)看到一堆 IP 而不是"不完整"的 hostname,有些系統(tǒng)如 bbs 也會(huì)受影響 。當(dāng)然,這個(gè)。打 last 顯示 IP 而不是 hostname,Why ?。" />

日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

打 last 顯示 IP 而不是 hostname,Why ?

從 FreeBSD-2.2/3.0 起,如果登入的 FQDN 長(zhǎng)度 > 16 個(gè)字元 (UT_HOSTSIZE)
則系統(tǒng)會(huì)以 IP 紀(jì)錄,因此你打 last 就會(huì)看到一堆 IP 而不是"不完整"的
hostname,有些系統(tǒng)如 bbs 也會(huì)受影響 。當(dāng)然,這個(gè) feature 有些人不喜歡
,畢竟人還是看 FQDN 比較習(xí)慣,因此你可以自己拿掉這個(gè) feature 。

1. 修改 telnetd 的程式碼
telnetd 的程式碼放在 /usr/src/libexec/telnetd/ 或是 ftp://freebsd
.csIE.nctu.edu.tw/pub/FreeBSD-current/src/libexec/telnetd/,
取回來後,你可以先修改 8bit 的支援,再來拿掉判斷 UT_HOSTSIZE
的地方 。修改 telnetd.c 把以下這段 (搜尋 hp->h_name)

>> } else if (hp &&
>> (strlen(hp->h_name) <= ((utmp_len < 0) ? -utmp_len : utmp_len))) {
host = hp->h_name;
} else {
host = inet_ntoa(who->sin_addr);
}

改成

>> } else if (hp) {
host = hp->h_name;
} else {
host = inet_ntoa(who->sin_addr);
}

2. 修改 login 的程式碼
login 的程式碼放在 /usr/src/usr.bin/login/ 或是 ftp://freebsd
.csie.nctu.edu.tw/pub/FreeBSD-current/src/usr.bin/login/,
取回來後,修改 login.c 把以下這段 (搜尋 UT_HOSTSIZE) 完全刪除 。

>> if (strlen(optarg) > UT_HOSTSIZE) {
>> struct hostent *hp = gethostbyname(optarg);
>>
>> if (hp != NULL) {
>> struct in_addr in;
>>
>> memmove(&in, hp->h_addr, sizeof(in));
>> optarg = strdup(inet_ntoa(in));
>> } else
>> optarg = "invalid hostname";
>> }

3. 其他的程式
還有其他的程式會(huì)做寫入 utmp 或 wtmp 的動(dòng)作,你必須自行修改,
你可以從 logwtmp(), UT_HOSTSIZE, hp->h_name, utmp, wtmp 等等
關(guān)鍵字來搜尋修改 。

    推薦閱讀