From e9562655ae9424553ea03b546842c26d9519c667 Mon Sep 17 00:00:00 2001 From: Michiel Broek Date: Sat, 13 Jul 2002 12:58:35 +0000 Subject: [PATCH] Added nodelist override settings --- ChangeLog | 11 + html/faq.html | 18 +- html/images/nodes3.png | Bin 15053 -> 9651 bytes html/manual.css | 6 +- html/setup/nodes.html | 176 ++++----- lib/nodelist.c | 793 +++++++++++++++++++++-------------------- mbsetup/m_node.c | 8 +- mbtask/nodelist.c | 548 +++++++++++++++------------- 8 files changed, 839 insertions(+), 721 deletions(-) diff --git a/ChangeLog b/ChangeLog index e233b27e..102217a7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,11 +4,18 @@ $Id$ v0.35.03 06-Jul-2002 + common.a: + Added nodelist override to the nodelist lookup function. + lang: Corrected a spelling error in the Dutch language file. mbcico: Changed IsDoing information. + Makes use of the node nodelist override settings. + + mbout: + Makes use of the node nodelist override settings. newuser: Check for Unix accounts is now case sensitive. @@ -26,6 +33,10 @@ v0.35.03 06-Jul-2002 Now forces callmode to None if the callflag was cleared. The test to add a node to the calllist now also checks the internal call flag. + Makes use of the node nodelist override settings. + + mbsetup: + Enabled setting of nodelist override settings in menu 7.x.3 script: The bbsdoor.sh and rundoor.sh scripts are now only installed diff --git a/html/faq.html b/html/faq.html index bbd56d68..b9679044 100644 --- a/html/faq.html +++ b/html/faq.html @@ -478,9 +478,21 @@ MSN/EAZ the device should listen to. This should for an MSN be your telephone number with the area code but without the leading 0. For an EAZ the last digit of your EAZ.

The ISDN ports

-
port ttyI0
modem-type data
init-chat "" ATZ OK AT&E714015437&W0 OK AT&B512 OK

port ttyI1
modem-type data
init-chat "" ATZ OK AT&E714017198&W0 OK AT&B512 OK

- From the mbsetup menu #5 "Edit Modem types" configure the ISDN modem type. -
+
+port ttyI0
+modem-type data
+init-chat "" ATZ OK
+AT&E714015437&W0 OK 
+AT&B512 OK
+
+port ttyI1
+modem-type data
+init-chat "" ATZ OK 
+AT&E714017198&W0 OK 
+AT&B512 OK
+
+From the mbsetup menu #5 "Edit Modem types" configure the ISDN modem type. +
 Modem type   ISDN Linux
 Init string  ATZ\r
 Init string
diff --git a/html/images/nodes3.png b/html/images/nodes3.png
index 3cbb95507b584ec3e229fc238d3ece8ea989567b..f35d8d044d5098cf1c862513c094dabdd8695da3 100644
GIT binary patch
literal 9651
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

