从 freebsd-2.2/3.0 起,如果登入的 fqdn 长度 > 16 个字元 (ut_hostsize)
则系统会以 ip 纪录,因此你打 last 就会看到一堆 ip 而不是"不完整"的
hostname,有些系统如 bbs 也会受影响。当然,这个 feature 有些人不喜欢
,毕竟人还是看 fqdn 比较习惯,因此你可以自己拿掉这个 feature。
1. 修改 te.netd 的程式码
te.netd 的程式码放在 /usr/src/libexec/te.netd/ 或是 ftp://freebsd
.csie.nctu.edu.tw/pub/freebsd-current/src/libexec/te.netd/,
取回来後,你可以先修改 8bit 的支援,再来拿掉判断 ut_hostsize
的地方。修改 te.netd.c 把以下这段 (搜寻 hp->h_name)
>> } else if (hp &&
>> (strlen(hp->h_name) <= ((utmp_len < 0) ? -utmp_len : utmp_len))) {
host = hp->h_name;
} else {
host = .net_ntoa(who->sin_addr);
}
改成
>> } else if (hp) {
host = hp->h_name;
} else {
host = .net_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(.net_ntoa(in));
>> } else
>> optarg = "invalid hostname";
>> }
3. 其他的程式
还有其他的程式会做写入 utmp 或 wtmp 的动作,你必须自行修改,
你可以从 logwtmp(), ut_hostsize, hp->h_name, utmp, wtmp 等等
关键字来搜寻修改。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器