电脑技术学习

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

dn001
从;FreeBSD-2.2/3.0;起,如果登入的;FQDN;长度;>;16;个字元;(UT_HOSTSIZE)
则系统会以;IP;纪录,因此你打;last;就会看到一堆;IP;而不是"不完整"的
hostname,有些系统如;bbs;也会受影响。当然,这个;feature;有些人不喜欢
,毕竟人还是看;FQDN;比较习惯,因此你可以自己拿掉这个;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.;其他的程式
还有其他的程式会做写入;utmp;或;wtmp;的动作,你必须自行修改,
你可以从;logwtmp(),;UT_HOSTSIZE,;hp->h_name,;utmp,;wtmp;等等
关键字来搜寻修改。

标签: