【 以下文字转载自 cn_bbs_admin 讨论区 】
【 原文由 yuhuan 所发表 】
diff -rcs innbbsd-0.50beta-4/CHANGES innbbsd-0.50beta-5F/CHANGES
*** innbbsd-0.50beta-4/CHANGES Sat Sep 2 19:07:52 1995
--- innbbsd-0.50beta-5F/CHANGES Sun Sep 17 20:59:41 1995
***************
*** 106,108 ****
--- 106,123 ----
add -k option
fix PalmBBS bug for bbslink.c, not include utime.h
+ 0.50beta-5
+ bbslink broken for organization with "(".
+ bbslink may lose posts when connections broken
+ process disk write failed in received_article
+ add ctlinnbbsd pause, go command to pause/resume innbbsd.
+ add extra meaning for bbsnnrp -g option:
+ stdin: -g to specify and override newsgroups name
+ nntp: -g to specify the newsgroup name to process in the active
file
+ add more options for innbbs.conf
+ add -f innbbs.conf -D /home/bbs to use another innbbs.conf or
+ change BBSHOME
+ add filter.ctl
+ remove ~{, ~} for HZ->GB conversion
+ can't remove for PalmBBS
+ incorrect date information for bbslink
diff -rcs innbbsd-0.50beta-4/FEATURES innbbsd-0.50beta-5F/FEATURES
*** innbbsd-0.50beta-4/FEATURES Sat Sep 2 19:07:52 1995
--- innbbsd-0.50beta-5F/FEATURES Sun Sep 17 20:59:41 1995
***************
*** 1,6 ****
innbbsd 简介
! * 支援 client/server news gateway.
* 可同时接收多个 news server (多个 link) 喂送, 或主动从多个 news
server
收取相同或不同讨论区.
* 可同时 feed 多个 server (BBS or News). 不靠 news server 也能使 BBS
--- 1,6 ----
innbbsd 简介
! * 支援 client(active)/server(passive) news gateway.
* 可同时接收多个 news server (多个 link) 喂送, 或主动从多个 news
server
收取相同或不同讨论区.
* 可同时 feed 多个 server (BBS or News). 不靠 news server 也能使 BBS
***************
*** 19,21 ****
--- 19,22 ----
* 可用 inetd 启动或跑成 standalone server. 两种方式不管多少
connections
都只用一个 process 处理, 不会有 fork process 的负担.
* 利用 "ctlinnbbsd" 命令控制 server, 可随时检查 server 状态.
+ * 不同中文码转码 gateway
diff -rcs innbbsd-0.50beta-4/Makefile innbbsd-0.50beta-5F/Makefile
*** innbbsd-0.50beta-4/Makefile Sat Sep 2 19:07:56 1995
--- innbbsd-0.50beta-5F/Makefile Sun Sep 17 20:59:44 1995
***************
*** 1,13 ****
####################################################
# this is a bbs <--> news gateway
! #####################################################
! VERSION=0.50beta-4
! LASTVERSION=0.50beta-3
ADMINUSER= bbsroot@your.host.domain
#BBSHOME = /tmp/innbbsd-$(VERSION)
BBSHOME = /home/bbs/innbbsd/home
#BBS_SRC = /u/staff/bbsroot/csie_util/bntpd/bbs_src
BBS_SRC = /u/staff/bbsroot/bbs_src
#######################
# if you want to make a "bbsnnrp" only,
# change TARGET=$(BBSNNRP)
--- 1,34 ----
####################################################
# this is a bbs <--> news gateway
! ####################################################
! # Don't change them
! VERSION=0.50beta-5F
! LASTVERSION=0.50beta-4
! ####################################################
! # this will show up in the greeting message of innbbsd
ADMINUSER= bbsroot@your.host.domain
+ #
+ ####################################################
#BBSHOME = /tmp/innbbsd-$(VERSION)
BBSHOME = /home/bbs/innbbsd/home
#BBS_SRC = /u/staff/bbsroot/csie_util/bntpd/bbs_src
BBS_SRC = /u/staff/bbsroot/bbs_src
+ LANG=BIG5
+ #LANG=GB
+ #LANG=ENGLISH
+
+ ######################################################
+ # if you want to do gb <--> big5 converstion on the fly
+ # You should install HC or WORDGB before adding this line
+ #FILTER=-DFILTER -DBIG2GB -DGB2BIG -DHZ2GB
+ #FILTER=-DFILTER -DBIG2GB -DGB2BIG -DHZ2GB -DBIG2JIS -DJIS2BIG
+ #FILTER=WORDG2B
+ #FILTEROBJ= filter.o wildmat.o \
+ # convert/hztty/io.o convert/hztty/b2g.o \
+ # convert/hztty/b2g_tables.o \
+ # convert/hztty/hz2gb.o \
+ # convert/hztty/log.o \
+
#######################
# if you want to make a "bbsnnrp" only,
# change TARGET=$(BBSNNRP)
***************
*** 23,32 ****
OPT= -g
# You must choose at least one: PhoenixBBS, PalmBBS, PivotBBS,
SecretBBS
! # or PowerBBS
#
! # only Phoenix and Power BBS are supported and others haven't been
tested
########################################################################
BBS_DEP = PhoenixBBS
BBS_REC = $(BBS_SRC)/record.o r_port.o
BBS_POST = innd/bbspost
--- 44,54 ----
OPT= -g
# You must choose at least one: PhoenixBBS, PalmBBS, PivotBBS,
SecretBBS
! # ,PowerBBS, or MapleBBS
#
! # For PalmBBS, PowerBBS, MapleBBS, Please read README.xxx
########################################################################
+ # For PhoenixBBS,
BBS_DEP = PhoenixBBS
BBS_REC = $(BBS_SRC)/record.o r_port.o
BBS_POST = innd/bbspost
***************
*** 39,50 ****
# For PalmBBS
#BBS_DEP = PalmBBS
#BBS_REC = r_port.o $(BBS_SRC)/libbbs.a
! #BBS_POST =
################################################
# For Secret BBS,
#BBS_DEP = SecretBBS
#BBS_REC = $(BBS_SRC)/record.o r_port.o
#BBS_POST = innd/bbspost
###############################################3
# For Pivot BBS,
#BBS_DEP = PivotBBS
--- 61,81 ----
# For PalmBBS
#BBS_DEP = PalmBBS
#BBS_REC = r_port.o $(BBS_SRC)/libbbs.a
! #BBS_POST =
! #INND_ROOT= $(BBS_SRC)/
! #BBS_POST = $(INND_ROOT)innd/bbspost
################################################
# For Secret BBS,
#BBS_DEP = SecretBBS
#BBS_REC = $(BBS_SRC)/record.o r_port.o
#BBS_POST = innd/bbspost
+ ################################################
+ # For Maple BBS,
+ #BBS_DEP = MapleBBS
+ #BBS_REC = $(BBS_SRC)/record.o r_port.o
+ #INND_ROOT= $(BBS_SRC)/
+ #BBS_POST =
+ #BBS_POST = $(INND_ROOT)innd/bbspost
###############################################3
# For Pivot BBS,
#BBS_DEP = PivotBBS
***************
*** 56,83 ****
#
###############
DEBUGOBJ = /usr/lib/debug/mallocmap.o
! CFLAGS= -c -I. -I$(BBS_SRC) -D$(BBS_DEP) $(EXTRAFLAGS) -DDBZDEBUG
-D_PATH_BBSHOME=\"$(BBSHOME)\" -DVERSION=\"$(VERSION)\"
-DADMINUSER=\"$(ADMINUSER)\"
#
####################################################
OBJS = inndchannel.o innbbsd.o connectsock.o rfc931.o \
daemon.o file.o pmain.o parsdate.o his.o dbz.o \
closeonexec.o dbztool.o inntobbs.o echobbslib.o
receive_article.o \
! $(BBS_REC)
SRCS = inndchannel.c innbbsd.c connectsock.c rfc931.c \
daemon.c file.c pmain.c parsdate.y his.c dbz.c \
closeonexec.c dbztool.c inntobbs.c bbslib.c receive_article.c
\
! port.c
MOBJS = makedbz.o bbslib.o file.o dbz.o closeonexec.o
HOBJS = mkhistory.o bbslib.o file.o his.o dbz.o port.o
closeonexec.o
DBZOBJS = dbzserver.o dbzinnbbsd.o pmain.o connectsock.o bbslib.o
his.o \
daemon.o file.o dbz.o dbztool.o rfc931.o port.o closeonexec.o
NNRPOBJS = bbsnnrp.o pmain.o bbslib.o connectsock.o file.o
! LINKOBJS = bbslink.o pmain.o inntobbs.o echobbslib.o connectsock.o
file.o port.o
CTLOBJS = ctlinnbbsd.o pmain.o bbslib.o connectsock.o file.o
INNBBSD = innbbsd makedbz mkhistory dbzserver bbsnnrp \
! ctlinnbbsd $(BBS_POST) dbz_query_sample $(BBSLINK)
BBSNNRP = bbsnnrp
BBSLINK = bbslink
#BBSLINK =
--- 87,120 ----
#
###############
DEBUGOBJ = /usr/lib/debug/mallocmap.o
! CFLAGS= -c -I. -I$(BBS_SRC) -D$(BBS_DEP) $(EXTRAFLAGS) -DDBZDEBUG \
! -D_PATH_BBSHOME=\"$(BBSHOME)\" -DVERSION=\"$(VERSION)\" \
! -DADMINUSER=\"$(ADMINUSER)\" $(FILTER) \
! -DLANG=\"$(LANG)\"
#
####################################################
OBJS = inndchannel.o innbbsd.o connectsock.o rfc931.o \
daemon.o file.o pmain.o parsdate.o his.o dbz.o \
closeonexec.o dbztool.o inntobbs.o echobbslib.o
receive_article.o \
! lang.o \
! $(BBS_REC) $(FILTEROBJ)
SRCS = inndchannel.c innbbsd.c connectsock.c rfc931.c \
daemon.c file.c pmain.c parsdate.y his.c dbz.c \
closeonexec.c dbztool.c inntobbs.c bbslib.c receive_article.c
\
! lang.c \
! port.c filter.c wildmat.c
MOBJS = makedbz.o bbslib.o file.o dbz.o closeonexec.o
HOBJS = mkhistory.o bbslib.o file.o his.o dbz.o port.o
closeonexec.o
DBZOBJS = dbzserver.o dbzinnbbsd.o pmain.o connectsock.o bbslib.o
his.o \
daemon.o file.o dbz.o dbztool.o rfc931.o port.o closeonexec.o
NNRPOBJS = bbsnnrp.o pmain.o bbslib.o connectsock.o file.o
! LINKOBJS = bbslink.o pmain.o inntobbs.o echobbslib.o connectsock.o
file.o \
! port.o parsdate.o lang.o $(FILTEROBJ)
CTLOBJS = ctlinnbbsd.o pmain.o bbslib.o connectsock.o file.o
INNBBSD = innbbsd makedbz mkhistory dbzserver bbsnnrp \
! ctlinnbbsd $(BBS_POST) dbz_query_sample $(BBSLINK)
BBSNNRP = bbsnnrp
BBSLINK = bbslink
#BBSLINK =
***************
*** 148,155 ****
echobbslib.o: echobbslib.c
$(CC) $(OPT) $(CFLAGS) -DWITH_ECHOMAIL echobbslib.c
! innd/bbspost: innd/bbspost.c
! (cd innd; $(MAKE) CC=$(CC) BBS_SRC=$(BBS_SRC))
tar:
test -d innbbsd-$(VERSION) || mkdir innbbsd-$(VERSION)
--- 185,192 ----
echobbslib.o: echobbslib.c
$(CC) $(OPT) $(CFLAGS) -DWITH_ECHOMAIL echobbslib.c
! $(BBS_POST): $(BBS_POST).c
! (cd $(INND_ROOT)innd; $(MAKE) CC=$(CC) BBS_SRC=$(BBS_SRC))
tar:
test -d innbbsd-$(VERSION) || mkdir innbbsd-$(VERSION)
***************
*** 157,163 ****
tar zcf innbbsd-$(VERSION).tar.gz innbbsd-$(VERSION)
cp innbbsd-$(VERSION).tar.gz /net/ftphome/CSIE/innbbsd
! patch:
rm -rf /tmp/innbbsd-$(LASTVERSION)
zcat /net/ftphome/ftp-data/bbs/misc/innbbsd/innbbsd-$(LASTVERSION).
tar.gz | (cd /tmp; tar xf -)
(cd /tmp/innbbsd-$(VERSION); make clean; rm -f r_port.c dbzserver.c
dbzinnbbsd.c echobbslib.c )
--- 194,200 ----
tar zcf innbbsd-$(VERSION).tar.gz innbbsd-$(VERSION)
cp innbbsd-$(VERSION).tar.gz /net/ftphome/CSIE/innbbsd
! innbbsd-patch:
rm -rf /tmp/innbbsd-$(LASTVERSION)
zcat /net/ftphome/ftp-data/bbs/misc/innbbsd/innbbsd-$(LASTVERSION).
tar.gz | (cd /tmp; tar xf -)
(cd /tmp/innbbsd-$(VERSION); make clean; rm -f r_port.c dbzserver.c
dbzinnbbsd.c echobbslib.c )
***************
*** 182,188 ****
(cd /tmp/innbbsd-$(VERSION); ln -s inndchannel.c dbzserver.c)
(cd /tmp/innbbsd-$(VERSION); ln -s innbbsd.c dbzinnbbsd.c)
(cd /tmp/innbbsd-$(VERSION); ln -s bbslib.c echobbslib.c)
! (cd innd ; cp -r Makefile README innbbs.conf in.bntpd mailpost *.pl
bntplink bntplink.palmbbs *.active* *.c *.y *.bbs src
/tmp/innbbsd-$(VERSION)/innd)
(cd /tmp/innbbsd-$(VERSION); make clean)
(cd /tmp; tar zcf innbbsd-$(VERSION).tar.gz innbbsd-$(VERSION) )
ln -s port.c r_port.c
--- 219,226 ----
(cd /tmp/innbbsd-$(VERSION); ln -s inndchannel.c dbzserver.c)
(cd /tmp/innbbsd-$(VERSION); ln -s innbbsd.c dbzinnbbsd.c)
(cd /tmp/innbbsd-$(VERSION); ln -s bbslib.c echobbslib.c)
! (cd innd ; cp -r Makefile README innbbs.conf filter.ctl *.pl bntplink
bntplink.palmbbs *.active* *.c *.y *.bbs src
/tmp/innbbsd-$(VERSION)/innd)
! cp -r convert /tmp/innbbsd-$(VERSION)
(cd /tmp/innbbsd-$(VERSION); make clean)
(cd /tmp; tar zcf innbbsd-$(VERSION).tar.gz innbbsd-$(VERSION) )
ln -s port.c r_port.c
***************
*** 199,205 ****
mv /u/staff/skhuang/skhuang.tcshrc /u/staff/skhuang/.tcshrc
rcp /tmp/innbbsd-$(VERSION).tar.gz bbs_src.tar.gz cciris3:/tmp
! ftp: distribution patch
rsh ccsun42 mv /home8/ftp/pub/bbs/misc/innbbsd/innbbsd-$(VERSION).
tar.gz /home8/ftp/pub/bbs/misc/innbbsd/.innbbsd-$(VERSION).tar.gz
rcp /tmp/innbbsd-$(VERSION).tar.gz ccsun42:
/home8/ftp/pub/bbs/misc/innbbsd
rcp README* ccsun42:/home8/ftp/pub/bbs/misc/innbbsd
--- 237,243 ----
mv /u/staff/skhuang/skhuang.tcshrc /u/staff/skhuang/.tcshrc
rcp /tmp/innbbsd-$(VERSION).tar.gz bbs_src.tar.gz cciris3:/tmp
! ftp: distribution innbbsd-patch
rsh ccsun42 mv /home8/ftp/pub/bbs/misc/innbbsd/innbbsd-$(VERSION).
tar.gz /home8/ftp/pub/bbs/misc/innbbsd/.innbbsd-$(VERSION).tar.gz
rcp /tmp/innbbsd-$(VERSION).tar.gz ccsun42:
/home8/ftp/pub/bbs/misc/innbbsd
rcp README* ccsun42:/home8/ftp/pub/bbs/misc/innbbsd
***************
*** 253,259 ****
-mv -f $(BBSHOME)/innd/ctlinnbbsd $(BBSHOME)/innd/ctlinnbbsd.OLD
$(INSTALL) ctlinnbbsd $(BBSHOME)/innd/ctlinnbbsd
-mv -f $(BBSHOME)/innd/bbspost $(BBSHOME)/innd/bbspost.OLD
! $(INSTALL) innd/bbspost $(BBSHOME)/innd/bbspost
-mv -f $(BBSHOME)/innd/bntplink $(BBSHOME)/innd/bntplink.OLD
$(INSTALL) innd/bntplink $(BBSHOME)/innd/bntplink
-mv -f $(BBSHOME)/innd/mkhistory $(BBSHOME)/innd/mkhistory.OLD
--- 291,297 ----
-mv -f $(BBSHOME)/innd/ctlinnbbsd $(BBSHOME)/innd/ctlinnbbsd.OLD
$(INSTALL) ctlinnbbsd $(BBSHOME)/innd/ctlinnbbsd
-mv -f $(BBSHOME)/innd/bbspost $(BBSHOME)/innd/bbspost.OLD
! $(INSTALL) $(BBS_POST) $(BBSHOME)/innd/bbspost
-mv -f $(BBSHOME)/innd/bntplink $(BBSHOME)/innd/bntplink.OLD
$(INSTALL) innd/bntplink $(BBSHOME)/innd/bntplink
-mv -f $(BBSHOME)/innd/mkhistory $(BBSHOME)/innd/mkhistory.OLD
***************
*** 269,274 ****
--- 307,313 ----
clean:
rm -f *.o $(EXES) core innd/src/*.o
+ cd convert/hztty; make clean
depend:
makedepend -- $(CFLAGS) -- $(SRCS)
diff -rcs innbbsd-0.50beta-4/README innbbsd-0.50beta-5F/README
*** innbbsd-0.50beta-4/README Sat Sep 2 19:07:52 1995
--- innbbsd-0.50beta-5F/README Sun Sep 17 20:59:41 1995
***************
*** 200,206 ****
bbsnnrp news.csie.nctu.edu.tw ~bbs/innd/news.csie.nctu.edu.tw.
active
4. 若要跨站砍信, news server 有 control.cancel 则加入
! control.cancel 0000000000 000000001
若无 control.cancel 则用
control 0000000000 000000001 y
--- 200,206 ----
bbsnnrp news.csie.nctu.edu.tw ~bbs/innd/news.csie.nctu.edu.tw.
active
4. 若要跨站砍信, news server 有 control.cancel 则加入
! control.cancel 0000000000 000000001 y
若无 control.cancel 则用
control 0000000000 000000001 y
Only in innbbsd-0.50beta-5F: README.-0.50beta-5F
Only in innbbsd-0.50beta-5F: README.MapleBBS
Files innbbsd-0.50beta-4/README.PalmBBS and innbbsd-0.50beta-5F/README.
PalmBBS are identical
diff -rcs innbbsd-0.50beta-4/README.PowerBBS innbbsd-0.
50beta-5F/README.PowerBBS
*** innbbsd-0.50beta-4/README.PowerBBS Sat Sep 2 19:07:53 1995
--- innbbsd-0.50beta-5F/README.PowerBBS Sun Sep 17 20:59:41 1995
***************
*** 1,4 ****
--- 1,5 ----
.....................................................................
..
+ 本文件针对 innbbsd-0.50.tar.gz 所设...
由於 PowerBBS 只用到 innbbsd 对 Message-ID 的处理, 因此 Make 的步骤如
下:
***************
*** 8,18 ****
2. 执行 make <sys-type>
<sys-type> 请参照原 make 的列表
! 3. 由於 PowerBBS 不需 innbbsd 提供的 bbspost 因此 make 到 bbspost
! 时会因错误而停止, 没有关系, innbbsd 只与 ctlinnbbsd 已 make 出来
! 了
! 4. 将 innbbsd 与 ctlinnbbsd 考到 PowerBBS 的 SYSTEM_PATH 里
5. 在 SYSTEM_PATH 下再 mkdir innd
--- 9,18 ----
2. 执行 make <sys-type>
<sys-type> 请参照原 make 的列表
! 3. 将 innbbsd 与 ctlinnbbsd 考到 PowerBBS 的 SYSTEM_PATH 里
! 4. 另外有个 bbsnnrp 是 Client Gateway 的转信程式, 若您要使用
! Client Gateway 方式转信, 一并考过去. 底下有更详细的说明.
5. 在 SYSTEM_PATH 下再 mkdir innd
***************
*** 53,63 ****
3. 若要停止 innbbsd 请用 ctlinnbbsd shutdown
! 4. 本版与原 innbbsd-0.41 有一处差异, 在 inndchannel.c 中对
connect from 的 log 若以 -DPowerBBS 去 make 的将不会被
log, 由於 PowerBBS 所使用的 innbbsd 只能以 localuser 去
connect 并且 pbbsnnrpd 使用频繁, 因此 log 此项已无意义,
在此跳过.
From Samson
--- 53,144 ----
3. 若要停止 innbbsd 请用 ctlinnbbsd shutdown
! 4. 本版与原 innbbsd-0.50 有一处差异, 在 inndchannel.c 中对
connect from 的 log 若以 -DPowerBBS 去 make 的将不会被
log, 由於 PowerBBS 所使用的 innbbsd 只能以 localuser 去
connect 并且 pbbsnnrpd 使用频繁, 因此 log 此项已无意义,
在此跳过.
+ .................................................................
+ 有关 Client Gateway 的设定
+
+ 所谓 Client Gateway 就是让 PowerBBS 的转信不必等上游站送, 直接去
+ News Server 里抓, 就好像用 tin 去把信全部抓回来一样, 使用 Client
+ Gateway 的方式转信, 与 Server Gateway (上游主动送) 其功能上完全相同,
+ 包括连线砍信都有支援, 唯独对机器的负担较 Server Gateway 方式重很多,
+ 因此除非您只接少数的信区, 不然建议使用 Server Gateway. 详细的差异
+ 请参考 innbbsd-0.50 中的 README.
+
+ 首先需要有 bbsnnrp 的程式, 在上半部有说明如何 make 出 bbsnnrp
+
+ 1. 设定 group.nntp
+
+ #index IP port Link_level Station_id
alt feed IP
+ #....................................................................
........
+ cgate 140.113.214.200 119 * news.csie.nctu.edu.tw
140.126.3.111
+
+ index 是一个代号, 不要取太长...
+ IP 要转信的 News Server 的 IP
+ port 他的 port (NNTP 是 119)
+ Link_level * 表以 POST 去送信, + 用 IHAVE
+ 一般来说, 除非是特别设定的 News Server, 不然
+ 请用 * 以 POST 出去, + 大多是给 Server Gateway
+ 转信在用的.
+ Station_id News Server 的 Path: 栏代号.
+ alt feed IP 这要填执行 bbsnnrp 所在机器的 IP
+
+ 接著信区设定与原来的相同, 如:
+
+ tw.bbs.test bbstest cgate
+
+
+ 2. 在 innd/ 内设入两种档案:
+
+ active 设您要接的信区, 格式如下:
+
+ tw.bbs.test 000000000 000000001 y
+ tw.bbs.csbbs.pbbs 000000000 000000001 y
+ (依此类推)
+
+ active.cmsg 为连线砍信用, 固定如下:
+
+ control.cancel 0000000000 0000000001 y
+ control 000000000 000000001 y
+
+
+ 3. 第一次执行时, 请先重设抓信指标
+ (假设抓信的 server 是 news.csie.nctu.edu.tw)
+
+ bbsnnrp -c news.csie.nctu.edu.tw active
+ bbsnnrp -c news.csie.nctu.edu.tw active.cmsg
+
+ 注意: 这个步骤非常重要, 不然收 control message 时你就知道什麽叫惨了
!!!
+
+
+ 4. 接下就定时去执行底下的程式
+
+ bbsnnrp -r (pbbsnnrp 的 IP) -p (pbbsnnrp 的 port no) news.csie.nctu.
edu.tw active
+ bbsnnrp -r (pbbsnnrp 的 IP) -p (pbbsnnrp 的 port no) news.csie.nctu.
edu.tw active.cmsg
+
+ 可以用 crontab 的方式去设, 详细的说明请见 innbbsd-0.50 中 README 第
<3>
+ 项的 Client Gateway 中的第 <6> 点.
+
+
+ 5. 记得定期去处理 innd/ 底下的 bbsnnrp.log
+
+ 6. 多重 News Server 的抓取也请见原文件的 README 说明
+
+ 7. PowerBBS 可以将 Client Gateway 与 Server Gateway 同时并用, 也就是您
可
+ 将用 Client Gateway 方式抓来的信, 再以 Server Gateway 的方式转给你的下
游站,
+ 直接混合设定即可.
+
+ 8. 在 Client Gateway 中是否要支援连线砍信请深思熟虑, 砍信的 Control
Message
+ 可能会比所有要抓的信还要更多
+
+ 9. 其他的说明请见原始的 README 文件, 但本说明应已足以应付一般的使用了
..
+
+ .....................................................................
..
+ 最後还是要感谢 skhuang 先生的 innbbsd 及其大力协助...
From Samson
+ Sep 5, 1995
Files innbbsd-0.50beta-4/TODO and innbbsd-0.50beta-5F/TODO are
identical
diff -rcs innbbsd-0.50beta-4/bbslib.c innbbsd-0.50beta-5F/bbslib.c
*** innbbsd-0.50beta-4/bbslib.c Sat Sep 2 19:07:53 1995
--- innbbsd-0.50beta-5F/bbslib.c Sun Sep 17 20:59:41 1995
***************
*** 16,21 ****
--- 16,22 ----
char ECHOMAIL[MAXPATHLEN];
char BBSFEEDS[MAXPATHLEN];
char LOCALDAEMON[MAXPATHLEN];
+ char FILTERCTL[MAXPATHLEN];
int His_Maint_Min= HIS_MAINT_MIN;
int His_Maint_Hour= HIS_MAINT_HOUR;
***************
*** 23,30 ****
nodelist_t *NODELIST=NULL, **NODELIST_BYNODE=NULL;
newsfeeds_t *NEWSFEEDS=NULL, **NEWSFEEDS_BYBOARD=NULL;
static char *NODELIST_BUF, *NEWSFEEDS_BUF;
! int NFCOUNT, NLCOUNT;
int LOCALNODELIST=0, NONENEWSFEEDS=0;
#ifndef _PATH_BBSHOME
--- 24,38 ----
nodelist_t *NODELIST=NULL, **NODELIST_BYNODE=NULL;
newsfeeds_t *NEWSFEEDS=NULL, **NEWSFEEDS_BYBOARD=NULL;
+
+ #if defined(FILTER) && defined(WITH_ECHOMAIL)
+ filter_t *FILTERLIST=NULL;
+ static char *FILTER_BUF;
+ int FILTERCOUNT;
+ #endif
+
static char *NODELIST_BUF, *NEWSFEEDS_BUF;
! int NFCOUNT, NLCOUNT;
int LOCALNODELIST=0, NONENEWSFEEDS=0;
#ifndef _PATH_BBSHOME
***************
*** 162,167 ****
--- 170,179 ----
sprintf(INNBBSCONF,"%s/innbbs.conf",INNDHOME);
sprintf(BBSFEEDS,"%s/bbsfeeds.log",INNDHOME);
+ #if defined(FILTER) && defined(WITH_ECHOMAIL)
+ sprintf(FILTERCTL,"%s/filter.ctl",INNDHOME);
+ #endif
+
if (isfile(INNBBSCONF)) {
FILE *conf;
char buffer[MAXPATHLEN];
***************
*** 240,247 ****
if( ! isdir(fileglue("%s/out.going",BBSHOME)) ) {
mkdir( (char*)fileglue("%s/out.going",BBSHOME), 0750 );
}
! if (NONENEWSFEEDS == 0)
readnffile(INNDHOME);
if (LOCALNODELIST == 0) {
if (readnlfile(INNDHOME, outgoing) != 0) return 0;
}
--- 252,263 ----
if( ! isdir(fileglue("%s/out.going",BBSHOME)) ) {
mkdir( (char*)fileglue("%s/out.going",BBSHOME), 0750 );
}
! if (NONENEWSFEEDS == 0) {
! #if defined(FILTER) && defined(WITH_ECHOMAIL)
! readfilterfile(INNDHOME);
! #endif
readnffile(INNDHOME);
+ }
if (LOCALNODELIST == 0) {
if (readnlfile(INNDHOME, outgoing) != 0) return 0;
}
***************
*** 322,327 ****
--- 338,344 ----
NODELIST_BUF = (char*) myrealloc( NODELIST_BUF, st.st_size +1);
}
i = 0, count =0;
+ *NODELIST_BUF = '\0';
while (fgets(buff, sizeof buff, fp) != NULL) {
if (buff[0] == '#') continue;
if (buff[0] == '\n') continue;
***************
*** 406,411 ****
--- 423,505 ----
return 0;
}
+ #if defined(FILTER) && defined(WITH_ECHOMAIL)
+ readfilterfile(inndhome)
+ char *inndhome;
+ {
+
+ FILE *fp;
+ char buff[1024];
+ struct stat st;
+ int i, count;
+ char *ptr, *filterptr;
+
+ sprintf(buff,"%s/filter.ctl", inndhome);
+ fp = fopen(buff,"r");
+ if (fp == NULL) {
+ fprintf(stderr,"open fail %s",buff);
+ return -1;
+ }
+ if (fstat(fileno(fp),&st) != 0) {
+ fprintf(stderr,"stat fail %s", buff);
+ return -1;
+ }
+ if (FILTER_BUF == NULL) {
+ FILTER_BUF = (char*) mymalloc( st.st_size +1);
+ } else {
+ FILTER_BUF = (char*) myrealloc( FILTER_BUF, st.st_size +1);
+ }
+ *FILTER_BUF = '\0';
+ i = 0, count =0;
+ while (fgets(buff, sizeof buff, fp) != NULL) {
+ if (buff[0] == '#') continue;
+ if (buff[0] == '\n') continue;
+ strcpy(FILTER_BUF+i, buff);
+ i += strlen(buff);
+ count ++;
+ }
+ fclose(fp);
+ if (FILTERLIST == NULL) {
+ FILTERLIST = (filter_t*) mymalloc(sizeof(filter_t) *
(count+1));
+ } else {
+ FILTERLIST = (filter_t*) myrealloc(FILTERLIST, sizeof(filter_t)
* (count+1));
+ }
+ FILTERCOUNT = 0;
+ for (ptr = FILTER_BUF; (filterptr = (char*)strchr(ptr,'\n')) !=
NULL; ptr = filterptr +1, FILTERCOUNT++) {
+ char *nptr , *bptr, *pptr;
+ *filterptr = '\0';
+ FILTERLIST[FILTERCOUNT].group = "";
+ FILTERLIST[FILTERCOUNT].rcmdfilter = "";
+ FILTERLIST[FILTERCOUNT].scmdfilter = "";
+ for (nptr= ptr ;*nptr && isspace(*nptr); ) nptr++;
+ if (*nptr == '\0') continue;
+ FILTERLIST[FILTERCOUNT].group = nptr;
+ nptr = strchr(nptr+1,':');
+ if (*nptr == '\0') continue;
+ *nptr = '\0';
+ for (nptr= nptr+1 ;*nptr && isspace(*nptr); ) nptr++;
+ FILTERLIST[FILTERCOUNT].rcmdfilter = nptr;
+ nptr = strchr(nptr,':');
+ if (*nptr == '\0') continue;
+ *nptr = '\0';
+ for (nptr= nptr+1 ;*nptr && isspace(*nptr); ) nptr++;
+ FILTERLIST[FILTERCOUNT].scmdfilter = nptr;
+ }
+ }
+
+ filter_t *search_filter(group)
+ char *group;
+ {
+ int i;
+ for (i=0; i< FILTERCOUNT; ++i) {
+ if (filtermatch(0, group, FILTERLIST[i].group))
+ return FILTERLIST+i;
+ }
+ return NULL;
+ }
+
+ #endif
+
readnffile(inndhome)
char *inndhome;
{
***************
*** 430,435 ****
--- 524,530 ----
} else {
NEWSFEEDS_BUF = (char*) myrealloc( NEWSFEEDS_BUF, st.st_size +1);
}
+ *NEWSFEEDS_BUF = '\0';
i = 0, count =0;
while (fgets(buff, sizeof buff, fp) != NULL) {
if (buff[0] == '#') continue;
***************
*** 473,478 ****
--- 568,605 ----
/*if (*nptr == '\0') continue;*/
*nptr = '\0';
}
+
+
+ #if defined(FILTER) && defined(WITH_ECHOMAIL)
+ for (i=0; i< NFCOUNT; i++) {
+ newsfeeds_t *nfptr;
+ filter_t *fptr;
+ char *ngptr, *ptr;
+ int found;
+ nfptr = NEWSFEEDS+i;
+ for (found = 0, ngptr = nfptr->newsgroups, ptr = strchr(ngptr,
',');
+ ngptr && *ngptr && !found; ptr = strchr(ngptr,',')) {
+ if (ptr) *ptr = '\0';
+ fptr = (filter_t *) search_filter(ngptr);
+ if (fptr) {
+ nfptr->rcmdfilter = fptr->rcmdfilter;
+ nfptr->scmdfilter = fptr->scmdfilter;
+ nfptr->rfilter = (FuncPtr)search_filtercmd(fptr->rcmdfilter);
+ nfptr->sfilter = (FuncPtr)search_filtercmd(fptr->scmdfilter);
+ found = 1;
+ } else {
+ nfptr->rcmdfilter = nfptr->scmdfilter = NULL;
+ nfptr->rfilter = nfptr->sfilter = NULL;
+ }
+ if (ptr) {
+ *ptr = ',';
+ ngptr = ptr+1;
+ } else {
+ break;
+ }
+ }
+ }
+ #endif
qsort(NEWSFEEDS, NFCOUNT, sizeof(newsfeeds_t), nfcmp);
qsort(NEWSFEEDS_BYBOARD, NFCOUNT, sizeof(newsfeeds_t*),
nf_byboardcmp);
}
***************
*** 703,708 ****
--- 830,849 ----
}
return joinbuf;
}
+
+ char *
+ parselocaltime(date_buf)
+ char *date_buf;
+ {
+ static char buffer[40];
+ char week[30], mon[30], day[30], time[30], year[30];
+ /* add null to prevent from long string */
+ if (strlen(date_buf) > 30) date_buf[30]= '\0';
+ sscanf(date_buf,"%s %s %s %s %s", week, mon, day, time, year);
+ sprintf(buffer,"%.4s %.4s %.4s %.10s",day, mon, year, time);
+ return buffer;
+ }
+
#ifdef BBSLIB
main()
diff -rcs innbbsd-0.50beta-4/bbslib.h innbbsd-0.50beta-5F/bbslib.h
*** innbbsd-0.50beta-4/bbslib.h Sat Sep 2 19:07:55 1995
--- innbbsd-0.50beta-5F/bbslib.h Sun Sep 17 20:59:43 1995
***************
*** 11,20 ****
--- 11,34 ----
FILE *feedfp;
} nodelist_t;
+ #ifdef FILTER
+ typedef struct filter_t {
+ char *group;
+ char *rcmdfilter, *scmdfilter;
+ } filter_t;
+
+ typedef char *(*FuncPtr)();
+
+ #endif
+
typedef struct newsfeeds_t {
char *newsgroups;
char *board;
char *path;
+ #ifdef FILTER
+ FuncPtr rfilter, sfilter;
+ char *rcmdfilter, *scmdfilter;
+ #endif
} newsfeeds_t;
typedef struct overview_t {
***************
*** 32,37 ****
--- 46,52 ----
extern char HISTORY[];
extern char LOGFILE[];
extern char INNBBSCONF[];
+ extern char FILTERCTL[];
extern nodelist_t *NODELIST;
extern nodelist_t **NODELIST_BYNODE;
extern newsfeeds_t *NEWSFEEDS, **NEWSFEEDS_BYBOARD;
diff -rcs innbbsd-0.50beta-4/bbslink.c innbbsd-0.50beta-5F/bbslink.c
*** innbbsd-0.50beta-4/bbslink.c Sat Sep 2 19:07:53 1995
--- innbbsd-0.50beta-5F/bbslink.c Sun Sep 17 20:59:41 1995
***************
*** 21,26 ****
--- 21,27 ----
#include "daemon.h"
#include "nntp.h"
#include "externs.h"
+ #include "lang.h"
/* TODO
1. read newsfeeds.bbs, read nodelist.bbs, read bbsname.bbs
***************
*** 87,92 ****
--- 88,95 ----
char MYADDR[MAXBUFLEN];
char MYSITE[MAXBUFLEN];
+ char SITE_BUF[MAXBUFLEN];
+ char *SITE_PTR = MYSITE;
char SUBJECT_BUF[MAXBUFLEN];
extern char* SUBJECT;
***************
*** 123,131 ****
static char *LOCAL="LOCAL";
static int FD, FD_SIZE;
! static char *FD_BUF;
static char *FD_END;
char *fileglue();
bbslink_un_lock(file)
--- 126,135 ----
static char *LOCAL="LOCAL";
static int FD, FD_SIZE;
! static char *FD_BUF=NULL, *FD_BUF_FILTER=NULL;
static char *FD_END;
+
char *fileglue();
bbslink_un_lock(file)
***************
*** 261,268 ****
}
} else if( strncmp( buffer, "Date: ", 11 ) == 0 ) {
strcpy(lover->date, buffer+11);
! } else if( strncmp( buffer , "发信站: ", 8 ) == 0 ) {
! m = strchr(buffer,'(');
n = strrchr(buffer,')');
strncpy(lover->date, m+1, n-m-1);
lover->date[n-m-1] = '\0';
--- 265,276 ----
}
} else if( strncmp( buffer, "Date: ", 11 ) == 0 ) {
strcpy(lover->date, buffer+11);
! #ifndef FILTER
! } else if( strncmp(buffer , OrganizationTxt, 8 ) == 0 ) {
! #else
! } else if(isMsgTxt(OrganizationTxtClass, buffer)) {
! #endif
! m = strrchr(buffer,'(');
n = strrchr(buffer,')');
strncpy(lover->date, m+1, n-m-1);
lover->date[n-m-1] = '\0';
***************
*** 364,373 ****
return 0;
}
flock(fileno(FN),LOCK_EX);
! fprintf(FN,"发信人: %s, 信区: %s\n", POSTER, sover->board);
! fprintf(FN,"标 题: %s\n", sover->subject);
! fprintf(FN,"发信站: %s (%s)\n", MYSITE, sover->date);
! fprintf(FN,"转信站: %s\n", sover->path);
fprintf(FN,"\n");
fputs(BODY, FN);
flock(fileno(FN), LOCK_UN);
--- 372,381 ----
return 0;
}
flock(fileno(FN),LOCK_EX);
! fprintf(FN,"%s%s, %s%s\n", FromTxt, POSTER, BoardTxt,
sover->board);
! fprintf(FN,"%s%s\n", SubjectTxt, sover->subject);
! fprintf(FN,"%s%s (%s)\n", OrganizationTxt, SITE_PTR,
sover->date);
! fprintf(FN,"%s%s\n", PathTxt, sover->path);
fprintf(FN,"\n");
fputs(BODY, FN);
flock(fileno(FN), LOCK_UN);
***************
*** 378,383 ****
--- 386,392 ----
times.actime = sover->mtime; times.modtime = sover->mtime;
utime(fileglue("%s/boards/%s/%s", BBSHOME, board, filename),
×);
utime(fileglue("%s/.bcache/%s", BBSHOME,board), NULL);
+ chmod(fileglue("%s/boards/%s/%s", BBSHOME, board, filename),
0644);
}
#endif
}
***************
*** 488,493 ****
--- 497,504 ----
char *hash;
char times[MAXBUFLEN];
time_t mtime;
+ char *indata, *fd_buf;
+ int fd_size;
board= sover->board; filename= sover->filename;
group= sover->group; mtime= sover->mtime;
***************
*** 534,540 ****
*CONTROL = '\0';
sprintf(DATE, "%s",ascii_date( (mtime) ));
if( NEWSFEED == LOCAL && !NoAction) {
! SITE = MYSITE;
PATH = MYBBSID;
GROUPS = group;
echomaillog();
--- 545,551 ----
*CONTROL = '\0';
sprintf(DATE, "%s",ascii_date( (mtime) ));
if( NEWSFEED == LOCAL && !NoAction) {
! SITE = SITE_PTR;
PATH = MYBBSID;
GROUPS = group;
echomaillog();
***************
*** 550,567 ****
}
FD_SIZE = filesize(fileglue("%s/boards/%s/%s", BBSHOME, board,
filename));
if (FD_BUF == NULL) {
! FD_BUF = (char*)mymalloc(FD_SIZE+1);
} else {
! FD_BUF = (char*)myrealloc(FD_BUF, FD_SIZE+1);
}
! FD_END = FD_BUF + FD_SIZE;
*FD_END = '\0';
! read(FD, FD_BUF, FD_SIZE);
if (Verbose) {
printf("<read in> %s/boards/%s/%s\n", BBSHOME, board,
filename);
}
*ORGANIZATION = '\0';
*NEWSCONTROL = '\0';
--- 561,618 ----
}
FD_SIZE = filesize(fileglue("%s/boards/%s/%s", BBSHOME, board,
filename));
+ fd_size = FD_SIZE;
+
+ #ifdef FILTER
+ fd_size += 266 * 3;
+ #endif
if (FD_BUF == NULL) {
! FD_BUF = (char*)mymalloc(fd_size+1);
} else {
! FD_BUF = (char*)myrealloc(FD_BUF, fd_size+1);
}
! fd_buf = FD_BUF;
! #ifdef FILTER
! if (sover->from && *sover->from) {
! sprintf(fd_buf,"From: %.256s\n", sover->from);
! fd_buf += strlen(fd_buf);
! }
! if (sover->subject && *sover->subject) {
! sprintf(fd_buf,"Subject: %.256s\n", sover->subject);
! fd_buf += strlen(fd_buf);
! }
! if (NEWSFEED == LOCAL && MYSITE && *MYSITE) {
! sprintf(fd_buf,"Organization: %.256s\n", MYSITE);
! fd_buf += strlen(fd_buf);
! }
! #endif
!
! FD_END = fd_buf + FD_SIZE;
*FD_END = '\0';
! read(FD, fd_buf, FD_SIZE);
if (Verbose) {
printf("<read in> %s/boards/%s/%s\n", BBSHOME, board,
filename);
}
+ indata = FD_BUF;
+
+ #ifdef FILTER
+ {
+ /* print Subject, From, Organization to FD_BUF,
+ filter,
+ parse out again
+ */
+ newsfeeds_t *nf;
+ char *outdata;
+ outdata = NULL;
+ nf = (newsfeeds_t*) search_board(board);
+ if (nf != NULL) {
+ outdata = (char*)filterdata(nf, 1, FD_BUF, &FD_BUF_FILTER);
+ }
+ if (outdata) indata= outdata;
+ /*indata = (char*)processfilter(FD_BUF, FD_BUF_FILTER, 1);*/
+ }
+ #endif
*ORGANIZATION = '\0';
*NEWSCONTROL = '\0';
***************
*** 569,588 ****
*NNTPHOST_BUF = '\0';
NNTPHOST = NULL;
! for (buffer= FD_BUF, bufferp=strchr(buffer,'\n');
buffer && *buffer; bufferp = strchr(buffer,'\n')) {
if (bufferp) *bufferp = '\0';
if( *buffer == '\0' ) {
break;
}
/*printf("get buffer %s\n", buffer);*/
if ( NEWSFEED == REMOTE) {
if( strncmp(buffer,"Date: ", 11) == 0 ) {
strcpy(DATE_BUF, buffer+11 );
DATE = DATE_BUF;
! } else if( strncmp( buffer, "发信站: ", 8 ) == 0 ) {
char *m, *n;
! m = strchr( buffer, '(' );
n = strrchr( buffer, ')' );
if (m && n) {
strncpy( DATE_BUF, m+1, n-m-1 );
--- 620,657 ----
*NNTPHOST_BUF = '\0';
NNTPHOST = NULL;
! for (buffer= indata, bufferp=strchr(buffer,'\n');
buffer && *buffer; bufferp = strchr(buffer,'\n')) {
if (bufferp) *bufferp = '\0';
if( *buffer == '\0' ) {
break;
}
/*printf("get buffer %s\n", buffer);*/
+ #ifdef FILTER
+ if (strncmp( buffer, "Subject: ", 9) == 0) {
+ strncpy(SUBJECT_BUF, buffer+9, sizeof SUBJECT_BUF);
+ sover->subject = SUBJECT_BUF;
+ } else if (strncmp( buffer, "From: ",6) ==0) {
+ strncpy(FROM_BUF, buffer+6, sizeof FROM_BUF);
+ sover->from = FROM_BUF;
+ } else if (strncmp( buffer, "Organization: ",14) == 0) {
+ if ( NEWSFEED == LOCAL )
+ strncpy(SITE_BUF, buffer+14, sizeof SITE_BUF);
+ SITE_PTR = SITE_BUF;
+ } else
+ #endif
if ( NEWSFEED == REMOTE) {
+ time_t datevalue;
if( strncmp(buffer,"Date: ", 11) == 0 ) {
strcpy(DATE_BUF, buffer+11 );
DATE = DATE_BUF;
! #ifndef FILTER
! } else if( strncmp( buffer, OrganizationTxt, 8 ) == 0 )
{
! #else
! } else if(isMsgTxt(OrganizationTxtClass, buffer)) {
! #endif
char *m, *n;
! m = strrchr( buffer, '(' );
n = strrchr( buffer, ')' );
if (m && n) {
strncpy( DATE_BUF, m+1, n-m-1 );
***************
*** 607,612 ****
--- 676,686 ----
break;
}
}
+ if ( NEWSFEED == REMOTE) {
+ char* datevalue;
+ datevalue = (char*)parselocaltime(DATE_BUF);
+ strncpy(DATE_BUF, datevalue, sizeof DATE_BUF);
+ }
if (bufferp) { BODY = bufferp+1;}
else BODY = "";
if (bufferp)
***************
*** 633,638 ****
--- 707,719 ----
/*# fprintf("BODY @BODY\n";*/
close( FD );
}
+ if (Verbose) {
+ printf("<read_outgoing> %s:%s:%s\n", sover->board,
sover->filename, sover->group);
+ printf(" => %ld:%s\n", mtime, sover->from);
+ printf(" => %s\n", sover->subject);
+ printf(" => %s:%s\n", sover->outgoingtype, sover->msgid);
+ printf(" => %s\n",sover->path);
+ }
return 0;
}
***************
*** 714,720 ****
fprintf( NNTPwfp, "Newsgroups: %s\r\n", sover->group);
fprintf( NNTPwfp, "Subject: %s\r\n", sover->subject);
fprintf( NNTPwfp, "Date: %s\r\n", sover->date);
! fprintf( NNTPwfp, "Organization: %s\r\n", MYSITE);
fprintf( NNTPwfp, "Message-ID: <%s>\r\n", sover->msgid);
fprintf( NNTPwfp, "X-Filename: %s/%s\r\n", sover->board,
sover->filename);
}
--- 795,801 ----
fprintf( NNTPwfp, "Newsgroups: %s\r\n", sover->group);
fprintf( NNTPwfp, "Subject: %s\r\n", sover->subject);
fprintf( NNTPwfp, "Date: %s\r\n", sover->date);
! fprintf( NNTPwfp, "Organization: %s\r\n", SITE_PTR);
fprintf( NNTPwfp, "Message-ID: <%s>\r\n", sover->msgid);
fprintf( NNTPwfp, "X-Filename: %s/%s\r\n", sover->board,
sover->filename);
}
***************
*** 1061,1070 ****
}
fprintf(FN,"%s\n", from);
fprintf(FN,"%s\n", subject);
! fprintf(FN,"发信人: %s, 信区: %s\n", from, board);
! fprintf(FN,"标 题: %s\n", subject);
! fprintf(FN,"发信站: %s (%s)\n", MYSITE, DATE);
! fprintf(FN,"转信站: %s\n", MYBBSID);
fputs("\n",FN);
fputs(BODY, FN);
pclose( FN );
--- 1142,1151 ----
}
fprintf(FN,"%s\n", from);
fprintf(FN,"%s\n", subject);
! fprintf(FN,"%s%s, %s%s\n", FromTxt, from, BoardTxt, board);
! fprintf(FN,"%s%s\n", SubjectTxt, subject);
! fprintf(FN,"%s%s (%s)\n", OrganizationTxt, SITE_PTR, DATE);
! fprintf(FN,"%s%s\n", PathTxt, MYBBSID);
fputs("\n",FN);
fputs(BODY, FN);
pclose( FN );
***************
*** 1077,1089 ****
}
FN = fopen(filepath,"w") ;
! fprintf(FN,"发信人: %s, 信区: %s\n", from, board);
! fprintf(FN,"标 题: <article cancelled and mailed to the
moderator\n");
! fprintf(FN,"发信站: %s (%s)\n", MYSITE, DATE);
! fprintf(FN,"转信站: %s\n", MYBBSID);
fprintf(FN,"\n");
fputs("\n", FN);
! fprintf(FN,"你的文章 \"%s\" 已经送往审核中. 请等待回覆.\n", subject);
fputs("\n", FN);
fputs("Your post has been sent to the moderator and move\n",FN);
fputs("into the deleted board. If the post accepted by the moderator,
\n",FN);
--- 1158,1170 ----
}
FN = fopen(filepath,"w") ;
! fprintf(FN,"%s%s, %s%s\n", FromTxt, from, BoardTxt, board);
! fprintf(FN,"%s<article cancelled and mailed to the
moderator\n",SubjectTxt);
! fprintf(FN,"%s%s (%s)\n", OrganizationTxt, SITE_PTR, DATE);
! fprintf(FN,"%s%s\n", PathTxt, MYBBSID);
fprintf(FN,"\n");
fputs("\n", FN);
! fprintf(FN,ModerationTxt,subject);
fputs("\n", FN);
fputs("Your post has been sent to the moderator and move\n",FN);
fputs("into the deleted board. If the post accepted by the moderator,
\n",FN);
***************
*** 1115,1122 ****
int nlcount;
{
FILE *POSTS;
! char textline[1024];
! char baktextline[1024];
char *filepath;
int status;
--- 1196,1203 ----
int nlcount;
{
FILE *POSTS;
! char textline[4096];
! char baktextline[4096];
char *filepath;
int status;
***************
*** 1271,1276 ****
--- 1352,1384 ----
*/
+
+ saverename(file1, file2)
+ char *file1, *file2;
+ {
+ FILE *dest, *src;
+ char buf[1024];
+ if (isfile(file2) && !iszerofile(file2)) {
+ dest = fopen(file2,"a");
+ src = fopen(file1,"r");
+ if (src && dest) {
+ while (fgets(buf,sizeof buf, src) != NULL) {
+ fputs(buf,dest);
+ fflush(dest);
+ }
+ fclose(dest); fclose(src);
+ unlink(file1);
+ return 0;
+ } else {
+ if (src) fclose(src);
+ if (dest)fclose(dest);
+ return rename(file1, file2);
+ }
+ } else {
+ return rename(file1, file2);
+ }
+ }
+
send_article()
{
char *site, *addr, *protocol, *port, *op;
***************
*** 1338,1344 ****
fclose(node->feedfp);
node->feedfp = NULL;
}
! rename( linkfile, sendfile );
send_nntplink( node, site, nntphost, protocol, port,
sendfile, nlcount);
bbslink_un_lock(linkfile);
bbslink_un_lock(sendfile);
--- 1446,1452 ----
fclose(node->feedfp);
node->feedfp = NULL;
}
! saverename( linkfile, sendfile );
send_nntplink( node, site, nntphost, protocol, port,
sendfile, nlcount);
bbslink_un_lock(linkfile);
bbslink_un_lock(sendfile);
***************
*** 1366,1372 ****
node->feedfp = NULL;
}
}
! rename( feedfile, feedingfile );
system(fileglue("%s/ctlinnbbsd reload > /dev/null",
INNDHOME));
send_nntplink( node, site, nntphost, protocol, port,
feedingfile, nlcount);
bbslink_un_lock(feedfile);
--- 1474,1480 ----
node->feedfp = NULL;
}
}
! saverename( feedfile, feedingfile );
system(fileglue("%s/ctlinnbbsd reload > /dev/null",
INNDHOME));
send_nntplink( node, site, nntphost, protocol, port,
feedingfile, nlcount);
bbslink_un_lock(feedfile);
***************
*** 1399,1408 ****
fprintf(stderr," -V (visit only: bbspost visit)\n");
fprintf(stderr," -N (no visit, and only process batch
queue)\n");
fprintf(stderr," -k (kill the former bbslink process before
started)\n\n");
! fprintf(stderr,"本程式要正常执行必须将以下档案置於 %s/innd 下:\n",
BBSHOME);
! fprintf(stderr,"bbsname.bbs 设定贵站的 BBS ID (请尽量简短)\n");
! fprintf(stderr,"nodelist.bbs 设定网路各 BBS 站的 ID, Address 和
fullname\n");
! fprintf(stderr,"newsfeeds.bbs 设定网路信件的 newsgroup board
nodelist ...\n");
fprintf(stderr," -- Modified from mfchen's bntplink\n");
}
--- 1507,1516 ----
fprintf(stderr," -V (visit only: bbspost visit)\n");
fprintf(stderr," -N (no visit, and only process batch
queue)\n");
fprintf(stderr," -k (kill the former bbslink process before
started)\n\n");
! fprintf(stderr,bbslinkUsage1, BBSHOME);
! fprintf(stderr,bbslinkUsage2);
! fprintf(stderr,bbslinkUsage3);
! fprintf(stderr,bbslinkUsage4);
fprintf(stderr," -- Modified from mfchen's bntplink\n");
}
***************
*** 1627,1632 ****
--- 1735,1743 ----
/* For debug Only */
#define DEBUGBBSLINK
#ifdef DEBUGBBSLINK
+
+ initial_lang();
+
NoAction = 0;
Verbose = 0;
VisitOnly = 0;
diff -rcs innbbsd-0.50beta-4/bbsnnrp.c innbbsd-0.50beta-5F/bbsnnrp.c
*** innbbsd-0.50beta-4/bbsnnrp.c Sat Sep 2 19:07:53 1995
--- innbbsd-0.50beta-5F/bbsnnrp.c Sun Sep 17 20:59:42 1995
***************
*** 132,137 ****
--- 132,138 ----
fprintf(stderr," default=%d\n", MAX_STATS);
fprintf(stderr," -t stdin|nntp (default=nntp)\n");
fprintf(stderr," -g newsgroups\n");
+ fprintf(stderr," (stdin: pseudo group, nntp: the newsgroup to
process)\n");
fprintf(stderr," -m moderator\n");
fprintf(stderr," -o organization\n");
fprintf(stderr," -f trust_user (From: trust_user)\n");
***************
*** 595,600 ****
--- 596,607 ----
rcptr->nameptr = nptr;
for (nptr++; *nptr && !isspace(*nptr); ) nptr++;
rcptr->namelen = (int)(nptr - rcptr->nameptr);
+ if (*DefaultNewsgroups) {
+ if (strncmp(DefaultNewsgroups,rcptr->nameptr,rcptr->namelen)!=0)
+ continue;
+ if (strlen(DefaultNewsgroups) > rcptr->namelen)
+ continue;
+ }
if ( nptr == actlistptr) continue;
for (nptr++ ;*nptr && isspace(*nptr); ) nptr++;
if ( nptr == actlistptr) continue;
***************
*** 609,620 ****
rcptr->low = atol(nptr);
for (nptr++; *nptr && !isspace(*nptr); ) nptr++;
rcptr->lowlen = (int)(nptr - rcptr->lowptr);
! if ( nptr == actlistptr) continue;
for (nptr++ ;*nptr && isspace(*nptr); ) nptr++;
! if ( nptr == actlistptr) continue;
rcptr->mode = *nptr;
rcptr->modeptr = nptr;
- ACT_COUNT ++;
}
}
--- 616,633 ----
rcptr->low = atol(nptr);
for (nptr++; *nptr && !isspace(*nptr); ) nptr++;
rcptr->lowlen = (int)(nptr - rcptr->lowptr);
! ACT_COUNT ++;
! if ( nptr == actlistptr) {
! fprintf(stderr,"No mode field. incomplete active file but
ignore\n");
! continue;
! }
for (nptr++ ;*nptr && isspace(*nptr); ) nptr++;
! if ( nptr == actlistptr) {
! fprintf(stderr,"No mode field. incomplete active file but
ignore\n");
! continue;
! }
rcptr->mode = *nptr;
rcptr->modeptr = nptr;
}
}
Files innbbsd-0.50beta-4/clibrary.h and innbbsd-0.50beta-5F/clibrary.h
are identical
Files innbbsd-0.50beta-4/closeonexec.c and innbbsd-0.
50beta-5F/closeonexec.c are identical
Files innbbsd-0.50beta-4/connectsock.c and innbbsd-0.
50beta-5F/connectsock.c are identical
Only in innbbsd-0.50beta-5F: convert
diff -rcs innbbsd-0.50beta-4/ctlinnbbsd.c innbbsd-0.
50beta-5F/ctlinnbbsd.c
*** innbbsd-0.50beta-4/ctlinnbbsd.c Sat Sep 2 19:07:53 1995
--- innbbsd-0.50beta-5F/ctlinnbbsd.c Sun Sep 17 20:59:42 1995
***************
*** 18,23 ****
--- 18,25 ----
fprintf(stderr," ctlinnbbsd hismaint : maintain history\n");
fprintf(stderr," ctlinnbbsd listnodelist : list nodelist.
bbs\n");
fprintf(stderr," ctlinnbbsd listnewsfeeds : list newsfeeds.
bbs\n");
+ fprintf(stderr," ctlinnbbsd pause : pause innbbsd server\n");
+ fprintf(stderr," ctlinnbbsd go : resume innbbsd server\n");
#ifdef GETRUSAGE
fprintf(stderr," ctlinnbbsd getrusage: get resource usage\n");
#endif
***************
*** 50,56 ****
#endif
strcasecmp(argv[0], "mode")==0 ||
strcasecmp(argv[0], "listnodelist")==0 ||
! strcasecmp(argv[0], "listnewsfeeds")==0
) {
fprintf( innbbsout, "%s\r\n", argv[0]);
fflush( innbbsout);
--- 52,60 ----
#endif
strcasecmp(argv[0], "mode")==0 ||
strcasecmp(argv[0], "listnodelist")==0 ||
! strcasecmp(argv[0], "listnewsfeeds")==0 ||
! strcasecmp(argv[0], "pause")==0 ||
! strcasecmp(argv[0], "go")==0
) {
fprintf( innbbsout, "%s\r\n", argv[0]);
fflush( innbbsout);
Files innbbsd-0.50beta-4/daemon.c and innbbsd-0.50beta-5F/daemon.c are
identical
diff -rcs innbbsd-0.50beta-4/daemon.h innbbsd-0.50beta-5F/daemon.h
*** innbbsd-0.50beta-4/daemon.h Sat Sep 2 19:07:55 1995
--- innbbsd-0.50beta-5F/daemon.h Sun Sep 17 20:59:43 1995
***************
*** 39,44 ****
--- 39,45 ----
int ihavecount, ihavesize, ihaveduplicate, ihavefail;
int statcount, statfail;
time_t begin;
+ char *filter_buffer;
} ClientType;
typedef struct Daemoncmd {
Files innbbsd-0.50beta-4/dbz.c and innbbsd-0.50beta-5F/dbz.c are
identical
Files innbbsd-0.50beta-4/dbz.h and innbbsd-0.50beta-5F/dbz.h are
identical
Files innbbsd-0.50beta-4/dbz_query_sample.c and innbbsd-0.
50beta-5F/dbz_query_sample.c are identical
Files innbbsd-0.50beta-4/dbztool.c and innbbsd-0.50beta-5F/dbztool.c are
identical
diff -rcs innbbsd-0.50beta-4/doc/alt-gateways innbbsd-0.
50beta-5F/doc/alt-gateways
*** innbbsd-0.50beta-4/doc/alt-gateways Sat Sep 2 19:07:51 1995
--- innbbsd-0.50beta-5F/doc/alt-gateways Sun Sep 17 20:59:40 1995
***************
*** 26,48 ****
请注意此 "," 必须加上
C) 多(newsgroups)对一(board)转入, 一(board)对多(newsgroups)转出:
N1,N2 B S
! N1 B null
! N2 B null
Example: tw.bbs.campus.nctu + nctu.talk -> nctu board
nctu board -> tw.bbs.campus.nctu,
nctu.talk
tw.bbs.campus.nctu,nctu.talk nctu bbsroute
! tw.bbs.campus.nctu nctu null
! nctu.talk nctu null
C1)多(newsgroups)对一(board)转入, 一(board)对一(newsgroups)转出:
! N2 B bbsroute
! N1 B null
Example: tw.bbs.test + csie.test -> test board
test -> csie.test
csie.test test bbsroute
! tw.bbs.test test null
D)多(boards)对一(newsgroup)转出, 一(newsgroups)转入多(board):
N, B1 S
--- 26,48 ----
请注意此 "," 必须加上
C) 多(newsgroups)对一(board)转入, 一(board)对多(newsgroups)转出:
N1,N2 B S
! N1 B, null
! N2 B, null
Example: tw.bbs.campus.nctu + nctu.talk -> nctu board
nctu board -> tw.bbs.campus.nctu,
nctu.talk
tw.bbs.campus.nctu,nctu.talk nctu bbsroute
! tw.bbs.campus.nctu nctu, null
! nctu.talk nctu, null
C1)多(newsgroups)对一(board)转入, 一(board)对一(newsgroups)转出:
! N2 B bbsroute
! N1 B, null
Example: tw.bbs.test + csie.test -> test board
test -> csie.test
csie.test test bbsroute
! tw.bbs.test test, null
D)多(boards)对一(newsgroup)转出, 一(newsgroups)转入多(board):
N, B1 S
Files innbbsd-0.50beta-4/doc/bbnnrp-generic-gateway and innbbsd-0.
50beta-5F/doc/bbnnrp-generic-gateway are identical
Files innbbsd-0.50beta-4/doc/bbslink.8 and innbbsd-0.
50beta-5F/doc/bbslink.8 are identical
Only in innbbsd-0.50beta-5F/doc: bbslink.patch
diff -rcs innbbsd-0.50beta-4/doc/bbsnnrp.8 innbbsd-0.
50beta-5F/doc/bbsnnrp.8
*** innbbsd-0.50beta-4/doc/bbsnnrp.8 Sat Sep 2 19:07:51 1995
--- innbbsd-0.50beta-5F/doc/bbsnnrp.8 Sun Sep 17 20:59:40 1995
***************
*** 89,97 ****
directly.
.TP
.BI \-g " newsgroups"
! When feed to stdin,
.I newsgroups
is the pseudo newsgroup name.
.TP
.BI \-m " moderator"
You can add "Approved:
--- 89,100 ----
directly.
.TP
.BI \-g " newsgroups"
! When get feed from stdin,
.I newsgroups
is the pseudo newsgroup name.
+ When get feed from nntp, only handle
+ .I newsgroups
+ in the active file.
.TP
.BI \-m " moderator"
You can add "Approved:
Files innbbsd-0.50beta-4/doc/ctlinnbbsd.8 and innbbsd-0.
50beta-5F/doc/ctlinnbbsd.8 are identical
Only in innbbsd-0.50beta-5F/doc: filter.doc
Files innbbsd-0.50beta-4/doc/gateway.doc and innbbsd-0.
50beta-5F/doc/gateway.doc are identical
Files innbbsd-0.50beta-4/doc/gateway2.doc and innbbsd-0.
50beta-5F/doc/gateway2.doc are identical
Files innbbsd-0.50beta-4/doc/history-corrupt and innbbsd-0.
50beta-5F/doc/history-corrupt are identical
Files innbbsd-0.50beta-4/doc/innbbsd.8 and innbbsd-0.
50beta-5F/doc/innbbsd.8 are identical
Files innbbsd-0.50beta-4/doc/mailing-list-reply and innbbsd-0.
50beta-5F/doc/mailing-list-reply are identical
Files innbbsd-0.50beta-4/doc/makedbz.8 and innbbsd-0.
50beta-5F/doc/makedbz.8 are identical
Files innbbsd-0.50beta-4/doc/mkhistory.8 and innbbsd-0.
50beta-5F/doc/mkhistory.8 are identical
Files innbbsd-0.50beta-4/doc/multiple-feeds and innbbsd-0.
50beta-5F/doc/multiple-feeds are identical
Files innbbsd-0.50beta-4/doc/newsfeeds.bbs.5 and innbbsd-0.
50beta-5F/doc/newsfeeds.bbs.5 are identical
Files innbbsd-0.50beta-4/doc/nodelist.bbs.5 and innbbsd-0.
50beta-5F/doc/nodelist.bbs.5 are identical
Only in innbbsd-0.50beta-5F/doc: relaese.0.50beta-5F
Files innbbsd-0.50beta-4/doc/release.0.44 and innbbsd-0.
50beta-5F/doc/release.0.44 are identical
Files innbbsd-0.50beta-4/externs.h and innbbsd-0.50beta-5F/externs.h are
identical
Files innbbsd-0.50beta-4/file.c and innbbsd-0.50beta-5F/file.c are
identical
Only in innbbsd-0.50beta-5F: filter.c
Files innbbsd-0.50beta-4/his.c and innbbsd-0.50beta-5F/his.c are
identical
Files innbbsd-0.50beta-4/his.h and innbbsd-0.50beta-5F/his.h are
identical
Files innbbsd-0.50beta-4/hisconvert and innbbsd-0.50beta-5F/hisconvert
are identical
diff -rcs innbbsd-0.50beta-4/innbbsconf.h innbbsd-0.
50beta-5F/innbbsconf.h
*** innbbsd-0.50beta-4/innbbsconf.h Sat Sep 2 19:07:55 1995
--- innbbsd-0.50beta-5F/innbbsconf.h Sun Sep 17 20:59:43 1995
***************
*** 189,192 ****
--- 189,211 ----
#undef WITH_RECORD_O
#endif
+ #ifdef HCCC
+ #if defined(HC) || defined(WORDG2B)
+ # define Rfprintf b2gfprintf
+ # define Sfprintf g2bfprintf
+ # define Rfputs b2gfputs
+ # define Sfputs g2bfputs
+ #else
+ # define Rfprintf fprintf
+ # define Sfprintf fprintf
+ # define Rfputs fputs
+ # define Sfputs fputs
+ #endif
+ #endif
+
+ #ifndef LANG
+ #define LANG "BIG5"
+ #endif
+
+
#endif
diff -rcs innbbsd-0.50beta-4/innbbsd.c innbbsd-0.50beta-5F/innbbsd.c
*** innbbsd-0.50beta-4/innbbsd.c Sat Sep 2 19:07:54 1995
--- innbbsd-0.50beta-5F/innbbsd.c Sun Sep 17 20:59:42 1995
***************
*** 44,49 ****
--- 44,51 ----
static int CMDverboselog ARG((ClientType*));
static int CMDlistnodelist ARG((ClientType*));
static int CMDlistnewsfeeds ARG((ClientType*));
+ static int CMDpause ARG((ClientType*));
+ static int CMDgo ARG((ClientType*));
#ifdef GETRUSAGE
static int CMDgetrusage ARG((ClientType*));
***************
*** 66,71 ****
--- 68,75 ----
{"listnodelist","listnodelist (local)",1,1, NNTP_MODE_BAD,
NNTP_MODE_OK, CMDlistnodelist},
{"listnewsfeeds","listnewsfeeds (local)",1,1, NNTP_MODE_BAD,
NNTP_MODE_OK, CMDlistnewsfeeds},
{"reload","reload (local)",1,1, NNTP_RELOAD_BAD, NNTP_RELOAD_OK,
CMDreload},
+ {"pause","pause (local)",1,1, NNTP_RELOAD_BAD, NNTP_RELOAD_OK,
CMDpause},
+ {"go","go (local)",1,1, NNTP_RELOAD_BAD, NNTP_RELOAD_OK, CMDgo},
{"hismaint","hismaint (local)",1,1, NNTP_RELOAD_BAD, NNTP_RELOAD_OK,
CMDhismaint},
{"verboselog","verboselog [on|off](local)",1,2, NNTP_VERBOSELOG_BAD,
NNTP_VERBOSELOG_OK, CMDverboselog},
#ifdef GETRUSAGE
***************
*** 454,459 ****
--- 458,515 ----
fprintf(argv->out,"%d hismaint complete\r\n", p->normalcode);
fflush(argv->out);
verboselog("Hismaint Put: %d hismaint complete\n", p->normalcode);
+ return 1;
+ }
+
+ static int INNBBSDpause = 0;
+
+ static int CMDgo(client)
+ ClientType *client;
+ {
+ argv_t *argv = &client->Argv;
+ buffer_t *in = &client->in;
+ daemoncmd_t *p = argv->dc;
+ if (!islocalconnect(client)) {
+ fprintf(argv->out,"%d go access denied\r\n", p->errorcode);
+ fflush(argv->out);
+ verboselog("Pause Put: %d go access denied\n", p->errorcode);
+ return 1;
+ }
+
+ INNBBSDpause = 0;
+
+ fprintf(argv->out,"%d go complete\r\n", p->normalcode);
+ fflush(argv->out);
+ verboselog("Pause Put: %d go complete\n", p->normalcode);
+ return 1;
+ }
+
+
+
+ int
+ isPause()
+ {
+ return INNBBSDpause;
+ }
+
+ static int CMDpause(client)
+ ClientType *client;
+ {
+ argv_t *argv = &client->Argv;
+ buffer_t *in = &client->in;
+ daemoncmd_t *p = argv->dc;
+ if (!islocalconnect(client)) {
+ fprintf(argv->out,"%d pause access denied\r\n", p->errorcode);
+ fflush(argv->out);
+ verboselog("Pause Put: %d pause access denied\n", p->errorcode);
+ return 1;
+ }
+
+ INNBBSDpause = 1;
+
+ fprintf(argv->out,"%d pause complete\r\n", p->normalcode);
+ fflush(argv->out);
+ verboselog("Pause Put: %d pause complete\n", p->normalcode);
return 1;
}
Files innbbsd-0.50beta-4/innbbsd.h and innbbsd-0.50beta-5F/innbbsd.h are
identical
Files innbbsd-0.50beta-4/innd/Makefile and innbbsd-0.
50beta-5F/innd/Makefile are identical
Files innbbsd-0.50beta-4/innd/README and innbbsd-0.50beta-5F/innd/README
are identical
Files innbbsd-0.50beta-4/innd/bbsgate-skhuang.active and innbbsd-0.
50beta-5F/innd/bbsgate-skhuang.active are identical
Files innbbsd-0.50beta-4/innd/bbsgate.active and innbbsd-0.
50beta-5F/innd/bbsgate.active are identical
Files innbbsd-0.50beta-4/innd/bbsgate.active.BAK and innbbsd-0.
50beta-5F/innd/bbsgate.active.BAK are identical
Files innbbsd-0.50beta-4/innd/bbsgate.active.BAK.OLD and innbbsd-0.
50beta-5F/innd/bbsgate.active.BAK.OLD are identical
Files innbbsd-0.50beta-4/innd/bbsname.bbs and innbbsd-0.
50beta-5F/innd/bbsname.bbs are identical
Files innbbsd-0.50beta-4/innd/bbspost.c and innbbsd-0.
50beta-5F/innd/bbspost.c are identical
Files innbbsd-0.50beta-4/innd/bntplink and innbbsd-0.
50beta-5F/innd/bntplink are identical
Files innbbsd-0.50beta-4/innd/bntplink.palmbbs and innbbsd-0.
50beta-5F/innd/bntplink.palmbbs are identical
Only in innbbsd-0.50beta-5F/innd: filter.ctl
Only in innbbsd-0.50beta-4/innd: in.bntpd
diff -rcs innbbsd-0.50beta-4/innd/innbbs.conf innbbsd-0.
50beta-5F/innd/innbbs.conf
*** innbbsd-0.50beta-4/innd/innbbs.conf Sat Sep 2 19:07:57 1995
--- innbbsd-0.50beta-5F/innd/innbbs.conf Sun Sep 17 20:59:46 1995
***************
*** 9,15 ****
# ctlinnbbsd grephist <mid>
# ctlinnbbsd addhist <mid> path
! expiretime 3:50
! expiredays 7
! #nodelist local
! #newsfeeds none
--- 9,32 ----
# ctlinnbbsd grephist <mid>
# ctlinnbbsd addhist <mid> path
! expiretime 3:50
! expiredays 7
! #nodelist local
! #newsfeeds none
! #bbsname mybbsname
! #organization 个人 BBS
! #adminuser bbsroot@csie.nctu.edu.tw
! #hctable /home/bbs/lib/hc.tab /home/bbs/lib/incorrect.tab
! #hctable /home/bbs/lib/japsupp.tab
! #wordlib /home/bbs/lib/wordg2b
! # Name Input Output
! #filter A big2gb gb2big
! #for tw.bbs.* -> BBS in GB
! #filter B jis2big big2jis
! #for fj.* -> BBS in BIG5
! #filter C hz2gb gb2hz
! #for alt.chinese.text -> BBS in GB
! #filter D ut8tobig bigtout8
! #filter E ut7tout8 ut8tout7
! #filter F hz2gb:gb2big big2gb:gb2hz
! #for alt.chinese.text -> BBS in BIG5
Files innbbsd-0.50beta-4/innd/innbbslib.pl and innbbsd-0.
50beta-5F/innd/innbbslib.pl are identical
Only in innbbsd-0.50beta-4/innd: mailpost
diff -rcs innbbsd-0.50beta-4/innd/news.active innbbsd-0.
50beta-5F/innd/news.active
*** innbbsd-0.50beta-4/innd/news.active Sat Sep 2 19:07:58 1995
--- innbbsd-0.50beta-5F/innd/news.active Sun Sep 17 20:59:47 1995
***************
*** 1,16 ****
! csie.test 0000007691 0000007162 y
! tw.bbs.test 0000026840 0000023348 y
! nctu.test 0000010615 0000010011 y
! tw.test 0000006988 0000006952 y
! csie.computer-center 0000001656 0000000805 y
! nthu.test 0000006324 0000005613 y
! tw.bbs.admin.installbbs 0000002995 0000000338 y
! tw.bbs.comp.unix 0000018473 0000010378 y
! control.cancel 0000551473 0000486697 y
! csie.dcp 00000001130 0000000918 y
! tw.bbs.csbbs.pbbs 0000000162 0000000081 y
! alt.chinese.text.big5 0000065307 0000058972 y
! csie.course.u.chinese 0000017212 0000015600 y
! csie.gcp 0000002508 0000002030 y
! tw.bbs.campus.nthu 0000023054 0000013521 y
! csie.cp74 0000000000 0000000001 y
--- 1,16 ----
! csie.test 0000008094 0000007744 y
! tw.bbs.test 0000034714 0000031698 y
! nctu.test 0000015157 0000015044 y
! tw.test 0000008194 0000007851 y
! csie.computer-center 0000001770 0000000805 y
! nthu.test 0000007100 0000007018 y
! tw.bbs.admin.installbbs 0000003303 0000000901 y
! tw.bbs.comp.unix 0000020793 0000019891 y
! control.cancel 0000709694 0000706694 y
! csie.dcp 00000001166 0000001077 y
! tw.bbs.csbbs.pbbs 0000000433 0000000165 y
! alt.chinese.text.big5 0000066583 0000058972 y
! csie.course.u.chinese 0000028197 0000027892 y
! csie.gcp 0000002586 0000002338 y
! tw.bbs.campus.nthu 0000026586 0000026135 y
! csie.cp74 0000000020 0000000017 y
diff -rcs innbbsd-0.50beta-4/innd/news.active.BAK innbbsd-0.
50beta-5F/innd/news.active.BAK
*** innbbsd-0.50beta-4/innd/news.active.BAK Sat Sep 2 19:07:59 1995
--- innbbsd-0.50beta-5F/innd/news.active.BAK Sun Sep 17 20:59:47 1995
***************
*** 1,15 ****
! csie.test 0000007691 0000007162 y
! tw.bbs.test 0000026840 0000023348 y
! nctu.test 0000010615 0000010011 y
! tw.test 0000006988 0000006952 y
! csie.computer-center 0000001656 0000000805 y
! nthu.test 0000006324 0000005613 y
! tw.bbs.admin.installbbs 0000002995 0000000338 y
! tw.bbs.comp.unix 0000017968 0000010378 y
! control.cancel 0000551473 0000486697 y
! csie.dcp 00000001130 0000000918 y
! tw.bbs.csbbs.pbbs 0000000162 0000000081 y
! alt.chinese.text.big5 0000065206 0000058972 y
! csie.course.u.chinese 0000017111 0000015600 y
! csie.gcp 0000002508 0000002030 y
! tw.bbs.campus.nthu 0000022942 0000013521 y
--- 1,16 ----
! csie.test 0000008094 0000007744 y
! tw.bbs.test 0000034714 0000031698 y
! nctu.test 0000015157 0000015044 y
! tw.test 0000008194 0000007851 y
! csie.computer-center 0000001770 0000000805 y
! nthu.test 0000007100 0000007018 y
! tw.bbs.admin.installbbs 0000003303 0000000901 y
! tw.bbs.comp.unix 0000020793 0000019891 y
! control.cancel 0000709694 0000706694 y
! csie.dcp 00000001166 0000001077 y
! tw.bbs.csbbs.pbbs 0000000433 0000000165 y
! alt.chinese.text.big5 0000066583 0000058972 y
! csie.course.u.chinese 0000028197 0000027892 y
! csie.gcp 0000002586 0000002338 y
! tw.bbs.campus.nthu 0000026586 0000026135 y
! csie.cp74 0000000020 0000000017 y
diff -rcs innbbsd-0.50beta-4/innd/news.active.BAK.OLD innbbsd-0.
50beta-5F/innd/news.active.BAK.OLD
*** innbbsd-0.50beta-4/innd/news.active.BAK.OLD Sat Sep 2 19:07:59
1995
--- innbbsd-0.50beta-5F/innd/news.active.BAK.OLD Sun Sep 17 20:59:48
1995
***************
*** 1,15 ****
! csie.test 0000007691 0000007162 y
! tw.bbs.test 0000026840 0000022334 y
! nctu.test 0000010424 0000010011 y
! tw.test 0000006823 0000006800 y
! csie.computer-center 0000001625 0000000805 y
! nthu.test 0000006154 0000005613 y
! tw.bbs.admin.installbbs 0000002651 0000000338 y
! tw.bbs.comp.unix 0000017867 0000010378 y
! control.cancel 0000551473 0000486697 y
! csie.dcp 00000001109 0000000916 y
! tw.bbs.csbbs.pbbs 0000000139 0000000037 y
! alt.chinese.text.big5 0000065107 0000058972 y
! csie.course.u.chinese 0000017012 0000014051 y
! csie.gcp 0000002453 0000002026 y
! tw.bbs.campus.nthu 0000022839 0000013521 y
--- 1,16 ----
! csie.test 0000008094 0000007744 y
! tw.bbs.test 0000033714 0000031698 y
! nctu.test 0000015153 0000015044 y
! tw.test 0000008189 0000007851 y
! csie.computer-center 0000001770 0000000805 y
! nthu.test 0000007100 0000007018 y
! tw.bbs.admin.installbbs 0000003200 0000000901 y
! tw.bbs.comp.unix 0000020687 0000019891 y
! control.cancel 0000708694 0000706694 y
! csie.dcp 00000001166 0000001077 y
! tw.bbs.csbbs.pbbs 0000000417 0000000165 y
! alt.chinese.text.big5 0000066483 0000058972 y
! csie.course.u.chinese 0000028096 0000027892 y
! csie.gcp 0000002586 0000002338 y
! tw.bbs.campus.nthu 0000026483 0000026135 y
! csie.cp74 0000000020 0000000017 y
Files innbbsd-0.50beta-4/innd/newsfeeds.bbs and innbbsd-0.
50beta-5F/innd/newsfeeds.bbs are identical
Files innbbsd-0.50beta-4/innd/nodelist.bbs and innbbsd-0.
50beta-5F/innd/nodelist.bbs are identical
Files innbbsd-0.50beta-4/innd/parsedate.c and innbbsd-0.
50beta-5F/innd/parsedate.c are identical
Files innbbsd-0.50beta-4/innd/src/modify.doc and innbbsd-0.
50beta-5F/innd/src/modify.doc are identical
Files innbbsd-0.50beta-4/innd/t.pl and innbbsd-0.50beta-5F/innd/t.pl are
identical
Files innbbsd-0.50beta-4/innd/tcp.pl and innbbsd-0.50beta-5F/innd/tcp.pl
are identical
Files innbbsd-0.50beta-4/innd/timefmt.y and innbbsd-0.
50beta-5F/innd/timefmt.y are identical
diff -rcs innbbsd-0.50beta-4/inndchannel.c innbbsd-0.
50beta-5F/inndchannel.c
*** innbbsd-0.50beta-4/inndchannel.c Sat Sep 2 19:07:54 1995
--- innbbsd-0.50beta-5F/inndchannel.c Sun Sep 17 20:59:42 1995
***************
*** 71,76 ****
--- 71,77 ----
client->statcount = 0;
client->statfail = 0;
client->begin = time(NULL);
+ client->filter_buffer = NULL;
}
channeldestroy(client)
***************
*** 84,89 ****
--- 85,94 ----
free(client->out.data);
client->out.data = NULL;
}
+ if (client->filter_buffer != NULL) {
+ free(client->filter_buffer);
+ client->filter_buffer = NULL;
+ }
#if !defined(PowerBBS) && !defined(DBZSERVER)
if (client->ihavecount >0 || client->statcount >0) {
bbslog("%s@%s rec: %d dup: %d fail: %d size: %d, stat rec: %d
fail: %d, time sec: %d\n",
***************
*** 166,171 ****
--- 171,177 ----
exit(0);
}
+
time(&now);
local = localtime(&now);
if (local != NULL & local->tm_hour == His_Maint_Hour &&
***************
*** 284,292 ****
continue;
}
bbslog("connected from (%s@%s).\n",client[i].username, client[i].
hostname);
#ifdef INNBBSDEBUG
printf("connected from (%s@%s).\n",client[i].username, client[i].
hostname);
! #endif
#ifdef DBZSERVER
fprintf(client[i].Argv.out,"200 %s InterNetNews DBZSERVER server
%s (%s@%s).\r\n",MYBBSID, VERSION, client[i].username, client[i].
hostname );
#else
--- 290,308 ----
continue;
}
bbslog("connected from (%s@%s).\n",client[i].username, client[i].
hostname);
+ if (isPause()) {
+ fprintf(client[i].Argv.out,"400 Server Paused. (%s@%s)\r\n",
client[i].username, client[i].hostname);
+ fflush(client[i].Argv.out);
+ fclose(client[i].Argv.in);
+ fclose(client[i].Argv.out);
+ close(client[i].fd);
+ FD_CLR(client[i].fd,&rfd);
+ client[i].fd = -1;
+ continue;
+ }
#ifdef INNBBSDEBUG
printf("connected from (%s@%s).\n",client[i].username, client[i].
hostname);
! #endif
#ifdef DBZSERVER
fprintf(client[i].Argv.out,"200 %s InterNetNews DBZSERVER server
%s (%s@%s).\r\n",MYBBSID, VERSION, client[i].username, client[i].
hostname );
#else
***************
*** 568,573 ****
--- 584,592 ----
char *port, *path;
int c, errflag=0;
extern INNBBSDhalt();
+ #if !defined(DBZSERVER)
+ initial_lang();
+ #endif
port = DefaultINNBBSPort;
path = LOCALDAEMON;
diff -rcs innbbsd-0.50beta-4/inntobbs.c innbbsd-0.50beta-5F/inntobbs.c
*** innbbsd-0.50beta-4/inntobbs.c Sat Sep 2 19:07:54 1995
--- innbbsd-0.50beta-5F/inntobbs.c Sun Sep 17 20:59:42 1995
***************
*** 1,10 ****
--- 1,12 ----
#include <stdio.h>
+ #include "innbbsconf.h"
#include "daemon.h"
#include "bbslib.h"
#include <time.h>
#define INNTOBBS
#include "inntobbs.h"
+ #include "lang.h"
typedef struct Header {
char *name;
***************
*** 18,26 ****
};
*/
! char *strchr ARG((char*,int));
char *strrchr ARG((char*,int));
char *strstr ARG((char*,char*));
header_t headertable[] = {
"Subject" ,SUBJECT_H,
--- 20,29 ----
};
*/
! /*char *strchr ARG((char*,int));
char *strrchr ARG((char*,int));
char *strstr ARG((char*,char*));
+ */
header_t headertable[] = {
"Subject" ,SUBJECT_H,
***************
*** 206,219 ****
if( echomailfp != NULL ) {
fprintf(echomailfp,"\n");
! fprintf(echomailfp,"发信人: %s, 信区: %s\n", FROM, GROUPS);
! fprintf(echomailfp,"标 题: %s\n", SUBJECT);
! fprintf(echomailfp,"发信站: %s (%s)\n", SITE, DATE);
! fprintf(echomailfp,"转信站: %s (%s)\n", PATH, REMOTEHOSTNAME);
fflush(echomailfp);
}
}
int headercmp(a,b)
header_t *a, *b;
{
--- 209,371 ----
if( echomailfp != NULL ) {
fprintf(echomailfp,"\n");
! fprintf(echomailfp,"%s%s, %s%s\n", FromTxt, FROM, BoardTxt, GROUPS);
! fprintf(echomailfp,"%s%s\n", SubjectTxt, SUBJECT);
! fprintf(echomailfp,"%s%s (%s)\n", OrganizationTxt, SITE, DATE);
! fprintf(echomailfp,"%s%s (%s)\n", PathTxt, PATH, REMOTEHOSTNAME);
fflush(echomailfp);
}
}
+
+ #ifdef FILTER
+
+ char *
+ cmdfilter(indata, filterbuffer, cmd)
+ char *indata, **filterbuffer;
+ FuncPtr cmd;
+ {
+ char *outdata;
+ int len = strlen(indata);
+ if (*filterbuffer != NULL)
+ *filterbuffer = (char*)myrealloc(*filterbuffer, len + 4096);
+ else
+ *filterbuffer = (char*)mymalloc(len + 4096);
+ if (filterbuffer == NULL) return NULL;
+ bcopy(indata, *filterbuffer, len);
+ (*cmd)(*filterbuffer, &len, 0);
+ (*filterbuffer)[len] = '\0';
+ return *filterbuffer;
+ }
+
+ char *externfilter(indata, filterbuffer, cmd)
+ char *indata, **filterbuffer, *cmd;
+ {
+ char *outdata;
+ FILE *fp;
+ int fd;
+ char *tmpfile;
+
+ int len = strlen(indata);
+ int size ;
+ struct stat st;
+
+ fp = (FILE*)popen((char*)fileglue("%s > /tmp/.innbbsdfilter%d%d",
cmd,getpid(), getuid()),"w");
+ if (fp == NULL) {
+ bbslog("Err: can't popen %s\n",cmd);
+ return NULL;
+ }
+ if (fwrite(indata, 1, len, fp) != len) {
+ bbslog("Err: fwrite to %s failed, len %d\n",cmd, len);
+ return NULL;
+ }
+ pclose(fp);
+
+ tmpfile = (char*)fileglue("/tmp/.innbbsdfilter%d%d", getpid(),
getuid());
+ if (stat(tmpfile, &st) != 0) return NULL;
+
+ if (*filterbuffer != NULL)
+ *filterbuffer = myrealloc(*filterbuffer, st.st_size + 1);
+ else
+ *filterbuffer = mymalloc( st.st_size + 1);
+ (*filterbuffer)[st.st_size] = '\0';
+ if (*filterbuffer == NULL) return NULL;
+
+ fd = open(tmpfile, O_RDONLY);
+ if (fd < 0) return NULL;
+ read(fd, *filterbuffer, st.st_size);
+ close(fd);
+ unlink(tmpfile);
+ return *filterbuffer;
+ }
+
+ char *
+ filterdata(arp, direction, indata, filterdata)
+ newsfeeds_t *arp;
+ int direction;
+ char *indata, **filterdata;
+ {
+ char *outdata;
+ FuncPtr fptr = NULL;
+ char *cmdptr = NULL;
+ if (direction) {
+ fptr = arp->sfilter;
+ cmdptr = arp->scmdfilter;
+ } else {
+ fptr = arp->rfilter;
+ cmdptr = arp->rcmdfilter;
+ }
+ if (fptr)
+ outdata = cmdfilter(indata, filterdata, fptr);
+ else if (cmdptr)
+ outdata = externfilter(indata, filterdata, cmdptr);
+ else
+ outdata = NULL;
+ return outdata;
+ }
+
+ char *
+ processfilter(indata, filterbuffer, direction)
+ char *indata, **filterbuffer;
+ int direction;
+ {
+ char *front = indata, *ptr, *hptr;
+ int i;
+ char *outdata = indata;
+ int filterflag=0;
+
+ for (ptr = (char*)strchr(indata,'\n'); ptr != NULL && *ptr != '\0'
; front = ptr+1, ptr = (char*)strchr(front,'\n')) {
+ *ptr = '\0';
+ if (front[0] == '\r' || front[1] == '\n') {
+ *ptr= '\n';
+ break;
+ }
+ hptr = (char*)strchr(front,':');
+ if (hptr != NULL && hptr[1] == ' ') {
+ *hptr = '\0';
+ if (strcmp(front,"Newsgroups")==0) {
+ char *ngp, *ongp;
+ newsfeeds_t *arp;
+ char *tp;
+ if ((tp = (char*)strchr(hptr+2,'\r'))!=NULL)
+ *tp = '\0';
+ for (ngp = hptr+2, ongp = strchr(ngp,',');
+ ngp && *ngp; ongp = strchr(ngp,',')) {
+ if (ongp) *ongp = '\0';
+ arp = search_group(ngp);
+ if (arp) {
+ if (ongp) *ongp = ',';
+ if (tp != NULL) *tp = '\r';
+ if (hptr) *hptr = ':';
+ if (ptr) *ptr = '\n';
+ outdata = filterdata(arp, direction, indata, filterbuffer);
+ if (outdata) filterflag = 1;
+ if (ongp) *ongp = '\0';
+ if (tp != NULL) tp = '\0';
+ if (hptr) *hptr = '\0';
+ if (ptr) *ptr = '\0';
+ }
+ if (ongp) {
+ *ongp = ',';
+ ngp = ongp+1;
+ } else {
+ break;
+ }
+ if (filterflag) break;
+ }
+ if (tp != NULL) *tp='\r';
+ filterflag = 1;
+ }
+ *hptr = ':';
+ }
+ *ptr = '\n';
+ if (filterflag) break;
+ }
+ if (outdata) return outdata;
+ else return indata;
+ }
+ #endif
+
int headercmp(a,b)
header_t *a, *b;
{
***************
*** 226,237 ****
int fd = client->fd;
char *buffer = client->buffer;
buffer_t *in = &client->in;
char *front = in->data, *ptr, *hptr;
int i;
for (i=0; i < LASTHEADER; i++ )
HEADER[i] = NULL;
! for (ptr = (char*)strchr(in->data,'\n'); ptr != NULL && *ptr !=
'\0' ; front = ptr+1, ptr = (char*)strchr(front,'\n')) {
*ptr = '\0';
if (front[0] == '\r' || front[1] == '\n') {
BODY = front+2;
--- 378,401 ----
int fd = client->fd;
char *buffer = client->buffer;
buffer_t *in = &client->in;
+ char *indata = in->data;
char *front = in->data, *ptr, *hptr;
int i;
for (i=0; i < LASTHEADER; i++ )
HEADER[i] = NULL;
!
! #ifdef FILTER
! indata = processfilter(in->data, &client->filter_buffer, 0);
! #endif
!
! if (indata != NULL) {
! front = indata;
! } else {
! front = indata = in->data;
! }
!
! for (ptr = (char*)strchr(indata,'\n'); ptr != NULL && *ptr != '\0'
; front = ptr+1, ptr = (char*)strchr(front,'\n')) {
*ptr = '\0';
if (front[0] == '\r' || front[1] == '\n') {
BODY = front+2;
Files innbbsd-0.50beta-4/inntobbs.h and innbbsd-0.50beta-5F/inntobbs.h
are identical
Only in innbbsd-0.50beta-5F: lang.c
Only in innbbsd-0.50beta-5F: lang.h
Files innbbsd-0.50beta-4/makedbz.c and innbbsd-0.50beta-5F/makedbz.c are
identical
Files innbbsd-0.50beta-4/mkhistory.c and innbbsd-0.50beta-5F/mkhistory.c
are identical
Files innbbsd-0.50beta-4/nntp.h and innbbsd-0.50beta-5F/nntp.h are
identical
Files innbbsd-0.50beta-4/parsdate.y and innbbsd-0.50beta-5F/parsdate.y
are identical
Files innbbsd-0.50beta-4/pmain.c and innbbsd-0.50beta-5F/pmain.c are
identical
Files innbbsd-0.50beta-4/port.c and innbbsd-0.50beta-5F/port.c are
identical
diff -rcs innbbsd-0.50beta-4/receive_article.c innbbsd-0.
50beta-5F/receive_article.c
*** innbbsd-0.50beta-4/receive_article.c Sat Sep 2 19:07:55 1995
--- innbbsd-0.50beta-5F/receive_article.c Sun Sep 17 20:59:43 1995
***************
*** 18,28 ****
char *ptr = (char*)DBfetch(msgid);
! 收到之文章内容 (body)在 char *BODY,
! 档头 (header)在 char *HEADER[]
SUBJECT_H, FROM_H, DATE_H, MID_H, NEWSGROUPS_H,
NNTPPOSTINGHOST_H, NNTPHOST_H, CONTROL_H, PATH_H,
ORGANIZATION_H
*/
/*
--- 18,31 ----
char *ptr = (char*)DBfetch(msgid);
! the post contents received (body) is in char *BODY,
! (header) in char *HEADER[]
SUBJECT_H, FROM_H, DATE_H, MID_H, NEWSGROUPS_H,
NNTPPOSTINGHOST_H, NNTPHOST_H, CONTROL_H, PATH_H,
ORGANIZATION_H
+
+ To filter input text, another set of HEADER is processed
+ at first and BODY processed later.
*/
/*
***************
*** 39,50 ****
--- 42,56 ----
#include "daemon.h"
#include "bbslib.h"
#include "inntobbs.h"
+ #include "lang.h"
extern int Junkhistory;
char *post_article ARG((char *, char *, char *, int (*)(),char *,
char*));
int cancel_article ARG(( char*, char*, char* ));
+ #define FAILED goto failed
+
report()
{
/* Function called from record.o */
***************
*** 67,99 ****
char *filename;
{
char *fptr, *ptr;
! FILE *fhfd = fdopen(fh,"w");
if (fhfd == NULL) {
bbslog("can't fdopen, maybe disk full\n");
return -1;
}
! fprintf(fhfd,"发信人: %s, 信区: %s\n",FROM, board);
! fprintf(fhfd,"标 题: %s\n", SUBJECT);
! fprintf(fhfd,"发信站: %.43s (%s)\n",SITE,DATE);
! fprintf(fhfd,"转信站: %s\n",PATH);
if (POSTHOST != NULL) {
! fprintf(fhfd, "Origin: %.70s\n",POSTHOST);
}
! fprintf(fhfd,"\n");
for (fptr = BODY, ptr = strchr(fptr,'\r'); ptr != NULL &&
*ptr != '\0' ; fptr = ptr+1, ptr = strchr(fptr,'\r')) {
int ch = *ptr;
*ptr = '\0';
! fputs(fptr, fhfd);
*ptr = ch;
}
! fputs(fptr,fhfd);
!
fflush(fhfd);
fclose(fhfd);
return 0;
}
/* process cancel write */
--- 73,111 ----
char *filename;
{
char *fptr, *ptr;
! FILE *fhfd;
+ fhfd = fdopen(fh,"w");
if (fhfd == NULL) {
bbslog("can't fdopen, maybe disk full\n");
return -1;
}
! if (fprintf(fhfd,"%s%s, %s%s\n",FromTxt, FROM, BoardTxt,
board)==EOF ||
! fprintf(fhfd,"%s%s\n", SubjectTxt, SUBJECT)==EOF ||
! fprintf(fhfd,"%s%.43s (%s)\n",OrganizationTxt,SITE,
DATE)==EOF ||
! fprintf(fhfd,"%s%s\n",PathTxt, PATH)==EOF )
! FAILED;
!
if (POSTHOST != NULL) {
! if(fprintf(fhfd, "Origin: %.70s\n",POSTHOST)==EOF)
! FAILED;
}
! if (fprintf(fhfd,"\n")==EOF) FAILED;
for (fptr = BODY, ptr = strchr(fptr,'\r'); ptr != NULL &&
*ptr != '\0' ; fptr = ptr+1, ptr = strchr(fptr,'\r')) {
int ch = *ptr;
*ptr = '\0';
! if (fputs(fptr, fhfd)== EOF) FAILED;
*ptr = ch;
}
! if (fputs(fptr,fhfd)==EOF) FAILED;
fflush(fhfd);
fclose(fhfd);
return 0;
+ failed:
+ fclose(fhfd);
+ return -1;
}
/* process cancel write */
***************
*** 110,145 ****
return -1;
}
! fprintf(fhfd,"发信人: %s, 信区: %s\n",FROM, board);
! fprintf(fhfd,"标 题: %s\n", SUBJECT);
! fprintf(fhfd,"发信站: %.43s (%s)\n",SITE,DATE);
! fprintf(fhfd,"转信站: %.70s\n",PATH);
if (HEADER[CONTROL_H] != NULL) {
! fprintf(fhfd, "Control: %s\n",HEADER[CONTROL_H]);
}
if (POSTHOST != NULL) {
! fprintf(fhfd, "Origin: %s\n",POSTHOST);
}
! fprintf(fhfd,"\n");
for (fptr = BODY, ptr = strchr(fptr,'\r'); ptr != NULL &&
*ptr != '\0' ; fptr = ptr+1, ptr = strchr(fptr,'\r')) {
int ch = *ptr;
*ptr = '\0';
! fputs(fptr, fhfd);
*ptr = ch;
}
! fputs(fptr,fhfd);
/*if (POSTHOST != NULL) {
fprintf(fhfd, "\n * Origin: ● %.26s ● From: %.40s\n",
SITE,POSTHOST);
}
*/
! fprintf(fhfd,"\n---------------------\n");
fp = fopen(filename,"r");
if (fp == NULL) {
bbslog("can't open %s\n", filename);
return -1;
}
while (fgets( buffer, sizeof buffer, fp)!=NULL) {
! fputs(buffer,fhfd);
}
fclose(fp);
fflush(fhfd);
--- 122,161 ----
return -1;
}
! if (fprintf(fhfd,"%s%s, %s%s\n",FromTxt, FROM, BoardTxt,
board)==EOF)
! FAILED;
! if (fprintf(fhfd,"%s%s\n", SubjectTxt, SUBJECT)==EOF) FAILED;
! if (fprintf(fhfd,"%s%.43s (%s)\n",OrganizationTxt, SITE,
DATE)==EOF) FAILED;
! if (fprintf(fhfd,"%s%.69s\n",PathTxt, PATH)==EOF) FAILED;
if (HEADER[CONTROL_H] != NULL) {
! if (fprintf(fhfd, "Control: %s\n",HEADER[CONTROL_H])==EOF)
! FAILED;
}
if (POSTHOST != NULL) {
! if (fprintf(fhfd, "Origin: %s\n",POSTHOST)==EOF)
! FAILED;
}
! if (fprintf(fhfd,"\n")==EOF) FAILED;
for (fptr = BODY, ptr = strchr(fptr,'\r'); ptr != NULL &&
*ptr != '\0' ; fptr = ptr+1, ptr = strchr(fptr,'\r')) {
int ch = *ptr;
*ptr = '\0';
! if (fputs(fptr, fhfd)==EOF) FAILED;
*ptr = ch;
}
! if (fputs(fptr,fhfd)==EOF) FAILED;
/*if (POSTHOST != NULL) {
fprintf(fhfd, "\n * Origin: ● %.26s ● From: %.40s\n",
SITE,POSTHOST);
}
*/
! if (fprintf(fhfd,"\n---------------------\n")==EOF) FAILED;
fp = fopen(filename,"r");
if (fp == NULL) {
bbslog("can't open %s\n", filename);
+ fclose(fhfd);
return -1;
}
while (fgets( buffer, sizeof buffer, fp)!=NULL) {
! if (fputs(buffer,fhfd)==EOF) FAILED;
}
fclose(fp);
fflush(fhfd);
***************
*** 151,166 ****
bbslog("can't write %s\n", filename);
return -1;
}
! fprintf(fp,"发信人: %s, 信区: %s\n",FROM, board);
! fprintf(fp,"标 题: %.70s\n", SUBJECT);
! fprintf(fp,"发信站: %.43s (%s)\n",SITE,DATE);
! fprintf(fp,"转信站: %.70s\n",PATH);
if (POSTHOST != NULL) {
! fprintf(fhfd, "Origin: %s\n",POSTHOST);
}
/*
if (HEADER[CONTROL_H] != NULL) {
! fprintf(fhfd, "Control: %s\n",HEADER[CONTROL_H]);
}
*/
fprintf(fp,"\n");
--- 167,182 ----
bbslog("can't write %s\n", filename);
return -1;
}
! fprintf(fp,"%s%s, %s%s\n",FromTxt, FROM, BoardTxt, board);
! fprintf(fp,"%s%.70s\n", SubjectTxt, SUBJECT);
! fprintf(fp,"%s%.43s (%s)\n",OrganizationTxt, SITE,DATE);
! fprintf(fp,"%s%.70s\n",PathTxt, PATH);
if (POSTHOST != NULL) {
! fprintf(fp, "Origin: %s\n",POSTHOST);
}
/*
if (HEADER[CONTROL_H] != NULL) {
! fprintf(fp, "Control: %s\n",HEADER[CONTROL_H]);
}
*/
fprintf(fp,"\n");
***************
*** 176,181 ****
--- 192,200 ----
fclose(fp);
}
return 0;
+ failed:
+ fclose(fhfd);
+ return -1;
}
bbspost_write_control(fh, board, filename)
***************
*** 191,227 ****
return -1;
}
! fprintf(fhfd,"Path: %s!%s\n",MYBBSID, HEADER[PATH_H]);
! fprintf(fhfd,"From: %s\n",FROM);
! fprintf(fhfd,"Newsgroups: %s\n", GROUPS);
! fprintf(fhfd,"Subject: %s\n", SUBJECT);
! fprintf(fhfd,"Date: %s\n",DATE);
! fprintf(fhfd,"Organization: %s\n",SITE);
if (POSTHOST != NULL) {
! fprintf(fhfd, "NNTP-Posting-Host: %.70s\n",POSTHOST);
}
if (HEADER[CONTROL_H] != NULL) {
! fprintf(fhfd, "Control: %s\n",HEADER[CONTROL_H]);
}
if (HEADER[APPROVED_H] != NULL) {
! fprintf(fhfd, "Approved: %s\n",HEADER[APPROVED_H]);
}
if (HEADER[DISTRIBUTION_H] != NULL) {
! fprintf(fhfd, "Distribution: %s\n",HEADER[DISTRIBUTION_H]);
}
! fprintf(fhfd,"\n");
for (fptr = BODY, ptr = strchr(fptr,'\r'); ptr != NULL &&
*ptr != '\0' ; fptr = ptr+1, ptr = strchr(fptr,'\r')) {
int ch = *ptr;
*ptr = '\0';
! fputs(fptr, fhfd);
*ptr = ch;
}
! fputs(fptr,fhfd);
fflush(fhfd);
fclose(fhfd);
return 0;
}
/* process cancel write */
--- 210,257 ----
return -1;
}
! if (fprintf(fhfd,"Path: %s!%s\n",MYBBSID,
HEADER[PATH_H])==EOF ||
! fprintf(fhfd,"From: %s\n",FROM)==EOF ||
! fprintf(fhfd,"Newsgroups: %s\n", GROUPS)==EOF ||
! fprintf(fhfd,"Subject: %s\n", SUBJECT)==EOF ||
! fprintf(fhfd,"Date: %s\n",DATE)== EOF ||
! fprintf(fhfd,"Organization: %s\n",SITE)==EOF)
! {
! fclose(fhfd);
! return -1;
! }
if (POSTHOST != NULL) {
! if (fprintf(fhfd, "NNTP-Posting-Host: %.70s\n",
POSTHOST)==EOF)
! FAILED;
}
if (HEADER[CONTROL_H] != NULL) {
! if (fprintf(fhfd, "Control: %s\n",HEADER[CONTROL_H])==EOF)
! FAILED;
}
if (HEADER[APPROVED_H] != NULL) {
! if (fprintf(fhfd, "Approved: %s\n",
HEADER[APPROVED_H])==EOF)
! FAILED;
}
if (HEADER[DISTRIBUTION_H] != NULL) {
! if (fprintf(fhfd, "Distribution: %s\n",
HEADER[DISTRIBUTION_H])==EOF)
! FAILED;
}
! if (fprintf(fhfd,"\n")==EOF) FAILED;
for (fptr = BODY, ptr = strchr(fptr,'\r'); ptr != NULL &&
*ptr != '\0' ; fptr = ptr+1, ptr = strchr(fptr,'\r')) {
int ch = *ptr;
*ptr = '\0';
! if (fputs(fptr, fhfd)==EOF) FAILED;
*ptr = ch;
}
! if (fputs(fptr,fhfd)==EOF) FAILED;
fflush(fhfd);
fclose(fhfd);
return 0;
+ failed:
+ fclose(fhfd);
+ return -1;
}
/* process cancel write */
***************
*** 283,291 ****
DATE = xdate;
}
if (SITE && strcasecmp("Computer Science & Information
Engineering NCTU",SITE) ==0) {
! SITE = "交大资工 News Server";
} else if (SITE && strcasecmp("Dep. Computer Sci. & Information
Eng., Chiao Tung Univ., Taiwan, R.O.C",SITE) ==0) {
! SITE = "交大资工 News Server";
} else if ( SITE == NULL || *SITE == '\0') {
if (nameptrleft != NULL && nameptrright != NULL) {
char savech = *nameptrright;
--- 313,321 ----
DATE = xdate;
}
if (SITE && strcasecmp("Computer Science & Information
Engineering NCTU",SITE) ==0) {
! SITE = NCTUCSIETxt;
} else if (SITE && strcasecmp("Dep. Computer Sci. & Information
Eng., Chiao Tung Univ., Taiwan, R.O.C",SITE) ==0) {
! SITE = NCTUCSIETxt;
} else if ( SITE == NULL || *SITE == '\0') {
if (nameptrleft != NULL && nameptrright != NULL) {
char savech = *nameptrright;
***************
*** 475,486 ****
if (buffer[0]=='\n') break;
hptr = strchr(buffer,'\n');
if (hptr != NULL) *hptr = '\0';
! if (strncmp(buffer,"发信人: ",8)==0) {
char* n;
n = strrchr(buffer,',');
if (n!=NULL) *n = '\0';
xfrom = buffer+8;
! } else if (strncmp(buffer,"转信站: ",8)==0) {
xpath = buffer+8;
}
}
--- 505,516 ----
if (buffer[0]=='\n') break;
hptr = strchr(buffer,'\n');
if (hptr != NULL) *hptr = '\0';
! if (strncmp(buffer,FromTxt,8)==0) {
char* n;
n = strrchr(buffer,',');
if (n!=NULL) *n = '\0';
xfrom = buffer+8;
! } else if (strncmp(buffer,PathTxt,8)==0) {
xpath = buffer+8;
}
}
***************
*** 570,576 ****
return 0;
}
! #if defined(PhoenixBBS) || defined(SecretBBS) || defined(PivotBBS)
/* for PhoenixBBS's post article and cancel article */
#include "bbs.h"
--- 600,606 ----
return 0;
}
! #if defined(PhoenixBBS) || defined(SecretBBS) || defined(PivotBBS)
|| defined(MapleBBS)
/* for PhoenixBBS's post article and cancel article */
#include "bbs.h"
***************
*** 654,660 ****
strncpy( header.owner, userid, IDLEN );
strncpy( header.title, subject, STRLEN );
header.filename[ STRLEN - 1 ] = 'M';
! append_record( index, &header, sizeof( header ) );
return name;
}
--- 684,693 ----
strncpy( header.owner, userid, IDLEN );
strncpy( header.title, subject, STRLEN );
header.filename[ STRLEN - 1 ] = 'M';
! /* if append record record, should return fail message */
! if (append_record( index, &header, sizeof( header ) ) < 0) {
! return NULL;
! }
return name;
}
***************
*** 803,808 ****
--- 836,845 ----
#else
receive_article()
+ {
+ }
+
+ receive_control()
{
}
Files innbbsd-0.50beta-4/rfc931.c and innbbsd-0.50beta-5F/rfc931.c are
identical
Only in innbbsd-0.50beta-5F: wildmat.c
--
FROM 162.105.106.53