inn 從很早就支援帳號密碼認證的方式來讀取/發送新聞群組文章,
但是 innbbsd 多次演進以來, 尚未將此機能加入.
而小弟因見識淺薄, 似乎也還沒看到有 BBS 系統自行修改 innbbsd (或是 bbsnnrp
與 bbslink) 讓其支援以帳號密碼認證的方式進行轉信.
小弟想, 這個機制的加入將可以讓浮動 IP 的 BBS 轉信 BBS 有比較好的方式來取得
一些 news 的權限開放支援, 而 news 在權限上的控管也多了一種管道.
而多了這種管道, 一些開放的 news 或許也可以將原本全部開放的權限做管制,
以減少廣告信於轉信群組上流通的可能性.
不知道板上的前輩們對此機制有何看法?!
或是在這種機制上面已經有達成的實例?!
煩請不吝賜教, 謝謝. :)
--
[1;33mLeo [joehorn]:~> make love
[1;32mmake: don't know how to make love. Stop
[1;33mLeo [joehorn]:~> why?
[1;32mwhy?: No match. [m
--
[1;32m※Origin: [33m星 情 小 築 [37m< Star.leobbs.net >
[1;31m※From: [1;36m 52.c218-184-166.ethome.net.tw [m
如果相同的 innbbsd 版本修改是還好 重要的是要能辯識對方支不支援與溝通的協議
但不同版本間就麻煩了 有個統一的存取方法較好宣示 大家一起動手改 這時就看誰先
抽空去 trace inn 的 source 或是知道有那些現有的函式或函式庫可以抓 :p
--
說到 News/Standard 專門我就想到 P 兄 XD (有標準程式碼得以照本宣科最好 ~_~)
--
[mOrigin: [1;32;40mAtlantis [m DN: [1;31;40mbbs.ats.idv.tw [m IP : [1;36;40m203.73.231.195 [m ST: [1;33;40matlantis [m
提供一些資料做參考, 這是剛剛用封包監聽軟體在我自己的電腦上攔截本機端的
Outlook Express 對 News Server 傳送的封包解讀:
client 連上 News Server nntp port 之後將會產生以下的封包傳遞步驟:
Step Client <-> Server 傳送的封包資料
=========================================================
1 <-- 200 [News Server 相關資訊]
2 --> "MODE READER"
3 <-- 200 [News Server 相關資訊]
4 --> "AUTHINFO USER [username]"
5 <-- 381 PASS required
6 --> "AUTHINFO PASS [password]"
7 <-- 281 Ok!
8 --> GROUP [groupname]
9... <-> [group 間的通訊]
沒有帳號與密碼的話就會跳過 4~7 步!
剛剛 trace 過 bbsnnrp, bbslink, bbslink2 的 source,
也的確有 "MODE READER" 這個字串存在,
可是小弟嘗試改過 source 之後測試失敗! T_T
[deleted]
: 沒有帳號與密碼的話就會跳過 4~7 步!
: 剛剛 trace 過 bbsnnrp, bbslink, bbslink2 的 source,
: 也的確有 "MODE READER" 這個字串存在,
: 可是小弟嘗試改過 source 之後測試失敗! T_T
char AuthinfoUser[MAXBUFLEN];
char AuthinfoPass[MAXBUFLEN];
while ((c = getopt(argc, argv, "(ALL_OLD_ARGS_HERE)U:P:")) != -1)
case 'U':
strcpy(AuthinfoUser, optarg);
break;
case 'P':
strcpy(AuthinfoPass, optarg);
break;
bbslink.c:
else if (USEPOST)
{
tcpcommand("MODE READER");
status = tcpcommand("POST");
if (status == 480) /* Authentication required for command */
{
tcpcommand("AUTHINFO USER %s", AuthinfoUser);
tcpcommand("AUTHINFO PASS %s", AuthinfoPass);
status = tcpcommand("POST");
}
if (status == 340)
{
returnstatus = post_article(node, site, sover, textline);
}
bbsnnrp.c:
fputs("MODE READER\r\n", bbsnnrp->nnrpout);
fflush(bbsnnrp->nnrpout);
verboselog("nnrpPut: MODE READER\n");
fgets(buffer, sizeof buffer, bbsnnrp->nnrpin);
verboselog("nnrpGet: %s", buffer);
fputs("GROUP junk\r\n", bbsnnrp->nnrpout);
fflush(bbsnnrp->nnrpout);
verboselog("nnrpPut: GROUP junk\n");
fgets(buffer, sizeof buffer, bbsnnrp->nnrpin);
verboselog("nnrpGet: %s", buffer);
if (atoi(buffer) == 480)
{
fprintf(bbsnnrp->nnrpout, "AUTHINFO USER %s\r\n", AuthinfoUser);
fflush(bbsnnrp->nnrpout);
verboselog("nnrpPut: AUTHINFO USER %s\n", AuthinfoUser);
fgets(buffer, sizeof buffer, bbsnnrp->nnrpin);
verboselog("nnrpGet: %s", buffer);
fprintf(bbsnnrp->nnrpout, "AUTHINFO PASS %s\r\n", AuthinfoPass);
fflush(bbsnnrp->nnrpout);
verboselog("nnrpPut: AUTHINFO PASS %s\n", AuthinfoPass);
fgets(buffer, sizeof buffer, bbsnnrp->nnrpin);
verboselog("nnrpGet: %s", buffer);
if (buffer[0] != '2')
{
fprintf(stderr, "NNRP server AUTH failed\n");
return;
}
}
if (DefaultNntpProtocol == NntpPostProtocol)
{
fputs("MODE READER\r\n", bbsnnrp->innbbsout);
fflush(bbsnnrp->innbbsout);
verboselog("innbbsPut: MODE READER\n");
fgets(buffer, sizeof buffer, bbsnnrp->innbbsin);
verboselog("innbbsGet: %s", buffer);
}
-
大概這樣, 看的懂得自己玩..
--
Yen-Ming Lee [李彥明] | http://www.leeym.com/
--
※ From: utopia.leeym.com