literal 15053
zcma)jbzD?myYGMqQVNRFNQ0zwhe${Z64D@D64I@tAc7zuEsekc(v5UUIRe5sgft_a
zL*6y;d*Ab(b3XTeE`P|!&FsC_UTZzi^NnZTK2=j7#G}B2Kp=#QPh>SA5KI*a1moom
zOmO8ia)clJ!m@s(`UnE~8iRjob{+g**iG)a+cPICH%~KHOUQE_S{+N*SGG?f^NMhb@YAw_5on#w+{|rgdAN8VAntN0LLjsdMcGGMUTNzHgLhPu
z-uJi4ii;YHx&LM;M+J{PHT;oH`)Kb)C=-Fy^D=o;BvY^QEJTUsHr7*V3~WpXqH7o-
z-yUM2ER(+{S`GwSzzQ1bf612j#;=Uk
zDx2_jXt?28dF#T0H`z<~s8Z^rl9AG#iluJ@17cd47fG?msUjQSw=gI)b2{YN@|dGn
zFXsFNh4OYz-}K+~O|;ZYw1j(XUCf*`&oE?<(AHjrhb!Y_JuQj3SSLlfH6m^rS@BaW
z&Je@Bid6ITy9|y(if1WtikHv2T`nhaXSBBUY+Y!^Zx=puejvw8N>S_pKaXlX!dHbA
zjTLPM!fVWR(#|q368HVD_4cBKX8ypqjhjsGq^tFuRK!N&)Kn9sDpf?*eoI#?K)l>-
z@A)QlQ)l=jdR|j5dgtDGRqXqm$(V~h)b4UtkEvebz1I_tL(99fk!Ke>nQ<-Zkn6Y-
zcY_0`rl*%+EG#U3Lw$X?7tg-CIeTx){^Uwb9I0*c>|?Z_19K+zvC5C6NG3gB(`{9f
zJ={PTP{ahx3k5vRS-JnI#u3NdDo$l%`5dW$JHs55?YC9-Qugd^W?o}sqbxtw&B?uk
z1Hsh%uHMdN-=uBM;o3f{o!0KZ^vvRoFWNbrKEGX4A`02vzaT>ubXER5`61@-=cgi@
ziTZB+B5@Ap_vh&7msq?bW58YR8nGD*Z64pgi?vWEsuJTBq4#oxG~snD
z>KRx$^55s}vhZLT>P}-tK6#thL-He7x9}n-Otu{EoT|?D;l%2VLm*7J6-(YKF@ZV
z%gM>XxkZCTdb3-N{`mK@-$&Qga7q&|NwE9Vft54`Puj9|onBN_G*a(~MGB?3k{Gy`b02l@;0J31
zN+(W*%MFnkusLz3SrO8u_@iNGd%kC)%)}ZaxOpLP2TC*6!c*6@SvGBS1_
za2Z4gEvFlvt;!s|5`ISy=a@m($=zyfJ!vE{F~S8YQXo14L~1r`jbo*J8u;VRG5U|X
zCjJSk_OkrRDr^anwkh_UcOejI9vTUsPG)|3SEIwzQ*nh@G1fvYaEJGAy6jcADF?wx
z`_Kq}Rr_lF+Ls7@>o)MGNay+PXrJbxd;$6&?nbbx@2Rg4LTm}1e%wZfgqyt6*EJnQ
zb{mQ(9g55khphShmAgN(xuy1bR=o%fbnc5`9ZsdH&Z%zAd|T&v`ikwVHirZ1$a06H
z)$JL+%A>X3USx>y_Q=V%FHvqMeWO{{0wAaZIoJUvLIEO
zGl>@w(WusUrwaGH
zNKifH{(Y2^dBnzi{%pzscPW+pw^dDCkM1?*Nf{!8^t%aT)=M!MSq4uUb4Cv1e>Bl)
z?0dDX^`APq-d0?rgKa$72wHDEw<sOt+eGlL(;c_y`RZ
zYOAGY1-<&$5&|QVx&^4p)VE~EfwpAjvLalk
zUOC5CMzvAnC$`-YsJ1E;Rx2G#MB#}_`GcwT1DTFH2aH}&9fP)(`O4(GB(%`>4mv0!
z1=A$433HVPkDbwsQ)r&=B!O$L%XUb^$CH4e0!RDuX*VoeLn|a}kc@08a%Xu-hjuMd
zWhX>lzU8^5u_>#CLZ8<UreBYrhFnnI;(w1=~`Fvjvrl8~RUf((OgOxXE|K;>}?A
zx+0y7okN_`EJ2lBwyLpFEOS_Qq``G{U-y^a%V#K8-pr#Ib4xQZ`Jp?^eQQZV?cR6K
zW7BeVy}vM|{d6)?N>Eya*-p4i9j`ESJQPh=tGStCG?Dj>Iz?-JJDXzF`+_9l!qOf$
zId{$^4yj*+ovCa<*8P`X5f;a|X?;r9nZ#H3yW&r*z1LVis=A9cu4dqK39S-&>_Ll@>osa}Fxp
zHtT7yTOZ4AHXlxdU2!@acOu4j4Lqq0gs-}B3>>2X*!Y-gKAtQ#A1(-iG`WRGoS$!A
z1Xx=y3kB{9z17xbi`4w0^;`xUq>k$K_4PUDUJ%@C`#w3Nh5FFaYAtfQ@L)~qk;vo9
zy5Lc9X+icAkB~@IKM2Ik_(n2vLs%6!64}{`UGAGi8cYqwUaJ5DmMb-sa_t{qzSQRB_
z`EFA`DT^tWb&!Amz5^TX=IXk$w+cHuJ99{#*G()O
z_?j!jV7Ow&EWS01nFW70Gx~$wYsWDk;rpG~@_d9z!g2bGA4O>s?2-7?^=rlt*xvf4
zm?VuXw>*;|pgI0*&^~4k4k1V(8C!o<1OB3B@@O}+wCRui9&Fh6w!r!up;z->V)xDk}dpxODo|
zm6-~ibnZ!df4~zt*!kFWW-7p(I-h!Qz02Wl22>~Nu)Bn4bbEW-K@jFHVLsWx_~n&>
zkH1QV#Y1^{=!Pmro*GUi;wgu_N%B_{?3QFyv36+DsiB4()4Xwt#tpxdXnhHOvuG3E
z=i%fgM+D=I$D&(gi4U8VTPzBckG+j>D6{}{jeh%&s7T^SAr1LZ#YPv$K?7qO*2jffzu
z=$JRA!F@)QIXhTCR+6e$)1gwAeo8qLbR&tVxO7ij5`WAvzDrQwCC^gBwPq?}k^{QN
zyZ(aY4L>F6yg~eoo9H4Ul~vXPez3Z_>L6%f|HbveDUHDtz9qQ}6I@U(!ddR@MsHK&
zes{flzCF`}ttmEl`ieH#OuOz11fwD_r2VY)?@=E`?4fCts)Z^r}tHC1mvGI_4=p5xm=Au`~7<|Gs`Mnc{ni
z{3k7AkC_6c;<=OKxZA&4#h)HfrVd-}U^8D2dko`8&AQy3aKG5$zHoJNa`N>(smwfc
z$R}j>H~F)haQaqxZr=e{h*jf^CO5Q&9V7e3q~{_v{c%s=sRF!a#s|syVl1I#t`84e
zl`w%%(mQq85-!tTA@?Zc8iXjasHkb~t-NftzN*GYs>6ji?A@e3oANo|HC4Hi3>SP{
zL7Mu>Jp7=aI!EE&K}fV06!K`$<~E@Q7_w@{z~8%fl1;Y~W^008OLi83g^e
z9||{e){bjpKp-TaCy?9WZFlLXCMR8tJnil6p?M&?u?7_t;UjzomtVs{03`o#lFZMg35gFp%nq?Du!O9k{=*-+_(SEX}8BqvZ-J0lK
z0ME3GmJjws<`HXDPL}8t@B5_3qVHXBfLjqqKWEl0n;0G*)`Q=1A0
zMJ>aO1A)Zxsa8%pRM1-~6ApP(7YY<2uqRu5)NPN`hYby8E7#$D2YKCgdCT2!FJ$x}B^RREN6ft7GcboV{cjrXTUe_(nLR-*nZjKR8WZ*4o+{
z{hp?LRq*xDn<_J#zB6LdWHBKz$^r3!oQo=0-HFrG?C5`a>xe&8J({>~B`LcZECbf3J=E99HI
z(Y-_2p@leWIr5!?!Fvg>nGAVRYY>S2gkAL!mY0)VK%&Tb>lbXP@TYM}-|HKl
zo-&w;A)TcJYOA3cLXm+7
z17?^IMhi0R)+yG@(gUh{ZLI>Yg=?(djsrm-6{NR#%x+uZ1_`~Wq-4gRRYNH(-@;W>
zi?1}UY)Now5ZCBxWfcC;J3mhGmz|&>KCvQm&Nxu
zra9J=20~j9O51}y`IRH8b7MOM7vb(~m2sQ-x7?|59Lcvvm7i`k%`AGt%=GsfeNMA5
zASCwS92bCTS2&*R?UDFjo=0b@@I1#(998O@;pjPTf*684%m;~~FaIt*FG0=(@~hs}
zVL`kU%ALdYEs{R<1px`+(b6{ZB5Tqqeh~QveW4sfK8M);siGgrn>JJ0{a5JE5U9f=
zu8RPol&-Byj}DqIM)j_iSv_}pTrTrbh{{a}gb}RM@~%j#PQ()!ztKddRG`}BfUXJ(
z3OS<@swUzDLoWx2FAuU|*@S@?nV+?Fk2?Yi<-7{zXWG^J&Z@=x
znjodf_-QBLRJ(ooJmW-5k@p?otx{B&!_3P6Ng_o>T;c@NHvIZfodOu$<(*RF{UOg|
zeRmcVn~kjrxh_-EPv&@BWJlEVSfrcisler2^m9g^uZ#nxx3RHNv8E)#TOS;({rAlU
zyWc=Xlq8nN%evA5mWOxn&phg4MHVi=O@UUW}%1Z&_jiL13BoOis;WY-(
zd#NopMt$;dx^2FC!U&;?B&o#1z1i0AhkSkLN7$weTE+jHz)~>;modp~rTfJ967Zo;
zXQ?*hIAV8EJmFN;7DKK+fr?wJjEi*i!*_rCW|&&VB}1Nm1bNL!rM~oJqj9t4>;N8k
zHW8@$+83MWq72r*(bx6&W3!4R-=5{qHJ*V^5?;p-*?9L_2Q3dD7~T4=B5((Sw>^LV
z;%K_r*K-s6bGXsPiUly`IMjeKfVq~}bHk8PaT{YS^~vY}2aB84RI{})uN#73@tx?_
zuL^JVTNx$)OoLMBB?rIww#RM)W4lqJutL;+IEf2lIjh}w|5kcEZ^g$ukk43QW?L_t
zx%722($dN&BAjJM2Mx06UvuB<{%-i%6gF~1e^*~^x}5&#Hs8E8rnClCkKRh-kB0;x
zji{U8^3}WFlj@Jml)|4b`J<eT
z6otZ(KJL8)L8jK=gf(N`@~zO{&AZjU1cbU@`umo4FM@p^rCo!(-j0x$1ppvZ+?zLb
zkg5muhqRS-TcV!OD})QG?9~f_3{X)~{j{r=ItrGeP3%igPgjiZ>-x4x1A#=KIUmko
zf>Ia1>gr~nkxT><$iiF=JAV#W7>7WTheU7;{2A`Dy`*Dg1X|im+nMnLlPWo}&5TWV
zm=U|ybsabm$~MX@uH(|QL95&E2wM8vFl5ABRT{5X$zVaAi%htCdU*T-nJ~ERGvZ|>
z-IBBV5I0$I>;?pKLq&r`u=M6v6*UbKnud^}1=$EL#W3RD@<%gkJbcYDWnII2r7dnv
zn8ectkRW;oC#PHC9Z{sENJ*c)mGiTcTQuUddh&Fi<4zF0BJZSs4uptB-lzIjtKw|6
z^MUZkJ5F$fqfQPtx!=jm3ct^{EosnPQBjlbVwRS3pNKP?2jOS>Y^9-P1PV|=DY7EG
zP0q=v@5b28r{A!ie51#JlqeOCiHeDt!zhT;)6&v1G6GNoCd?0bMMmijf1cI56PG`M
zK-eu(m|LOw|E3Y~M^JWidP7CsUG46l0@#e5GLT;+VP6zEd%ynpcuM>zhBFa
zoZg05n5Hmqe%7O-?|A6boMD^7I4U86m2tO&@+Ks1#iQ{wBTb&0GNZhX#f`ZKy8VU{
z_CbniV<+HRGuV&xgUKc@Q&)20$Mmgr%lqgr5@dQ6l5&W8p
zG2$_Z>HJnz^z&E-dZP(F_dKlR-*z8e_D!5RqVs$ezFiB7c3$ki3y$Ts$`JpcahU>m
zyNZbdXzi9}t2+epHo9j%G`vkf73O{hv~orbWIt^^McwiP$0>}SD1;a!=-2!A??K5)
zZSf*YLnJb^@zsCYKuwHMFa>l5IVf`(NeI7?cFx5#N$pGXE$EyF2)D!lln=7dS)hW(
z_jOj3Oc?vB{_%CK(6z#ZNE4sW-9I-IO+O#Ke@6UutsmuA${NWJWzV5)2PN@CDKf=l
zv}7kc*eW0ueG}M9+5b^c0D?qcEh?%Qb&n7bx8;E=;nb1&id|&3<RjT^bX9T>BkDQX4cKqm?PJZ6VzaF4=rGV)#?D!5>E9!o?Te{jno
z0t+0(`0{sM8)b$~)vv*%m1IMbcQQnk&gacI24%Ff7(s;u9kU1@ZNrK6!xI4XWZg~<
z9J4n2x*ivSt&!bqIVqhNmO7og_14lg%uK6T`@pXb#AU1j*bd?k`L<0ynhe=?)oa2x
zeM6-GpfN{KgaZEyLUoF0?EgFHcATc$?eZ6f@lURZp@Dfh4++qTlca=L_AbHA!1Kf|
z$_&D5!7(sh6k?)xkyQ
zizh=5--RwOQ1y)RM@wi2EnjkqhSJ@eDcm%4&PJpR!Pfw(0KCKxfcyCP_yYCJjm^zF
z8<$i_1-9U##6YjD-H3SEI>T}aZU7hYihUNbGF5F4TXl1Cin(GS`q1%q2CSZ*p2|s;
z3HK{pMH$lrINm-w(=}^B*(db;z{1)516YZ!04s;oV>F$rFu39B5KBE!apQ8*FGbTU
zHdF!hyUcN;o`8xvKzdxBPs#g@`~>>iv4cGNE=@jF7{96@l<0#QS+jA>;N`HIAb)o-hsXH6X`xad;44hRf#*P!LW-
zljLOwtt!DbA>G?qu|UBEYpW;Akk|+4=I-vR@dGU4%dz1H?XO(p`$D2?9$zli{~)?;
zy|dsXlV92%TotvWHX&DxF(3AzIF(Tn?@{qsgFEsb-T!2`Ri$9eFXUlujr%_$3XRJ$
zuYehthd__Zz2j1T0-%tL!$`rwE17J2)PNGH&Ge|m!8s4Seox*3sMW=po)oewv$
zV^M<@O|X64K-4E;;!`Hyz3m!8pszfa7=83VVH!ASG7kj&`>2-tS?^MmOS?1?uVruc
zPdbEsXv2_QXg-e8x6}<%mEd}g^S=PvNW*PuTF(u?;}|8ImQ1=T5;B{vKx2B$fE9cI
z)TTZ2x{Y^7z>zX_Y$D{b(ZhN%KyugBPdiD`V;}LT69S>2L-ztuH%`H6j?V(FC*(qQ*Upd|$T;;}zKzX9+}-2d1uFfj8f
zZ-5lj_embqJdZ|1K&$#6DVC&~<*e_%eXx_q<&Mu)aPDlM(V&*_hbK<1%}M%UYam|m
zpwz>7)iw!E5{T5C^vJ@#5-t2Uu*ROdoHZ7)Y2|6_B=5&#c8f?!Q(lYx9;ilhfah&{
zeFqfoig|C^wCv&<%uVJIQp
zcJXh%#GDX}@<5QZ!FD+B9ouoc0^JkIS?QnYt9iR}gA^`4QE&IVRXBP9gra}pqP}v2
zbV^rdvT@*`IZ~fpc;x)kw*`;6~qb9y>8yvD?T
zUmM`yuGqpCIG>49{fC?mMjs_l`yV3I3U=YGXYkG|$=Za1>qx}yS}=Jpc1
zMn^|&_+P+4^jE@N0i-4M!Tr|pGb_;}m87!&2U8XSPk|7G5r*6cr}5W6f@oCd@Pf?!
zm|c&XT0hE+o?L5n=8KeSjzSPygu)E`ii&iK(eloypQJ8HC}A~&4|DBwW>w#P#y`~8
z!VWZ)&0;z^5mr-U@q2`1`a8GlR`Mlq_0%>;+;e=MA2`Maa=+Q-+w?~``$Wl4xWj8E
z_vCN}6D<`5@g7a;%&3Zm8c|e0Gm02PImid(gw{pwo=dw8!Nkny$@cMwg`{?qIk3~F
zF)KI*T&U2qu;4Y5@cnR<{F@CN=jOsk1dJtmx3k@Ubl(UIktsPkeYe>tn-ME7+-wPK
z0ZOCr=dt!^6k7~iCE^vyOo*0wT33ji=!XgS+FMGDLFH_UaAGO#EoFce@4aJTZ5=L9
zCmRB{h;S~)oTRD$&~$(q!kerDR%^vgv_zfzcB{K(?BRrs&3x4gO`&#I+z
z7URXhqbVmfkEE?wZcZ0TWLk3}gk%j+U8$4F;f+gu0}(Zz0HCmhHmwhHQsTRWXbA4x
zS3b+?SQwG!DOQz}7BJFBrJ7%IDaZ};g*_){k1_3E-?=5bvogvc=)%)9WWz6mRDwJg
z&~lK$1y#$*=nEQ(0?FifAIYf9oK(4QI<;=S^1G8Iz&;CVh4pdPe{26-y6#ryBP|6w
zmGj-)Em$gj5xc)K^JX1`2lE}tYtn%FT`YX}WhG;Ut#6N4;{b)JfE4Ux)Shy0F`ATKQgZ)PUp5?Jd5Kk#8DJ!Ue|
z`_(%Wz+pCMVKb<1vl*!2&g-Y9+zJXSgyb04PJlxMs)mxrHFfqQ6QcNqfhtjc7w$!b$Xr{UOKrx
z=|{2#TW;yENvmlEwHz|7VQuEaI0dyqmxB4OgP?gIHT~~`9Y6B^I%x}J2)*OtyUjvA
z>Ii55)<;iACyt#(Dm$`8&2XoS2VDMMrC3sVI$<%f$IPTJjZ|e4H~7s;6CD*!3x#HD
zPpw!VP(Ww*-m`hMGq9}{25S&Pn+5e75lhs(_OhKBSV`sg+0pg%FmA$#PE!MOx%cf5)80f
zS!-#whIY#ett;l)b+P?iHTqG@u)LMX2zy?^DkcS1F>hURdN{s$s7$xnyY*u`RVD`xN%__$!
z36XE^L?LhP-0rXaZz_L@UA0nbQXiDm&Ic)c^^|a}V
z5%=^%BgIl=z*ZY*#S$0xLQO_ZuPw})&hhW3_lKT7d^Z`ew7xK-UqqcyTlRd~%4*v7
ziCtHLXNDse=kgEguHn9?LwPg5{d(TR4DJEl_||>N)2g{X@B_mB@bFL(Xx7Dn?bs3w
zx#8S_^6X;GE=tQmAV25Z?!+km7e(6M?7Mp`Yi*Zxm$yY>q)CQ7Jx&U95&pzGp>T26
znDlAKodAO|)<)_K|x~2oY|UGbihoiEZ>)pPHMS8%z~aO!RftP&%8E
zMf7bA#XOMSL29kMcb!(yW1mSUa2dYOlQ5dF@`F#Q=nlsZB>=HjIX~+Z3(&+&R>{j=
zk}v{)T`R4F>L5>9`di}Gnz?bj^~wTxkFr1=a1y8Cc0-PB9v&VXSlAhn+wleXc7OB#
zsNCzTLrRm#HOz|T+*bv69H>C6fxvNxt(Mn?-e4&VP6|$%uCJU^z@wB-yl(-N)*t50
zJa_P29h^mgx#DC*&c@unDD_quFS8GydHL{Zr-@7|%SFA5qC6cd1vs^;1<%Htalfu9
z{Y$z6>gjbjD|Tk@0}GNjvz*A&vyx{O@>q)4I5!gcs&@AUByMj6znqH43vlMKHp+mB
z*)S;3-C$cVXu1J{n5t)PECImNO`tsZ`1qV0tQ(iH07dob&V?0L1mpZFr+M-tK^z>M
zhSG~!94T5IBU>{0vI#!bcu;bGv`^p)lBqcbJw&`rnu&+4Sa#eIeAt$6=?bAG!Lnk_
z1ePi$Dtqp2HfyR#1{EYiWynLDwr

lS1qE{ZP|~WaZ&)i@ghe>F9;owv)yh=Q8Rcm=U6&%QEK{{FEy&9P4 zlbY;ZK=%Mh7OjH|a%^^~G@yQNA8pUyl02G)Y22Xd;Zdzbyo^5@?(4eP(Rb?L6G=7JSK>Mw3ky z6CpJocTY??^8Ox6%uV|fv$wE# zolksXdNpmRcNe@SY4*20WE_}r(F&Keiw{1~95~;}lvh^rC942!>dC1JS0uOBLK0iN za^2x<=FWxjL6;m)#IM8DT))Y{FD|77a_+%#j{B^r_tXWoN5BeN8Ml|rWRIkOhU~8h zwbEK#XCIFH!mAdm;hp){k|xyjde2Q{4zj@!xR4Cl`cS};OLB;wAbv6CfAxB*;^~J{ z#(WXCXP!{?tNa1SfGbrvXjK8ddITM&Wk4)W)*+V~mp#HDbI9iW#r^DS0Ip-0=|bdcMCh@^@*0{q+yPhy4HjYoPv?P%b~qE587G1JUZwQN5z~Tp{tGMm zM4~&5!a=rO?U+qhvj$Q}>)VXJJnimVq8fLY>)f2#FhhX$2dZpz1n_LC^(}+*vw<7` z@y2WNervd36gYx_@&9+$E*Pk`0X{_O7%o_bcJ2*%^KAuFfi{B1Y@o$DRfHEfzlM@A zG!ifFkWRvZSP?D%kA0S|riWnsN?TwHINJXr?`ROM3j1aM|0eKn(#*&JZP7+5bpo+X+w zu^@VvM#f{HFKLubRB}WS@`R5kQ0DylRMpyg|9dV51j~Y~8>l7k=WSBDGuViLPw;{q zyY;++T`aJV`Dk(4H+e}JTQ_D>W6ScVU@((PUCxN(@lp?!#>#62PV#CW)&P?2DBxZs zl_K%|bZxQo@4dtd6e_pn? z`wB$~<3Q*^Zz(YP(Ln*!I~WYc9f%rW^aISpd(eB(Xp%_`{=Uh@zL{wb+1*(`3&Sjp zD!_!8<^kSaJH}71sa*|UKREHfEg3&xyK2PLcFlN>_qSEl@B+~fi0L}8*KfE^lp2YN zi#K`iGUI0UEoy1mOnzb}^WwmO2&xy4QN;A1m8$vq`ALU-q^P3}vVY{$N5Q9G?L?VT zp^|~Z91NeWd>;c@KpJm;+Y9K=0j;gIwJdT-rI}FS^OONflkzS0ovf$#7m#~RQ zUITtr&7nf3;ArKfM7{up5MVCsfU}Wk`E@lC*|6EPJ2Y0TE1>GTn4l|ol3_?gK1FXV zgA0zrBCXe9siuhZOadf!=47*VQ+R0ebZC=k0BxXfY|ypK^<{#uSA4@$DS+t|cY!9o zOC!6=xD1wGTlyXMwd0r0<*xK{rVrg1(ioT3g)}(-X87ZAYd(6kmO97}^hR{g!X+OT zv}Z6tTi}bM>mHLgz5pf)WYPkd*|j@Yvfh`X{&=3y2s^au_@z7Ez3sP~Ot@*^&q!o~lG)pegY*!{_x83Irx%Va46(w&mHEa$%OAV(Ky( zw;r*xTab&z{h`L*0{yx`SQbbfL?DcGjFLs#o5APG+ScOV4KPU3T27m;aJ|XQ56a}` ze)lvFGiblUF_rL|8b^Hb1QNu`^73-Xhc-UFiJ0H*3~9NY>b#xYbl;f2IyQn1qN|1; zs7|G0DzByMbYw|hwQ-hA(z{{0KgCavO#Gub2bG)nf??Z>w-CzC&$7h&%aaNpKjG?F zOJ?Vs`Etav!%faMr_khv$SdygOCfPl>I@Xi)=_uorak|xgdh$Q28|1XsSd|~h~EGy ziXy|pSB;DL24{0z7#F!Hj8fJgL%?ca8@}fVja^`_O5^cWNH@Tq4twa=5E~=hwo;+b&40F@|K?Y{UE$6YpjCQ%c&vX~qkPe#=qIOl24{7l-EBw&Pr8~nbHRV{ z$B*+FhBk6KJNAqH0V1V`EJY+zv5)N+lzu6D!{1NZmNth8e%?PHJ30AW_~~P-k^PRV zl1l(4hdXFphryl+LPuW+nTQzZ9=AmIwI;HkBs5HCcKo>@n>qSjC|xXWyW1&((HaKH z<0U{FPCm`&f4cC;D|N~Jb(zb~@r)|oO;wKl?7iD~s3oMl(;A;O%2kEYL$jxAqV3RP%r({u%RA!{OsQ0 z%bAww7WV74-S$s^mI^IZ)bZe8I@^A2Vc(o-Eo1FJY`yS*kqndsFft68hC5!WXK34g z@H@Jl3pBV9eLyyx(ooA|0~_LtUSd~f)Uya1K;%G3_RHynqqY8pMM6zdf88M~zI%sP zr4I!0^t2U_PYJPufgT<9>C!aOd`1#Frg|IS6|`ZU5?rbOpjAki3f;>B>|9H|F}s8- znHAk9r8b1_llt}SIvF`gI=P^853q7jb4pXaEr2}*ajDYhl!OwE{+smRUUs0l0*WJ? zNBpnm+pAmz%Ds5+ga7Dmx-vJQI`(tKZ~j#bt}+qYhke<6e0DxPZCo^-faH(_8L!Ht z5eoW7fmsD#_YkE{%w)Q_4=$^S_u9&KqC1k1ZNWH2Mf!=_mtRu=su~*8DQJ9zLZPc} zqGSZ%^|D#V?A*m^8cT~=`)&At@JBmZ*xMt!qDX5TK`)fLBuW-mrBgiSAebrPTT@wS z4)=59ej*llI8|Jskx}Ae@Lpg}spDMA{2R)|I@(D`dG%6SV*%Ay zqUk_C2Ma?J15!Tt!iivNDH1q6i+KQ%-;-M2MS+|%Xa$PGs7+y!DEJDUV=FMX%B3Yz z2i4Tofyz2I=luMO7FCakh{&UVPmREdr)3}NbXNAftob0NjI8zIq*Yz^;t!=$k(B2? z>G@*o$rRePoq*~LRFt6njEl#Xc2Rzkp6GAGq;Y;mik>`cHlE;j6sD?yucKWi+Qrk; z-!5rr{I1i8unKqc@DR)#e!DVRY0V*PkXQ}$f@BpyMM{mE!7A!4uCiqMx$duNU+&7~ z=4{=YN19w5mvsY8QukdeDz%j^dm>;iiJ$(Mr7UnaaOPyX(t7xL1WmMjv+*Wy{{8Bl zwY9-1D}aI30;<=^$qBHxLiKuF9N;=6p-fr86hJqjfuxS(n!C<1A2_Vz%sR4I6- z3R~LsuGR<9x8WvQ1b)^Uxa=>oS@9xYzxYhXiVc2kz3|&joymRf)Pl;dC7U_h@YJJF z_?tmRe6~i}dX6$lnQ8Xb)gF`2F@x943-6+S*Ek+rfR-

-
Last update 28-Jun-2002
-

 

+

Last update 13-Jul-2002
-

MBSE BBS Setup - Fidonet nodes.

+

MBSE BBS Setup - Fidonet nodes.

Introduction

@@ -33,28 +32,44 @@ This screen has the general information for the node. The contact info fields ar just for private use, these fields are only used in this screen. The Outbox dir is for files to sent to the node, all file you put in there will be sent to the remote if user mbse has read/write access to the file. Only real files are allowed, not symlinks etc. -
-Sysop name       The name of the system operator.
-Outbox dir       Private extra outbound directory for this node.
-Pvt. phone       Contact info, node private phone.
-Pvt. fax         Contact info, node private fax.
-Pvt. cellphone   Contact info, node cellphone (GSM).
-Pvt. e-mail      Contact info, node e-mail address.
-Pvt. remark      Contact info, node remark.
-Route via        A route via Fido address. All mail for this
-                 node will be send via this Aka, even mail 
-                 and files for other networks. This can be
-                 usefull if this node has internet access
-                 so you can send everything to this node
-                 over the internet.
-Netmail direct   Set "direct" flag in netmail to this node.
-Netmail crash    Send netmail always "crash" to this node.
-Netmail hold     Put mail on "hold" for this node.
-Pack netmail     Should netmail be packed in arcmail archives.
-Send notify      Send automatic generated notify messages.
-Language         The language to use for areamgr msgs.
-Deleted          If this node must be deleted.
-
+

+ + + + + + + + + + + + + + + +
Sysop nameThe name of the system +operator. The name entered here is used in Areamgr and Filemgr messages etc.
Outbox dirPrivate extra outbound +directory for this node. Any file dropped into this directory will be sent to +the node and removed after it is sent.
Pvt. phoneContact info, node private +phone.
Pvt. faxContact info, node private +fax.
Pvt. cellphoneContact info, node +cellphone (GSM).
Pvt. e-mailContact info, node e-mail +address.
Pvt. remarkContact info, node +remark.
Route viaA route via Fido address. All +mail for this node will be send via this Aka, even mail and files for other +networks. This can be usefull if this node has internet access so you can send +everything to this node over the internet. Note that to force calling this node +via internetr, ISDN or pots can also be done by using nodelist flags override. See +section 3. This setting is more usefull to force routing via another node or +aka.
Netmail directSet "direct" flag in +netmail to this node.
Netmail crashSend netmail always "crash" +to this node.
Netmail holdPut mail on "hold" for this +node.
Pack netmailShould netmail be packed in +arcmail archives.
Send notifySend automatic generated +notify messages.
LanguageThe language to use for areamgr +msgs.
DeletedIf this node must be +deleted.

 

@@ -68,32 +83,32 @@ In this screen you can setup 20 aka's for the node.

Edit node session

-In this screen you can setup the session defaults. Items 5/8 will be added later. -

-Session passwd   This is the mailer session password.
-Dial command     You can put an override here for the normal
-                 dial command. If you leave this empty the
-                 command from the modem setup is used.
-Phone number 1   An alternative phone number/ip address to dial.
-Phone number 2   An alternative phone number/ip address to dial.
-                 Use these above commands if the node has
-                 another phone number as mentioned in the
-                 nodelist. If you call this node via TCP/IP
-                 and the IP address can't be resolved by
-                 the nodelist, you may enter an IP address
-                 or hostname here.
-No EMSI          Disable EMSI handshake.
-No YooHoo/2U2    Disable FTSC-0006 handshake.
-No Filerequest   Disable filerquest from this node.
-Don't call       Do not call this node.
-8.3 names        Set this if the node only accepts 8.3 filenames.
-No Zmodem        Disable Zmodem protocol.
-No Zedzap        Disable Zedzap protocol.
-No Hydra         Disable Hydra protocol.
-No TCP/IP IBN    Disbale TCP/IP IBN (binkp) protocol.
-No TCP/IP IFC    Disable TCP/IP IFC (ifcico) protocol.
-No TCP/IP ITN    Disable TCP/IP ITN (telnet) protocol.
-
+In this screen you can setup the session defaults. Items 7 and 8 will be added later. +

+
Session passwdThis is the mailer session password. +
Dial commandYou can put an override here for the normal dial command. If you leave this empty the command from the modem setup is used. +
Phone number 1An alternative phone number/ip address to dial. +
Phone number 2An alternative phone number/ip address to dial. Use these above commands if the node has another phone number as mentioned in the nodelist. +
Nodelist flagsOverride for the +nodelist flags, the nodelist flags are completly ignored if you enter something +here so make sure all flags you need are here. All aka's of this node will use +the same flags. This can be usefull to force calling this node via the internet. +
Inet hostnameThe FQDN hostname or +IP address of this node. This replaces the original system name from the +nodelist and this is then used to make the internet TCP/IP connection. This can +be usefull if the FQDN is not present in the nodelist. +
No EMSIDisable EMSI handshake. +
No YooHoo/2U2Disable FTSC-0006 handshake. +
No FilerequestDisable filerequest from this node. +
Don't callDo not call this node. +
8.3 namesSet this if the node only accepts 8.3 filenames. +
No ZmodemDisable Zmodem protocol. +
No ZedzapDisable Zedzap protocol. +
No HydraDisable Hydra protocol. +
No TCP/IP IBNDisbale TCP/IP IBN (binkp) protocol. +
No TCP/IP IFCDisable TCP/IP IFC (ifcico) protocol. +
No TCP/IP ITNDisable TCP/IP ITN (telnet) protocol. +

 

@@ -101,19 +116,15 @@ In this screen you can setup the session defaults. Items 5/8 will be added later

Edit node - mail processing

-

-PKT password     The password to insert in .pkt files.
-Check PKT pwd    Check password in received .pkt files. If not,
-                 errors or missing passwords are only logged.
-                 If set, errors or missing password are refused
-                 and the .pkt files are renamed to .bad
-UplMgr program   The name of the Areamgr program of this node.
-                 This could be AreaFix, AreaMgr etc.
-UplMgr passwd    The password for the Areamgr of this node.
-Mail forward     Not in use yet.
-ARCmail comp.    Use ARCmail 0.60 file naming convention for out of zone mail.
-ARCmail a..z     Allow a..z last character for ARCmail filenames.
-
+

+
PKT passwordThe password to insert in .pkt files. +
Check PKT pwdCheck password in received .pkt files. If not, errors or missing passwords are only logged. If set, errors or missing password are refused and the .pkt files are renamed to .bad +
UplMgr programThe name of the Areamgr program of this node. This could be AreaFix, AreaMgr etc. +
UplMgr passwdThe password for the Areamgr of this node. +
Mail forwardNot in use yet. +
ARCmail comp.Use ARCmail 0.60 file naming convention for out of zone mail. +
ARCmail a..zAllow a..z last character for ARCmail filenames. +

 

@@ -129,25 +140,24 @@ carefull not to allow a node to connect areas from networks he has no aka in.

File setup

-

-Files password   The password for .tic files.
-Mgr password     The password for the Areamgr and Filemgr.
-UplMgr program   The name of the Filemgr progrom of this node.
-                 This could be FileMgr, Allfix, Raid etc.
-UplMgr passwd    The password of the Filemgr if this node.
-UplMgr Add +     Add a "+" in the command to connect areas.
-Incl. message    Send a netmail message for each file to send.
-Send TIC file    Send .tic file to this node.
-Advanced TIC     Send advanced or standard .tic files.
-File forward     Forward TIC files for this node (not yet).
-Billing          Is Costsharing active for this node.
-Bill direct      Send the bill direct or on command.
-Credit           The credit this node has in units.
-Debet            The debet we have with this node (informational).
-Add              Add (or substract) factor to the bill.
-Warn level       The debet level when to write a warning mesage.
-Stop level       The debet level when to stop sending files.
-
+

+
Files passwordThe password for .tic files. +
Mgr passwordThe password for the Areamgr and Filemgr. +
UplMgr programThe name of the Filemgr progrom of this node. This could be FileMgr, Allfix, Raid etc. +
UplMgr passwdThe password of the Filemgr if this node. +
UplMgr Add +Add a "+" in the command to connect areas. +
Incl. messageSend a netmail message for each file to send. +
Send TIC fileSend .tic file to this node. +
Advanced TICSend advanced or standard .tic files. +
File forwardForward TIC files for this node (not yet). +
BillingIs Costsharing active for this node. +
Bill directSend the bill direct or on command. +
CreditThe credit this node has in units. +
DebetThe debet we have with this node (informational). +
AddAdd (or substract) factor to the bill. +
Warn levelThe debet level when to write a warning mesage. +
Stop levelThe debet level when to stop sending files. +

 

diff --git a/lib/nodelist.c b/lib/nodelist.c index d739c291..f93bd7c8 100644 --- a/lib/nodelist.c +++ b/lib/nodelist.c @@ -174,446 +174,481 @@ int comp_node(struct _nlidx fap1, struct _ixentry fap2) node *getnlent(faddr *addr) { - FILE *fp; - static node nodebuf; - static char buf[256], *p, *q; - struct _ixentry xaddr; - int i, j, Found = FALSE; - int ixflag, stdflag; - char *mydomain, *path; - struct _nlfil fdx; - struct _nlidx ndx; - long lowest, highest, current; + FILE *fp; + static node nodebuf; + static char buf[256], *p, *q; + struct _ixentry xaddr; + int i, j, Found = FALSE, ixflag, stdflag, ndrecord = FALSE; + char *mydomain, *path; + struct _nlfil fdx; + struct _nlidx ndx; + long lowest, highest, current; + struct _nodeshdr ndhdr; + static struct _nodes nd; - Syslog('s', "getnlent: %s", ascfnode(addr,0xff)); + Syslog('s', "getnlent: %s", ascfnode(addr,0xff)); - mydomain = xstrcpy(CFG.aka[0].domain); - if (mydomain == NULL) - mydomain = (char *)NULLDOMAIN; + mydomain = xstrcpy(CFG.aka[0].domain); + if (mydomain == NULL) + mydomain = (char *)NULLDOMAIN; - nodebuf.addr.domain = NULL; - nodebuf.addr.zone = 0; - nodebuf.addr.net = 0; - nodebuf.addr.node = 0; - nodebuf.addr.point = 0; - nodebuf.addr.name = NULL; - nodebuf.upnet = 0; - nodebuf.upnode = 0; - nodebuf.region = 0; - nodebuf.type = 0; - nodebuf.pflag = 0; - nodebuf.name = NULL; - nodebuf.location = NULL; - nodebuf.sysop = NULL; - nodebuf.phone = NULL; - nodebuf.speed = 0; - nodebuf.mflags = 0L; - nodebuf.oflags = 0L; - nodebuf.xflags = 0L; - nodebuf.iflags = 0L; - nodebuf.dflags = 0L; - nodebuf.uflags[0] = NULL; - nodebuf.t1 = '\0'; - nodebuf.t2 = '\0'; + nodebuf.addr.domain = NULL; + nodebuf.addr.zone = 0; + nodebuf.addr.net = 0; + nodebuf.addr.node = 0; + nodebuf.addr.point = 0; + nodebuf.addr.name = NULL; + nodebuf.upnet = 0; + nodebuf.upnode = 0; + nodebuf.region = 0; + nodebuf.type = 0; + nodebuf.pflag = 0; + nodebuf.name = NULL; + nodebuf.location = NULL; + nodebuf.sysop = NULL; + nodebuf.phone = NULL; + nodebuf.speed = 0; + nodebuf.mflags = 0L; + nodebuf.oflags = 0L; + nodebuf.xflags = 0L; + nodebuf.iflags = 0L; + nodebuf.dflags = 0L; + nodebuf.uflags[0] = NULL; + nodebuf.t1 = '\0'; + nodebuf.t2 = '\0'; - if (addr == NULL) - goto retdummy; + if (addr == NULL) + goto retdummy; - if (addr->zone == 0) - addr->zone = CFG.aka[0].zone; - xaddr.zone = addr->zone; - nodebuf.addr.zone = addr->zone; - xaddr.net = addr->net; - nodebuf.addr.net = addr->net; - xaddr.node = addr->node; - nodebuf.addr.node = addr->node; - xaddr.point = addr->point; - nodebuf.addr.point = addr->point; + if (addr->zone == 0) + addr->zone = CFG.aka[0].zone; + xaddr.zone = addr->zone; + nodebuf.addr.zone = addr->zone; + xaddr.net = addr->net; + nodebuf.addr.net = addr->net; + xaddr.node = addr->node; + nodebuf.addr.node = addr->node; + xaddr.point = addr->point; + nodebuf.addr.point = addr->point; - if (initnl()) - goto retdummy; + if (initnl()) + goto retdummy; - /* - * First, lookup node in index. NOTE -- NOT 5D YET - */ - path = calloc(PATH_MAX, sizeof(char)); - sprintf(path, "%s/%s", CFG.nodelists, "node.index"); - if ((fp = fopen(path, "r")) == NULL) { - WriteError("$Can't open %s", path); - free(path); - goto retdummy; - } - - fseek(fp, 0, SEEK_END); - highest = ftell(fp) / sizeof(ndx); - lowest = 0; - - while (TRUE) { - current = ((highest - lowest) / 2) + lowest; - fseek(fp, current * sizeof(ndx), SEEK_SET); - if (fread(&ndx, sizeof(ndx), 1, fp) != 1) - break; - - if (comp_node(ndx, xaddr) == 0) { - Found = TRUE; - break; - } - if (comp_node(ndx, xaddr) < 0) - lowest = current; - else - highest = current; - if ((highest - lowest) <= 1) - break; - } - - fclose(fp); - - if (!Found) { - free(path); - goto retdummy; - } - - sprintf(path, "%s/%s", CFG.nodelists, "node.files"); - if ((fp = fopen(path, "r")) == NULL) { - WriteError("$Can't open %s", path); - free(path); - goto retdummy; - } - - /* - * Get filename from node.files - */ - for (i = 0; i < (ndx.fileno +1); i++) - fread(&fdx, sizeof(fdx), 1, fp); - fclose(fp); - - /* CHECK DOMAIN HERE */ - - /* - * Open and read in real nodelist - */ - sprintf(path, "%s/%s", CFG.nodelists, fdx.filename); - if ((fp = fopen(path, "r")) == NULL) { - WriteError("$Can't open %s", path); - free(path); - goto retdummy; - } + /* + * First, lookup node in index. NOTE -- NOT 5D YET + */ + path = calloc(PATH_MAX, sizeof(char)); + sprintf(path, "%s/%s", CFG.nodelists, "node.index"); + if ((fp = fopen(path, "r")) == NULL) { + WriteError("$Can't open %s", path); free(path); + goto retdummy; + } - if (fseek(fp, ndx.offset, SEEK_SET) != 0) { - WriteError("$Seek failed for nodelist entry"); - fclose(fp); - goto retdummy; + fseek(fp, 0, SEEK_END); + highest = ftell(fp) / sizeof(ndx); + lowest = 0; + + while (TRUE) { + current = ((highest - lowest) / 2) + lowest; + fseek(fp, current * sizeof(ndx), SEEK_SET); + if (fread(&ndx, sizeof(ndx), 1, fp) != 1) + break; + + if (comp_node(ndx, xaddr) == 0) { + Found = TRUE; + break; } - - if (fgets(buf, sizeof(buf)-1, fp) == NULL) { - WriteError("$fgets failed for nodelist entry"); - fclose(fp); - goto retdummy; - } - fclose(fp); - - nodebuf.type = ndx.type; - nodebuf.pflag = ndx.pflag; - - if (*(p = buf + strlen(buf) -1) == '\n') - *p = '\0'; - if (*(p = buf + strlen(buf) -1) == '\r') - *p = '\0'; - for (p = buf; *p; p++) - if (*p == '_') - *p = ' '; - - p = buf; - - if ((q = strchr(p,','))) - *q++ = '\0'; - - p = q; - if (p == NULL) - goto badsyntax; - - if ((q=strchr(p,','))) - *q++ = '\0'; - p = q; - if (p == NULL) - goto badsyntax; - - if ((q=strchr(p,','))) - *q++ = '\0'; - nodebuf.name = p; - p = q; - if (p == NULL) - goto badsyntax; - - if ((q=strchr(p,','))) - *q++ = '\0'; - nodebuf.location = p; - p = q; - if (p == NULL) - goto badsyntax; - - if ((q=strchr(p,','))) - *q++ = '\0'; - nodebuf.sysop = p; - p = q; - if (p == NULL) - goto badsyntax; - - if ((q=strchr(p,','))) - *q++ = '\0'; - if (strcasecmp(p, "-Unpublished-") == 0) - nodebuf.phone = NULL; + if (comp_node(ndx, xaddr) < 0) + lowest = current; else - nodebuf.phone = p; - p = q; - if (p == NULL) - goto badsyntax; + highest = current; + if ((highest - lowest) <= 1) + break; + } - if ((q=strchr(p,','))) - *q++ = '\0'; - nodebuf.speed = atoi(p); + fclose(fp); - /* - * Process the nodelist flags. - */ - ixflag = 0; - stdflag = TRUE; - for (p = q; p; p = q) { - if ((q = strchr(p, ','))) - *q++ = '\0'; - if ((strncasecmp(p, "U", 1) == 0) && (strlen(p) == 1)) { - stdflag = FALSE; - } else { - /* - * Experimental: process authorized flags and - * User flags both as authorized. - */ - for (j = 0; fkey[j].key; j++) - if (strcasecmp(p, fkey[j].key) == 0) - nodebuf.mflags |= fkey[j].flag; - for (j = 0; okey[j].key; j++) - if (strcasecmp(p, okey[j].key) == 0) - nodebuf.oflags |= okey[j].flag; - for (j = 0; dkey[j].key; j++) - if (strcasecmp(p, dkey[j].key) == 0) - nodebuf.dflags |= dkey[j].flag; - for (j = 0; ikey[j].key; j++) - if (strncasecmp(p, ikey[j].key, strlen(ikey[j].key)) == 0) - nodebuf.iflags |= ikey[j].flag; - for (j = 0; xkey[j].key; j++) - if (strcasecmp(p, xkey[j].key) == 0) - nodebuf.xflags |= xkey[j].flag; - if ((p[0] == 'T') && (strlen(p) == 3)) { - /* - * System open hours flag - */ - nodebuf.t1 = p[1]; - nodebuf.t2 = p[2]; - } - if (!stdflag) { - if (ixflag < MAXUFLAGS) { - nodebuf.uflags[ixflag++] = p; - if (ixflag < MAXUFLAGS) - nodebuf.uflags[ixflag] = NULL; - } - } + if (!Found) { + free(path); + goto retdummy; + } + + sprintf(path, "%s/%s", CFG.nodelists, "node.files"); + if ((fp = fopen(path, "r")) == NULL) { + WriteError("$Can't open %s", path); + free(path); + goto retdummy; + } + + /* + * Get filename from node.files + */ + for (i = 0; i < (ndx.fileno +1); i++) + fread(&fdx, sizeof(fdx), 1, fp); + fclose(fp); + + /* CHECK DOMAIN HERE */ + + /* + * Open and read in real nodelist + */ + sprintf(path, "%s/%s", CFG.nodelists, fdx.filename); + if ((fp = fopen(path, "r")) == NULL) { + WriteError("$Can't open %s", path); + free(path); + goto retdummy; + } + + if (fseek(fp, ndx.offset, SEEK_SET) != 0) { + WriteError("$Seek failed for nodelist entry"); + fclose(fp); + goto retdummy; + } + + if (fgets(buf, sizeof(buf)-1, fp) == NULL) { + WriteError("$fgets failed for nodelist entry"); + fclose(fp); + goto retdummy; + } + fclose(fp); + + /* + * Load noderecord if this node has one, if there is one then + * nodelist overrides in this record will be used instead of + * the nodelist entries. + */ + sprintf(path, "%s/etc/nodes.data", getenv("MBSE_ROOT")); + if ((fp = fopen(path, "r")) != NULL) { + fread(&ndhdr, sizeof(nodeshdr), 1, fp); + + while (fread(&nd, ndhdr.recsize, 1, fp) == 1) { + fseek(fp, ndhdr.filegrp + ndhdr.mailgrp, SEEK_CUR); + for (i = 0; i < 20; i++) { + if ((addr->zone == nd.Aka[i].zone) && (addr->net == nd.Aka[i].net) && + (addr->node == nd.Aka[i].node) && (addr->point == nd.Aka[i].point)) { + ndrecord = TRUE; + Syslog('s', "getnlent: node record is present"); + break; } + } + if (ndrecord) + break; } - nodebuf.addr.name = nodebuf.sysop; - nodebuf.addr.domain = xstrcpy(fdx.domain); - nodebuf.upnet = ndx.upnet; - nodebuf.upnode = ndx.upnode; - nodebuf.region = ndx.region; - if (addr->domain == NULL) - addr->domain = xstrcpy(nodebuf.addr.domain); + fclose(fp); + } + free(path); + + nodebuf.type = ndx.type; + nodebuf.pflag = ndx.pflag; - Syslog('s', "getnlent: system %s, %s", nodebuf.name, nodebuf.location); - Syslog('s', "getnlent: sysop %s, %s", nodebuf.sysop, nodebuf.phone); - if (nodebuf.mflags) - Syslog('S', "getnlent: mflags 0x%08lx", nodebuf.mflags); - if (nodebuf.oflags) - Syslog('S', "getnlent: oflags 0x%08lx", nodebuf.oflags); - if (nodebuf.dflags) - Syslog('S', "getnlent: dflags 0x%08lx", nodebuf.dflags); - if (nodebuf.iflags) - Syslog('S', "getnlent: iflags 0x%08lx", nodebuf.iflags); - if (nodebuf.xflags) - Syslog('S', "getnlent: xflags 0x%08lx", nodebuf.xflags); - for (j = 0; nodebuf.uflags[j]; j++) - Syslog('S', "getnlent: uflag %s", nodebuf.uflags[j]); + if (*(p = buf + strlen(buf) -1) == '\n') + *p = '\0'; + if (*(p = buf + strlen(buf) -1) == '\r') + *p = '\0'; + for (p = buf; *p; p++) + if (*p == '_') + *p = ' '; - moflags(nodebuf.mflags); - diflags(nodebuf.dflags); - ipflags(nodebuf.iflags); - olflags(nodebuf.oflags); - rqflags(nodebuf.xflags); - free(mydomain); + p = buf; - return &nodebuf; + if ((q = strchr(p,','))) + *q++ = '\0'; + + p = q; + if (p == NULL) + goto badsyntax; + + if ((q=strchr(p,','))) + *q++ = '\0'; + p = q; + if (p == NULL) + goto badsyntax; + + /* + * Get system name + */ + if ((q=strchr(p,','))) + *q++ = '\0'; + if (ndrecord && strlen(nd.Nl_hostname)) { + Syslog('s', "getnlent: system name override with %s", nd.Nl_hostname); + nodebuf.name = nd.Nl_hostname; + } else + nodebuf.name = p; + p = q; + if (p == NULL) + goto badsyntax; + + /* + * Get location + */ + if ((q=strchr(p,','))) + *q++ = '\0'; + nodebuf.location = p; + p = q; + if (p == NULL) + goto badsyntax; + + /* + * Get sysop name + */ + if ((q=strchr(p,','))) + *q++ = '\0'; + nodebuf.sysop = p; + p = q; + if (p == NULL) + goto badsyntax; + + /* + * Get phone number + */ + if ((q=strchr(p,','))) + *q++ = '\0'; + if (strcasecmp(p, "-Unpublished-") == 0) + nodebuf.phone = NULL; + else + nodebuf.phone = p; + p = q; + if (p == NULL) + goto badsyntax; + + /* + * Get modem speed + */ + if ((q=strchr(p,','))) + *q++ = '\0'; + nodebuf.speed = atoi(p); + + /* + * Process the nodelist flags. + */ + if (ndrecord && strlen(nd.Nl_flags)) { + Syslog('s', "getnlent: flags override %s", nd.Nl_flags); + q = nd.Nl_flags; + } + ixflag = 0; + stdflag = TRUE; + for (p = q; p; p = q) { + if ((q = strchr(p, ','))) + *q++ = '\0'; + if ((strncasecmp(p, "U", 1) == 0) && (strlen(p) == 1)) { + stdflag = FALSE; + } else { + /* + * Process authorized flags and user flags both as authorized. + */ + for (j = 0; fkey[j].key; j++) + if (strcasecmp(p, fkey[j].key) == 0) + nodebuf.mflags |= fkey[j].flag; + for (j = 0; okey[j].key; j++) + if (strcasecmp(p, okey[j].key) == 0) + nodebuf.oflags |= okey[j].flag; + for (j = 0; dkey[j].key; j++) + if (strcasecmp(p, dkey[j].key) == 0) + nodebuf.dflags |= dkey[j].flag; + for (j = 0; ikey[j].key; j++) + if (strncasecmp(p, ikey[j].key, strlen(ikey[j].key)) == 0) + nodebuf.iflags |= ikey[j].flag; + for (j = 0; xkey[j].key; j++) + if (strcasecmp(p, xkey[j].key) == 0) + nodebuf.xflags |= xkey[j].flag; + if ((p[0] == 'T') && (strlen(p) == 3)) { + /* + * System open hours flag + */ + nodebuf.t1 = p[1]; + nodebuf.t2 = p[2]; + } + if (!stdflag) { + if (ixflag < MAXUFLAGS) { + nodebuf.uflags[ixflag++] = p; + if (ixflag < MAXUFLAGS) + nodebuf.uflags[ixflag] = NULL; + } + } + } + } + + nodebuf.addr.name = nodebuf.sysop; + nodebuf.addr.domain = xstrcpy(fdx.domain); + nodebuf.upnet = ndx.upnet; + nodebuf.upnode = ndx.upnode; + nodebuf.region = ndx.region; + if (addr->domain == NULL) + addr->domain = xstrcpy(nodebuf.addr.domain); + + Syslog('s', "getnlent: system %s, %s", nodebuf.name, nodebuf.location); + Syslog('s', "getnlent: sysop %s, %s", nodebuf.sysop, nodebuf.phone); + moflags(nodebuf.mflags); + diflags(nodebuf.dflags); + ipflags(nodebuf.iflags); + olflags(nodebuf.oflags); + rqflags(nodebuf.xflags); + free(mydomain); + + return &nodebuf; badsyntax: - WriteError("nodelist %d offset +%lu: bad syntax in line \"%s\"", - ndx.fileno, (unsigned long)ndx.offset, buf); - /* fallthrough */ + WriteError("nodelist %d offset +%lu: bad syntax in line \"%s\"", ndx.fileno, (unsigned long)ndx.offset, buf); + /* fallthrough */ retdummy: - memset(&nodebuf, 0, sizeof(nodebuf)); - nodebuf.pflag = NL_DUMMY; - nodebuf.name = (char *)"Unknown"; - nodebuf.location = (char *)"Nowhere"; - nodebuf.sysop = (char *)"Sysop"; - nodebuf.phone = NULL; - nodebuf.speed = 2400; - free(mydomain); + memset(&nodebuf, 0, sizeof(nodebuf)); + nodebuf.pflag = NL_DUMMY; + nodebuf.name = (char *)"Unknown"; + nodebuf.location = (char *)"Nowhere"; + nodebuf.sysop = (char *)"Sysop"; + nodebuf.phone = NULL; + nodebuf.speed = 2400; + free(mydomain); - return &nodebuf; + return &nodebuf; } void olflags(unsigned long flags) { - char *t; + char *t; - t = xstrcpy((char *)"Mailer flags :"); - if (flags & OL_CM) - t = xstrcat(t, (char *)" CM"); - if (flags & OL_MO) - t = xstrcat(t, (char *)" MO"); - if (flags & OL_LO) - t = xstrcat(t, (char *)" LO"); - if (flags & OL_MN) - t = xstrcat(t, (char *)" MN"); - Syslog('s', "%s", t); - free(t); + t = xstrcpy((char *)"Mailer flags :"); + if (flags & OL_CM) + t = xstrcat(t, (char *)" CM"); + if (flags & OL_MO) + t = xstrcat(t, (char *)" MO"); + if (flags & OL_LO) + t = xstrcat(t, (char *)" LO"); + if (flags & OL_MN) + t = xstrcat(t, (char *)" MN"); + Syslog('s', "%s", t); + free(t); } void rqflags(unsigned long flags) { - char *t; + char *t; - t = xstrcpy((char *)"Request flags:"); - if (flags & RQ_RQ_BR) - t = xstrcat(t, (char *)" RQ_BR"); - if (flags & RQ_RQ_BU) - t = xstrcat(t, (char *)" RQ_BU"); - if (flags & RQ_RQ_WR) - t = xstrcat(t, (char *)" RQ_WR"); - if (flags & RQ_RQ_WU) - t = xstrcat(t, (char *)" RQ_WU"); - Syslog('s', "%s", t); - free(t); + t = xstrcpy((char *)"Request flags:"); + if (flags & RQ_RQ_BR) + t = xstrcat(t, (char *)" RQ_BR"); + if (flags & RQ_RQ_BU) + t = xstrcat(t, (char *)" RQ_BU"); + if (flags & RQ_RQ_WR) + t = xstrcat(t, (char *)" RQ_WR"); + if (flags & RQ_RQ_WU) + t = xstrcat(t, (char *)" RQ_WU"); + Syslog('s', "%s", t); + free(t); } void moflags(unsigned long flags) { - char *t; + char *t; - if (!flags) - return; - t = xstrcpy((char *)"Modem flags :"); - if (flags & NL_V22) - t = xstrcat(t, (char *)" V22"); - if (flags & NL_V29) - t = xstrcat(t, (char *)" V29"); - if (flags & NL_V32) - t = xstrcat(t, (char *)" V32"); - if (flags & NL_V32B) - t = xstrcat(t, (char *)" V32B"); - if (flags & NL_V34) - t = xstrcat(t, (char *)" V34"); - if (flags & NL_V42) - t = xstrcat(t, (char *)" V42"); - if (flags & NL_V42B) - t = xstrcat(t, (char *)" V42B"); - if (flags & NL_MNP) - t = xstrcat(t, (char *)" MNP"); - if (flags & NL_H96) - t = xstrcat(t, (char *)" H96"); - if (flags & NL_HST) - t = xstrcat(t, (char *)" HST"); - if (flags & NL_H14) - t = xstrcat(t, (char *)" H14"); - if (flags & NL_H16) - t = xstrcat(t, (char *)" H16"); - if (flags & NL_MAX) - t = xstrcat(t, (char *)" MAX"); - if (flags & NL_PEP) - t = xstrcat(t, (char *)" PEP"); - if (flags & NL_CSP) - t = xstrcat(t, (char *)" CSP"); - if (flags & NL_V32T) - t = xstrcat(t, (char *)" V32T"); - if (flags & NL_VFC) - t = xstrcat(t, (char *)" VFC"); - if (flags & NL_ZYX) - t = xstrcat(t, (char *)" ZYX"); - if (flags & NL_X2C) - t = xstrcat(t, (char *)" X2C"); - if (flags & NL_X2S) - t = xstrcat(t, (char *)" X2S"); - if (flags & NL_V90C) - t = xstrcat(t, (char *)" V90C"); - if (flags & NL_V90S) - t = xstrcat(t, (char *)" V90S"); - Syslog('s', "%s", t); - free(t); + if (!flags) + return; + t = xstrcpy((char *)"Modem flags :"); + if (flags & NL_V22) + t = xstrcat(t, (char *)" V22"); + if (flags & NL_V29) + t = xstrcat(t, (char *)" V29"); + if (flags & NL_V32) + t = xstrcat(t, (char *)" V32"); + if (flags & NL_V32B) + t = xstrcat(t, (char *)" V32B"); + if (flags & NL_V34) + t = xstrcat(t, (char *)" V34"); + if (flags & NL_V42) + t = xstrcat(t, (char *)" V42"); + if (flags & NL_V42B) + t = xstrcat(t, (char *)" V42B"); + if (flags & NL_MNP) + t = xstrcat(t, (char *)" MNP"); + if (flags & NL_H96) + t = xstrcat(t, (char *)" H96"); + if (flags & NL_HST) + t = xstrcat(t, (char *)" HST"); + if (flags & NL_H14) + t = xstrcat(t, (char *)" H14"); + if (flags & NL_H16) + t = xstrcat(t, (char *)" H16"); + if (flags & NL_MAX) + t = xstrcat(t, (char *)" MAX"); + if (flags & NL_PEP) + t = xstrcat(t, (char *)" PEP"); + if (flags & NL_CSP) + t = xstrcat(t, (char *)" CSP"); + if (flags & NL_V32T) + t = xstrcat(t, (char *)" V32T"); + if (flags & NL_VFC) + t = xstrcat(t, (char *)" VFC"); + if (flags & NL_ZYX) + t = xstrcat(t, (char *)" ZYX"); + if (flags & NL_X2C) + t = xstrcat(t, (char *)" X2C"); + if (flags & NL_X2S) + t = xstrcat(t, (char *)" X2S"); + if (flags & NL_V90C) + t = xstrcat(t, (char *)" V90C"); + if (flags & NL_V90S) + t = xstrcat(t, (char *)" V90S"); + Syslog('s', "%s", t); + free(t); } void diflags(unsigned long flags) { - char *t; + char *t; - if (!flags) - return; + if (!flags) + return; - t = xstrcpy((char *)"ISDN flags :"); - if (flags & ND_V110L) - t = xstrcat(t, (char *)" V110L"); - if (flags & ND_V110H) - t = xstrcat(t, (char *)" V110H"); - if (flags & ND_V120L) - t = xstrcat(t, (char *)" V120L"); - if (flags & ND_V120H) - t = xstrcat(t, (char *)" V120H"); - if (flags & ND_X75) - t = xstrcat(t, (char *)" X75"); - Syslog('s', "%s", t); - free(t); + t = xstrcpy((char *)"ISDN flags :"); + if (flags & ND_V110L) + t = xstrcat(t, (char *)" V110L"); + if (flags & ND_V110H) + t = xstrcat(t, (char *)" V110H"); + if (flags & ND_V120L) + t = xstrcat(t, (char *)" V120L"); + if (flags & ND_V120H) + t = xstrcat(t, (char *)" V120H"); + if (flags & ND_X75) + t = xstrcat(t, (char *)" X75"); + Syslog('s', "%s", t); + free(t); } void ipflags(unsigned long flags) { - char *t; + char *t; - if (!flags) - return; + if (!flags) + return; - t = xstrcpy((char *)"TCP/IP flags :"); - if (flags & IP_IBN) - t = xstrcat(t, (char *)" IBN"); - if (flags & IP_IFC) - t = xstrcat(t, (char *)" IFC"); - if (flags & IP_ITN) - t = xstrcat(t, (char *)" ITN"); - if (flags & IP_IVM) - t = xstrcat(t, (char *)" IVM"); - if (flags & IP_IP) - t = xstrcat(t, (char *)" IP"); - if (flags & IP_IFT) - t = xstrcat(t, (char *)" IFT"); - Syslog('s', "%s", t); - free(t); + t = xstrcpy((char *)"TCP/IP flags :"); + if (flags & IP_IBN) + t = xstrcat(t, (char *)" IBN"); + if (flags & IP_IFC) + t = xstrcat(t, (char *)" IFC"); + if (flags & IP_ITN) + t = xstrcat(t, (char *)" ITN"); + if (flags & IP_IVM) + t = xstrcat(t, (char *)" IVM"); + if (flags & IP_IP) + t = xstrcat(t, (char *)" IP"); + if (flags & IP_IFT) + t = xstrcat(t, (char *)" IFT"); + Syslog('s', "%s", t); + free(t); } diff --git a/mbsetup/m_node.c b/mbsetup/m_node.c index 79b525ca..0bd0ef05 100644 --- a/mbsetup/m_node.c +++ b/mbsetup/m_node.c @@ -752,8 +752,8 @@ void SessionScreen(void) mvprintw( 8, 6, "2. Dial command"); mvprintw( 9, 6, "3. Phone number 1"); mvprintw(10, 6, "4. Phone number 2"); -// mvprintw(11, 6, "5. Nodelist flags"); -// mvprintw(12, 6, "6. Inet hostname"); + mvprintw(11, 6, "5. Nodelist flags"); + mvprintw(12, 6, "6. Inet hostname"); // mvprintw(13, 6, "7. Outbound sess."); // mvprintw(14, 6, "8. Inbound sess."); mvprintw(15, 6, "9. No EMSI"); @@ -805,8 +805,8 @@ void SessionEdit(void) case 2: E_STR( 8,26,40, nodes.dial, "If needed, give a special modem ^dial command^ for this node") case 3: E_STR( 9,26,20, nodes.phone[0], "Enter ^phone number^ to override the nodelist") case 4: E_STR( 10,26,20, nodes.phone[1], "Enter ^phone number^ to override the nodelist") -// case 5: E_STR( 11,26,54, nodes.Nl_flags, "^Nodelist flags^ override") -// case 6: E_STR( 12,26,40, nodes.Nl_hostname, "Node internet ^hostname/IP address^ override") + case 5: E_STR( 11,26,54, nodes.Nl_flags, "^Nodelist flags^ override") + case 6: E_STR( 12,26,40, nodes.Nl_hostname, "Node internet ^hostname/IP address^ override") case 9: E_BOOL(15,26, nodes.NoEMSI, "Disable ^EMSI handshake^ with this node") case 10:E_BOOL(16,26, nodes.NoWaZOO, "Disable ^YooHoo/2U2 handshake^ (FTSC-0006) with this node") diff --git a/mbtask/nodelist.c b/mbtask/nodelist.c index 22490ddb..f5019d10 100644 --- a/mbtask/nodelist.c +++ b/mbtask/nodelist.c @@ -172,278 +172,324 @@ int comp_node(struct _nlidx fap1, struct _ixentry fap2) node *getnlent(faddr *addr) { - FILE *fp; - static node nodebuf; - static char buf[256], *p, *q; - struct _ixentry xaddr; - int i, j, Found = FALSE; - int ixflag, stdflag; - char *mydomain, *path; - struct _nlfil fdx; - struct _nlidx ndx; - long lowest, highest, current; + FILE *fp; + static node nodebuf; + static char buf[256], *p, *q; + struct _ixentry xaddr; + int i, j, Found = FALSE, ixflag, stdflag, ndrecord = FALSE; + char *mydomain, *path; + struct _nlfil fdx; + struct _nlidx ndx; + long lowest, highest, current; + struct _nodeshdr ndhdr; + static struct _nodes nd; - mydomain = xstrcpy(CFG.aka[0].domain); - if (mydomain == NULL) - mydomain = (char *)NULLDOMAIN; + mydomain = xstrcpy(CFG.aka[0].domain); + if (mydomain == NULL) + mydomain = (char *)NULLDOMAIN; - nodebuf.addr.domain = NULL; - nodebuf.addr.zone = 0; - nodebuf.addr.net = 0; - nodebuf.addr.node = 0; - nodebuf.addr.point = 0; - nodebuf.addr.name = NULL; - nodebuf.upnet = 0; - nodebuf.upnode = 0; - nodebuf.region = 0; - nodebuf.type = 0; - nodebuf.pflag = 0; - nodebuf.name = NULL; - nodebuf.location = NULL; - nodebuf.sysop = NULL; - nodebuf.phone = NULL; - nodebuf.speed = 0; - nodebuf.mflags = 0L; - nodebuf.oflags = 0L; - nodebuf.xflags = 0L; - nodebuf.iflags = 0L; - nodebuf.dflags = 0L; - nodebuf.uflags[0] = NULL; - nodebuf.t1 = '\0'; - nodebuf.t2 = '\0'; + nodebuf.addr.domain = NULL; + nodebuf.addr.zone = 0; + nodebuf.addr.net = 0; + nodebuf.addr.node = 0; + nodebuf.addr.point = 0; + nodebuf.addr.name = NULL; + nodebuf.upnet = 0; + nodebuf.upnode = 0; + nodebuf.region = 0; + nodebuf.type = 0; + nodebuf.pflag = 0; + nodebuf.name = NULL; + nodebuf.location = NULL; + nodebuf.sysop = NULL; + nodebuf.phone = NULL; + nodebuf.speed = 0; + nodebuf.mflags = 0L; + nodebuf.oflags = 0L; + nodebuf.xflags = 0L; + nodebuf.iflags = 0L; + nodebuf.dflags = 0L; + nodebuf.uflags[0] = NULL; + nodebuf.t1 = '\0'; + nodebuf.t2 = '\0'; - if (addr == NULL) - goto retdummy; + if (addr == NULL) + goto retdummy; - if (addr->zone == 0) - addr->zone = CFG.aka[0].zone; - xaddr.zone = addr->zone; - nodebuf.addr.zone = addr->zone; - xaddr.net = addr->net; - nodebuf.addr.net = addr->net; - xaddr.node = addr->node; - nodebuf.addr.node = addr->node; - xaddr.point = addr->point; - nodebuf.addr.point = addr->point; + if (addr->zone == 0) + addr->zone = CFG.aka[0].zone; + xaddr.zone = addr->zone; + nodebuf.addr.zone = addr->zone; + xaddr.net = addr->net; + nodebuf.addr.net = addr->net; + xaddr.node = addr->node; + nodebuf.addr.node = addr->node; + xaddr.point = addr->point; + nodebuf.addr.point = addr->point; - if (initnl()) - goto retdummy; + if (initnl()) + goto retdummy; - /* - * First, lookup node in index. NOTE -- NOT 5D YET - */ - path = calloc(128, sizeof(char)); - sprintf(path, "%s/%s", CFG.nodelists, "node.index"); - if ((fp = fopen(path, "r")) == NULL) { - tasklog('?', "$Can't open %s", path); - free(path); - goto retdummy; - } - - fseek(fp, 0, SEEK_END); - highest = ftell(fp) / sizeof(ndx); - lowest = 0; - - while (TRUE) { - current = ((highest - lowest) / 2) + lowest; - fseek(fp, current * sizeof(ndx), SEEK_SET); - if (fread(&ndx, sizeof(ndx), 1, fp) != 1) - break; - - if (comp_node(ndx, xaddr) == 0) { - Found = TRUE; - break; - } - if (comp_node(ndx, xaddr) < 0) - lowest = current; - else - highest = current; - if ((highest - lowest) <= 1) - break; - } - - fclose(fp); - - if (!Found) { - free(path); - goto retdummy; - } - - sprintf(path, "%s/%s", CFG.nodelists, "node.files"); - if ((fp = fopen(path, "r")) == NULL) { - tasklog('?', "$Can't open %s", path); - free(path); - goto retdummy; - } - - /* - * Get filename from node.files - */ - for (i = 0; i < (ndx.fileno +1); i++) - fread(&fdx, sizeof(fdx), 1, fp); - fclose(fp); - - /* CHECK DOMAIN HERE */ - - /* - * Open and read in real nodelist - */ - sprintf(path, "%s/%s", CFG.nodelists, fdx.filename); - if ((fp = fopen(path, "r")) == NULL) { - tasklog('?', "$Can't open %s", path); - free(path); - goto retdummy; - } + /* + * First, lookup node in index. NOTE -- NOT 5D YET + */ + path = calloc(128, sizeof(char)); + sprintf(path, "%s/%s", CFG.nodelists, "node.index"); + if ((fp = fopen(path, "r")) == NULL) { + tasklog('?', "$Can't open %s", path); free(path); + goto retdummy; + } - if (fseek(fp, ndx.offset, SEEK_SET) != 0) { - tasklog('?', "$Seek failed for nodelist entry"); - fclose(fp); - goto retdummy; + fseek(fp, 0, SEEK_END); + highest = ftell(fp) / sizeof(ndx); + lowest = 0; + + while (TRUE) { + current = ((highest - lowest) / 2) + lowest; + fseek(fp, current * sizeof(ndx), SEEK_SET); + if (fread(&ndx, sizeof(ndx), 1, fp) != 1) + break; + + if (comp_node(ndx, xaddr) == 0) { + Found = TRUE; + break; } - - if (fgets(buf, sizeof(buf)-1, fp) == NULL) { - tasklog('?', "$fgets failed for nodelist entry"); - fclose(fp); - goto retdummy; - } - fclose(fp); - - nodebuf.type = ndx.type; - nodebuf.pflag = ndx.pflag; - - if (*(p = buf + strlen(buf) -1) == '\n') - *p = '\0'; - if (*(p = buf + strlen(buf) -1) == '\r') - *p = '\0'; - for (p = buf; *p; p++) - if (*p == '_') - *p = ' '; - - p = buf; - - if ((q = strchr(p,','))) - *q++ = '\0'; - - p = q; - if (p == NULL) - goto badsyntax; - - if ((q=strchr(p,','))) - *q++ = '\0'; - p = q; - if (p == NULL) - goto badsyntax; - - if ((q=strchr(p,','))) - *q++ = '\0'; - nodebuf.name = p; - p = q; - if (p == NULL) - goto badsyntax; - - if ((q=strchr(p,','))) - *q++ = '\0'; - nodebuf.location = p; - p = q; - if (p == NULL) - goto badsyntax; - - if ((q=strchr(p,','))) - *q++ = '\0'; - nodebuf.sysop = p; - p = q; - if (p == NULL) - goto badsyntax; - - if ((q=strchr(p,','))) - *q++ = '\0'; - if (strcasecmp(p, "-Unpublished-") == 0) - nodebuf.phone = NULL; + if (comp_node(ndx, xaddr) < 0) + lowest = current; else - nodebuf.phone = p; - p = q; - if (p == NULL) - goto badsyntax; + highest = current; + if ((highest - lowest) <= 1) + break; + } - if ((q=strchr(p,','))) - *q++ = '\0'; - nodebuf.speed = atoi(p); + fclose(fp); - /* - * Process the nodelist flags. - */ - ixflag = 0; - stdflag = TRUE; - for (p = q; p; p = q) { - if ((q = strchr(p, ','))) - *q++ = '\0'; - if ((strncasecmp(p, "U", 1) == 0) && (strlen(p) == 1)) { - stdflag = FALSE; - } else { - /* - * Experimental: process authorized flags and - * User flags both as authorized. - */ - for (j = 0; fkey[j].key; j++) - if (strcasecmp(p, fkey[j].key) == 0) - nodebuf.mflags |= fkey[j].flag; - for (j = 0; okey[j].key; j++) - if (strcasecmp(p, okey[j].key) == 0) - nodebuf.oflags |= okey[j].flag; - for (j = 0; dkey[j].key; j++) - if (strcasecmp(p, dkey[j].key) == 0) - nodebuf.dflags |= dkey[j].flag; - for (j = 0; ikey[j].key; j++) - if (strncasecmp(p, ikey[j].key, strlen(ikey[j].key)) == 0) - nodebuf.iflags |= ikey[j].flag; - for (j = 0; xkey[j].key; j++) - if (strcasecmp(p, xkey[j].key) == 0) - nodebuf.xflags |= xkey[j].flag; - if ((p[0] == 'T') && (strlen(p) == 3)) { - /* - * System open hours flag - */ - nodebuf.t1 = p[1]; - nodebuf.t2 = p[2]; - } - if (!stdflag) { - if (ixflag < MAXUFLAGS) { - nodebuf.uflags[ixflag++] = p; - if (ixflag < MAXUFLAGS) - nodebuf.uflags[ixflag] = NULL; - } - } + if (!Found) { + free(path); + goto retdummy; + } + + sprintf(path, "%s/%s", CFG.nodelists, "node.files"); + if ((fp = fopen(path, "r")) == NULL) { + tasklog('?', "$Can't open %s", path); + free(path); + goto retdummy; + } + + /* + * Get filename from node.files + */ + for (i = 0; i < (ndx.fileno +1); i++) + fread(&fdx, sizeof(fdx), 1, fp); + fclose(fp); + + /* CHECK DOMAIN HERE */ + + /* + * Open and read in real nodelist + */ + sprintf(path, "%s/%s", CFG.nodelists, fdx.filename); + if ((fp = fopen(path, "r")) == NULL) { + tasklog('?', "$Can't open %s", path); + free(path); + goto retdummy; + } + + if (fseek(fp, ndx.offset, SEEK_SET) != 0) { + tasklog('?', "$Seek failed for nodelist entry"); + fclose(fp); + goto retdummy; + } + + if (fgets(buf, sizeof(buf)-1, fp) == NULL) { + tasklog('?', "$fgets failed for nodelist entry"); + fclose(fp); + goto retdummy; + } + fclose(fp); + + /* + * Load noderecord if this node has one, if there is one then + * nodelist overrides in this record will be used instead of + * the nodelist entries. + */ + sprintf(path, "%s/etc/nodes.data", getenv("MBSE_ROOT")); + if ((fp = fopen(path, "r")) != NULL) { + fread(&ndhdr, sizeof(ndhdr), 1, fp); + + while (fread(&nd, ndhdr.recsize, 1, fp) == 1) { + fseek(fp, ndhdr.filegrp + ndhdr.mailgrp, SEEK_CUR); + for (i = 0; i < 20; i++) { + if ((addr->zone == nd.Aka[i].zone) && (addr->net == nd.Aka[i].net) && + (addr->node == nd.Aka[i].node) && (addr->point == nd.Aka[i].point)) { + ndrecord = TRUE; + break; } + } + if (ndrecord) + break; } - nodebuf.addr.name = nodebuf.sysop; - nodebuf.addr.domain = xstrcpy(fdx.domain); - nodebuf.upnet = ndx.upnet; - nodebuf.upnode = ndx.upnode; - nodebuf.region = ndx.region; - if (addr->domain == NULL) - addr->domain = xstrcpy(nodebuf.addr.domain); + fclose(fp); + } + free(path); - free(mydomain); - return &nodebuf; + nodebuf.type = ndx.type; + nodebuf.pflag = ndx.pflag; + + if (*(p = buf + strlen(buf) -1) == '\n') + *p = '\0'; + if (*(p = buf + strlen(buf) -1) == '\r') + *p = '\0'; + for (p = buf; *p; p++) + if (*p == '_') + *p = ' '; + + p = buf; + + if ((q = strchr(p,','))) + *q++ = '\0'; + + p = q; + if (p == NULL) + goto badsyntax; + + if ((q=strchr(p,','))) + *q++ = '\0'; + p = q; + if (p == NULL) + goto badsyntax; + + /* + * Get system name + */ + if ((q=strchr(p,','))) + *q++ = '\0'; + if (ndrecord && strlen(nd.Nl_hostname)) + nodebuf.name = nd.Nl_hostname; + else + nodebuf.name = p; + p = q; + if (p == NULL) + goto badsyntax; + + /* + * Get location + */ + if ((q=strchr(p,','))) + *q++ = '\0'; + nodebuf.location = p; + p = q; + if (p == NULL) + goto badsyntax; + + /* + * Get sysop name + */ + if ((q=strchr(p,','))) + *q++ = '\0'; + nodebuf.sysop = p; + p = q; + if (p == NULL) + goto badsyntax; + + /* + * Get phone number + */ + if ((q=strchr(p,','))) + *q++ = '\0'; + if (strcasecmp(p, "-Unpublished-") == 0) + nodebuf.phone = NULL; + else + nodebuf.phone = p; + p = q; + if (p == NULL) + goto badsyntax; + + /* + * Get modem speed + */ + if ((q=strchr(p,','))) + *q++ = '\0'; + nodebuf.speed = atoi(p); + + /* + * Process the nodelist flags, get them from the node override + * field if this is present, else use the nodelist. + */ + if (ndrecord && strlen(nd.Nl_flags)) + q = nd.Nl_flags; + ixflag = 0; + stdflag = TRUE; + for (p = q; p; p = q) { + if ((q = strchr(p, ','))) + *q++ = '\0'; + if ((strncasecmp(p, "U", 1) == 0) && (strlen(p) == 1)) { + stdflag = FALSE; + } else { + /* + * Experimental: process authorized flags and + * User flags both as authorized. + */ + for (j = 0; fkey[j].key; j++) + if (strcasecmp(p, fkey[j].key) == 0) + nodebuf.mflags |= fkey[j].flag; + for (j = 0; okey[j].key; j++) + if (strcasecmp(p, okey[j].key) == 0) + nodebuf.oflags |= okey[j].flag; + for (j = 0; dkey[j].key; j++) + if (strcasecmp(p, dkey[j].key) == 0) + nodebuf.dflags |= dkey[j].flag; + for (j = 0; ikey[j].key; j++) + if (strncasecmp(p, ikey[j].key, strlen(ikey[j].key)) == 0) + nodebuf.iflags |= ikey[j].flag; + for (j = 0; xkey[j].key; j++) + if (strcasecmp(p, xkey[j].key) == 0) + nodebuf.xflags |= xkey[j].flag; + if ((p[0] == 'T') && (strlen(p) == 3)) { + /* + * System open hours flag + */ + nodebuf.t1 = p[1]; + nodebuf.t2 = p[2]; + } + if (!stdflag) { + if (ixflag < MAXUFLAGS) { + nodebuf.uflags[ixflag++] = p; + if (ixflag < MAXUFLAGS) + nodebuf.uflags[ixflag] = NULL; + } + } + } + } + + nodebuf.addr.name = nodebuf.sysop; + nodebuf.addr.domain = xstrcpy(fdx.domain); + nodebuf.upnet = ndx.upnet; + nodebuf.upnode = ndx.upnode; + nodebuf.region = ndx.region; + if (addr->domain == NULL) + addr->domain = xstrcpy(nodebuf.addr.domain); + + free(mydomain); + return &nodebuf; badsyntax: - tasklog('?', "nodelist %d offset +%lu: bad syntax in line \"%s\"", - ndx.fileno, (unsigned long)ndx.offset, buf); - /* fallthrough */ + tasklog('?', "nodelist %d offset +%lu: bad syntax in line \"%s\"", ndx.fileno, (unsigned long)ndx.offset, buf); + /* fallthrough */ retdummy: - memset(&nodebuf, 0, sizeof(nodebuf)); - nodebuf.pflag = NL_DUMMY; - nodebuf.name = (char *)"Unknown"; - nodebuf.location = (char *)"Nowhere"; - nodebuf.sysop = (char *)"Sysop"; - nodebuf.phone = NULL; - nodebuf.speed = 2400; - free(mydomain); + memset(&nodebuf, 0, sizeof(nodebuf)); + nodebuf.pflag = NL_DUMMY; + nodebuf.name = (char *)"Unknown"; + nodebuf.location = (char *)"Nowhere"; + nodebuf.sysop = (char *)"Sysop"; + nodebuf.phone = NULL; + nodebuf.speed = 2400; + free(mydomain); - return &nodebuf; + return &nodebuf; }