GetWeb-1.15/ 40755 431 36 0 6316042223 11624 5ustar rolftechnicalGetWeb-1.15/t/ 40755 431 36 0 6316042224 12070 5ustar rolftechnicalGetWeb-1.15/t/ref.unavail/ 40755 431 36 0 6316042221 14277 5ustar rolftechnicalGetWeb-1.15/t/ref.unavail/ref.TO.getweb_discard100755 431 36 3073 6316000271 20366 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch file:./test/this-is_unavailable.html An Error Occurred ================== 404 - File `/home/rolf/dev/getweb/t/testRoot/pub/test/this-is_unavailable.html' does not exist ...while executing the following command: GET TO getweb_discard file://test/this-is_unavailable.html Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch An Error Occurred ================== 501 - Protocol scheme 'garbage_proto' is not supported ...while executing the following command: GET garbage_proto:foo Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender CC: getweb-admin@usa.healthnet.org Subject: Syntax Error A syntax error occurred: not a valid URL or command: GET_MISPELLED Some or all commands were not executed. Tips: * Put commands in the body of the message, not the Subject line. * Make sure your signature begins with '--' Still having trouble? * Try surrounding your body with 'begin' and 'end' * Place a blank line between each command * If command takes up two lines, place a '\' after the first line For proper usage, send a message containing these three lines: begin HELP end ____original message follows____ From: Original_Sender Subject: ignore Reply-To: terminal GET TO getweb_discard file://test/this-is_unavailable.html GET garbage_proto:foo GET_MISPELLED TO getweb_discard file://test/promed_new.htmlGetWeb-1.15/t/ref.unavail/ref.SOURCE.TO.getweb_discard100755 431 36 3224 6316000333 21362 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch file:./test/this-is_unavailable.html An Error Occurred

An Error Occurred

404 - File `/home/rolf/dev/getweb/t/testRoot/pub/test/this-is_unavailable.html' does not exist ...while executing the following command: GET SOURCE TO getweb_discard file://test/this-is_unavailable.html Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch An Error Occurred ================== 501 - Protocol scheme 'garbage_proto' is not supported ...while executing the following command: GET garbage_proto:foo Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender CC: getweb-admin@usa.healthnet.org Subject: Syntax Error A syntax error occurred: not a valid URL or command: GET_MISPELLED Some or all commands were not executed. Tips: * Put commands in the body of the message, not the Subject line. * Make sure your signature begins with '--' Still having trouble? * Try surrounding your body with 'begin' and 'end' * Place a blank line between each command * If command takes up two lines, place a '\' after the first line For proper usage, send a message containing these three lines: begin HELP end ____original message follows____ From: Original_Sender Subject: ignore Reply-To: terminal GET SOURCE TO getweb_discard file://test/this-is_unavailable.html GET garbage_proto:foo GET_MISPELLED SOURCE TO getweb_discard file://test/promed_new.htmlGetWeb-1.15/t/ref.unavail/ref.SOURCE100755 431 36 3136 6316000231 16073 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch file:./test/this-is_unavailable.html An Error Occurred

An Error Occurred

404 - File `/home/rolf/dev/getweb/t/testRoot/pub/test/this-is_unavailable.html' does not exist ...while executing the following command: GET SOURCE file://test/this-is_unavailable.html Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch An Error Occurred ================== 501 - Protocol scheme 'garbage_proto' is not supported ...while executing the following command: GET garbage_proto:foo Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender CC: getweb-admin@usa.healthnet.org Subject: Syntax Error A syntax error occurred: not a valid URL or command: GET_MISPELLED Some or all commands were not executed. Tips: * Put commands in the body of the message, not the Subject line. * Make sure your signature begins with '--' Still having trouble? * Try surrounding your body with 'begin' and 'end' * Place a blank line between each command * If command takes up two lines, place a '\' after the first line For proper usage, send a message containing these three lines: begin HELP end ____original message follows____ From: Original_Sender Subject: ignore Reply-To: terminal GET SOURCE file://test/this-is_unavailable.html GET garbage_proto:foo GET_MISPELLED SOURCE file://test/promed_new.htmlGetWeb-1.15/t/ref.unavail/ref.100755 431 36 3005 6316000175 15154 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch file:./test/this-is_unavailable.html An Error Occurred ================== 404 - File `/home/rolf/dev/getweb/t/testRoot/pub/test/this-is_unavailable.html' does not exist ...while executing the following command: GET file://test/this-is_unavailable.html Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch An Error Occurred ================== 501 - Protocol scheme 'garbage_proto' is not supported ...while executing the following command: GET garbage_proto:foo Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender CC: getweb-admin@usa.healthnet.org Subject: Syntax Error A syntax error occurred: not a valid URL or command: GET_MISPELLED Some or all commands were not executed. Tips: * Put commands in the body of the message, not the Subject line. * Make sure your signature begins with '--' Still having trouble? * Try surrounding your body with 'begin' and 'end' * Place a blank line between each command * If command takes up two lines, place a '\' after the first line For proper usage, send a message containing these three lines: begin HELP end ____original message follows____ From: Original_Sender Subject: ignore Reply-To: terminal GET file://test/this-is_unavailable.html GET garbage_proto:foo GET_MISPELLED file://test/promed_new.htmlGetWeb-1.15/t/ref.unavail/ref.NOMIME.SOURCE.TO.getweb_discard100755 431 36 3251 6316000352 22346 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch file:./test/this-is_unavailable.html An Error Occurred

An Error Occurred

404 - File `/home/rolf/dev/getweb/t/testRoot/pub/test/this-is_unavailable.html' does not exist ...while executing the following command: GET NOMIME SOURCE TO getweb_discard file://test/this-is_unavailable.html Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch An Error Occurred ================== 501 - Protocol scheme 'garbage_proto' is not supported ...while executing the following command: GET garbage_proto:foo Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender CC: getweb-admin@usa.healthnet.org Subject: Syntax Error A syntax error occurred: not a valid URL or command: GET_MISPELLED Some or all commands were not executed. Tips: * Put commands in the body of the message, not the Subject line. * Make sure your signature begins with '--' Still having trouble? * Try surrounding your body with 'begin' and 'end' * Place a blank line between each command * If command takes up two lines, place a '\' after the first line For proper usage, send a message containing these three lines: begin HELP end ____original message follows____ From: Original_Sender Subject: ignore Reply-To: terminal GET NOMIME SOURCE TO getweb_discard file://test/this-is_unavailable.html GET garbage_proto:foo GET_MISPELLED NOMIME SOURCE TO getweb_discard file://test/promed_new.htmlGetWeb-1.15/t/ref.unavail/ref.NOMIME.TO.getweb_discard100755 431 36 3120 6316000310 21334 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch file:./test/this-is_unavailable.html An Error Occurred ================== 404 - File `/home/rolf/dev/getweb/t/testRoot/pub/test/this-is_unavailable.html' does not exist ...while executing the following command: GET NOMIME TO getweb_discard file://test/this-is_unavailable.html Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch An Error Occurred ================== 501 - Protocol scheme 'garbage_proto' is not supported ...while executing the following command: GET garbage_proto:foo Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender CC: getweb-admin@usa.healthnet.org Subject: Syntax Error A syntax error occurred: not a valid URL or command: GET_MISPELLED Some or all commands were not executed. Tips: * Put commands in the body of the message, not the Subject line. * Make sure your signature begins with '--' Still having trouble? * Try surrounding your body with 'begin' and 'end' * Place a blank line between each command * If command takes up two lines, place a '\' after the first line For proper usage, send a message containing these three lines: begin HELP end ____original message follows____ From: Original_Sender Subject: ignore Reply-To: terminal GET NOMIME TO getweb_discard file://test/this-is_unavailable.html GET garbage_proto:foo GET_MISPELLED NOMIME TO getweb_discard file://test/promed_new.htmlGetWeb-1.15/t/ref.unavail/ref.NOMIME.SOURCE100755 431 36 3163 6316000250 17057 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch file:./test/this-is_unavailable.html An Error Occurred

An Error Occurred

404 - File `/home/rolf/dev/getweb/t/testRoot/pub/test/this-is_unavailable.html' does not exist ...while executing the following command: GET NOMIME SOURCE file://test/this-is_unavailable.html Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch An Error Occurred ================== 501 - Protocol scheme 'garbage_proto' is not supported ...while executing the following command: GET garbage_proto:foo Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender CC: getweb-admin@usa.healthnet.org Subject: Syntax Error A syntax error occurred: not a valid URL or command: GET_MISPELLED Some or all commands were not executed. Tips: * Put commands in the body of the message, not the Subject line. * Make sure your signature begins with '--' Still having trouble? * Try surrounding your body with 'begin' and 'end' * Place a blank line between each command * If command takes up two lines, place a '\' after the first line For proper usage, send a message containing these three lines: begin HELP end ____original message follows____ From: Original_Sender Subject: ignore Reply-To: terminal GET NOMIME SOURCE file://test/this-is_unavailable.html GET garbage_proto:foo GET_MISPELLED NOMIME SOURCE file://test/promed_new.htmlGetWeb-1.15/t/ref.unavail/ref.NOMIME100755 431 36 3032 6316000215 16054 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch file:./test/this-is_unavailable.html An Error Occurred ================== 404 - File `/home/rolf/dev/getweb/t/testRoot/pub/test/this-is_unavailable.html' does not exist ...while executing the following command: GET NOMIME file://test/this-is_unavailable.html Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch An Error Occurred ================== 501 - Protocol scheme 'garbage_proto' is not supported ...while executing the following command: GET garbage_proto:foo Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender CC: getweb-admin@usa.healthnet.org Subject: Syntax Error A syntax error occurred: not a valid URL or command: GET_MISPELLED Some or all commands were not executed. Tips: * Put commands in the body of the message, not the Subject line. * Make sure your signature begins with '--' Still having trouble? * Try surrounding your body with 'begin' and 'end' * Place a blank line between each command * If command takes up two lines, place a '\' after the first line For proper usage, send a message containing these three lines: begin HELP end ____original message follows____ From: Original_Sender Subject: ignore Reply-To: terminal GET NOMIME file://test/this-is_unavailable.html GET garbage_proto:foo GET_MISPELLED NOMIME file://test/promed_new.htmlGetWeb-1.15/t/ref.follow/ 40755 431 36 0 6316042225 14146 5ustar rolftechnicalGetWeb-1.15/t/ref.follow/ref.NOMIME100755 431 36 4035 6304135305 15731 0ustar rolftechnicalContent-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail X-Mailbot-Note: following link 1, following link 1 [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable X-Mailbot-Note: following link 3 Could not fetch file:./notavalidpath/justtesting/foobarfoobarfoobarfoobarfoobarfoobarfoobar An Error Occurred ================== 404 - File `/home/rolf/dev/getweb/t/testRoot/pub/notavalidpath/justtesting/foobarfoobarfoobarfoobarfoobarfoobarfoobar' does not exist ...while executing the following command: GET NOMIME file://test/promed.html FOLLOW 3 GetWeb-1.15/t/ref.follow/ref.NOMIME.SOURCE.TO.getweb_discard100755 431 36 4316 6304135344 22223 0ustar rolftechnicalContent-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail X-Mailbot-Note: following link 1, following link 1 From: Original_Sender ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable X-Mailbot-Note: following link 3 Could not fetch file:./notavalidpath/justtesting/foobarfoobarfoobarfoobarfoobarfoobarfoobar An Error Occurred

An Error Occurred

404 - File `/home/rolf/dev/getweb/t/testRoot/pub/notavalidpath/justtesting/foobarfoobarfoobarfoobarfoobarfoobarfoobar' does not exist ...while executing the following command: GET NOMIME SOURCE TO getweb_discard file://test/promed.html FOLLOW 3 GetWeb-1.15/t/ref.follow/ref.TO.getweb_discard100755 431 36 4104 6304135325 20233 0ustar rolftechnicalContent-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail X-Mailbot-Note: following link 1, following link 1 From: Original_Sender [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable X-Mailbot-Note: following link 3 Could not fetch file:./notavalidpath/justtesting/foobarfoobarfoobarfoobarfoobarfoobarfoobar An Error Occurred ================== 404 - File `/home/rolf/dev/getweb/t/testRoot/pub/notavalidpath/justtesting/foobarfoobarfoobarfoobarfoobarfoobarfoobar' does not exist ...while executing the following command: GET TO getweb_discard file://test/promed.html FOLLOW 3 GetWeb-1.15/t/ref.follow/ref.SOURCE100755 431 36 4231 6304135312 15741 0ustar rolftechnicalContent-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail X-Mailbot-Note: following link 1, following link 1 ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable X-Mailbot-Note: following link 3 Could not fetch file:./notavalidpath/justtesting/foobarfoobarfoobarfoobarfoobarfoobarfoobar An Error Occurred

An Error Occurred

404 - File `/home/rolf/dev/getweb/t/testRoot/pub/notavalidpath/justtesting/foobarfoobarfoobarfoobarfoobarfoobarfoobar' does not exist ...while executing the following command: GET SOURCE file://test/promed.html FOLLOW 3 GetWeb-1.15/t/ref.follow/ref.NOMIME.SOURCE100755 431 36 4240 6304135317 16731 0ustar rolftechnicalContent-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail X-Mailbot-Note: following link 1, following link 1 ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable X-Mailbot-Note: following link 3 Could not fetch file:./notavalidpath/justtesting/foobarfoobarfoobarfoobarfoobarfoobarfoobar An Error Occurred

An Error Occurred

404 - File `/home/rolf/dev/getweb/t/testRoot/pub/notavalidpath/justtesting/foobarfoobarfoobarfoobarfoobarfoobarfoobar' does not exist ...while executing the following command: GET NOMIME SOURCE file://test/promed.html FOLLOW 3 GetWeb-1.15/t/ref.follow/ref.NOMIME.TO.getweb_discard100755 431 36 4113 6304135332 21214 0ustar rolftechnicalContent-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail X-Mailbot-Note: following link 1, following link 1 From: Original_Sender [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable X-Mailbot-Note: following link 3 Could not fetch file:./notavalidpath/justtesting/foobarfoobarfoobarfoobarfoobarfoobarfoobar An Error Occurred ================== 404 - File `/home/rolf/dev/getweb/t/testRoot/pub/notavalidpath/justtesting/foobarfoobarfoobarfoobarfoobarfoobarfoobar' does not exist ...while executing the following command: GET NOMIME TO getweb_discard file://test/promed.html FOLLOW 3 GetWeb-1.15/t/ref.follow/ref.SOURCE.TO.getweb_discard100755 431 36 4307 6304135337 21242 0ustar rolftechnicalContent-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail X-Mailbot-Note: following link 1, following link 1 From: Original_Sender ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable X-Mailbot-Note: following link 3 Could not fetch file:./notavalidpath/justtesting/foobarfoobarfoobarfoobarfoobarfoobarfoobar An Error Occurred

An Error Occurred

404 - File `/home/rolf/dev/getweb/t/testRoot/pub/notavalidpath/justtesting/foobarfoobarfoobarfoobarfoobarfoobarfoobar' does not exist ...while executing the following command: GET SOURCE TO getweb_discard file://test/promed.html FOLLOW 3 GetWeb-1.15/t/ref.follow/ref.100755 431 36 4026 6304135277 15034 0ustar rolftechnicalContent-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail X-Mailbot-Note: following link 1, following link 1 [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable X-Mailbot-Note: following link 3 Could not fetch file:./notavalidpath/justtesting/foobarfoobarfoobarfoobarfoobarfoobarfoobar An Error Occurred ================== 404 - File `/home/rolf/dev/getweb/t/testRoot/pub/notavalidpath/justtesting/foobarfoobarfoobarfoobarfoobarfoobarfoobar' does not exist ...while executing the following command: GET file://test/promed.html FOLLOW 3 GetWeb-1.15/t/ref.get/ 40755 431 36 0 6316042222 13420 5ustar rolftechnicalGetWeb-1.15/t/ref.get/ref.NOMIME.TO.getweb_discard100755 431 36 3010 6304135162 20465 0ustar rolftechnicalContent-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html GetWeb-1.15/t/ref.get/ref.NOMIME.SOURCE100755 431 36 3044 6304135152 16204 0ustar rolftechnicalContent-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo GetWeb-1.15/t/ref.get/ref.NOMIME100755 431 36 2754 6304135141 15212 0ustar rolftechnicalContent-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html GetWeb-1.15/t/ref.get/ref.TO.getweb_discard100755 431 36 3010 6304135156 17505 0ustar rolftechnicalContent-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html GetWeb-1.15/t/ref.get/ref.SOURCE.TO.getweb_discard100755 431 36 3100 6304135167 20506 0ustar rolftechnicalContent-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo GetWeb-1.15/t/ref.get/ref.SOURCE100755 431 36 3044 6304135145 15223 0ustar rolftechnicalContent-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo GetWeb-1.15/t/ref.get/ref.100755 431 36 2754 6304135135 14310 0ustar rolftechnicalContent-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html GetWeb-1.15/t/ref.get/ref.NOMIME.SOURCE.TO.getweb_discard100755 431 36 3100 6304135173 21466 0ustar rolftechnicalContent-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo GetWeb-1.15/t/TEST100644 431 36 766 6254065610 12665 0ustar rolftechnical#!/usr/bin/perl BEGIN { unshift(@INC,"."); }; use Test::Harness qw( :DEFAULT $switches ); $switches = ""; #no opt_w @testList = ; my $first = "t/get.t"; grep {if ($_ eq $first) {$_ = $testList[0]; $testList[0] = $first}} @testList; @testList or die "no tests found: t/*.t"; runtests @testList; __END__ Synopsis: GT_UPDATE=1 perl t/TEST # set original output for future comparison # edit source code internals in a way perl t/TEST # see diffs of output since you ran with GT_UPDATE GetWeb-1.15/t/get.t100644 431 36 124 6254060606 13113 0ustar rolftechnical#!/usr/bin/perl5 use t::GetWebTest; t::GetWebTest::go("GET TEST/promed_new.html"); GetWeb-1.15/t/ref.check/ 40755 431 36 0 6316042175 13725 5ustar rolftechnicalGetWeb-1.15/t/ref.check/ref.100755 431 36 2354 6307330400 14575 0ustar rolftechnicalContent-Type: text/plain; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: rolf@usa.healthnet.org Subject: ProMED-mail Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot [IMAGE] Here we are! Also visit promed_new.html [1] Here is a binary character: \O^ Too bad we can't read news[2] yet. Here is a really long URL[3] *** References from this document *** [orig] file:./promed.html [1] file:/test/promed_new.html [2] news:comp.mail.sendmail (not implemented) [3] file://notavalidpath/justtesting/foobarfoobarfoobarfoobarfoo\ barfoobarfoobar Content-Type: text/plain; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: rolf@usa.healthnet.org Subject: ProMED-mail Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot [IMAGE] Here we are! Also visit promed_new.html [1] Here is a binary character: \O^ Too bad we can't read news[2] yet. Here is a really long URL[3] *** References from this document *** [orig] file:./promed.html [1] file:/test/promed_new.html [2] news:comp.mail.sendmail (not implemented) [3] file://notavalidpath/justtesting/foobarfoobarfoobarfoobarfoo\ barfoobarfoobar GetWeb-1.15/t/ref.bin/ 40755 431 36 0 6316042223 13412 5ustar rolftechnicalGetWeb-1.15/t/ref.bin/ref.SOURCE.TO.getweb_discard100755 431 36 1402 6313565030 20476 0ustar rolftechnicalContent-Type: multipart/mixed; boundary="------------858712607-2421-0" Mime-Version: 1.0 To: getweb_discard Subject: From: Original_Sender For help decoding this encoded binary file, send a message with the body: HELP MIME --------------858712607-2421-0 Content-Type: application/octet-stream; name="backgrd.bin" Content-Disposition: inline; filename="backgrd.bin" Content-Transfer-Encoding: base64 R0lGODdhhAMNAIAAAP///8zMzCwAAAAAhAMNAAACvIyPqcvtD6OcEtiLs968 +w+G4kiW5omm6sq27gvH8kzX9o3nekv1/g8MCgO7ovGITCqXzKbzCY1Kp6qh 9YrNNqjcrvcLDovH5LK5qE2r15Sz+w2Py+f0uh3Kzuv3977/DxgoOEiYs3eI iFW4yNjo+AgZ+ZRIWdkjiZmpucnZuWgJGsrgSVpqeoqaqiPKyqr6ChsrO1va amtJm6u7y9t7dguM6DtMXGx8PBOsnIfc7PwMjbw8nRZtfY2d7VkAADs= --------------858712607-2421-0-- GetWeb-1.15/t/ref.bin/ref.TO.getweb_discard100755 431 36 1402 6313565006 17502 0ustar rolftechnicalContent-Type: multipart/mixed; boundary="------------858712588-2417-0" Mime-Version: 1.0 To: getweb_discard Subject: From: Original_Sender For help decoding this encoded binary file, send a message with the body: HELP MIME --------------858712588-2417-0 Content-Type: application/octet-stream; name="backgrd.bin" Content-Disposition: inline; filename="backgrd.bin" Content-Transfer-Encoding: base64 R0lGODdhhAMNAIAAAP///8zMzCwAAAAAhAMNAAACvIyPqcvtD6OcEtiLs968 +w+G4kiW5omm6sq27gvH8kzX9o3nekv1/g8MCgO7ovGITCqXzKbzCY1Kp6qh 9YrNNqjcrvcLDovH5LK5qE2r15Sz+w2Py+f0uh3Kzuv3977/DxgoOEiYs3eI iFW4yNjo+AgZ+ZRIWdkjiZmpucnZuWgJGsrgSVpqeoqaqiPKyqr6ChsrO1va amtJm6u7y9t7dguM6DtMXGx8PBOsnIfc7PwMjbw8nRZtfY2d7VkAADs= --------------858712588-2417-0-- GetWeb-1.15/t/ref.bin/ref.100755 431 36 1346 6313564727 14312 0ustar rolftechnicalContent-Type: multipart/mixed; boundary="------------858712540-2409-0" Mime-Version: 1.0 To: terminal Subject: For help decoding this encoded binary file, send a message with the body: HELP MIME --------------858712540-2409-0 Content-Type: application/octet-stream; name="backgrd.bin" Content-Disposition: inline; filename="backgrd.bin" Content-Transfer-Encoding: base64 R0lGODdhhAMNAIAAAP///8zMzCwAAAAAhAMNAAACvIyPqcvtD6OcEtiLs968 +w+G4kiW5omm6sq27gvH8kzX9o3nekv1/g8MCgO7ovGITCqXzKbzCY1Kp6qh 9YrNNqjcrvcLDovH5LK5qE2r15Sz+w2Py+f0uh3Kzuv3977/DxgoOEiYs3eI iFW4yNjo+AgZ+ZRIWdkjiZmpucnZuWgJGsrgSVpqeoqaqiPKyqr6ChsrO1va amtJm6u7y9t7dguM6DtMXGx8PBOsnIfc7PwMjbw8nRZtfY2d7VkAADs= --------------858712540-2409-0-- GetWeb-1.15/t/ref.bin/ref.NOMIME.SOURCE.TO.getweb_discard100755 431 36 1431 6313565041 21465 0ustar rolftechnicalContent-Type: multipart/mixed; boundary="------------858712616-2423-0" Mime-Version: 1.0 To: getweb_discard Subject: From: Original_Sender This is a multi-part message in MIME format. --------------858712616-2423-0 Content-Type: application/octet-stream; name="backgrd.bin" Content-Disposition: inline; filename="backgrd.bin" Content-Transfer-Encoding: x-uuencode Your file has been uuencoded: begin 644 myfile M1TE&.#=AA`,-`(```/___\S,S"P`````A`,-```"O(R/JDOU_@\,"@.[HO&(3"J7S*;S"8U*IZJA M]8K--JC( MB%6XR-CH^`@9^91(6=DCB9FINHJ:JB/*RJKZ"ALK.UO: I:FM)FZN[R]M[=@N,Z#M,7&Q\/!.LG(?<[/P,C;P\G19M?8V=[5D``#L` end --------------858712616-2423-0-- GetWeb-1.15/t/ref.bin/ref.NOMIME.SOURCE100755 431 36 1375 6313564774 16222 0ustar rolftechnicalContent-Type: multipart/mixed; boundary="------------858712579-2415-0" Mime-Version: 1.0 To: terminal Subject: This is a multi-part message in MIME format. --------------858712579-2415-0 Content-Type: application/octet-stream; name="backgrd.bin" Content-Disposition: inline; filename="backgrd.bin" Content-Transfer-Encoding: x-uuencode Your file has been uuencoded: begin 644 myfile M1TE&.#=AA`,-`(```/___\S,S"P`````A`,-```"O(R/JDOU_@\,"@.[HO&(3"J7S*;S"8U*IZJA M]8K--JC( MB%6XR-CH^`@9^91(6=DCB9FINHJ:JB/*RJKZ"ALK.UO: I:FM)FZN[R]M[=@N,Z#M,7&Q\/!.LG(?<[/P,C;P\G19M?8V=[5D``#L` end --------------858712579-2415-0-- GetWeb-1.15/t/ref.bin/ref.NOMIME100755 431 36 1375 6313564747 15223 0ustar rolftechnicalContent-Type: multipart/mixed; boundary="------------858712557-2411-0" Mime-Version: 1.0 To: terminal Subject: This is a multi-part message in MIME format. --------------858712557-2411-0 Content-Type: application/octet-stream; name="backgrd.bin" Content-Disposition: inline; filename="backgrd.bin" Content-Transfer-Encoding: x-uuencode Your file has been uuencoded: begin 644 myfile M1TE&.#=AA`,-`(```/___\S,S"P`````A`,-```"O(R/JDOU_@\,"@.[HO&(3"J7S*;S"8U*IZJA M]8K--JC( MB%6XR-CH^`@9^91(6=DCB9FINHJ:JB/*RJKZ"ALK.UO: I:FM)FZN[R]M[=@N,Z#M,7&Q\/!.LG(?<[/P,C;P\G19M?8V=[5D``#L` end --------------858712557-2411-0-- GetWeb-1.15/t/ref.bin/ref.SOURCE100755 431 36 1346 6313564763 15233 0ustar rolftechnicalContent-Type: multipart/mixed; boundary="------------858712569-2413-0" Mime-Version: 1.0 To: terminal Subject: For help decoding this encoded binary file, send a message with the body: HELP MIME --------------858712569-2413-0 Content-Type: application/octet-stream; name="backgrd.bin" Content-Disposition: inline; filename="backgrd.bin" Content-Transfer-Encoding: base64 R0lGODdhhAMNAIAAAP///8zMzCwAAAAAhAMNAAACvIyPqcvtD6OcEtiLs968 +w+G4kiW5omm6sq27gvH8kzX9o3nekv1/g8MCgO7ovGITCqXzKbzCY1Kp6qh 9YrNNqjcrvcLDovH5LK5qE2r15Sz+w2Py+f0uh3Kzuv3977/DxgoOEiYs3eI iFW4yNjo+AgZ+ZRIWdkjiZmpucnZuWgJGsrgSVpqeoqaqiPKyqr6ChsrO1va amtJm6u7y9t7dguM6DtMXGx8PBOsnIfc7PwMjbw8nRZtfY2d7VkAADs= --------------858712569-2413-0-- GetWeb-1.15/t/ref.bin/ref.NOMIME.TO.getweb_discard100755 431 36 1431 6313565017 20471 0ustar rolftechnicalContent-Type: multipart/mixed; boundary="------------858712598-2419-0" Mime-Version: 1.0 To: getweb_discard Subject: From: Original_Sender This is a multi-part message in MIME format. --------------858712598-2419-0 Content-Type: application/octet-stream; name="backgrd.bin" Content-Disposition: inline; filename="backgrd.bin" Content-Transfer-Encoding: x-uuencode Your file has been uuencoded: begin 644 myfile M1TE&.#=AA`,-`(```/___\S,S"P`````A`,-```"O(R/JDOU_@\,"@.[HO&(3"J7S*;S"8U*IZJA M]8K--JC( MB%6XR-CH^`@9^91(6=DCB9FINHJ:JB/*RJKZ"ALK.UO: I:FM)FZN[R]M[=@N,Z#M,7&Q\/!.LG(?<[/P,C;P\G19M?8V=[5D``#L` end --------------858712598-2419-0-- GetWeb-1.15/t/ref.mult/ 40755 431 36 0 6316042224 13624 5ustar rolftechnicalGetWeb-1.15/t/ref.mult/ref.100755 431 36 7006 6307331312 14503 0ustar rolftechnicalContent-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/plain; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail [IMAGE] Here we are! Also visit promed_new.html [1] Here is a binary character: \O^ Too bad we can't read news[2] yet. Here is a really long URL[3] *** References from this document *** [orig] file:./promed.html [1] file:/test/promed_new.html [2] news:comp.mail.sendmail (not implemented) [3] file://notavalidpath/justtesting/foobarfoobarfoobarfoobarfoo\ barfoobarfoobar GetWeb-1.15/t/ref.mult/ref.NOMIME.SOURCE100755 431 36 7317 6307331356 16424 0ustar rolftechnicalContent-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: text/html; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail ProMED-mail

Here we are! Also visit promed_new.html

Here is a binary character: Ô

Too bad we can't read news yet.

Here is a really long URL GetWeb-1.15/t/ref.mult/ref.TO.getweb_discard100755 431 36 7132 6307331373 17722 0ustar rolftechnicalContent-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/plain; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender [IMAGE] Here we are! Also visit promed_new.html [1] Here is a binary character: \O^ Too bad we can't read news[2] yet. Here is a really long URL[3] *** References from this document *** [orig] file:./promed.html [1] file:/test/promed_new.html [2] news:comp.mail.sendmail (not implemented) [3] file://notavalidpath/justtesting/foobarfoobarfoobarfoobarfoo\ barfoobarfoobar GetWeb-1.15/t/ref.mult/ref.NOMIME.SOURCE.TO.getweb_discard100755 431 36 7443 6307331435 21710 0ustar rolftechnicalContent-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: text/html; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender ProMED-mail

Here we are! Also visit promed_new.html

Here is a binary character: Ô

Too bad we can't read news yet.

Here is a really long URL GetWeb-1.15/t/ref.mult/ref.NOMIME100755 431 36 7006 6307331330 15410 0ustar rolftechnicalContent-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/plain; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail [IMAGE] Here we are! Also visit promed_new.html [1] Here is a binary character: \O^ Too bad we can't read news[2] yet. Here is a really long URL[3] *** References from this document *** [orig] file:./promed.html [1] file:/test/promed_new.html [2] news:comp.mail.sendmail (not implemented) [3] file://notavalidpath/justtesting/foobarfoobarfoobarfoobarfoo\ barfoobarfoobar GetWeb-1.15/t/ref.mult/ref.SOURCE100755 431 36 7317 6307331343 15435 0ustar rolftechnicalContent-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: text/html; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail ProMED-mail

Here we are! Also visit promed_new.html

Here is a binary character: Ô

Too bad we can't read news yet.

Here is a really long URL GetWeb-1.15/t/ref.mult/ref.NOMIME.TO.getweb_discard100755 431 36 7132 6307331407 20703 0ustar rolftechnicalContent-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/plain; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender [IMAGE] Here we are! Also visit promed_new.html [1] Here is a binary character: \O^ Too bad we can't read news[2] yet. Here is a really long URL[3] *** References from this document *** [orig] file:./promed.html [1] file:/test/promed_new.html [2] news:comp.mail.sendmail (not implemented) [3] file://notavalidpath/justtesting/foobarfoobarfoobarfoobarfoo\ barfoobarfoobar GetWeb-1.15/t/ref.mult/ref.SOURCE.TO.getweb_discard100755 431 36 7443 6307331422 20721 0ustar rolftechnicalContent-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: text/html; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender ProMED-mail

Here we are! Also visit promed_new.html

Here is a binary character: Ô

Too bad we can't read news yet.

Here is a really long URL GetWeb-1.15/t/ref.deep/ 40755 431 36 0 6316042224 13560 5ustar rolftechnicalGetWeb-1.15/t/ref.deep/ref.SOURCE.TO.getweb_discard100644 431 36 2171 6307363467 20661 0ustar rolftechnicalContent-Type: text/html; name="promed_old.html" Content-Disposition: inline; filename="promed_old.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender ProMED-mail

The address of this page has changed, please update your bookmarks.

promed.html

Content-Type: text/html; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender ProMED-mail

Here we are! Also visit promed_new.html

Here is a binary character: Ô

Too bad we can't read news yet.

Here is a really long URL GetWeb-1.15/t/ref.deep/ref.100644 431 36 1663 6307363407 14451 0ustar rolftechnicalContent-Type: text/plain; name="promed_old.html" Content-Disposition: inline; filename="promed_old.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail [IMAGE] The address of this page has changed, please update your bookmarks. promed.html [1] *** References from this document *** [orig] file:./test/promed_old.html [1] file:/test/promed.html Content-Type: text/plain; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail [IMAGE] Here we are! Also visit promed_new.html [1] Here is a binary character: \O^ Too bad we can't read news[2] yet. Here is a really long URL[3] *** References from this document *** [orig] file:./promed.html [1] file:/test/promed_new.html [2] news:comp.mail.sendmail (not implemented) [3] file://notavalidpath/justtesting/foobarfoobarfoobarfoobarfoo\ barfoobarfoobar GetWeb-1.15/t/ref.deep/ref.NOMIME100644 431 36 1663 6307363414 15354 0ustar rolftechnicalContent-Type: text/plain; name="promed_old.html" Content-Disposition: inline; filename="promed_old.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail [IMAGE] The address of this page has changed, please update your bookmarks. promed.html [1] *** References from this document *** [orig] file:./test/promed_old.html [1] file:/test/promed.html Content-Type: text/plain; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail [IMAGE] Here we are! Also visit promed_new.html [1] Here is a binary character: \O^ Too bad we can't read news[2] yet. Here is a really long URL[3] *** References from this document *** [orig] file:./promed.html [1] file:/test/promed_new.html [2] news:comp.mail.sendmail (not implemented) [3] file://notavalidpath/justtesting/foobarfoobarfoobarfoobarfoo\ barfoobarfoobar GetWeb-1.15/t/ref.deep/ref.SOURCE100644 431 36 2101 6307363426 15357 0ustar rolftechnicalContent-Type: text/html; name="promed_old.html" Content-Disposition: inline; filename="promed_old.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail ProMED-mail

The address of this page has changed, please update your bookmarks.

promed.html

Content-Type: text/html; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail ProMED-mail

Here we are! Also visit promed_new.html

Here is a binary character: Ô

Too bad we can't read news yet.

Here is a really long URL GetWeb-1.15/t/ref.deep/ref.NOMIME.SOURCE100644 431 36 2101 6307363436 16343 0ustar rolftechnicalContent-Type: text/html; name="promed_old.html" Content-Disposition: inline; filename="promed_old.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail ProMED-mail

The address of this page has changed, please update your bookmarks.

promed.html

Content-Type: text/html; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail ProMED-mail

Here we are! Also visit promed_new.html

Here is a binary character: Ô

Too bad we can't read news yet.

Here is a really long URL GetWeb-1.15/t/ref.deep/ref.TO.getweb_discard100644 431 36 1753 6307363447 17665 0ustar rolftechnicalContent-Type: text/plain; name="promed_old.html" Content-Disposition: inline; filename="promed_old.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender [IMAGE] The address of this page has changed, please update your bookmarks. promed.html [1] *** References from this document *** [orig] file:./test/promed_old.html [1] file:/test/promed.html Content-Type: text/plain; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender [IMAGE] Here we are! Also visit promed_new.html [1] Here is a binary character: \O^ Too bad we can't read news[2] yet. Here is a really long URL[3] *** References from this document *** [orig] file:./promed.html [1] file:/test/promed_new.html [2] news:comp.mail.sendmail (not implemented) [3] file://notavalidpath/justtesting/foobarfoobarfoobarfoobarfoo\ barfoobarfoobar GetWeb-1.15/t/ref.deep/ref.NOMIME.SOURCE.TO.getweb_discard100644 431 36 2171 6307363475 21643 0ustar rolftechnicalContent-Type: text/html; name="promed_old.html" Content-Disposition: inline; filename="promed_old.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender ProMED-mail

The address of this page has changed, please update your bookmarks.

promed.html

Content-Type: text/html; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender ProMED-mail

Here we are! Also visit promed_new.html

Here is a binary character: Ô

Too bad we can't read news yet.

Here is a really long URL GetWeb-1.15/t/ref.deep/ref.NOMIME.TO.getweb_discard100644 431 36 1753 6307363461 20644 0ustar rolftechnicalContent-Type: text/plain; name="promed_old.html" Content-Disposition: inline; filename="promed_old.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender [IMAGE] The address of this page has changed, please update your bookmarks. promed.html [1] *** References from this document *** [orig] file:./test/promed_old.html [1] file:/test/promed.html Content-Type: text/plain; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender [IMAGE] Here we are! Also visit promed_new.html [1] Here is a binary character: \O^ Too bad we can't read news[2] yet. Here is a really long URL[3] *** References from this document *** [orig] file:./promed.html [1] file:/test/promed_new.html [2] news:comp.mail.sendmail (not implemented) [3] file://notavalidpath/justtesting/foobarfoobarfoobarfoobarfoo\ barfoobarfoobar GetWeb-1.15/t/alias.t100644 431 36 163 6315773364 13442 0ustar rolftechnical#!/usr/bin/perl5 use t::GetWebTest; t::GetWebTest::go("SEARCH NONEXISTENT_ALIAS 10 EBOLA ZAIRE true","ignore",1); GetWeb-1.15/t/zform.t100644 431 36 533 6300627232 13471 0ustar rolftechnical#!/usr/bin/perl5 # must run after form.t during update cycle # avoid running simultaneous versions my $PERL = $^X; my $orig = 't/ref.form/ref.'; my $new = 't/zform.rfc.tmp'; system("(echo From: the_user; cat $orig) | $PERL -pe 's!^(\\[ \\])( *?start search)!\\[X\\]\$2!'g > $new"); use t::GetWebTest; t::GetWebTest::go("","",1,$new,'mail'); GetWeb-1.15/t/cgi_test.in100644 431 36 123 6255263566 14312 0ustar rolftechnicalBody=GET file://test/promed_old.html GET NOMIME SOURCE file://test/promed_old.html GetWeb-1.15/t/search.t100644 431 36 160 6315773323 13606 0ustar rolftechnical#!/usr/bin/perl5 use t::GetWebTest; t::GetWebTest::go("SEARCH GARBAGE_ENGINE 10 EBOLA ZAIRE true","ignore",1); GetWeb-1.15/t/GT.pm100644 431 36 4657 6262245421 13055 0ustar rolftechnical# generic tester package t::GT; use strict; my $gUpdate = 0; sub new { my $type = shift; if ($ENV{GT_UPDATE}) { $gUpdate = 1; } my $self = { # NUM_TEST = $numTest TEST_COUNT => 0, IGNORE => [ ] }; bless($self,$type); } my $gOK = 0; sub ignore { my $self = shift; my $paIgnore = $$self{IGNORE}; push(@$paIgnore,@_); } sub ok { $gOK++; print STDOUT "ok $gOK\n\n"; } sub count { my $self = shift; $$self{TEST_COUNT} = shift; } sub END { my $tmpDir = "t/tmp.$$"; rmdir($tmpDir) or warn "could not remove $tmpDir"; } sub run { my $self = shift; my $count = $$self{TEST_COUNT}; my $tmpDir = "t/tmp.$$"; mkdir($tmpDir,0777) or die "could not create $tmpDir"; print STDOUT "1..", $count+1, "\n"; $self -> ok; } sub checkSys { my $self = shift; my $id = shift; my $cmdLine = shift; $self -> checkFH($id); open(IN,"$cmdLine |"); print (); close(IN); my $retVal = $? >> 8; die "$cmdLine returned $retVal" if $retVal; $self -> done(); } sub checkFH { my $self = shift; my $id = shift; $$self{ID} = $id; my $tmpDir = "t/tmp.$$"; (-d $tmpDir) or die "no such dir: $tmpDir"; my $outFile = "$tmpDir/$id"; open(OUT,">$outFile") or die "could not open $outFile"; select(OUT); } sub done { my $self = shift; my $id = $$self{ID}; defined $id or die "no id defined"; close(OUT); select(STDOUT); my $tmpDir = "t/tmp.$$"; (-d $tmpDir) or die "no such dir: $tmpDir"; my $refDir = $0; $refDir =~ s/\.t$//; $refDir =~ s/.+\///; $refDir = "t/ref." . $refDir; if (! -d $refDir) { $gUpdate or die "no such dir: $refDir"; mkdir($refDir,0777) or die "could not make $refDir: $!"; } my $outFile = "$tmpDir/$id"; my $refFile = "$refDir/$id"; if ($gUpdate) { system("cp $outFile $refFile"); } else { my $paIgnore = $$self{IGNORE}; my $diff = "diff"; if (@$paIgnore) { my $pattern = "'\\(" . join('\)\|\(',@$paIgnore) . "\\)'"; $diff .= " -I $pattern --ignore-blank-lines"; } $diff = "$diff $outFile $refFile"; # print STDERR $diff; my $retVal = system($diff) >> 8; $retVal and die "diff returned $retVal, stopped"; #open(DIFF,"$diff |") or die "could not open $diff"; #my @val = ; #@val and die "diff found differences since last ref version"; } $self -> ok; unlink($outFile); } 1; GetWeb-1.15/t/ref.mail/ 40755 431 36 0 6316042204 13563 5ustar rolftechnicalGetWeb-1.15/t/ref.mail/ref.100755 431 36 4403 6304135407 14446 0ustar rolftechnicalContent-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: rolf@usa.healthnet.org Subject: ProMED-mail Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/html; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: rolf@usa.healthnet.org Subject: ProMED-mail Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot ProMED-mail

Here we are! Also visit promed_new.html

Here is a binary character: Ô

Too bad we can't read news yet.

Here is a really long URL GetWeb-1.15/t/ref.split/ 40755 431 36 0 6316042222 13774 5ustar rolftechnicalGetWeb-1.15/t/ref.split/ref.NOMIME.TO.getweb_discard100755 431 36 5770 6315775204 21071 0ustar rolftechnicalContent-Type: message/partial; number=1; total=4; id="aaa.7007.859306665@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail (1/4) Message-Id: <1.aaa.7007.859306665@neptune.healthnet.org> Content-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender Message-Id: [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=2; total=4; id="aaa.7007.859306665@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail (2/4) Message-Id: <2.aaa.7007.859306665@neptune.healthnet.org> References: <1.aaa.7007.859306665@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=3; total=4; id="aaa.7007.859306665@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail (3/4) Message-Id: <3.aaa.7007.859306665@neptune.healthnet.org> References: <1.aaa.7007.859306665@neptune.healthnet.org> <2.aaa.7007.859306665@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=4; total=4; id="aaa.7007.859306665@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail (4/4) Message-Id: <4.aaa.7007.859306665@neptune.healthnet.org> References: <1.aaa.7007.859306665@neptune.healthnet.org> <2.aaa.7007.859306665@neptune.healthnet.org> <3.aaa.7007.859306665@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html GetWeb-1.15/t/ref.split/ref.NOMIME100755 431 36 5704 6315775126 15603 0ustar rolftechnicalContent-Type: message/partial; number=1; total=4; id="aaa.6981.859306619@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: terminal Subject: ProMED-mail (1/4) Message-Id: <1.aaa.6981.859306619@neptune.healthnet.org> Content-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail Message-Id: [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=2; total=4; id="aaa.6981.859306619@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: terminal Subject: ProMED-mail (2/4) Message-Id: <2.aaa.6981.859306619@neptune.healthnet.org> References: <1.aaa.6981.859306619@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=3; total=4; id="aaa.6981.859306619@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: terminal Subject: ProMED-mail (3/4) Message-Id: <3.aaa.6981.859306619@neptune.healthnet.org> References: <1.aaa.6981.859306619@neptune.healthnet.org> <2.aaa.6981.859306619@neptune.healthnet.org> foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=4; total=4; id="aaa.6981.859306619@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: terminal Subject: ProMED-mail (4/4) Message-Id: <4.aaa.6981.859306619@neptune.healthnet.org> References: <1.aaa.6981.859306619@neptune.healthnet.org> <2.aaa.6981.859306619@neptune.healthnet.org> <3.aaa.6981.859306619@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html GetWeb-1.15/t/ref.split/ref.SOURCE.TO.getweb_discard100755 431 36 6060 6315775220 21074 0ustar rolftechnicalContent-Type: message/partial; number=1; total=4; id="aaa.7013.859306677@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail (1/4) Message-Id: <1.aaa.7013.859306677@neptune.healthnet.org> Content-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender Message-Id: ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=2; total=4; id="aaa.7013.859306677@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail (2/4) Message-Id: <2.aaa.7013.859306677@neptune.healthnet.org> References: <1.aaa.7013.859306677@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=3; total=4; id="aaa.7013.859306677@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail (3/4) Message-Id: <3.aaa.7013.859306677@neptune.healthnet.org> References: <1.aaa.7013.859306677@neptune.healthnet.org> <2.aaa.7013.859306677@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=4; total=4; id="aaa.7013.859306677@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail (4/4) Message-Id: <4.aaa.7013.859306677@neptune.healthnet.org> References: <1.aaa.7013.859306677@neptune.healthnet.org> <2.aaa.7013.859306677@neptune.healthnet.org> <3.aaa.7013.859306677@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo GetWeb-1.15/t/ref.split/ref.SOURCE100755 431 36 5774 6315775140 15622 0ustar rolftechnicalContent-Type: message/partial; number=1; total=4; id="aaa.6989.859306629@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: terminal Subject: ProMED-mail (1/4) Message-Id: <1.aaa.6989.859306629@neptune.healthnet.org> Content-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail Message-Id: ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=2; total=4; id="aaa.6989.859306629@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: terminal Subject: ProMED-mail (2/4) Message-Id: <2.aaa.6989.859306629@neptune.healthnet.org> References: <1.aaa.6989.859306629@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=3; total=4; id="aaa.6989.859306629@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: terminal Subject: ProMED-mail (3/4) Message-Id: <3.aaa.6989.859306629@neptune.healthnet.org> References: <1.aaa.6989.859306629@neptune.healthnet.org> <2.aaa.6989.859306629@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=4; total=4; id="aaa.6989.859306629@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: terminal Subject: ProMED-mail (4/4) Message-Id: <4.aaa.6989.859306629@neptune.healthnet.org> References: <1.aaa.6989.859306629@neptune.healthnet.org> <2.aaa.6989.859306629@neptune.healthnet.org> <3.aaa.6989.859306629@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo GetWeb-1.15/t/ref.split/ref.NOMIME.SOURCE.TO.getweb_discard100755 431 36 6060 6315775237 22067 0ustar rolftechnicalContent-Type: message/partial; number=1; total=4; id="aaa.7019.859306692@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail (1/4) Message-Id: <1.aaa.7019.859306692@neptune.healthnet.org> Content-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender Message-Id: ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=2; total=4; id="aaa.7019.859306692@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail (2/4) Message-Id: <2.aaa.7019.859306692@neptune.healthnet.org> References: <1.aaa.7019.859306692@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=3; total=4; id="aaa.7019.859306692@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail (3/4) Message-Id: <3.aaa.7019.859306692@neptune.healthnet.org> References: <1.aaa.7019.859306692@neptune.healthnet.org> <2.aaa.7019.859306692@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=4; total=4; id="aaa.7019.859306692@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail (4/4) Message-Id: <4.aaa.7019.859306692@neptune.healthnet.org> References: <1.aaa.7019.859306692@neptune.healthnet.org> <2.aaa.7019.859306692@neptune.healthnet.org> <3.aaa.7019.859306692@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo GetWeb-1.15/t/ref.split/ref.100755 431 36 5704 6315775110 14667 0ustar rolftechnicalContent-Type: message/partial; number=1; total=4; id="aaa.6975.859306604@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: terminal Subject: ProMED-mail (1/4) Message-Id: <1.aaa.6975.859306604@neptune.healthnet.org> Content-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail Message-Id: [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=2; total=4; id="aaa.6975.859306604@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: terminal Subject: ProMED-mail (2/4) Message-Id: <2.aaa.6975.859306604@neptune.healthnet.org> References: <1.aaa.6975.859306604@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=3; total=4; id="aaa.6975.859306604@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: terminal Subject: ProMED-mail (3/4) Message-Id: <3.aaa.6975.859306604@neptune.healthnet.org> References: <1.aaa.6975.859306604@neptune.healthnet.org> <2.aaa.6975.859306604@neptune.healthnet.org> foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=4; total=4; id="aaa.6975.859306604@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: terminal Subject: ProMED-mail (4/4) Message-Id: <4.aaa.6975.859306604@neptune.healthnet.org> References: <1.aaa.6975.859306604@neptune.healthnet.org> <2.aaa.6975.859306604@neptune.healthnet.org> <3.aaa.6975.859306604@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html GetWeb-1.15/t/ref.split/ref.NOMIME.SOURCE100755 431 36 5774 6315775152 16610 0ustar rolftechnicalContent-Type: message/partial; number=1; total=4; id="aaa.6995.859306639@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: terminal Subject: ProMED-mail (1/4) Message-Id: <1.aaa.6995.859306639@neptune.healthnet.org> Content-Type: text/html; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail Message-Id: ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=2; total=4; id="aaa.6995.859306639@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: terminal Subject: ProMED-mail (2/4) Message-Id: <2.aaa.6995.859306639@neptune.healthnet.org> References: <1.aaa.6995.859306639@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=3; total=4; id="aaa.6995.859306639@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: terminal Subject: ProMED-mail (3/4) Message-Id: <3.aaa.6995.859306639@neptune.healthnet.org> References: <1.aaa.6995.859306639@neptune.healthnet.org> <2.aaa.6995.859306639@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=4; total=4; id="aaa.6995.859306639@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: terminal Subject: ProMED-mail (4/4) Message-Id: <4.aaa.6995.859306639@neptune.healthnet.org> References: <1.aaa.6995.859306639@neptune.healthnet.org> <2.aaa.6995.859306639@neptune.healthnet.org> <3.aaa.6995.859306639@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo GetWeb-1.15/t/ref.split/ref.TO.getweb_discard100755 431 36 5770 6315775167 20116 0ustar rolftechnicalContent-Type: message/partial; number=1; total=4; id="aaa.7001.859306652@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail (1/4) Message-Id: <1.aaa.7001.859306652@neptune.healthnet.org> Content-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail From: Original_Sender Message-Id: [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=2; total=4; id="aaa.7001.859306652@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail (2/4) Message-Id: <2.aaa.7001.859306652@neptune.healthnet.org> References: <1.aaa.7001.859306652@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=3; total=4; id="aaa.7001.859306652@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail (3/4) Message-Id: <3.aaa.7001.859306652@neptune.healthnet.org> References: <1.aaa.7001.859306652@neptune.healthnet.org> <2.aaa.7001.859306652@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo Content-Type: message/partial; number=4; total=4; id="aaa.7001.859306652@neptune.healthnet.org" Content-Disposition: inline Mime-Version: 1.0 To: getweb_discard Subject: ProMED-mail (4/4) Message-Id: <4.aaa.7001.859306652@neptune.healthnet.org> References: <1.aaa.7001.859306652@neptune.healthnet.org> <2.aaa.7001.859306652@neptune.healthnet.org> <3.aaa.7001.859306652@neptune.healthnet.org> foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html GetWeb-1.15/t/ref.quota/ 40755 431 36 0 6316042205 13773 5ustar rolftechnicalGetWeb-1.15/t/ref.quota/ref.100755 431 36 4275 6307331550 14664 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: getweb-miser-test@usa.healthnet.org Subject: Resource Unavailable X-Mailbot-Note: ignoring reply-to field Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot Could not fetch file:./test/promed_new.html An Error Occurred ================== 500 - file size exceeded 1150 bytes ...while executing the following command: GET file://test/promed_new.html Content-Type: text/plain; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: getweb-miser-test@usa.healthnet.org Subject: ProMED-mail Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot [IMAGE] Here we are! Also visit promed_new.html [1] Here is a binary character: \O^ Too bad we can't read news[2] yet. Here is a really long URL[3] *** References from this document *** [orig] file:./promed.html [1] file:/test/promed_new.html [2] news:comp.mail.sendmail (not implemented) [3] file://notavalidpath/justtesting/foobarfoobarfoobarfoobarfoo\ barfoobarfoobar Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: getweb-miser-test@usa.healthnet.org Subject: Quota Exhausted Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot Send a message with the body: HELP QUOTA for more information. Your request would have exceeded quota: message quota is 2 for getweb-miser-test@usa.healthnet.org, already at 2, refused to allow 1 more. ____original message follows____ Received: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id LAA07026 for ; Mon, 2 Dec 1996 11:42:03 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id QAA00777; Mon, 2 Dec 1996 16:42:25 GMT Date: Mon, 2 Dec 1996 16:42:25 GMT Message-Id: <199612021642.QAA00777@neptune.healthnet.org> From: getweb-miser-test@usa.healthnet.org To: getweb@usa.healthnet.org Subject: mail test Reply-To: getweb-miser-test@usa.healthnet.org GET file://test/promed_new.html GET file://test/promed.html GET file://test/promed_old.html GET TO getweb_test_other NOMIME SOURCE file://test/promed.html GetWeb-1.15/t/wrap.t100644 431 36 237 6254102343 13305 0ustar rolftechnical#!/usr/bin/perl5 use t::GetWebTest; t::GetWebTest::go("GET GET GET TEST/promed_\\ new.html", "", 1); GetWeb-1.15/t/ref.zexcl2/ 40755 431 36 0 6316042207 14053 5ustar rolftechnicalGetWeb-1.15/t/ref.zexcl2/ref.100644 431 36 25265 6310036337 14760 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: the_user CC: getweb-admin@usa.healthnet.org Subject: Internal Error Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot An unexpected internal error occurred: SYNTAX_ERROR: key 'buz' selected more than once: 'exclusive 2 eat it' and 'have cake' Please select only one 'buz' attribute. ____original message follows____ From: the_user Content-Type: text/plain; name="form.html" Content-Disposition: inline; filename="form.html" Mime-Version: 1.0 To: terminal Subject: SHAREWARE.COM: Power Search Form [1][IMAGE]Exclusive. Netscape Navigator survival guide -- free![2] CNET Online[3] [IMAGE MAP][4][5] Menu \ NEW ARRIVALS[6] \ MOST POPULAR[7] \ SELECTIONS[8] \ SEARCH[9] \ \ Quick[10] \ \ Simple[11] \ \ Power[12] \ HELP[13] \ ABOUT[14] \ SUBSCRIBE[15] CNET services \ CNET.COM[16] \ NEWS.COM[17] \ GAMECENTER.COM[18] \ SEARCH.COM[19] \ DOWNLOAD.COM[20] \ ACTIVEX.COM[21] \ MEDIADOME.COM[22] CNET Marketplace \ Sponsors[23] \ CNET store[24] BUYDIRECT.COM[25] SHAREWARE.COM: power search [IMAGE] [IMAGE] [IMAGE] Power Search by platform The platform of files to search: [X] MS-Windows(all) OR [ ] MS-Windows3.x OR [ ] Long Option Which Almost Takes Up A Whole Line OR [ ] Source-Code OR [ ] All-Categories [____________________] [____________________] [____________________] [____________________] [_ This needs to expand_] [_ and fill out______] [_ three rows! ______] Search the file's description for: [_default____________] and for: [____________________] but not for: [____________________] Check to match case in the above: [ ] Check to search in filenames too: [X] And matches directory/filename: [____________________] Show only files created after: [ ] Jan OR [X] Oct OR [ ] Nov OR [ ] Dec [X] 1 OR [ ] 6 OR [ ] 11 OR [ ] 16 OR [ ] 21 OR [ ] 26 [X] 1960 OR [ ] 1970 OR [ ] 1980 OR [ ] 1985 OR [ ] 1990 OR [ ] 1991 OR [ ] 1992 OR [ ] 1993 OR [ ] 1994 OR [ ] 1995 OR [ ] 1996 OR [ ] 1997 Limit the number of files listed to: [ ] 10 OR [X] 25 OR [ ] 35 OR [ ] 50 Sort files: [X] by date - new files first OR [ ] by directory/path [ ] start search: check preceding box, forward entire document to GetWeb Power Search by archive The archives to search inside: (To select more than one archive hold the Control key.) Blue: ([ ]) Green: ([X]) Blue: ([ ]) Green: ([X]) [ ] 3com-dos AND/OR [ ] 3com-mac AND/OR [ ] 3com-mswin AND/OR [ ] accolade-dos AND/OR [ ] accolade-win95 AND/OR [ ] adobe-systems-any AND/OR [ ] adobe-systems-mac AND/OR [ ] adobe-systems-mswin AND/OR [ ] alt.src AND/OR [ ] ambrosia-mac AND/OR [ ] aminet AND/OR [ ] wordplace-win AND/OR [ ] wpine-mac AND/OR [ ] wpine-win31 AND/OR [ ] wpine-win95 AND/OR [ ] zipexplorer-mswin95 Search the file's description for: [____________________] and for: [____________________] but not for: [____________________] Check to match case in the above: [ ] Check to search in filenames too: [X] And matches directory/filename: [____________________] Show only files created after: [X] Jan OR [ ] Feb OR [ ] Mar OR [ ] Apr OR [ ] May OR [ ] Jun OR [ ] Jul OR [ ] Aug OR [ ] Sep OR [ ] Oct OR [ ] Nov OR [ ] Dec [ ] 1 AND/OR [X] 6 AND/OR [X] 11 AND/OR [ ] Long Option Which Almost Takes Up A Whole Line AND/OR [ ] 21 AND/OR [ ] 26 [X] 1960 OR [ ] 1970 OR [ ] 1980 OR [ ] 1985 OR [ ] 1990 OR [ ] 1996 OR [ ] 1997 Limit the number of files listed to: [ ] 10 OR [X] 25 OR [ ] 35 OR [ ] 50 Sort files: [X] by date - new files first OR [ ] by directory/path [ ] start search: check preceding box, forward entire document to GetWeb [____________________] [ ] start search: check preceding box, forward entire document to GetWeb [____________________] [ ] failed search 1: check preceding box, forward entire document to GetWeb ([X])exclusive 1 have cake ([ ])exclusive 1 eat it [ ] exclusive 1: check preceding box, forward entire document to GetWeb [X] exclusive 2 have cake OR [X] exclusive 2 eat it [X] exclusive 2: check preceding box, forward entire document to GetWeb OTHER SEARCHES quick search[26] designed for minimum fuss simple search[27] an easy way to search for software \ Back to the top[28] Check out our latest sites \ Check out \ our latest \ sites: Go to BUYDIRECT.COM[29] \ Click here[30] to get \ fully-featured, fully supported \ software direct from the publisher. Go to DOWNLOAD.COM[31] \ Click here[32] to visit \ DOWNLOAD.COM, the \ Internet's Software Source. CNET disclaims any responsibility for software obtained through this site. Click here[33] for more legal stuff. Copyright[34] \co 1995-97 CNET, Inc. All rights reserved. *** Form section (ignore) ***

*** References from this document *** [orig] http://www.zxvba_test_ignore.com/ [1] http://www.zxvba_test_ignore.com/ [2] http://www.zxvba_test_ignore.com/cgi-bin/redirect.cgi?locati\ on=http://www.download.com/PC/Ed/Index/0,43,0-g,00.html%3fsw.nav\ survive%23%23CLink%23DEF%23CNET%23Navsurvive%23%23 [3] http://www.zxvba_test_ignore.com/Maps/logo.map [4] http://www.cnet.com/ [5] http://www.zxvba_test_ignore.com/SW/FD/Home [6] http://www.zxvba_test_ignore.com/code/engine/New [7] http://www.zxvba_test_ignore.com/SW/Search/Popular/ [8] http://www.zxvba_test_ignore.com/SW/Selections/Index/ [9] http://www.zxvba_test_ignore.com/SW/Search/Index/ [10] http://www.zxvba_test_ignore.com/SW/Search/Quick/ [11] http://www.zxvba_test_ignore.com/SW/Search/Simple/ [12] http://www.zxvba_test_ignore.com/code/engine/Power [13] http://www.zxvba_test_ignore.com/SW/Help/Index/ [14] http://www.zxvba_test_ignore.com/SW/About/Index/ [15] http://www.zxvba_test_ignore.com/SW/Subscribe/ [16] http://www.cnet.com/?shareware.navbar [17] http://www.news.com/?shareware.navbar [18] http://www.gamecenter.com/?shareware.navbar [19] http://www.search.com/?shareware.navbar [20] http://www.download.com/?shareware.navbar [21] http://www.activex.com/?shareware.navbar [22] http://www.mediadome.com/?shareware.navbar [23] http://www.zxvba_test_ignore.com/SW/About/Advert/ [24] http://www.store.cnet.com/index5.htm [25] http://www.buydirect.com/?shareware.navbar [26] http://www.shareware.com/SW/Search/Quick/ [27] http://www.shareware.com/SW/Search/Simple/ [28] http://www.zxvba_test_ignore.com/#top [29] http://www.buydirect.com/?sw.footer [30] http://www.buydirect.com/?sw.footer [31] http://www.download.com/?sw.footer [32] http://www.download.com/?sw.footer [33] http://www.zxvba_test_ignore.com/SW/About/Copyright/0,61,1,\ 00.html [34] http://www.zxvba_test_ignore.com/SW/About/Copyright/ GetWeb-1.15/t/deep.t100644 431 36 125 6307363351 13254 0ustar rolftechnical#!/usr/bin/perl5 use t::GetWebTest; t::GetWebTest::go("DEEP TEST/promed_old.html"); GetWeb-1.15/t/testRoot/ 40755 431 36 0 6316042207 13714 5ustar rolftechnicalGetWeb-1.15/t/testRoot/config/ 40755 431 36 0 6316042207 15161 5ustar rolftechnicalGetWeb-1.15/t/testRoot/config/mailbot.config100755 431 36 5145 6316026130 20101 0ustar rolftechnical[address] # alias for bounces bounce=owner-getweb@usa.healthnet.org # alias for internal errors admin=getweb-admin@usa.healthnet.org # map domains, hosts, or addresses to user groups [map.group] usa.healthnet.org=unlimited healthnet.org=privileged getweb-miser-test@usa.healthnet.org=miser [load] # for spool mode only: sleep.spool=30 sleep.message=60 # for all modes: # kill process after one hour, just in case of infinite loop timeout=3600 # allow no outgoing messages of size > 100k maxsize=100000 [spool] # command to move incoming mail from $MAIL to $localSpool #get=/bin/echo 's * $localSpool' | Mail -n # this does not lock, but this is only a test, so this is OK: get=/bin/mv $MAIL $localSpool # specify "freebie" hosts and schemes which will not count against quota [quota] http://www.uth.tmc.edu=0 http://www.healthnet.org=0 ftp://www.healthnet.org=0 http://www.msh.org=0 file=0 http://www.zxvba_test_ignore.com=0 # probably do not need to edit anything below this line [smtp] # only split if message is 2*split_size # host=smtp split_multiplier=2 # since we are only testing... never_send=1 split_size=20000 [save] incoming=0 outgoing=0 exception=0 [profile] allow_redirect=1 quota.message=14 quota.byte=message*10000 content.deny.image=1 #multiplier.quota.message=0 #multiplier.quota.byte=0 [profile.miser] allow_redirect=0 quota.message=2 refuse_check=1 [profile.privileged] quota.message=56 [profile.unlimited] quota.message=560 [service.getweb] help=.index [service.info] help=.info [service.apstract] help=.apstract [envelope.] cc=admin subject=Internal Error quota_multiplier=0 desc=An unexpected internal error occurred: [envelope.access_denied] cc=admin quota_multiplier=0 subject=Access Denied desc=An attempted operation was not allowed: [envelope.quota] subject=Weekly Quota Exhausted quota_multiplier=0 desc=< ProMED-mail X-Mailbot-Note: following link 1, following link 1 [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html GetWeb-1.15/t/quotaTestRoot/ 40755 431 36 0 6316042210 14720 5ustar rolftechnicalGetWeb-1.15/t/quotaTestRoot/config/ 40755 431 36 0 6316042210 16165 5ustar rolftechnicalGetWeb-1.15/t/quotaTestRoot/config/mailbot.config100755 431 36 2254 6271734453 21127 0ustar rolftechnical[address] bounce=owner-getweb@usa.healthnet.org admin=getweb-admin@usa.healthnet.org [map.group] usa.healthnet.org=unlimited healthnet.org=privileged getweb-miser-test@usa.healthnet.org=miser [load] sleep.spool=30 sleep.message=60 maxsize=1150 # probably do not need to edit anything below this line [smtp] # only split if message is 2*split_size split_multiplier=2 # since we are only testing... never_send=1 split_size=5000 [profile] allow_redirect=1 quota.message=14 quota.byte=message*10000 [profile.miser] allow_redirect=0 quota.message=2 [profile.privileged] quota.message=56 [profile.unlimited] quota.message=560 [envelope.] cc=admin subject=Internal Error quota_multiplier=0 desc=An unexpected internal error occurred: [envelope.access_denied] cc=admin subject=Access Denied quota_multiplier=0 desc=An attempted operation was not allowed: [envelope.quota] quota_multiplier=0 subject=Quota Exhausted desc=< #link Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: the_user Subject: Resource Unavailable Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot Could not fetch http://www.zxvba_test_ignore.com/foo2?color1=green&year=1960&name=&orfile=on¬=&color2=green&and=&submit_name=start%20search&month=Jan&search=&cfrom=power&hits=25&sort=by%20date%20-%20new%20files%20first&day=6&day=11 An Error Occurred ================== 500 - Can't resolv address for www.zxvba_test_ignore.com ...while executing the following command: GET #link Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: the_user Subject: Resource Unavailable Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot Could not fetch http://www.zxvba_test_ignore.com/foo3 An Error Occurred ================== 500 - Can't resolv address for www.zxvba_test_ignore.com ...while executing the following command: GET #link GetWeb-1.15/t/zfail.t100644 431 36 673 6315525674 13463 0ustar rolftechnical#!/usr/bin/perl5 # must run after form.t during update cycle # avoid running simultaneous versions my $PERL = $^X; my $orig = 't/ref.form/ref.'; my $new = 't/zfail.rfc.tmp'; system("(echo From: the_user; cat $orig) | $PERL -pe 's!^(\\[ \\])( *failed search 1)!\\[X\\]\$2!'g > $new"); use t::GetWebTest; my $quotaPattern = 't/testRoot/quota/quota*'; system("/bin/rm $quotaPattern 2> /dev/null"); t::GetWebTest::go("","",1,$new,'mail'); GetWeb-1.15/t/ref.cgi/ 40755 431 36 0 6316042212 13402 5ustar rolftechnicalGetWeb-1.15/t/ref.cgi/ref.100755 431 36 1722 6304135256 14271 0ustar rolftechnicalContent-Type: text/plain Here is the message that would be sent in response: Content-Type: text/plain; name="promed_old.html" Content-Disposition: inline; filename="promed_old.html" Mime-Version: 1.0 To: ORIGINAL_SENDER Subject: ProMED-mail [IMAGE] The address of this page has changed, please update your bookmarks. promed.html [1] *** References from this document *** [orig] file:./test/promed_old.html [1] file:/test/promed.html Here is the message that would be sent in response: Content-Type: text/html; name="promed_old.html" Content-Disposition: inline; filename="promed_old.html" Mime-Version: 1.0 To: ORIGINAL_SENDER Subject: ProMED-mail ProMED-mail

The address of this page has changed, please update your bookmarks.

promed.html

GetWeb-1.15/t/ref.nocheck/ 40755 431 36 0 6316042212 14252 5ustar rolftechnicalGetWeb-1.15/t/ref.nocheck/ref.100755 431 36 3564 6304135506 15145 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: getweb-miser-test@usa.healthnet.org CC: getweb-admin@usa.healthnet.org Subject: Access Denied X-Mailbot-Note: ignoring reply-to field Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot An attempted operation was not allowed: You cannot return the text of the original message in your e-mail to the GetWeb MailBot due to bandwidth limitations. This means that returning documents with links checked is disabled. Please use the GET command interface instead ____original message follows____ From rolf@usa.healthnet.org Thu Jan 2 10:25:00 1997 Received: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id KAA28775; Thu, 2 Jan 1997 10:24:59 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id PAA03515; Thu, 2 Jan 1997 15:25:30 GMT Date: Thu, 2 Jan 1997 15:25:30 GMT Message-Id: <199701021525.PAA03515@neptune.healthnet.org> From: getweb-miser-test@usa.healthnet.org To: getweb@usa.healthnet.org Subject: [getweb@usa.healthnet.org: SatelLife ] Reply-To: getweb-miser-test@usa.healthnet.org ------- Start of forwarded message ------- Date: Thu, 2 Jan 1997 10:21:31 -0500 Subject: SatelLife To: rolf@usa.healthnet.org Errors-To: getweb-bounce@usa.healthnet.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain MIME-Version: 1.0 X-Loop: GetWeb X-Mailer: Perl5 Mail::Internet v1.23 Sender: GetWeb MailBot From: GetWeb MailBot Reply-To: GetWeb MailBot Products & Services: HealthNet[1x] Information Services[X1] *** References from this document *** [orig] file://www.healthnet.org/ [1] asdfjkasdl ------- End of forwarded message ------- GetWeb-1.15/t/ref.bounce/ 40755 431 36 0 6316042212 14113 5ustar rolftechnicalGetWeb-1.15/t/ref.bounce/ref.100644 431 36 1601 6304135246 14772 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: owner-getweb@usa.healthnet.org Subject: GetWeb double-bounce X-Loop line of some_other_bot ____Here is the double-bounced message____ Received: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id LAA07026 for ; Mon, 2 Dec 1996 11:42:03 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id QAA00777; Mon, 2 Dec 1996 16:42:25 GMT Date: Mon, 2 Dec 1996 16:42:25 GMT Message-Id: <199612021642.QAA00777@neptune.healthnet.org> From: Rolf Nelson To: getweb@usa.healthnet.org X-Loop: some_other_bot Subject: mail test Reply-to: rolf@usa.healthnet.org GET file://test/promed_new.html GET NOMIME SOURCE file://test/promed.html -- This signature should be ignored. GetWeb-1.15/t/bounce_test.rfc100644 431 36 1254 6266776266 15225 0ustar rolftechnicalReceived: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id LAA07026 for ; Mon, 2 Dec 1996 11:42:03 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id QAA00777; Mon, 2 Dec 1996 16:42:25 GMT Date: Mon, 2 Dec 1996 16:42:25 GMT Message-Id: <199612021642.QAA00777@neptune.healthnet.org> From: Rolf Nelson To: getweb@usa.healthnet.org X-Loop: some_other_bot Subject: mail test Reply-to: rolf@usa.healthnet.org GET file://test/promed_new.html GET NOMIME SOURCE file://test/promed.html -- This signature should be ignored. GetWeb-1.15/t/mail.t100644 431 36 166 6262752252 13270 0ustar rolftechnical#!/usr/bin/perl5 my $mailTest = 't/mail_test.rfc'; use t::GetWebTest; t::GetWebTest::go("","",1,$mailTest,'mail'); GetWeb-1.15/t/image.t100644 431 36 126 6313562266 13425 0ustar rolftechnical#!/usr/bin/perl5 use t::GetWebTest; t::GetWebTest::go("GET TEST/staricn2.gif","",1); GetWeb-1.15/t/check_test.rfc100644 431 36 2750 6300103544 14775 0ustar rolftechnicalFrom rolf@usa.healthnet.org Thu Jan 2 10:25:00 1997 Received: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id KAA28775; Thu, 2 Jan 1997 10:24:59 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id PAA03515; Thu, 2 Jan 1997 15:25:30 GMT Date: Thu, 2 Jan 1997 15:25:30 GMT Message-Id: <199701021525.PAA03515@neptune.healthnet.org> From: Rolf Nelson To: getweb@usa.healthnet.org Subject: [getweb@usa.healthnet.org: SatelLife ] Reply-to: rolf@usa.healthnet.org ------- Start of forwarded message ------- Date: Thu, 2 Jan 1997 10:21:31 -0500 Subject: SatelLife To: rolf@usa.healthnet.org Errors-To: getweb-bounce@usa.healthnet.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain MIME-Version: 1.0 X-Loop: GetWeb X-Mailer: Perl5 Mail::Internet v1.23 Sender: GetWeb MailBot From: GetWeb MailBot Reply-To: GetWeb MailBot Products & Services: HealthNet[1x] Information Services[X1] *** References from this document *** [orig] file://www.healthnet.org/ [1] file://test/promed.html ------- End of forwarded message ------- -- | Rolf Harold Nelson (rolf@usa.healthnet.org), Systems Engineer, SatelLife | "Try to learn something about everything | and everything about something." --Huxley GetWeb-1.15/t/mail_test.rfc100644 431 36 1225 6255262373 14655 0ustar rolftechnicalReceived: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id LAA07026 for ; Mon, 2 Dec 1996 11:42:03 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id QAA00777; Mon, 2 Dec 1996 16:42:25 GMT Date: Mon, 2 Dec 1996 16:42:25 GMT Message-Id: <199612021642.QAA00777@neptune.healthnet.org> From: Rolf Nelson To: getweb@usa.healthnet.org Subject: mail test Reply-to: rolf@usa.healthnet.org GET file://test/promed_new.html GET NOMIME SOURCE file://test/promed.html -- This signature should be ignored. GetWeb-1.15/t/help.t100644 431 36 143 6315773353 13275 0ustar rolftechnical#!/usr/bin/perl5 use t::GetWebTest; t::GetWebTest::go("HELP HELP INFO HELP WHOOPS","ignore",1); GetWeb-1.15/t/quota.t100644 431 36 461 6267232033 13470 0ustar rolftechnical#!/usr/bin/perl5 my $quotaTest = 't/quota_test.rfc'; my $quotaPattern = 't/quotaTestRoot/quota/quota*'; system("/bin/rm $quotaPattern 2> /dev/null"); use t::GetWebTest; $t::GetWebTest::gRoot =~ s/testRoot/quotaTestRoot/ or die "could not fix gRoot"; t::GetWebTest::go("","",1,$quotaTest,'mail'); GetWeb-1.15/t/ref.help/ 40755 431 36 0 6316042214 13572 5ustar rolftechnicalGetWeb-1.15/t/ref.help/ref.100755 431 36 14100 6315774211 14473 0ustar rolftechnicalContent-Type: text/plain; name=".index.html" Content-Disposition: inline; filename=".index.html" Mime-Version: 1.0 To: terminal Subject: Online Help How to access GetWeb ===================== Please note access to this server is logged; we cannot guarantee that your requests will remain private. To request a document from the World Wide Web, send a message to getweb@usa.healthnet.org with the body containing one or more requests like: GET url Where url is the URL of the document you request. If the message contains more than one request, separate each request with a blank line. Here is a message which would fetch the HealthNet home page: GET http://www.healthnet.org After receiving the above message, the GetWeb server would format the HealthNet home page as human-readable plain-text and send it to you. A hotlist[1] of URLs which we consider especially interesting is available. Each hypertext link is represented by a number in brackets. Suppose you get a message like this from a GetWeb server: -------------------------------------------------------------------- Some important conferences carried by SatelLife include: * ProMED: Program for Monitoring Emerging Diseases[1] * ProCAARE: Program for Collaboration Against AIDS[2] * E-Drug: Essential Drugs[3] ** References from this document ** [1] http://www.healthnet.org/programs/promed.html [2] http://www.healthnet.org/programs/procaare.html [3] http://www.healthnet.org/programs/edrug.html -------------------------------------------------------------------- To get more information about ProCAARE, you would look up link 2 at the bottom of the message to find out the URL is http://www.healthnet.org/programs/procaare.html. You would then send a message to the GetWeb server: GET http://www.healthnet.org/programs/procaare.html If your mailer program insists puts extra, unwanted text at the beginning or end of your message, then you can enclose your commands in a begin/end block. You can also comment out lines with '#', so that in the following message only the 'GET http://www.healthnet.org' line will be processed: Hello getweb@usa.healthnet.org! This preamble will not be processed by the MailBot... begin GET http://www.healthnet.org # ...neither will this comment end ...and neither will this signature: -- B. Russell, ontological consultant, phone: (617) 555-1652 "The worse the logic, the more interesting the conclusions" Follow the links below for more help. How can I: * fill out HTML Forms?[2] * search the Web?[3] * break a long command between multiple lines?[4] * follow chains of linked documents with a single command?[5] * request raw HTML source rather than formatted text?[6] * configure how documents are delivered?[7] * use Agora (w3mail) commands?[8] * send username and password to the Web server?[9] * decode binary files?[10] How quotas limit server load[11] Accessing American Physiological Society abstracts[12] Accessing ProMED archives[13] Other GetWeb-type servers[14] About the GetWeb MailBot server software[15] Also see the GetWeb home page.[16] Send bugs or suggestions for improvement to getweb-admin@usa.healthnet.org. *** References from this document *** [orig] file:./help/.index.html [1] file:/help/HOTLIST.html [2] file:/help/FORMS.html [3] file:/help/SEARCHING.html [4] file:/help/BREAK.html [5] file:/help/FOLLOWING.html [6] file:/help/FORMAT.html [7] file:/help/DELIVER.html [8] file:/help/AGORA.html [9] file:/help/AUTH.html [10] file:/help/MIME.html [11] file:/help/QUOTA.html [12] file:/help/APS.html [13] file:/help/PROMED.html [14] file:/help/SERVERS.html [15] file:/help/INFO.html [16] http://www.healthnet.org/dist/getweb/ Content-Type: text/plain; name="INFO.html" Content-Disposition: inline; filename="INFO.html" Mime-Version: 1.0 To: terminal Subject: Online Help: INFO About the GetWeb MailBot server software ========================================= GetWeb was developed by SatelLife.[1] SatelLife is an international not-for-profit organization employing satellite, telephone and radio networking technology to serve the health communication and information needs of countries in the developing world. Please address any suggestions to the author, Rolf Nelson.[2] Funding was provided by the American Physiological Society[3], Management Sciences for Health[4], NEC[5], and the National Science Foundation[6]. SatelLife wishes to thank CERN, the European Laboratory for Particle Physics[7], for its role in the development of methods of offline Web access, especially for developing the Agora (W3mail) Server software. Special thanks also to the author of Agora, Arthur Secret[8]; and to Hugh Sasse[9] and Guido Hansen[10], who have used their prior experience running w3mail servers to provide invaluable input to the development process. The GetWeb MailBot server program is copyright (c) 1996 SatelLife. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl.[11] There is no warranty for the service nor the software. Back to the main help page[12] *** References from this document *** [orig] file:./help/INFO.html [1] http://www.healthnet.org/ [2] mailto:rolf@usa.healthnet.org [3] file://www.uth.tmc.edu/apstracts/ [4] http://www.msh.org/ [5] http://www.nec.co.jp/index_e.html [6] http://www.nsf.gov/ [7] http://www.cern.ch/ [8] mailto:secret@w3.org [9] mailto:hgs@dmu.ac.uk [10] mailto:Guido.Hansen@gmd.de [11] http://www.perl.com/perl/doc/misc/license/README.perl5 [12] file:/help/HELP.html Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender CC: getweb-admin@usa.healthnet.org Subject: Internal Error An unexpected internal error occurred: illegal help command: HELP WHOOPS. Legal help commands are: HELP, HELP AGORA, HELP APS, HELP AUTH, HELP BREAK, HELP DELIVER, HELP FOLLOWING, HELP FORMAT, HELP FORMS, HELP HOTLIST, HELP INFO, HELP MIME, HELP PROMED, HELP QUOTA, HELP SEARCHING, HELP SERVERS ____original message follows____ From: Original_Sender Subject: ignore Reply-To: terminal HELP HELP INFO HELP WHOOPSGetWeb-1.15/t/unavail.t100644 431 36 240 6315773677 14013 0ustar rolftechnical#!/usr/bin/perl5 use t::GetWebTest; t::GetWebTest::go("GET TEST/this-is_unavailable.html GET garbage_proto:foo GET_MISPELLED TEST/promed_new.html","ignore"); GetWeb-1.15/t/follow.t100644 431 36 200 6271720135 13630 0ustar rolftechnical#!/usr/bin/perl5 use t::GetWebTest; t::GetWebTest::go("TEST/promed_old.html FOLLOW 1 FOLLOW 1 GET TEST/promed.html FOLLOW 3"); GetWeb-1.15/t/ref.service/ 40755 431 36 0 6316042215 14303 5ustar rolftechnicalGetWeb-1.15/t/ref.service/ref.100644 431 36 7517 6304135547 15177 0ustar rolftechnicalContent-Type: text/plain; name=".info.html" Content-Disposition: inline; filename=".info.html" Mime-Version: 1.0 To: rolf@usa.healthnet.org Subject: About SatelLife Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot About SatelLife ================ SatelLife is an international not-for-profit organization employing satellite, telephone and radio networking technology to serve the health communication and information needs of countries in the developing world. More information is available at the SatelLife home page: http://www.healthnet.org If you do not have Web access, you can still access the home page by sending a message to getweb@usa.healthnet.org with the body: GET http://www.healthnet.org How to use the GetWeb MailBot server ==================================== This software is currently in beta testing. Please report any problems to getweb-admin@usa.healthnet.org. Please note all requests are logged; we cannot guarantee that your requests will remain private. To request a document from the World Wide Web, send a message to getweb@usa.healthnet.org with the body containing one or more requests like: GET url Where url is the URL of the document you request. If the message contains more than one request, separate each request with a blank line. Here is a message which would fetch the HealthNet home page: GET http://www.healthnet.org After recieving the above message, the GetWeb server would format the HealthNet home page as human-readable plain-text and send it to you. You can enclose your commands in a begin/end block, or comment out lines with '#': This preamble will not be processed by the MailBot... begin GET http://www.healthnet.org # ...neither will this comment end ...and neither will this signature. A hotlist[1] of URLs which we consider especially interesting is available. Each hypertext link is represented by a number in brackets. Suppose you get a message like this from a GetWeb server: -------------------------------------------------------------------- Some important conferences carried by SatelLife include: * ProMED: Program for Monitoring Emerging Diseases[1] * ProCAARE: Program for Collaboration Against AIDS[2] * E-Drug: Essential Drugs[3] ** References from this document ** [1] http://www.healthnet.org/programs/promed.html [2] http://www.healthnet.org/programs/procaare.html [3] http://www.healthnet.org/programs/edrug.html -------------------------------------------------------------------- To get more information about ProCAARE, you would look up link 2 at the bottom of the message to find out the URL is http://www.healthnet.org/programs/procaare.html. You would then send a message to the GetWeb server: GET http://www.healthnet.org/programs/procaare.html Follow the links below for more help. How can I: * fill out HTML Forms?[2] * search the Web?[3] * break a long command between multiple lines?[4] * follow chains of linked documents with a single command?[5] * request raw HTML source rather than formatted text?[6] * configure how documents are delivered?[7] * use Agora (w3mail) commands?[8] * decode binary files?[9] How quotas limit server load[10] Accessing ProMED archives[11] Other GetWeb-type servers[12] About the GetWeb MailBot server software[13] Also see the GetWeb home page.[14] Send bugs or suggestions for improvement to getweb-admin@usa.healthnet.org. *** References from this document *** [orig] file:./help/.info.html [1] file:/help/HOTLIST.html [2] file:/help/FORMS.html [3] file:/help/SEARCHING.html [4] file:/help/BREAK.html [5] file:/help/FOLLOWING.html [6] file:/help/FORMAT.html [7] file:/help/DELIVER.html [8] file:/help/AGORA.html [9] file:/help/MIME.html [10] file:/help/QUOTA.html [11] file:/help/PROMED.html [12] file:/help/SERVERS.html [13] file:/help/INFO.html [14] http://www.healthnet.org/dist/getweb/ GetWeb-1.15/t/bin.t100644 431 36 120 6313563760 13105 0ustar rolftechnical#!/usr/bin/perl5 use t::GetWebTest; t::GetWebTest::go("GET TEST/backgrd.bin"); GetWeb-1.15/t/nocheck.t100644 431 36 173 6262754253 13761 0ustar rolftechnical#!/usr/bin/perl5 my $checkTest = 't/nocheck_test.rfc'; use t::GetWebTest; t::GetWebTest::go("","",1,$checkTest,'mail'); GetWeb-1.15/t/bounce.t100644 431 36 174 6266776221 13626 0ustar rolftechnical#!/usr/bin/perl5 my $bounceTest = 't/bounce_test.rfc'; use t::GetWebTest; t::GetWebTest::go("","",1,$bounceTest,'mail'); GetWeb-1.15/t/miser.t100644 431 36 171 6255276345 13467 0ustar rolftechnical#!/usr/bin/perl5 my $miserTest = 't/miser_test.rfc'; use t::GetWebTest; t::GetWebTest::go("","",1,$miserTest,'mail'); GetWeb-1.15/t/nocheck_test.rfc100644 431 36 2732 6262754617 15356 0ustar rolftechnicalFrom rolf@usa.healthnet.org Thu Jan 2 10:25:00 1997 Received: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id KAA28775; Thu, 2 Jan 1997 10:24:59 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id PAA03515; Thu, 2 Jan 1997 15:25:30 GMT Date: Thu, 2 Jan 1997 15:25:30 GMT Message-Id: <199701021525.PAA03515@neptune.healthnet.org> From: getweb-miser-test@usa.healthnet.org To: getweb@usa.healthnet.org Subject: [getweb@usa.healthnet.org: SatelLife ] Reply-to: rolf@usa.healthnet.org ------- Start of forwarded message ------- Date: Thu, 2 Jan 1997 10:21:31 -0500 Subject: SatelLife To: rolf@usa.healthnet.org Errors-To: getweb-bounce@usa.healthnet.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain MIME-Version: 1.0 X-Loop: GetWeb X-Mailer: Perl5 Mail::Internet v1.23 Sender: GetWeb MailBot From: GetWeb MailBot Reply-To: GetWeb MailBot Products & Services: HealthNet[1x] Information Services[X1] *** References from this document *** [orig] file://www.healthnet.org/ [1] asdfjkasdl ------- End of forwarded message ------- -- | Rolf Harold Nelson (rolf@usa.healthnet.org), Systems Engineer, SatelLife | "Try to learn something about everything | and everything about something." --Huxley GetWeb-1.15/t/ref.miser/ 40755 431 36 0 6316042216 13763 5ustar rolftechnicalGetWeb-1.15/t/ref.miser/ref.100755 431 36 7550 6307331233 14647 0ustar rolftechnicalContent-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: GetWeb Miser Subject: ProMED-mail X-Mailbot-Note: ignoring reply-to field Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/plain; name="promed.html" Content-Disposition: inline; filename="promed.html" Mime-Version: 1.0 To: GetWeb Miser Subject: ProMED-mail Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot [IMAGE] Here we are! Also visit promed_new.html [1] Here is a binary character: \O^ Too bad we can't read news[2] yet. Here is a really long URL[3] *** References from this document *** [orig] file:./promed.html [1] file:/test/promed_new.html [2] news:comp.mail.sendmail (not implemented) [3] file://notavalidpath/justtesting/foobarfoobarfoobarfoobarfoo\ barfoobarfoobar Content-Type: text/plain; name="promed_old.html" Content-Disposition: inline; filename="promed_old.html" Mime-Version: 1.0 To: GetWeb Miser Subject: ProMED-mail Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot [IMAGE] The address of this page has changed, please update your bookmarks. promed.html [1] *** References from this document *** [orig] file:./test/promed_old.html [1] file:/test/promed.html Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: GetWeb Miser CC: getweb-admin@usa.healthnet.org Subject: Access Denied Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot An attempted operation was not allowed: members of group miser may not redirect message to getweb_test_other ____original message follows____ Received: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id LAA07026 for ; Mon, 2 Dec 1996 11:42:03 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id QAA00777; Mon, 2 Dec 1996 16:42:25 GMT Date: Mon, 2 Dec 1996 16:42:25 GMT Message-Id: <199612021642.QAA00777@neptune.healthnet.org> From: GetWeb Miser To: getweb(a)usa.healthnet.org Subject: mail test Reply-To: GetWeb Miser GET file://test/promed_new.html GET file://test/promed.html GET file://test/promed_old.html GET TO getweb_test_other NOMIME SOURCE file://test/promed.html GetWeb-1.15/t/ref.image/ 40755 431 36 0 6316042216 13726 5ustar rolftechnicalGetWeb-1.15/t/ref.image/ref.100644 431 36 522 6313563444 14567 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender Subject: Resource Unavailable Could not fetch file:./test/staricn2.gif An Error Occurred ================== 500 - not allowed to fetch files of content-type 'image/gif' ...while executing the following command: GET file://test/staricn2.gif GetWeb-1.15/t/GetWebTest.pm100644 431 36 4757 6315776520 14571 0ustar rolftechnical#!/usr/bin/perl5 package t::GetWebTest; use Net::Domain qw( hostfqdn ); use Cwd; my $cwd = Cwd::fastcwd(); $gRoot = "$cwd/t/testRoot"; my $pgRoot = \$gRoot; use strict; use t::GT; sub t; my @mod = ( qw( NOMIME SOURCE ), 'TO getweb_discard' ); my $modCount = @mod; my $testCount = 1 << $modCount; my $test; my $max; sub go { my $body = shift; my $subject = shift; $max = shift; my $inFile = shift; my $mode = shift; my $spool = shift; defined $max or $max = 2 * $modCount + 2; my $id = $0; $id =~ s/.+\///; $id =~ s/\.t$//; $test = new t::GT; my $healthnetIgnore = '/home/rolf/dev/getweb/'; my $localIgnore = $cwd; $healthnetIgnore =~ s/\\/\\\\/g; $localIgnore =~ s/\\/\\\\/g; # $test -> ignore('id=','Message-ID:','References:'); $test -> ignore(qw( ---------- healthnet.org message.partial.+total=4 ), $healthnetIgnore, $localIgnore, hostfqdn); $test -> count($max); $test -> run(); t($id,$body,$subject,$inFile,$mode,$spool); } sub t { my $id = shift; my $body = shift; my $subject = shift; # optional my $inFile = shift; # optional my $mode = shift; # optional my $spool = shift; # optional my $i; for ($i = 0; $i < $testCount; $i++) { last unless $max--; if ($inFile) { open(STDIN,$inFile) or die "could not open $inFile: $!"; } my @modList; # print STDERR "i is $i $testCount\n"; # to avoid taking exponential time... next unless ($i <= $modCount or $testCount - $i - 1 <= $modCount ); my $j = 0; while ($j < $modCount) { push(@modList,$mod[$j]) if ($i & (1 << $j)); # bitwise AND $j++; } my $modString = join(' ',@modList,"file://test"); # print STDERR "modstring is $modString\n"; my $idSuffix = $modString; $idSuffix =~ s/\W/\./g; $idSuffix =~ s/file\.\.\.test$//; $idSuffix =~ s/\.$//; my $newBody = $body; $newBody =~ s/TEST/$modString/g; my $newSubject = $subject; $newSubject =~ s/TEST/$modString/g; my $switch; if ($mode eq 'cgi') { $switch = '-c 2> /dev/null'; } elsif ($mode eq 'spool') { system("cp $spool.orig $spool"); system("/bin/rm -f $$pgRoot/spool/rfc822.in"); $switch = "-f $spool "; } elsif ($mode eq 'mail') { $switch = ''; } else { $switch = "-i -s '$newSubject' -b '$newBody'"; } my $cmd = "$^X ./getweb.pl -r $$pgRoot $switch"; if ($ENV{GT_VERBOSE}) { print STDERR "command is: $cmd\n"; } $test -> checkSys("ref.$idSuffix",$cmd); } } 1; GetWeb-1.15/t/number.t100644 431 36 145 6254052644 13632 0ustar rolftechnical#!/usr/bin/perl5 use t::GetWebTest; t::GetWebTest::go("1 FOLLOW 1","",1); GetWeb-1.15/t/ref.spool/ 40755 431 36 0 6316042217 14001 5ustar rolftechnicalGetWeb-1.15/t/ref.spool/ref.100755 431 36 10326 6316040261 14675 0ustar rolftechnicalContent-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: getweb-miser-test@usa.healthnet.org Subject: ProMED-mail X-Mailbot-Note: ignoring reply-to field Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: getweb-miser-test@usa.healthnet.org CC: getweb-admin@usa.healthnet.org Subject: Access Denied Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot An attempted operation was not allowed: members of group miser may not redirect message to getweb_test_other ____original message follows____ From miser Fri Jan 10 11:18:13 1997 Received: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id LAA07026 for ; Mon, 2 Dec 1996 11:42:03 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id QAA00777; Mon, 2 Dec 1996 16:42:25 GMT Date: Mon, 2 Dec 1996 16:42:25 GMT Message-Id: <199612021642.QAA00777@neptune.healthnet.org> From: getweb-miser-test@usa.healthnet.org To: getweb@usa.healthnet.org Subject: mail test Reply-To: getweb-miser-test@usa.healthnet.org GET file://test/promed_new.html GET TO getweb_test_other NOMIME SOURCE file://test/promed.html Content-Type: text/plain; name="promed_old.html" Content-Disposition: inline; filename="promed_old.html" Mime-Version: 1.0 To: getweb-miser-test@usa.healthnet.org Subject: ProMED-mail X-Mailbot-Note: ignoring reply-to field Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot [IMAGE] The address of this page has changed, please update your bookmarks. promed.html [1] *** References from this document *** [orig] file:./test/promed_old.html [1] file:/test/promed.html Content-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: getweb-miser-test@usa.healthnet.org CC: getweb-admin@usa.healthnet.org Subject: Access Denied Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot An attempted operation was not allowed: members of group miser may not redirect message to getweb_test_other ____original message follows____ From miser Fri Jan 10 11:18:13 1997 Received: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id LAA07026 for ; Mon, 2 Dec 1996 11:42:03 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id QAA00777; Mon, 2 Dec 1996 16:42:25 GMT Date: Mon, 2 Dec 1996 16:42:25 GMT Message-Id: <199612021642.QAA00777@neptune.healthnet.org> From: getweb-miser-test@usa.healthnet.org To: getweb@usa.healthnet.org Subject: mail test Reply-To: getweb-miser-test@usa.healthnet.org GET file://test/promed_old.html GET TO getweb_test_other NOMIME SOURCE file://test/promed.html --- Pegasus Mailer GetWeb-1.15/t/quota_test.rfc100644 431 36 1347 6271737415 15073 0ustar rolftechnicalReceived: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id LAA07026 for ; Mon, 2 Dec 1996 11:42:03 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id QAA00777; Mon, 2 Dec 1996 16:42:25 GMT Date: Mon, 2 Dec 1996 16:42:25 GMT Message-Id: <199612021642.QAA00777@neptune.healthnet.org> From: getweb-miser-test@usa.healthnet.org To: getweb@usa.healthnet.org Subject: mail test Reply-to: rolf@usa.healthnet.org GET file://test/promed_new.html GET file://test/promed.html GET file://test/promed_old.html GET TO getweb_test_other NOMIME SOURCE file://test/promed.html -- This signature should be ignored. GetWeb-1.15/t/zexcl1.t100644 431 36 537 6301123762 13546 0ustar rolftechnical#!/usr/bin/perl5 # must run after form.t during update cycle # avoid running simultaneous versions my $PERL = $^X; my $orig = 't/ref.form/ref.'; my $new = 't/zexcl1.rfc.tmp'; system("(echo From: the_user; cat $orig) | $PERL -pe 's!^(.?\\[ \\].?)( *?exclusive 1)!\\[X\\]\$2!'g > $new"); use t::GetWebTest; t::GetWebTest::go("","",1,$new,'mail'); GetWeb-1.15/t/service_test.rfc100644 431 36 1115 6271242601 15357 0ustar rolftechnicalReceived: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id LAA07026 for ; Mon, 2 Dec 1996 11:42:03 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id QAA00777; Mon, 2 Dec 1996 16:42:25 GMT Date: Mon, 2 Dec 1996 16:42:25 GMT Message-Id: <199612021642.QAA00777@neptune.healthnet.org> From: Rolf Nelson To: info@usa.healthnet.org Subject: mail test Reply-to: rolf@usa.healthnet.org HELP -- This signature should be ignored. GetWeb-1.15/t/ref.zfail/ 40755 431 36 0 6316042220 13744 5ustar rolftechnicalGetWeb-1.15/t/ref.zfail/ref.100644 431 36 25052 6310036676 14656 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: the_user Subject: Resource Unavailable Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot GetWeb does not support method NOT_REAL in HTML forms ____original message follows____ From: the_user Content-Type: text/plain; name="form.html" Content-Disposition: inline; filename="form.html" Mime-Version: 1.0 To: terminal Subject: SHAREWARE.COM: Power Search Form [1][IMAGE]Exclusive. Netscape Navigator survival guide -- free![2] CNET Online[3] [IMAGE MAP][4][5] Menu \ NEW ARRIVALS[6] \ MOST POPULAR[7] \ SELECTIONS[8] \ SEARCH[9] \ \ Quick[10] \ \ Simple[11] \ \ Power[12] \ HELP[13] \ ABOUT[14] \ SUBSCRIBE[15] CNET services \ CNET.COM[16] \ NEWS.COM[17] \ GAMECENTER.COM[18] \ SEARCH.COM[19] \ DOWNLOAD.COM[20] \ ACTIVEX.COM[21] \ MEDIADOME.COM[22] CNET Marketplace \ Sponsors[23] \ CNET store[24] BUYDIRECT.COM[25] SHAREWARE.COM: power search [IMAGE] [IMAGE] [IMAGE] Power Search by platform The platform of files to search: [X] MS-Windows(all) OR [ ] MS-Windows3.x OR [ ] Long Option Which Almost Takes Up A Whole Line OR [ ] Source-Code OR [ ] All-Categories [____________________] [____________________] [____________________] [____________________] [_ This needs to expand_] [_ and fill out______] [_ three rows! ______] Search the file's description for: [_default____________] and for: [____________________] but not for: [____________________] Check to match case in the above: [ ] Check to search in filenames too: [X] And matches directory/filename: [____________________] Show only files created after: [ ] Jan OR [X] Oct OR [ ] Nov OR [ ] Dec [X] 1 OR [ ] 6 OR [ ] 11 OR [ ] 16 OR [ ] 21 OR [ ] 26 [X] 1960 OR [ ] 1970 OR [ ] 1980 OR [ ] 1985 OR [ ] 1990 OR [ ] 1991 OR [ ] 1992 OR [ ] 1993 OR [ ] 1994 OR [ ] 1995 OR [ ] 1996 OR [ ] 1997 Limit the number of files listed to: [ ] 10 OR [X] 25 OR [ ] 35 OR [ ] 50 Sort files: [X] by date - new files first OR [ ] by directory/path [ ] start search: check preceding box, forward entire document to GetWeb Power Search by archive The archives to search inside: (To select more than one archive hold the Control key.) Blue: ([ ]) Green: ([X]) Blue: ([ ]) Green: ([X]) [ ] 3com-dos AND/OR [ ] 3com-mac AND/OR [ ] 3com-mswin AND/OR [ ] accolade-dos AND/OR [ ] accolade-win95 AND/OR [ ] adobe-systems-any AND/OR [ ] adobe-systems-mac AND/OR [ ] adobe-systems-mswin AND/OR [ ] alt.src AND/OR [ ] ambrosia-mac AND/OR [ ] aminet AND/OR [ ] wordplace-win AND/OR [ ] wpine-mac AND/OR [ ] wpine-win31 AND/OR [ ] wpine-win95 AND/OR [ ] zipexplorer-mswin95 Search the file's description for: [____________________] and for: [____________________] but not for: [____________________] Check to match case in the above: [ ] Check to search in filenames too: [X] And matches directory/filename: [____________________] Show only files created after: [X] Jan OR [ ] Feb OR [ ] Mar OR [ ] Apr OR [ ] May OR [ ] Jun OR [ ] Jul OR [ ] Aug OR [ ] Sep OR [ ] Oct OR [ ] Nov OR [ ] Dec [ ] 1 AND/OR [X] 6 AND/OR [X] 11 AND/OR [ ] Long Option Which Almost Takes Up A Whole Line AND/OR [ ] 21 AND/OR [ ] 26 [X] 1960 OR [ ] 1970 OR [ ] 1980 OR [ ] 1985 OR [ ] 1990 OR [ ] 1996 OR [ ] 1997 Limit the number of files listed to: [ ] 10 OR [X] 25 OR [ ] 35 OR [ ] 50 Sort files: [X] by date - new files first OR [ ] by directory/path [ ] start search: check preceding box, forward entire document to GetWeb [____________________] [ ] start search: check preceding box, forward entire document to GetWeb [____________________] [X] failed search 1: check preceding box, forward entire document to GetWeb ([X])exclusive 1 have cake ([ ])exclusive 1 eat it [ ] exclusive 1: check preceding box, forward entire document to GetWeb [X] exclusive 2 have cake OR [ ] exclusive 2 eat it [ ] exclusive 2: check preceding box, forward entire document to GetWeb OTHER SEARCHES quick search[26] designed for minimum fuss simple search[27] an easy way to search for software \ Back to the top[28] Check out our latest sites \ Check out \ our latest \ sites: Go to BUYDIRECT.COM[29] \ Click here[30] to get \ fully-featured, fully supported \ software direct from the publisher. Go to DOWNLOAD.COM[31] \ Click here[32] to visit \ DOWNLOAD.COM, the \ Internet's Software Source. CNET disclaims any responsibility for software obtained through this site. Click here[33] for more legal stuff. Copyright[34] \co 1995-97 CNET, Inc. All rights reserved. *** Form section (ignore) ***

*** References from this document *** [orig] http://www.zxvba_test_ignore.com/ [1] http://www.zxvba_test_ignore.com/ [2] http://www.zxvba_test_ignore.com/cgi-bin/redirect.cgi?locati\ on=http://www.download.com/PC/Ed/Index/0,43,0-g,00.html%3fsw.nav\ survive%23%23CLink%23DEF%23CNET%23Navsurvive%23%23 [3] http://www.zxvba_test_ignore.com/Maps/logo.map [4] http://www.cnet.com/ [5] http://www.zxvba_test_ignore.com/SW/FD/Home [6] http://www.zxvba_test_ignore.com/code/engine/New [7] http://www.zxvba_test_ignore.com/SW/Search/Popular/ [8] http://www.zxvba_test_ignore.com/SW/Selections/Index/ [9] http://www.zxvba_test_ignore.com/SW/Search/Index/ [10] http://www.zxvba_test_ignore.com/SW/Search/Quick/ [11] http://www.zxvba_test_ignore.com/SW/Search/Simple/ [12] http://www.zxvba_test_ignore.com/code/engine/Power [13] http://www.zxvba_test_ignore.com/SW/Help/Index/ [14] http://www.zxvba_test_ignore.com/SW/About/Index/ [15] http://www.zxvba_test_ignore.com/SW/Subscribe/ [16] http://www.cnet.com/?shareware.navbar [17] http://www.news.com/?shareware.navbar [18] http://www.gamecenter.com/?shareware.navbar [19] http://www.search.com/?shareware.navbar [20] http://www.download.com/?shareware.navbar [21] http://www.activex.com/?shareware.navbar [22] http://www.mediadome.com/?shareware.navbar [23] http://www.zxvba_test_ignore.com/SW/About/Advert/ [24] http://www.store.cnet.com/index5.htm [25] http://www.buydirect.com/?shareware.navbar [26] http://www.shareware.com/SW/Search/Quick/ [27] http://www.shareware.com/SW/Search/Simple/ [28] http://www.zxvba_test_ignore.com/#top [29] http://www.buydirect.com/?sw.footer [30] http://www.buydirect.com/?sw.footer [31] http://www.download.com/?sw.footer [32] http://www.download.com/?sw.footer [33] http://www.zxvba_test_ignore.com/SW/About/Copyright/0,61,1,\ 00.html [34] http://www.zxvba_test_ignore.com/SW/About/Copyright/ GetWeb-1.15/t/ref.zexcl1/ 40755 431 36 0 6316042220 14045 5ustar rolftechnicalGetWeb-1.15/t/ref.zexcl1/ref.100644 431 36 25246 6310035742 14755 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: the_user CC: getweb-admin@usa.healthnet.org Subject: Internal Error Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot An unexpected internal error occurred: SYNTAX_ERROR: key 'baz' selected more than once: 'eat it' and 'have cake' Please select only one 'baz' attribute. ____original message follows____ From: the_user Content-Type: text/plain; name="form.html" Content-Disposition: inline; filename="form.html" Mime-Version: 1.0 To: terminal Subject: SHAREWARE.COM: Power Search Form [1][IMAGE]Exclusive. Netscape Navigator survival guide -- free![2] CNET Online[3] [IMAGE MAP][4][5] Menu \ NEW ARRIVALS[6] \ MOST POPULAR[7] \ SELECTIONS[8] \ SEARCH[9] \ \ Quick[10] \ \ Simple[11] \ \ Power[12] \ HELP[13] \ ABOUT[14] \ SUBSCRIBE[15] CNET services \ CNET.COM[16] \ NEWS.COM[17] \ GAMECENTER.COM[18] \ SEARCH.COM[19] \ DOWNLOAD.COM[20] \ ACTIVEX.COM[21] \ MEDIADOME.COM[22] CNET Marketplace \ Sponsors[23] \ CNET store[24] BUYDIRECT.COM[25] SHAREWARE.COM: power search [IMAGE] [IMAGE] [IMAGE] Power Search by platform The platform of files to search: [X] MS-Windows(all) OR [ ] MS-Windows3.x OR [ ] Long Option Which Almost Takes Up A Whole Line OR [ ] Source-Code OR [ ] All-Categories [____________________] [____________________] [____________________] [____________________] [_ This needs to expand_] [_ and fill out______] [_ three rows! ______] Search the file's description for: [_default____________] and for: [____________________] but not for: [____________________] Check to match case in the above: [ ] Check to search in filenames too: [X] And matches directory/filename: [____________________] Show only files created after: [ ] Jan OR [X] Oct OR [ ] Nov OR [ ] Dec [X] 1 OR [ ] 6 OR [ ] 11 OR [ ] 16 OR [ ] 21 OR [ ] 26 [X] 1960 OR [ ] 1970 OR [ ] 1980 OR [ ] 1985 OR [ ] 1990 OR [ ] 1991 OR [ ] 1992 OR [ ] 1993 OR [ ] 1994 OR [ ] 1995 OR [ ] 1996 OR [ ] 1997 Limit the number of files listed to: [ ] 10 OR [X] 25 OR [ ] 35 OR [ ] 50 Sort files: [X] by date - new files first OR [ ] by directory/path [ ] start search: check preceding box, forward entire document to GetWeb Power Search by archive The archives to search inside: (To select more than one archive hold the Control key.) Blue: ([ ]) Green: ([X]) Blue: ([ ]) Green: ([X]) [ ] 3com-dos AND/OR [ ] 3com-mac AND/OR [ ] 3com-mswin AND/OR [ ] accolade-dos AND/OR [ ] accolade-win95 AND/OR [ ] adobe-systems-any AND/OR [ ] adobe-systems-mac AND/OR [ ] adobe-systems-mswin AND/OR [ ] alt.src AND/OR [ ] ambrosia-mac AND/OR [ ] aminet AND/OR [ ] wordplace-win AND/OR [ ] wpine-mac AND/OR [ ] wpine-win31 AND/OR [ ] wpine-win95 AND/OR [ ] zipexplorer-mswin95 Search the file's description for: [____________________] and for: [____________________] but not for: [____________________] Check to match case in the above: [ ] Check to search in filenames too: [X] And matches directory/filename: [____________________] Show only files created after: [X] Jan OR [ ] Feb OR [ ] Mar OR [ ] Apr OR [ ] May OR [ ] Jun OR [ ] Jul OR [ ] Aug OR [ ] Sep OR [ ] Oct OR [ ] Nov OR [ ] Dec [ ] 1 AND/OR [X] 6 AND/OR [X] 11 AND/OR [ ] Long Option Which Almost Takes Up A Whole Line AND/OR [ ] 21 AND/OR [ ] 26 [X] 1960 OR [ ] 1970 OR [ ] 1980 OR [ ] 1985 OR [ ] 1990 OR [ ] 1996 OR [ ] 1997 Limit the number of files listed to: [ ] 10 OR [X] 25 OR [ ] 35 OR [ ] 50 Sort files: [X] by date - new files first OR [ ] by directory/path [ ] start search: check preceding box, forward entire document to GetWeb [____________________] [ ] start search: check preceding box, forward entire document to GetWeb [____________________] [ ] failed search 1: check preceding box, forward entire document to GetWeb ([X])exclusive 1 have cake [X]exclusive 1 eat it [X]exclusive 1: check preceding box, forward entire document to GetWeb [X] exclusive 2 have cake OR [ ] exclusive 2 eat it [ ] exclusive 2: check preceding box, forward entire document to GetWeb OTHER SEARCHES quick search[26] designed for minimum fuss simple search[27] an easy way to search for software \ Back to the top[28] Check out our latest sites \ Check out \ our latest \ sites: Go to BUYDIRECT.COM[29] \ Click here[30] to get \ fully-featured, fully supported \ software direct from the publisher. Go to DOWNLOAD.COM[31] \ Click here[32] to visit \ DOWNLOAD.COM, the \ Internet's Software Source. CNET disclaims any responsibility for software obtained through this site. Click here[33] for more legal stuff. Copyright[34] \co 1995-97 CNET, Inc. All rights reserved. *** Form section (ignore) ***
*** References from this document *** [orig] http://www.zxvba_test_ignore.com/ [1] http://www.zxvba_test_ignore.com/ [2] http://www.zxvba_test_ignore.com/cgi-bin/redirect.cgi?locati\ on=http://www.download.com/PC/Ed/Index/0,43,0-g,00.html%3fsw.nav\ survive%23%23CLink%23DEF%23CNET%23Navsurvive%23%23 [3] http://www.zxvba_test_ignore.com/Maps/logo.map [4] http://www.cnet.com/ [5] http://www.zxvba_test_ignore.com/SW/FD/Home [6] http://www.zxvba_test_ignore.com/code/engine/New [7] http://www.zxvba_test_ignore.com/SW/Search/Popular/ [8] http://www.zxvba_test_ignore.com/SW/Selections/Index/ [9] http://www.zxvba_test_ignore.com/SW/Search/Index/ [10] http://www.zxvba_test_ignore.com/SW/Search/Quick/ [11] http://www.zxvba_test_ignore.com/SW/Search/Simple/ [12] http://www.zxvba_test_ignore.com/code/engine/Power [13] http://www.zxvba_test_ignore.com/SW/Help/Index/ [14] http://www.zxvba_test_ignore.com/SW/About/Index/ [15] http://www.zxvba_test_ignore.com/SW/Subscribe/ [16] http://www.cnet.com/?shareware.navbar [17] http://www.news.com/?shareware.navbar [18] http://www.gamecenter.com/?shareware.navbar [19] http://www.search.com/?shareware.navbar [20] http://www.download.com/?shareware.navbar [21] http://www.activex.com/?shareware.navbar [22] http://www.mediadome.com/?shareware.navbar [23] http://www.zxvba_test_ignore.com/SW/About/Advert/ [24] http://www.store.cnet.com/index5.htm [25] http://www.buydirect.com/?shareware.navbar [26] http://www.shareware.com/SW/Search/Quick/ [27] http://www.shareware.com/SW/Search/Simple/ [28] http://www.zxvba_test_ignore.com/#top [29] http://www.buydirect.com/?sw.footer [30] http://www.buydirect.com/?sw.footer [31] http://www.download.com/?sw.footer [32] http://www.download.com/?sw.footer [33] http://www.zxvba_test_ignore.com/SW/About/Copyright/0,61,1,\ 00.html [34] http://www.zxvba_test_ignore.com/SW/About/Copyright/ GetWeb-1.15/t/ref.wrap/ 40755 431 36 0 6316042220 13610 5ustar rolftechnicalGetWeb-1.15/t/ref.wrap/ref.100755 431 36 10704 6304136112 14510 0ustar rolftechnicalContent-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html Content-Type: text/plain; name="promed_new.html" Content-Disposition: inline; filename="promed_new.html" Mime-Version: 1.0 To: terminal Subject: ProMED-mail [IMAGE] Welcome! Here is 1k of junk: foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo *** References from this document *** [orig] file:./test/promed_new.html GetWeb-1.15/t/ref.size/ 40755 431 36 0 6316042221 13612 5ustar rolftechnicalGetWeb-1.15/t/ref.size/ref.100644 431 36 2657 6271715346 14515 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: getweb-miser-test@usa.healthnet.org Subject: Resource Unavailable X-Mailbot-Note: ignoring reply-to field Errors-To: owner-getweb@usa.healthnet.org X-Loop: MailBot Received: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id LAA07026 for ; Mon, 2 Dec 1996 11:42:03 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id QAA00777; Mon, 2 Dec 1996 16:42:25 GMT While fetching URL file:./test/promed_new.html, file size exceeded 1150 bytes ____original message follows____ Received: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id LAA07026 for ; Mon, 2 Dec 1996 11:42:03 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id QAA00777; Mon, 2 Dec 1996 16:42:25 GMT Date: Mon, 2 Dec 1996 16:42:25 GMT Message-Id: <199612021642.QAA00777@neptune.healthnet.org> From: getweb-miser-test@usa.healthnet.org To: getweb@usa.healthnet.org Subject: mail test Reply-To: getweb-miser-test@usa.healthnet.org GET file://test/promed_new.html GET file://test/promed.html GET file://test/promed.html GET file://test/promed_old.html GET TO getweb_test_other NOMIME SOURCE file://test/promed.html GetWeb-1.15/t/mult.t100644 431 36 300 6262304124 13304 0ustar rolftechnical#!/usr/bin/perl5 use t::GetWebTest; t::GetWebTest::go(" zaxasdflkjqba begin TEST/promed_new.html # GET foo is commented out TEST/promed_new.html GET TEST/promed.html end GET zxcvasdfsd "); GetWeb-1.15/t/spool.t100644 431 36 346 6315771615 13505 0ustar rolftechnical#!/usr/bin/perl5 my $spoolTest = 't/spool_test.spool'; use t::GetWebTest; system("/bin/rm -f t/testRoot/spool/rfc822* 2> /dev/null"); # clean up $ENV{MAILBOT_TEST_COUNT} = 2; t::GetWebTest::go("","",1,'','spool',$spoolTest); GetWeb-1.15/t/form.t100644 431 36 123 6300441066 13271 0ustar rolftechnical#!/usr/bin/perl5 use t::GetWebTest; t::GetWebTest::go("GET TEST/form.html",'',1); GetWeb-1.15/t/ref.search/ 40755 431 36 0 6316042222 14106 5ustar rolftechnicalGetWeb-1.15/t/ref.search/ref.100755 431 36 671 6315774261 14765 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender CC: getweb-admin@usa.healthnet.org Subject: Internal Error An unexpected internal error occurred: unsafe filename: ./test/not_there?maxlines=10&all_right=true&is_ok=yes&errors=0&age=&maxfiles=50&query=EBOLA+ZAIRE ____original message follows____ From: Original_Sender Subject: ignore Reply-To: terminal SEARCH GARBAGE_ENGINE 10 EBOLA ZAIRE trueGetWeb-1.15/t/check.t100644 431 36 171 6262752257 13424 0ustar rolftechnical#!/usr/bin/perl5 my $checkTest = 't/check_test.rfc'; use t::GetWebTest; t::GetWebTest::go("","",1,$checkTest,'mail'); GetWeb-1.15/t/ref.alias/ 40755 431 36 0 6316042223 13733 5ustar rolftechnicalGetWeb-1.15/t/ref.alias/ref.100644 431 36 1535 6315774102 14620 0ustar rolftechnicalContent-Type: text/plain Content-Disposition: inline Mime-Version: 1.0 To: Original_Sender CC: getweb-admin@usa.healthnet.org Subject: Syntax Error A syntax error occurred: not a legal search alias: NONEXISTENT_ALIAS; legal aliases are: YAHOO, ALTAVISTA, APS95, APS96, INFOSEEK, APS97, PROMED Some or all commands were not executed. Tips: * Put commands in the body of the message, not the Subject line. * Make sure your signature begins with '--' Still having trouble? * Try surrounding your body with 'begin' and 'end' * Place a blank line between each command * If command takes up two lines, place a '\' after the first line For proper usage, send a message containing these three lines: begin HELP end ____original message follows____ From: Original_Sender Subject: ignore Reply-To: terminal SEARCH NONEXISTENT_ALIAS 10 EBOLA ZAIRE trueGetWeb-1.15/t/ref.form/ 40755 431 36 0 6316042223 13605 5ustar rolftechnicalGetWeb-1.15/t/ref.form/ref.100644 431 36 24421 6310035707 14505 0ustar rolftechnicalContent-Type: text/plain; name="form.html" Content-Disposition: inline; filename="form.html" Mime-Version: 1.0 To: terminal Subject: SHAREWARE.COM: Power Search Form [1][IMAGE]Exclusive. Netscape Navigator survival guide -- free![2] CNET Online[3] [IMAGE MAP][4][5] Menu \ NEW ARRIVALS[6] \ MOST POPULAR[7] \ SELECTIONS[8] \ SEARCH[9] \ \ Quick[10] \ \ Simple[11] \ \ Power[12] \ HELP[13] \ ABOUT[14] \ SUBSCRIBE[15] CNET services \ CNET.COM[16] \ NEWS.COM[17] \ GAMECENTER.COM[18] \ SEARCH.COM[19] \ DOWNLOAD.COM[20] \ ACTIVEX.COM[21] \ MEDIADOME.COM[22] CNET Marketplace \ Sponsors[23] \ CNET store[24] BUYDIRECT.COM[25] SHAREWARE.COM: power search [IMAGE] [IMAGE] [IMAGE] Power Search by platform The platform of files to search: [X] MS-Windows(all) OR [ ] MS-Windows3.x OR [ ] Long Option Which Almost Takes Up A Whole Line OR [ ] Source-Code OR [ ] All-Categories [____________________] [____________________] [____________________] [____________________] [_ This needs to expand_] [_ and fill out______] [_ three rows! ______] Search the file's description for: [_default____________] and for: [____________________] but not for: [____________________] Check to match case in the above: [ ] Check to search in filenames too: [X] And matches directory/filename: [____________________] Show only files created after: [ ] Jan OR [X] Oct OR [ ] Nov OR [ ] Dec [X] 1 OR [ ] 6 OR [ ] 11 OR [ ] 16 OR [ ] 21 OR [ ] 26 [X] 1960 OR [ ] 1970 OR [ ] 1980 OR [ ] 1985 OR [ ] 1990 OR [ ] 1991 OR [ ] 1992 OR [ ] 1993 OR [ ] 1994 OR [ ] 1995 OR [ ] 1996 OR [ ] 1997 Limit the number of files listed to: [ ] 10 OR [X] 25 OR [ ] 35 OR [ ] 50 Sort files: [X] by date - new files first OR [ ] by directory/path [ ] start search: check preceding box, forward entire document to GetWeb Power Search by archive The archives to search inside: (To select more than one archive hold the Control key.) Blue: ([ ]) Green: ([X]) Blue: ([ ]) Green: ([X]) [ ] 3com-dos AND/OR [ ] 3com-mac AND/OR [ ] 3com-mswin AND/OR [ ] accolade-dos AND/OR [ ] accolade-win95 AND/OR [ ] adobe-systems-any AND/OR [ ] adobe-systems-mac AND/OR [ ] adobe-systems-mswin AND/OR [ ] alt.src AND/OR [ ] ambrosia-mac AND/OR [ ] aminet AND/OR [ ] wordplace-win AND/OR [ ] wpine-mac AND/OR [ ] wpine-win31 AND/OR [ ] wpine-win95 AND/OR [ ] zipexplorer-mswin95 Search the file's description for: [____________________] and for: [____________________] but not for: [____________________] Check to match case in the above: [ ] Check to search in filenames too: [X] And matches directory/filename: [____________________] Show only files created after: [X] Jan OR [ ] Feb OR [ ] Mar OR [ ] Apr OR [ ] May OR [ ] Jun OR [ ] Jul OR [ ] Aug OR [ ] Sep OR [ ] Oct OR [ ] Nov OR [ ] Dec [ ] 1 AND/OR [X] 6 AND/OR [X] 11 AND/OR [ ] Long Option Which Almost Takes Up A Whole Line AND/OR [ ] 21 AND/OR [ ] 26 [X] 1960 OR [ ] 1970 OR [ ] 1980 OR [ ] 1985 OR [ ] 1990 OR [ ] 1996 OR [ ] 1997 Limit the number of files listed to: [ ] 10 OR [X] 25 OR [ ] 35 OR [ ] 50 Sort files: [X] by date - new files first OR [ ] by directory/path [ ] start search: check preceding box, forward entire document to GetWeb [____________________] [ ] start search: check preceding box, forward entire document to GetWeb [____________________] [ ] failed search 1: check preceding box, forward entire document to GetWeb ([X])exclusive 1 have cake ([ ])exclusive 1 eat it [ ] exclusive 1: check preceding box, forward entire document to GetWeb [X] exclusive 2 have cake OR [ ] exclusive 2 eat it [ ] exclusive 2: check preceding box, forward entire document to GetWeb OTHER SEARCHES quick search[26] designed for minimum fuss simple search[27] an easy way to search for software \ Back to the top[28] Check out our latest sites \ Check out \ our latest \ sites: Go to BUYDIRECT.COM[29] \ Click here[30] to get \ fully-featured, fully supported \ software direct from the publisher. Go to DOWNLOAD.COM[31] \ Click here[32] to visit \ DOWNLOAD.COM, the \ Internet's Software Source. CNET disclaims any responsibility for software obtained through this site. Click here[33] for more legal stuff. Copyright[34] \co 1995-97 CNET, Inc. All rights reserved. *** Form section (ignore) ***
*** References from this document *** [orig] http://www.zxvba_test_ignore.com/ [1] http://www.zxvba_test_ignore.com/ [2] http://www.zxvba_test_ignore.com/cgi-bin/redirect.cgi?locati\ on=http://www.download.com/PC/Ed/Index/0,43,0-g,00.html%3fsw.nav\ survive%23%23CLink%23DEF%23CNET%23Navsurvive%23%23 [3] http://www.zxvba_test_ignore.com/Maps/logo.map [4] http://www.cnet.com/ [5] http://www.zxvba_test_ignore.com/SW/FD/Home [6] http://www.zxvba_test_ignore.com/code/engine/New [7] http://www.zxvba_test_ignore.com/SW/Search/Popular/ [8] http://www.zxvba_test_ignore.com/SW/Selections/Index/ [9] http://www.zxvba_test_ignore.com/SW/Search/Index/ [10] http://www.zxvba_test_ignore.com/SW/Search/Quick/ [11] http://www.zxvba_test_ignore.com/SW/Search/Simple/ [12] http://www.zxvba_test_ignore.com/code/engine/Power [13] http://www.zxvba_test_ignore.com/SW/Help/Index/ [14] http://www.zxvba_test_ignore.com/SW/About/Index/ [15] http://www.zxvba_test_ignore.com/SW/Subscribe/ [16] http://www.cnet.com/?shareware.navbar [17] http://www.news.com/?shareware.navbar [18] http://www.gamecenter.com/?shareware.navbar [19] http://www.search.com/?shareware.navbar [20] http://www.download.com/?shareware.navbar [21] http://www.activex.com/?shareware.navbar [22] http://www.mediadome.com/?shareware.navbar [23] http://www.zxvba_test_ignore.com/SW/About/Advert/ [24] http://www.store.cnet.com/index5.htm [25] http://www.buydirect.com/?shareware.navbar [26] http://www.shareware.com/SW/Search/Quick/ [27] http://www.shareware.com/SW/Search/Simple/ [28] http://www.zxvba_test_ignore.com/#top [29] http://www.buydirect.com/?sw.footer [30] http://www.buydirect.com/?sw.footer [31] http://www.download.com/?sw.footer [32] http://www.download.com/?sw.footer [33] http://www.zxvba_test_ignore.com/SW/About/Copyright/0,61,1,\ 00.html [34] http://www.zxvba_test_ignore.com/SW/About/Copyright/ GetWeb-1.15/t/zexcl2.t100644 431 36 532 6301124450 13535 0ustar rolftechnical#!/usr/bin/perl5 # must run after form.t during update cycle # avoid running simultaneous versions my $PERL = $^X; my $orig = 't/ref.form/ref.'; my $new = 't/zexcl2.rfc.tmp'; system("(echo From: the_user; cat $orig) | $PERL -pe 's!(\\[ \\])( *?exclusive 2)!\\[X\\]\$2!'g > $new"); use t::GetWebTest; t::GetWebTest::go("","",1,$new,'mail'); GetWeb-1.15/t/spool_test.spool.orig100644 431 36 2611 6267474462 16417 0ustar rolftechnicalFrom miser Fri Jan 10 11:18:13 1997 Received: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id LAA07026 for ; Mon, 2 Dec 1996 11:42:03 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id QAA00777; Mon, 2 Dec 1996 16:42:25 GMT Date: Mon, 2 Dec 1996 16:42:25 GMT Message-Id: <199612021642.QAA00777@neptune.healthnet.org> From: getweb-miser-test@usa.healthnet.org To: getweb@usa.healthnet.org Subject: mail test Reply-to: rolf@usa.healthnet.org GET file://test/promed_new.html GET TO getweb_test_other NOMIME SOURCE file://test/promed.html -- This signature should be ignored. From miser Fri Jan 10 11:18:13 1997 Received: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id LAA07026 for ; Mon, 2 Dec 1996 11:42:03 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id QAA00777; Mon, 2 Dec 1996 16:42:25 GMT Date: Mon, 2 Dec 1996 16:42:25 GMT Message-Id: <199612021642.QAA00777@neptune.healthnet.org> From: getweb-miser-test@usa.healthnet.org To: getweb@usa.healthnet.org Subject: mail test Reply-to: rolf@usa.healthnet.org GET file://test/promed_old.html GET TO getweb_test_other NOMIME SOURCE file://test/promed.html --- Pegasus Mailer GetWeb-1.15/t/miser_test.rfc100644 431 36 1370 6276153704 15053 0ustar rolftechnicalReceived: from neptune.healthnet.org (rolf@neptune.healthnet.org [198.115.132.11]) by satellife.healthnet.org (8.6.12/8.6.12) with ESMTP id LAA07026 for ; Mon, 2 Dec 1996 11:42:03 -0500 Received: (from rolf@localhost) by neptune.healthnet.org (8.6.12/8.6.9) id QAA00777; Mon, 2 Dec 1996 16:42:25 GMT Date: Mon, 2 Dec 1996 16:42:25 GMT Message-Id: <199612021642.QAA00777@neptune.healthnet.org> From: GetWeb Miser To: getweb(a)usa.healthnet.org Subject: mail test Reply-to: rolf@usa.healthnet.org GET file://test/promed_new.html GET file://test/promed.html GET file://test/promed_old.html GET TO getweb_test_other NOMIME SOURCE file://test/promed.html -- This signature should be ignored. GetWeb-1.15/t/split.t100644 431 36 136 6255347141 13475 0ustar rolftechnical#!/usr/bin/perl5 use t::GetWebTest; t::GetWebTest::go("GET SPLIT 500 TEST/promed_new.html"); GetWeb-1.15/t/cgi.t100644 431 36 161 6255263316 13103 0ustar rolftechnical#!/usr/bin/perl5 my $cgiTest = 't/cgi_test.in'; use t::GetWebTest; t::GetWebTest::go("","",1,$cgiTest,'cgi'); GetWeb-1.15/MailBot/ 40755 431 36 0 6316042224 13154 5ustar rolftechnicalGetWeb-1.15/MailBot/UI.pm100644 431 36 14472 6315765320 14164 0ustar rolftechnicalpackage MailBot::UI; =head1 NAME MailBot::UI - abstract user-interface class =head1 SYNOPSIS use MailBot::UI; my $ui = MailBot::UI -> current; $ui -> note("this will show up in the X-MailBot-Note header"); my $quota = $ui -> getQuota; # MailBot::Quota my $profile = $ui -> getProfile; # MailBot::Profile my $messageCopy = $ui -> copyIncoming; # disposable Mail::Internet copy =head1 DESCRIPTION Various user-interface functions. =head1 SEE ALSO L, L, L =head1 COPYRIGHT Copyright (c) 1997 SatelLife. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 AUTHOR Rolf Nelson =cut use MailBot::Config; use MailBot::UI::Manual; use MailBot::UI::OneMsg; use MailBot::UI::CGI; use MailBot::UI::AdvCGI; use MailBot::UI::Spool; use MailBot::Quota; use MailBot::Profile; use Mail::Address; use Carp; use strict; # jfj parse incoming MIME multipart messages # jfj test maximum hop-count for loop prevention # jfj support check-boxes in custom query fields # jf parse incoming MIME-encoded messages my $gUI; my $gMore = 1; sub current { defined $gUI or $gUI = new MailBot::UI; $gUI; } sub more { $gMore; } sub done { $gMore = 0; } sub new { my $type = shift; my $config = MailBot::Config::current; my $self = {}; # $$self{QUOTA} = $self -> newQuota(); if ($config -> isCGI) { if ($config -> isInteractive) { bless($self,"MailBot::UI::AdvCGI"); } else { bless($self,"MailBot::UI::CGI"); } } elsif ($config -> isInteractive) { bless($self,"MailBot::UI::Manual"); } elsif (defined $config -> getMailSpool()) { bless($self,"MailBot::UI::Spool"); } else { bless($self,"MailBot::UI::OneMsg"); } $$self{NOTE} = []; $self -> vInit(); $gUI = $self; $self; } sub note { my $self = shift; push(@{$$self{NOTE}},@_); } sub getNoteRef { shift -> {NOTE}; } sub getProfile { shift -> {PROFILE}; } sub getQuota { my $self = shift; $self -> getProfile -> getQuota($self -> vQuotaMultiplier); } sub getServiceParam { my $self = shift; my $key = shift; my $internet = $$self{INCOMING}; defined $internet or die "no internet"; my $head = $internet -> head; my $to = $head -> get("To"); # jfj un-hardwire to of 'getweb' for manual mode $to eq "" and $to = 'getweb'; my ($address,$err) = Mail::Address -> parse($to); #defined $err and die "Cannot process message to multiple recipients: $to"; my $user = $address -> user; my $config = MailBot::Config::current; my $param = $config -> getIniVal("service.$user",$key); if (! defined $param) { $to = 'getweb'; $param = $config -> getIniVal("service.getweb",$key); defined $param or die "no key $key for service getweb"; } $param; } sub copyIncomingHead { my $self = shift; my $internet = $$self{INCOMING}; defined $internet or return undef; my $head = $internet -> head; my $copy = $head -> dup; $copy; } sub getFrom { my $self = shift; my $incoming = $$self{INCOMING}; defined $incoming or return undef; my $head = $incoming -> head; my $from = $head -> get('From'); chomp($from) if defined $from; $from; } sub getReturnAddress { my $self = shift; my $incoming = $$self{INCOMING}; defined $incoming or return undef; my $head = $incoming -> head; my $replyTo = $head -> get('Reply-To'); if (defined $replyTo) { chomp($replyTo); return $replyTo; } $self -> getFrom; } # jfj implement maximum input message length sub sendMessage { my $self = shift; my $internet = shift; # my ($mime, $recip, $subject) = @_; my $head = $self -> copyIncomingHead; my $originalSender = $self -> getFrom; my $profile = $self -> getProfile; my $to = $internet -> get('To'); chomp($to); if ($originalSender ne $to) { $profile -> allowRedirect or $profile -> dDie("redirect message to $to"); } $self -> vSendMessage($internet); } sub copyIncoming { my $self = shift; my $internet = $$self{INCOMING}; my $copy = $internet -> dup; $copy; } sub setIncoming { my $self = shift; $$self{INCOMING} = shift; } sub save { my $self = shift; my $message = shift; my $fileName = shift; defined $message or croak "message not defined"; my $config = MailBot::Config::current; defined $fileName or die "fileName not defined"; my $shouldSave = $config -> getIniVal("save",$fileName); if (! defined $shouldSave) { my $base = $fileName; $base =~ s/\..+//; $shouldSave = $config -> getIniVal("save",$base); } return unless $shouldSave; my $saveDir = $config -> getSaveDir; my $path = "$saveDir/$fileName.rfc"; open(SAVE,">>$path") or die "could not save to $path: $!"; $message -> print(\*SAVE); print SAVE "\n"; close(SAVE) or die "could not close SAVE filehandle: $!"; } sub getMessage { my $self = shift; my $ret; while (1) { $ret = $self -> vGetMessage; last unless $ret eq 2; sleep 60; } my $message = $$self{INCOMING}; my $head = $message -> head; #$head -> fold_length(79); # makes regression tests simpler my $sender = $self -> getFrom; my $replyTo = $self -> getReturnAddress; my @addr = map($_->address, Mail::Address->parse($sender)); @addr > 0 or die "cannot find a 'from' address, stopped"; if (@addr > 1) { # Mail::Address bug for addresses like (Foo Bar) $head -> replace('From',$addr[0]); $sender = $self -> getFrom; @addr = map($_->address, Mail::Address->parse($sender)); } # map "Rolf Nelson " to rolf@usa.healthnet.org my $senderID = $addr[0]; my $profile = new MailBot::Profile($senderID); # jfj break into requester, recipient profiles $$self{PROFILE} = $profile; if ($replyTo ne $sender) { if (! $profile -> allowRedirect) { $self -> note("ignoring reply-to field"); $head -> replace('Reply-To',$sender); } } &MailBot::Util::fold($message); $ret; } # jfj allow string-replacement through META pragma in HELP text sub vSendMessage { die "must be overloaded"; } sub vGetMessage { die "must be overloaded"; } 1; GetWeb-1.15/MailBot/UI/ 40755 431 36 0 6316042225 13472 5ustar rolftechnicalGetWeb-1.15/MailBot/UI/AdvCGI.pm100644 431 36 3724 6304125262 15170 0ustar rolftechnicalpackage MailBot::UI::AdvCGI; use Mail::Internet; use MailBot::UI::CGI; use MailBot::Util; @ISA = qw( MailBot::UI::CGI ); use strict; my $PERL = $^X; $PERL =~ /\// or $PERL = "/usr/bin/$PERL"; sub getOutHeader { "Content-Type: text/html\n"; } sub vSendMessage { my $self = shift; my $internet = shift; $| = 1; print "Here is an approximation of the message that would be sent in response:"; print "

\n";

    open(ESCAPE_BR,"| $PERL -pe '" . 's^\<^<^g; s^\>^>^g;' . "'");
    $internet -> print(\*ESCAPE_BR);
    close(ESCAPE_BR);

    print "

\n"; my $action = "http://" . $ENV{SERVER_NAME} . ':' . $ENV{SERVER_PORT} . $ENV{SCRIPT_NAME}; my $config = MailBot::Config::current; my $address = $config -> getBounceAddr; my $newSubject = $internet -> head -> get("Subject"); $newSubject =~ s^\"^\\\"^g; chomp($newSubject); print <<"EOF"; Reply to this message:

Subject of message:

Body:


EOF print <<"EOF2"; Forward this message:

Subject of message:

Body:


$address
EOF3 } GetWeb-1.15/MailBot/UI/Manual.pm100644 431 36 2230 6315776140 15350 0ustar rolftechnicalpackage MailBot::UI::Manual; @ISA = qw( MailBot::UI ); use strict; sub vInit { my $self = shift; } sub vQuotaMultiplier { 0; } sub vGetMessage { my $self = shift; my $returnAddress = "terminal"; my $config = &MailBot::Config::current; my $subject = $config -> getSubject(); if (!defined($subject)) { print STDERR "Type in message subject:\n"; $subject = (<>); } my $input; my $paBody; my $body = $config -> getBody(); if (defined($body)) { $paBody = [ $body ]; } else { print STDERR "Type in message, with a single '.' when done.\n"; $paBody = []; while (defined ($input = <>)) { last unless defined $input; last if $input eq ".\n"; push(@$paBody,$input); } } my $message = new Mail::Internet; $$self{INCOMING} = $message; my $head = $message -> head; $head -> add('From','Original_Sender'); $head -> add('Subject',$subject); $head -> add('Reply-To',$returnAddress); $message -> body($paBody); $self -> done unless defined $input; } sub vSendMessage { my $self = shift; my $internet = shift; $internet -> print(); } GetWeb-1.15/MailBot/UI/CGI.pm100644 431 36 2771 6315051062 14534 0ustar rolftechnicalpackage MailBot::UI::CGI; use Mail::Internet; use MailBot::Util; @ISA = qw( MailBot::UI ); use strict; sub d { MailBot::Util::debug @_; } sub vInit { my $self = shift; my $config = MailBot::Config::current; $$self{BOUNCE_ADDR} = $config -> getBounceAddr(); } sub getOutHeader { "Content-Type: text/plain\n"; } sub vGetMessage { my $self = shift; # jf: allow web interface to forward, de-MIME messages # needs CGI-modules-2.75 or later require CGI::Request; require CGI::Base; my $req = new CGI::Request; my $outHeader = $self -> getOutHeader; CGI::Base::SendHeaders($outHeader); my $subject = $req -> param("Subject"); #&d("subject is $subject"); my $replyTo = $req -> param("Reply-to"); my $body = $req -> param("Body"); my @aBody = split("\n",$body); my $paBody = \@aBody; chomp($subject) if defined $subject; chomp($replyTo) if defined $replyTo; my $message = new Mail::Internet; $$self{INCOMING} = $message; my $head = $message -> head; $head -> add('Subject',$subject) if defined $subject; $head -> add('Reply-To',$replyTo) if defined $replyTo; $head -> add('From',"ORIGINAL_SENDER"); $message -> body($paBody); $self -> done; } sub vQuotaMultiplier { 0; } sub vSendMessage { my $self = shift; my $internet = shift; print "Here is the message that would be sent in response:\n\n"; # print "

\n";
    $internet -> print;
    # print "
\n"; } GetWeb-1.15/MailBot/UI/Loop.pm100644 431 36 3422 6305052144 15036 0ustar rolftechnicalpackage MailBot::UI::Loop; use strict; # three defenses against mail-loops: # # 1. X-loop header # 2. Set Envelope-From to bounceaddr # 3. Refuse messages from @aDoubleBounce list #my $MAX_HOP = 50; my @aDoubleBounce = qw( system daemon mailer mailer-daemon echo gateway majordomo listserv netmgr ); # jfj add 'Precedence: junk' header sub new { my $type = shift; my $message = shift; my $header = $message -> head; my $paBody = $message -> body; my $xLoop = $header -> get("X-Loop"); defined $xLoop and die "LOOP: X-Loop line of $xLoop"; if (grep(/ Transcript of session follows /i,@$paBody)) { # probably a returned mailer-daemon message die "LOOP: saw X-Loop: line in body"; } my $from = $header -> get("From"); $from eq '' and die "did not specify 'From' address"; my @aAddress = Mail::Address -> parse($from); my $address = $aAddress[0]; my $lowerFrom = lc $address -> address; grep ($lowerFrom =~ /\b$_\b(?!\-)/,@aDoubleBounce) and die "LOOP: Messages from $lowerFrom risk mail-loop"; my $notDeliveredTo = $header -> get("Not-Delivered-To"); $notDeliveredTo eq '' or die "LOOP: saw Not-Delivered-To header\n"; # my @aHop = $header -> get("Received"); # @aHop <= $MAX_HOP # or die "LOOP: too many hops: " . join(' ',@aHop); # my $self = {HOP_REF => \@aHop}; my $self = {}; bless($self,$type); } sub makeAutoResponse { my $self = shift; my $internet = shift; my $bounceAddr = shift; my $header = $internet -> head; $header -> replace("Errors-To",$bounceAddr) if defined $bounceAddr; $header -> add("X-Loop","MailBot"); # my $paHop = $$self{HOP_REF}; # my $hop; # foreach $hop (@$paHop) # { # #$header -> add("Received",$hop); # } } GetWeb-1.15/MailBot/UI/OneMsg.pm100644 431 36 5642 6315775316 15341 0ustar rolftechnicalpackage MailBot::UI::OneMsg; #use MailBot::Internet; use Mail::Internet; use MailBot::Util; use MailBot::Entity; use MailBot::Config; use MailBot::UI::Loop; @ISA = qw( MailBot::UI ); use strict; # my $SENDMAIL = "/usr/bin/sendmail"; # jf test sendmail Precedence line my $gDoubleBounce = 0; #my $MAIL = "/bin/Mail"; #(-x $MAIL) or die "no $MAIL program"; sub d { MailBot::Util::debug @_; } sub vInit { my $self = shift; my $config = MailBot::Config::current; # fix Mail::Util bug defined $ENV{LOGNAME} or $ENV{LOGNAME} = (getpwuid($>))[0]; $$self{BOUNCE_ADDR} = $config -> getBounceAddr; $$self{NEVER_SEND} = $config -> neverSend; } sub vQuotaMultiplier { 1; } sub doubleBounce { my $self = shift; my $badMessage = shift; my $error = shift; eval { $gDoubleBounce++ and die "doubleBounce message double-bounced"; my $bounceAddr = $$self{BOUNCE_ADDR}; die "no bounce address" unless $bounceAddr =~ /./; my @data = ("$error\n\n", "____Here is the double-bounced message____\n\n", &MailBot::Util::messageToArray($badMessage) ); my $envelope = new MailBot::Envelope; &MailBot::Entity::setEnvelope($envelope); my $entity = build MailBot::Entity(Data => \@data); $entity -> head -> replace('to',$bounceAddr); $entity -> head -> replace('subject','GetWeb double-bounce'); $self -> vSendMessage($entity); }; if ($@) { print STDERR "triple bounce: $@"; } $gDoubleBounce = 0; die "BOUNCE: saw double-bounce. Closing down to prevent mail loop!"; } sub vGetMessage { my $self = shift; my $message = new Mail::Internet(\*STDIN); $self -> done; $self -> analyzeMessage($message); } sub analyzeMessage { my $self = shift; my $message = shift; my $header = $message -> head; my $config = MailBot::Config::current; if (! $config -> getIniVal("loop","ignore")) { my $loop; eval { $loop = new MailBot::UI::Loop($message); }; if ($@) { die $@ unless $@ =~ s/^LOOP:\s*//; $self -> doubleBounce($message,$@); } $$self{LOOP} = $loop; } my $subject = $header -> get("Subject"); $message -> remove_sig(); my $paBody = $message -> body(); $self -> setIncoming($message); $self -> save($message,"incoming"); 0; } sub vSendMessage { my $self = shift; my $internet = shift; # jfj add getweb version number to headers # jfj check errors-to field my $bounceAddr = $$self{BOUNCE_ADDR}; defined $bounceAddr or $bounceAddr = ""; if (defined $$self{LOOP}) { $$self{LOOP} -> makeAutoResponse($internet, $bounceAddr); } if ($$self{NEVER_SEND}) { $internet -> print; return; } my $config = MailBot::Config::current; $ENV{SMTPHOSTS} = $config -> getIniVal("smtp","host"); $self -> save($internet,"outgoing"); $internet -> smtpsend($bounceAddr) or die "could not send to " . $internet -> get('to'); } 1; GetWeb-1.15/MailBot/UI/Spool.pm100644 431 36 4673 6315772107 15243 0ustar rolftechnicalpackage MailBot::UI::Spool; #use MailBot::Internet; use Mail::Internet; use MailBot::Config; use MailBot::UI::OneMsg; @ISA = qw( MailBot::UI::OneMsg ); use strict; sub d { &MailBot::Util::debug(@_); } # j prevent 'From rolf' from showing up sub waitForSpool { my $self = shift; my $config = MailBot::Config::current; my $localSpool = $config -> getLocalSpool; (-e $localSpool) and return $localSpool; my $mailSpool = $config -> getMailSpool; my $sleep = $config -> getIniVal('load','sleep.spool',30); while (! -r $mailSpool) { warn "cannot read spoolfile $mailSpool"; sleep $sleep; } (-w $mailSpool) or die "cannot write to spoolfile $mailSpool"; $ENV{MAIL} = $mailSpool; while (1) { my @stat = stat($mailSpool); my $size = $stat[7]; if ($size > 1) { my $cmd = $config -> getIniVal('spool','get'); $cmd =~ s/\$localSpool/$localSpool/g; my $mailStatus = `$cmd`; #my $mailStatus = `/bin/echo 's * $localSpool' | /usr/bin/Mail -n`; if ($? << 8) { if ($mailStatus =~ /no mail for/i) { sleep $sleep; next; } die "Mail command returned nonzero: $mailStatus"; } # print STDERR "status: $mailStatus"; return $localSpool; } sleep $sleep; } } sub vGetMessage { my $self = shift; my $spool = $self -> waitForSpool; my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size) = stat($spool); $size > 400000 and die "spool too long"; open(SPOOL,$spool) or die "could not open spool: $!"; flock(SPOOL,2); # exclusive lock my @message = (); my $line = ; $line =~ /^From / or die "$spool is not a mail spool"; push(@message,$line); while (defined ($line = )) { last if $line =~ /^From /; push(@message,$line); } if (defined $line) { my $spoolNew = "$spool.new"; open(SPOOL_NEW,">$spoolNew") or die "could not create $spoolNew: $!"; print SPOOL_NEW $line; while (defined ($line = )) { print SPOOL_NEW $line; } close(SPOOL_NEW) or die "could not write to $spoolNew: $!"; # chmod($mode,$spoolNew) or die "could not chmod $spoolNew: $!"; # chown($uid,$gid,$spoolNew) or die "could not chown $spoolNew: $!"; rename($spoolNew,$spool) or die "could not rename $spool to $spoolNew: $!"; } else { unlink($spool) or die "could not delete $spool: $!"; } my $message = new Mail::Internet(\@message); $self -> analyzeMessage($message); } GetWeb-1.15/MailBot/Util.pm100644 431 36 2361 6315772367 14547 0ustar rolftechnicalpackage MailBot::Util; require Exporter; @ISA = qw( Exporter ); @EXPORT_OK = qw( d ); use strict; my $DEBUG = 1; my $CONSOLE = 0; sub d { &MailBot::Util::debug(@_); } sub debug { return unless $DEBUG; if ($CONSOLE) { print STDERR @_, "\n"; } else { my $config = MailBot::Config::current(); $config -> log(@_); } } sub erasePattern { my $message = shift; my $pattern = shift; my $paBody = $message -> body; my $body = join('',@$paBody); $body =~ s/$pattern//m or return 0; my @newBody = split(/^/m,$body); $message -> body(\@newBody); 1; } sub setBeginPattern { my $message = shift; my $beginPattern = shift; &erasePattern($message,"(.|\n)*$beginPattern"); } sub setEndPattern { my $message = shift; my $endPattern = shift; &erasePattern($message,"$endPattern(.|\n)*"); } sub fold { my $message = shift; my $paBody = $message -> body; my $body = join('',@$paBody); my @newBody = split(/^/m,$body); $message -> body(\@newBody); } sub messageToArray { my $internet = shift; $internet -> head -> unfold; # makes regression tests simpler (@{$internet -> head -> {'mail_hdr_list'}}, "\n", @{$internet -> body}); } 1; GetWeb-1.15/MailBot/MailBot.pm100644 431 36 13530 6314313120 15152 0ustar rolftechnicalpackage MailBot; $VERSION = "1.15"; sub version {$VERSION}; package MailBot::MailBot; =head1 NAME MailBot::MailBot - provide a uniform email, command-line, and CGI interface =head1 SYNOPSIS use MailBot::MailBot; use MailBot::Config; use MailBot::Entity; use MailBot::Envelope; package MyBot; @ISA = qw(MailBot::MailBot); sub vProcess { my ($self, $mail) = @_; MailBot::Entity -> setEnvelope(new MailBot::Envelope); my $entity = new MailBot::Entity("hello world"); MailBot::UI::current -> send($entity); } package main; MailBot::Config -> setRoot("/usr/local/getweb"); MyBot -> new -> run; =head1 DESCRIPTION MailBot is a "virtual class" to allow code to be accessible through email, command-line, and CGI interfaces in a uniform way. =head1 METHODS =cut use MailBot::Util; use MailBot::UI; use MailBot::Envelope; use MailBot::Entity; use strict; sub d { &MailBot::Util::debug(@_); } =head2 vProcess($message) Virtual procedure which must be overridden in subclass. The parameter is a B message. You also can access information about the environment through B and B. =cut sub vProcess { die "procedure vProcess was not overridden!"; } =head2 new() returns a new MailBot. You should not instantiate more than one MailBot in any program. =cut sub new { my $type = shift; my $self = {}; bless($self,$type); } =head2 log($string_to_log) logs the string, with date, to $MAILBOT_ROOT/log/log =cut sub log { my $self = shift; my $config = MailBot::Config::current; $config -> log(@_); } =head2 run() begins processing messages =cut sub run { my $self = shift; my $ui = MailBot::UI::current; my $config = MailBot::Config::current; my $sleep = $config -> getIniVal("load","sleep.message",60); # for testing purposes my $count = $ENV{MAILBOT_TEST_COUNT}; while (1) { if (defined $count) { last if $count < 1; $count--; } while (1) { eval {$ui -> getMessage}; last unless ($@ ne ""); $@ =~ /^BOUNCE:/ or die $@; return unless $ui -> more; } my $incoming = $ui -> copyIncoming; my $timeout = $config -> getIniVal("load","timeout",60*60*24); eval { $SIG{'ALRM'} = sub {die "request timed out\n"}; alarm($timeout); $self -> vProcess($incoming); }; if ($@) { my $exception = $@; $self -> log($exception); $exception =~ /^SILENT/ and exit 0; my $condition; if ($exception =~ s/^([A-Z ]+)://) { $condition = $1; } my $envelope = $self -> newEnvelope($condition); &MailBot::Entity::setEnvelope($envelope); my $desc = $config -> getEnvelopeVal($condition,"desc"); my $data = "$desc\n $exception"; $data .= join('',$self -> appendOriginalRequest); my $entity = build MailBot::Entity ( Data => $data ); my $fileName = $condition; $fileName eq "" and $fileName = "INTERNAL ERROR"; $fileName =~ s/ /_/g; $fileName = "exception.$fileName"; $ui -> save($entity,$fileName); $fileName = "orig_$fileName"; $ui -> save($ui -> {INCOMING},$fileName); $entity -> send; } last unless $ui -> more; sleep $sleep; } } =head2 appendOriginalRequest() returns an array of strings suitable for appending to outgoing error messages. $message_text .= join(' ',$mailbot -> appendOriginalRequest()); =cut sub appendOriginalRequest { my $self = shift; my @appendix = ("\n","____original message follows____","\n","\n"); my $ui = MailBot::UI::current; my $internet = $ui -> copyIncoming; push(@appendix,&MailBot::Util::messageToArray($internet)); @appendix; } =head2 setEnvelopeByCondition($condition) Set the current MailBot::Envelope to reflect the config values for the given error condition. $mailBot -> setEnvelopeByCondition("UNAVAILABLE"); $ui -> send($message); =cut sub setEnvelopeByCondition { my $self = shift; my $condition = shift; my $envelope = $self -> newEnvelope($condition); &MailBot::Entity::setEnvelope($envelope); } sub newEnvelope { my $self = shift; my $condition = shift; my $ui = MailBot::UI::current; my $config = MailBot::Config::current; $config -> log("exception is $condition"); if ($condition eq 'QUOTA') { # try to bill 1 msg, just in case a user keeps trying # to squeeze out last few bytes my $quota = $ui -> getQuota; eval {$quota -> bill(1,"message")}; } my $envelope = new MailBot::Envelope(); my $ccList = $config -> getEnvelopeVal($condition,"cc"); my @aRecipient = (); if ($ccList ne "") { my $cc; foreach $cc (split(' ',$ccList)) { my $address = $config -> getIniVal("address",$cc); defined $address or die "address not defined for $cc"; push (@aRecipient, $address); } } my $head = $ui -> copyIncomingHead; my $originalSender = $head -> get('From'); my $exception = $config -> getIniVal('address','exception'); unless ($exception eq '') { $originalSender = $exception; #redirect errors } my $recipient = $originalSender; # &d("rec is $recipient"); unshift(@aRecipient,$recipient); # &d("rec list is ",@aRecipient); $envelope -> setRecipientList(@aRecipient); $envelope -> setSubject($config -> getEnvelopeVal($condition,"subject")); my $quotaMultiplier = $config -> getEnvelopeVal($condition, "quota_multiplier"); defined $quotaMultiplier or $quotaMultiplier = 1; $envelope -> setQuotaMultiplier($quotaMultiplier); $envelope; } =head1 SEE ALSO L, L, L =head1 COPYRIGHT Copyright (c) 1997 SatelLife. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 AUTHOR Rolf Nelson =cut GetWeb-1.15/MailBot/Split.pm100644 431 36 6156 6266470053 14723 0ustar rolftechnicalpackage MailBot::Split; # jfj delete Split class use Net::Domain qw( hostfqdn ); use MIME::IO; use strict; my @MOVE_OUTSIDE = qw( To Cc Bcc ); sub split_into_array { my $entity = shift; my ($chunkSize, $maxSize) = @_; defined $maxSize or $maxSize = $chunkSize; my $length = &get_length($entity); return [$entity] if $length <= $maxSize; my $id = "$$." . time . '@' . hostfqdn; $entity -> head -> add("Message-Id",'<'.$id.'>'); my @body = &entity_to_array($entity); my @apaPartial = (); while (@body) { my @aPartial = (); my $left = $chunkSize; while (@body) { my $line = $body[0]; $left -= length($line); last if $left < 0; push(@aPartial,shift @body); } @aPartial or die "line " . $body[0] . " is bigger than chunk"; push(@aPartial,"\n"); push(@apaPartial,\@aPartial); } my $head = $entity -> head; my $total = @apaPartial; my $number = 0; my @aReference; my @aEntity; my $paPartial; foreach $paPartial (@apaPartial) { $number++; my $newEntity = ref($entity) -> build(Data => $paPartial, Type => "message/partial; number=$number; ". "total=$total; id=\"$id\""); my $newHead = $newEntity -> head; my $keyword; foreach $keyword (@MOVE_OUTSIDE) { my $val = $head -> get($keyword); defined $val and $newHead -> replace($keyword,$val); } my $subject = $head -> get('Subject'); $newHead -> replace('Subject',"$subject ($number/$total)"); my $partID = "<$number.$id>"; $newHead -> replace('Message-ID',$partID); @aReference and $newHead -> replace('References',join(' ',@aReference)); push(@aReference,$partID); push(@aEntity,$newEntity); } [@aEntity]; } sub get_length { my $entity = shift; my @aEntity = &entity_to_array($entity); my $length = 0; my $line; foreach $line (@aEntity) { $length += length($line); } $length; } sub head_to_array { my $head = shift; @{$head->{'mail_hdr_list'}}; } sub entity_to_array { my $entity = shift; my @body = (); # Output the head and its terminating blank line: push(@body,&head_to_array($entity->head)); push(@body,"\n"); # Output either the body or the parts: if ($entity->is_multipart) { # Multipart... my $boundary = $entity->head->multipart_boundary; # get boundary # Preamble: push(@body,"This is a multi-part message in MIME format.\n"); # Parts: my $part; foreach $part ($entity->parts) { push(@body,"\n--$boundary\n"); push(@body,&entity_to_array($part)); } push(@body,"\n--$boundary--\n\n"); } else { # Single part... # Get the encoding: my $encoding = ($entity->head->mime_encoding || 'binary'); my $decoder = new MIME::Decoder $encoding; # Output the body: my $body = $entity->bodyhandle; my $IO = $body->open("r") || die "open body: $!"; my $encoded; my $encodeIO = new MIME::IO::Scalar \$encoded; $decoder->encode($IO, $encodeIO); # encode it $IO->close; $encodeIO -> close; push(@body,split(/^/m,$encoded)); } @body; } 0; GetWeb-1.15/MailBot/UUEncode.pm100644 431 36 1073 6315051021 15251 0ustar rolftechnicalpackage MailBot::UUEncode; @ISA = qw(MIME::Decoder); use strict; sub decode_it { die "decoding not implemented"; } sub encode_it { my ($self, $in, $out) = @_; my $string = ""; my ($buf, $nread) = ('', 0); while ($nread = $in->read($buf, 4096)) { $string .= $buf; } defined($nread) or return undef; # check for error $string = pack('u',$string); # jfj note filename and content-type $string = "\nYour file has been uuencoded:\n\n" . "begin 644 myfile\n" . $string . " \nend\n"; $out->print($string); 1; } 1; GetWeb-1.15/MailBot/IniConf.pm100644 431 36 15230 6315050774 15165 0ustar rolftechnicalpackage MailBot::IniConf; # modified from Hutton's original IniConf. --rhn # package IniConf; # below is original copyright notice. --rhn # AUTHOR # Scott Hutton (shutton@indiana.edu) # COPYRIGHT # Copyright (c) 1996 Scott Hutton. All rights reserved. This program is # free software; you can redistribute it and/or modify it under the same # terms as Perl itself. # patched 1/97. --rhn require 5.002; # $VERSION = 0.91; use strict; use Carp; use vars qw( $VERSION @instance $instnum @oldhandler @errors ); # # Package variables # @instance = ( ); $instnum = 0; @oldhandler = ( ); @errors = ( ); sub new { my $class = shift; my %parms = @_; my $errs = 0; my @groups = ( ); my $self = {}; $self->{cf} = ''; $self->{firstload} = 1; $self->{default} = ''; # Parse options my($k, $v); local $_; while (($k, $v) = each %parms) { if ($k eq '-file') { $self->{cf} = $v; } elsif ($k eq '-reloadsig') { $v =~ s/^SIG//; $self->{reloadsig} = uc($v); } elsif ($k eq '-default') { $self->{default} = $v; } elsif ($k eq '-nocase') { $self->{nocase} = $v ? 1 : 0; } elsif ($k eq '-reloadwarn') { $self->{reloadwarn} = $v ? 1 : 0; } else { carp "Unknown named parameter $k=>$v"; $errs++; } } croak "must specify -file parameter for new $class" unless $self->{cf}; return undef if $errs; # Set up a signal handler if requested my($sig, $oldhandler, $newhandler); if ($sig = $self->{reloadsig}) { $oldhandler[$instnum] = $SIG{$sig}; $newhandler = "${class}::SigHand_$instnum"; my $toeval = <<"EOT"; sub $newhandler { \$SIG{$sig} = 'IGNORE'; \$${class}::instance[$instnum]->ReadConfig; if (\$oldhandler[$instnum] && \$oldhandler[$instnum] ne 'IGNORE') { eval '&$oldhandler[$instnum];'; } \$SIG{$sig} = '$newhandler' } EOT eval $toeval; } bless $self, $class; $instance[$instnum++] = $self; if ($self->ReadConfig) { $SIG{$sig} = $newhandler if $sig; return $self; } else { return undef; } } sub val { my $self = shift; my $sect = shift; my $parm = shift; if ($self->{nocase}) { $sect = lc($sect); $parm = lc($parm); } # my $val = $self->{v}{$sect}{$parm} || $self->{v}{$self->{default}}{$parm}; my $val = $self->{v}{$sect}{$parm}; # --rhn if (ref($val) eq 'ARRAY') { return wantarray ? @$val : join($/, @$val); } else { return $val; } } sub setval { my $self = shift; my $sect = shift; my $parm = shift; my @val = @_; if (defined($self->{v}{$sect}{$parm})) { if (@val > 1) { $self->{v}{$sect}{$parm} = \@val; } else { $self->{v}{$sect}{$parm} = shift @val; } return 1; } else { return undef; } } sub ReadConfig { my $self = shift; local *CF; my($lineno, $sect); my($group, $groupmem); #my($parm, $value); my @cmts; @errors = ( ); # Initialize (and clear out) storage hashes $self->{sects} = []; # Sections $self->{groups} = {}; # Subsection lists $self->{v} = {}; # Parameter values $self->{sCMT} = {}; # Comments above section my $nocase = $self->{nocase}; my ($ss, $mm, $hh, $DD, $MM, $YY) = (localtime(time))[0..5]; printf STDERR "PID %d reloading config file %s at %d.%02d.%02d %02d:%02d:%02d\n", $$, $self->{cf}, $YY+1900, $MM+1, $DD, $hh, $mm, $ss unless $self->{firstload} || !$self->{reloadwarn}; $self->{firstload} = 0; open(CF, $self->{cf}) || carp "open $self->{cf}: $!"; local $_; my ($parm, $val); while () { chop; $lineno++; if (/^\s*$/) { # ignore blank lines next; } elsif (/^\s*[\#\;]/) { # collect comments push(@cmts, $_); next; } elsif (/^\s*\[([^\]]+)\]\s*$/) { # New Section $sect = $1; $sect = lc($sect) if $nocase; push(@{$self->{sects}}, $sect); if ($sect =~ /(\S+)\s+(\S+)/) { # New Group Member ($group, $groupmem) = ($1, $2); if (!defined($self->{group}{$group})) { $self->{group}{$group} = []; } push(@{$self->{group}{$group}}, $groupmem); } if (!defined($self->{v}{$sect})) { $self->{sCMT}{$sect} = [@cmts] if @cmts > 0; $self->{pCMT}{$sect} = {}; # Comments above parameters $self->{parms}{$sect} = []; @cmts = ( ); $self->{v}{$sect} = {}; } } elsif (($parm, $val) = /\s*(\S+)\s*=\s*(.*)/) { # new parameter $parm = lc($parm) if $nocase; $self->{pCMT}{$sect}{$parm} = [@cmts]; @cmts = ( ); if ($val =~ /^<<(.*)/) { # "here" value my $eotmark = $1; my $foundeot = 0; my $startline = $lineno; my @val = ( ); while () { chop; $lineno++; if ($_ eq $eotmark) { $foundeot = 1; last; } else { push(@val, $_); } } if ($foundeot) { $self->{v}{$sect}{$parm} = \@val; $self->{EOT}{$sect}{$parm} = $eotmark; } else { push(@errors, sprintf('%d: %s', $startline, qq#no end marker ("$eotmark") found#)); } } else { $self->{v}{$sect}{$parm} = $val; } push(@{$self->{parms}{$sect}}, $parm); } else { push(@errors, sprintf('%d: %s', $lineno, $_)); } } close(CF); @errors ? undef : 1; } sub Sections { my $self = shift; @{$self->{sects}}; } sub Parameters { my $self = shift; my $sect = shift; @{$self->{parms}{$sect}}; } sub GroupMembers { my $self = shift; my $group = shift; @{$self->{group}{$group}}; } sub WriteConfig { my $self = shift; my $file = shift; local(*F); open(F, "> $file.new") || do { carp "Unable to write temp config file $file: $!"; return undef; }; my $oldfh = select(F); $self->OutputConfig; close(F); select($oldfh); rename "$file.new", $file || do { carp "Unable to rename temp config file to $file: $!"; return undef; }; return 1; } sub RewriteConfig { my $self = shift; $self->WriteConfig($self->{cf}); } sub OutputConfig { my $self = shift; my($sect, $parm, @cmts); my $notfirst = 0; local $_; foreach $sect (@{$self->{sects}}) { print "\n" if $notfirst; $notfirst = 1; if ((ref($self->{sCMT}{$sect}) eq 'ARRAY') && (@cmts = @{$self->{sCMT}{$sect}})) { foreach (@cmts) { print "$_\n"; } } print "[$sect]\n"; foreach $parm (@{$self->{parms}{$sect}}) { if ((ref($self->{pCMT}{$sect}{$parm}) eq 'ARRAY') && (@cmts = @{$self->{pCMT}{$sect}{$parm}})) { foreach (@cmts) { print "$_\n"; } } my $val = $self->{v}{$sect}{$parm}; if (ref($val) eq 'ARRAY') { my $eotmark = $self->{EOT}{$sect}{$parm}; print "$parm= <<$eotmark\n"; foreach (@{$val}) { print "$_\n"; } print "$eotmark\n"; } else { print "$parm=", $self->{v}{$sect}{$parm}, "\n"; } } } } 1; GetWeb-1.15/MailBot/Quota.pm100644 431 36 7502 6314061404 14703 0ustar rolftechnicalpackage MailBot::Quota; =head1 NAME MailBot::Quota - Enforce quotas =head1 SYNOPSIS use MailBot::Quota; my $quota = new MailBot::Quota('rolf@usa.healthnet.org',1); $quota -> bill(3,"wicket") # dies if cannot bill for three wickets =head1 DESCRIPTION Enforces quotas, usually of messages and bytes sent but can also be of based on any string =head1 METHODS =cut use POSIX; use AnyDBM_File; use MailBot::Util; use MailBot::Config; use strict; my $QUOTA_PERIOD = 7; my $QUOTA_QUANTUM = 60 * 60 * 24; #my %ghProfile = ( # other => 14, # healthnet => 56, # staff => 140 # ); sub d { &MailBot::Util::debug(@_); } =head2 new($user_address,$quota_multiplier) Create a new Quota object based on a user-address. Set $quota_multiplier to 1 for normal operation, and to zero to make all subsequent bill() calls no-ops. =cut sub new { my $type = shift; my $user = shift; my $multiplier = shift; chomp($user); my $self = {USER => $user, MULTIPLIER => $multiplier }; bless($self,$type); } # jfj consider allowing larger files from software archives =head2 bill($quantity,$billType) bill the quota for $quantity counters of type $billType (usually 'message' or 'byte', but can be anything), or throw an exception. If $quantity is 0 or the quota-multiplier is 0, this is a no-op. =cut sub bill { my $self = shift; my ($quantity, $billType) = @_; $quantity *= $$self{MULTIPLIER}; my $ui = &MailBot::UI::current; my $profile = $ui -> getProfile; my $profileMultiplier = $profile -> getProfileVal("multiplier.quota.$billType"); $quantity *= $profileMultiplier if defined $profileMultiplier; my $user = $$self{USER}; my $config = MailBot::Config::current; $config -> log("charging $user for $quantity $billType counters"); return if $quantity eq 0; my $quotaDir = $config -> getQuotaDir(); my $quotaFile = "$quotaDir/quota"; my %hQuota; # jfj get lock during entire set of database operations no strict 'subs'; tie %hQuota, AnyDBM_File, $quotaFile, O_CREAT|O_RDWR, 0640 or die "tie to quota database $quotaFile failed: $!"; use strict 'subs'; my $id = $user . "." . $billType . "."; # synch with time my $then = $hQuota{$id."then"}; if (! defined $then) { $then = time(); } else { my $elapsed = time() - $then; my $qElapsed; { use integer; $qElapsed = $elapsed / $QUOTA_QUANTUM; } if ($qElapsed > 0) { &d("aging quota by $qElapsed"); $then += $qElapsed * $QUOTA_QUANTUM; my $slot; foreach $slot (reverse (0..$QUOTA_PERIOD-1)) { my $newVal = $hQuota{$id.($slot-$qElapsed)}; if (defined $newVal) { &d("setting slot $slot to $newVal"); $hQuota{$id.$slot} = $newVal; } else { delete $hQuota{$id.$slot}; } } } } &d("setting time to $then"); $hQuota{$id."then"} = $then; my $allowed = $profile -> getProfileVal("quota.$billType"); if ($allowed =~ /(.+)\*(.+)/) { $allowed = $profile -> getProfileVal("quota.$1") * $2; } my $total; my $slot; foreach $slot (0..$QUOTA_PERIOD-1) { $total += $hQuota{$id.$slot}; } &d("had used quota of $total before request"); #die "already over quota of $allowed" if $total > $allowed; if ($total + $quantity > $allowed) { die "QUOTA: $billType quota is $allowed for $user, already at $total, refused to allow $quantity more.\n"; } $hQuota{$id."0"} += $quantity; untie %hQuota or die "untie of quota database failed"; } 1; =head1 SEE ALSO L, L, L =head1 COPYRIGHT Copyright (c) 1997 SatelLife. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 AUTHOR Rolf Nelson =cut GetWeb-1.15/MailBot/Envelope.pm100644 431 36 6534 6314036477 15407 0ustar rolftechnicalpackage MailBot::Envelope; =head1 NAME MailBot::Envelope - encapsulates MailBot-specific state information relating to an outgoing message =head1 SYNOPSIS use MailBot::Entity; use MailBot::Envelope; my $envelope = new MailBot::Envelope(); $envelope -> setSubject("my subject"); $envelope -> setMIME(0); #send binary files uuencoded, not base64 MailBot::Entity::setEnvelope(new MailBot::Envelope()); =head1 DESCRIPTION MailBot::Entity extends extends L to support quotas and L objects. =head1 METHODS =cut use MailBot::Recip; use MailBot::UI; use MailBot::Config; use strict; sub d { &MailBot::Util::debug(@_); } =head2 new() Create a new envelope, with the default recipient being the sender of the original, incoming message. =cut sub new { my $type = shift; my $ui = MailBot::UI::current; my $replyTo = $ui -> getReturnAddress; my $defaultRecip = new MailBot::Recip($replyTo); my $self = {DEFAULT_RECIP => $defaultRecip, MESSAGE_TYPE => "normal", QUOTA_MULTIPLIER => 1, MIME => 1}; bless($self,$type); } =head2 setSplitSize($size) Set size which message cannot exceed without being split into multiple MIME message/partial fragments before sending =cut sub setSplitSize { my $self = shift; my $size = shift; $size =~ /^\d+$/ or die "illegal split size: $size\n"; $$self{SPLIT_SIZE} = $size; } sub getSplitSize { my $self = shift; my $size = $$self{SPLIT_SIZE}; return $size if defined $size; my $config = MailBot::Config::current; $config -> getSplitSize; } =head2 setMIME($bool) If $bool is 1, binary messages are as MIME base64. If $bool is 0, binary messages are sent uuencoded. =cut sub setMIME { my $self = shift; $$self{MIME} = shift; } sub getRecip { my $self = shift; my $recip = $$self{RECIP}; return $recip if defined $recip; # &d("using default"); $self -> {DEFAULT_RECIP}; } sub getQuotaMultiplier { shift -> {QUOTA_MULTIPLIER}; } =head2 setRecipientList($address_string [...]) Set the recipient list to the given address(es). The first address given will be 'To', subsequent ones will be Cc'd. =cut sub setRecipientList { my $self = shift; # &d("setting list to ",@_); $self -> {RECIP} = new MailBot::Recip(@_); } sub setDefaultAddress { my $self = shift; $self -> {DEFAULT_RECIP} = new MailBot::Recip(@_); } =head2 setQuotaMultiplier($new_quota_multiplier) Default quota multiplier is 1. If the user should not be charged for this message, set to 0. =cut sub setQuotaMultiplier { my $self = shift; $$self{QUOTA_MULTIPLIER} = shift; } sub getFrom { shift -> {FROM}; } sub setFrom { my $self = shift; my $sender = shift; $$self{FROM} = $sender; } sub getSubject { shift -> {SUBJECT}; } =head2 setSubject($subject) sets the Subject: line of the outgoing message. =cut sub setSubject { my $self = shift; my $subject = shift; $$self{SUBJECT} = $subject; } sub getLastByte { my $config = MailBot::Config::current; $config -> getMaxSize; } 1; =head1 SEE ALSO L, L =head1 COPYRIGHT Copyright (c) 1997 SatelLife. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 AUTHOR Rolf Nelson =cut GetWeb-1.15/MailBot/Sendable.pm100644 431 36 14373 6307371267 15370 0ustar rolftechnicalpackage MailBot::Sendable; use Net::Domain qw( hostfqdn hostname ); use Mail::Util qw(mailaddress); use MIME::IO; use MIME::Entity; use Carp; @ISA = qw( MIME::Entity ); $gPreamble = "This is a multi-part message in MIME format."; my $pgPreamble = \$gPreamble; $gBase64Preamble = "A binary file was encoded in Base64.\n You need a MIME-capable mailer to read it."; my $pgBase64Preamble = \$gBase64Preamble; use strict; my @MOVE_OUTSIDE = qw( To Cc Bcc ); # smtpsend: adapted from Barr's Mail::Internet::smtpsend. # changes: # works correctly with file-attaches # does not delete 'Received' lines (or even misspelled 'Recieved' lines) # does not insert 'Sender', 'Mailer' fields # allows you to specify envelope from-field sub smtpsend { my $src = shift; my $envelopeFrom = shift; my($mail,$smtp,@hosts); $envelopeFrom = mailaddress() unless defined $envelopeFrom; require Net::SMTP; @hosts = qw(mailhost localhost); unshift(@hosts, split(/:/, $ENV{SMTPHOSTS})) if(defined $ENV{SMTPHOSTS}); my $host; foreach $host (@hosts) { $smtp = eval { Net::SMTP->new($host) }; last if(defined $smtp); } croak "Cannot initiate a SMTP connection" unless(defined $smtp); $smtp->hello( hostname() ); # only dups the headers, alas $mail = $src->dup; $mail->delete('From '); # Just in case :-) # Ensure the mail has the following headers # From, Reply-To my($from,$name,$tag); $name = (getpwuid($>))[6] || $ENV{NAME} || ""; while($name =~ s/\([^\(]*\)//) { 1; } $from = sprintf "%s <%s>", $name, mailaddress(); $from =~ s/\s{2,}/ /g; foreach $tag (qw(From Reply-To)) { $mail->add($tag,$from) unless($mail->get($tag)); } # Who is it to my @rcpt = ($mail->get('To', 'Cc', 'Bcc')); chomp(@rcpt); my @addr = map($_->address, Mail::Address->parse(@rcpt)); return () unless(@addr); $mail->delete('Bcc'); # Remove blind Cc's $mail->clean_header; # Send it my @fullBody = $src -> body_to_array; my $ok = $smtp->mail( $envelopeFrom ) && $smtp->to(@addr) && $smtp->data(join("", $mail -> head_to_array, "\n", @fullBody)); $smtp->quit; $ok ? @addr : (); } sub split_into_array { my $entity = shift; my ($chunkSize, $maxSize) = @_; defined $maxSize or $maxSize = $chunkSize; my $length = &get_length($entity); return [$entity] if $length <= $maxSize; my $id = ".$$." . time . '@' . hostfqdn; # pad id to 40 characters for more consistency while (length($id) < 40) { $id = "a" . $id; } $entity -> head -> add("Message-Id",'<'.$id.'>'); my @body = &entity_to_array($entity); my @apaPartial = (); while (@body) { my @aPartial = (); my $left = $chunkSize; while (@body) { my $line = $body[0]; $left -= length($line); last if $left < 0; push(@aPartial,shift @body); } @aPartial or die "line " . $body[0] . " is bigger than chunk"; push(@aPartial,"\n"); push(@apaPartial,\@aPartial); } my $head = $entity -> head; my $total = @apaPartial; my $number = 0; my @aReference; my @aEntity; my $paPartial; foreach $paPartial (@apaPartial) { $number++; my $newEntity = ref($entity) -> build(Data => $paPartial, Type => "message/partial; number=$number; ". "total=$total; id=\"$id\""); my $newHead = $newEntity -> head; my $keyword; foreach $keyword (@MOVE_OUTSIDE) { my $val = $head -> get($keyword); defined $val and $newHead -> replace($keyword,$val); } my $subject = $head -> get('Subject'); $newHead -> replace('Subject',"$subject ($number/$total)"); my $partID = "<$number.$id>"; $newHead -> replace('Message-ID',$partID); if (@aReference) { # limit to four references, like mpack does @aReference > 4 and shift @aReference; $newHead -> replace('References',join(' ',@aReference)); } push(@aReference,$partID); push(@aEntity,$newEntity); } [@aEntity]; } sub get_length { my $entity = shift; my @aEntity = &entity_to_array($entity); my $length = 0; my $line; foreach $line (@aEntity) { $length += length($line); } $length; } # get: bug-fix to Mail::Internet::get sub get { my $me = shift; my $head = $me->head; my @val = (); my $tag; foreach $tag (@_) { last if push(@val, $head->get($tag)) && !wantarray; } wantarray ? @val : shift @val; } sub head_to_array { my $self = shift; my $head = $self -> head; $head -> delete('X-Mailer'); @{$head->{'mail_hdr_list'}}; } sub print { my $self = shift; my $fh = shift || select; no strict 'refs'; $self -> head -> delete('X-Mailer'); my @array = $self -> entity_to_array; print $fh @array; } sub entity_to_array { my $self = shift; my @text = (); push(@text,$self -> head_to_array); push(@text,"\n"); push(@text,$self -> body_to_array); @text; } sub body_to_array { my $entity = shift; my @body = (); # # Output the head and its terminating blank line: # push(@body,$entity->head_to_array); # push(@body,"\n"); # Output either the body or the parts: if ($entity->is_multipart) { # Multipart... my $boundary = $entity->head->multipart_boundary; # get boundary my $part; my $isBase64 = 0; foreach $part ($entity->parts) { my $encoding = $part -> head -> mime_encoding; if ($encoding eq "base64") { $isBase64 = 1; last; } } if ($isBase64) { push(@body,$$pgBase64Preamble . "\n"); } else { push(@body,$$pgPreamble . "\n"); } # Parts: foreach $part ($entity->parts) { push(@body,"\n--$boundary\n"); push(@body,&entity_to_array($part)); } push(@body,"\n--$boundary--\n\n"); } else { # Single part... # Get the encoding: my $encoding = ($entity->head->mime_encoding || 'binary'); my $decoder = new MIME::Decoder ($encoding); #$encoding =~ /bit$/i and # $decoder -> encode_8bit_by("ENTITY"); # Output the body: my $body = $entity->bodyhandle; my $IO = $body->open("r") || die "open body: $!"; my $encoded; my $encodeIO = new MIME::IO::Scalar \$encoded; $decoder->encode($IO, $encodeIO); # encode it $IO->close; $encodeIO -> close; push(@body,split(/^/m,$encoded)); } # jfj eliminate redundancy with MIME print classes @body; } 1; GetWeb-1.15/MailBot/Entity.pm100644 431 36 10166 6314256145 15116 0ustar rolftechnicalpackage MailBot::Entity; =head1 NAME MailBot::Entity - quota-enforcing extension to MIME::Entity =head1 SYNOPSIS use MailBot::Entity; use MailBot::Envelope; MailBot::Entity::setEnvelope(new MailBot::Envelope()); my $msg = new MailBot::Entity("If you can read this, you had enough quota"); $msg -> send(); # dies if not enough quota =head1 DESCRIPTION MailBot::Entity extends extends L to support quotas and L objects. =head1 SEE ALSO L, L, L, L =head1 COPYRIGHT Copyright (c) 1997 SatelLife. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 AUTHOR Rolf Nelson =cut use MailBot::Sendable; use MailBot::UI; use MIME::Decoder; use MailBot::UUEncode; #install MailBot::UUEncode 'x-uuencode'; # broken MIMETools-2.04 'install' makes this workaround necessary: $MIME::Decoder::DecoderFor{'x-uuencode'} = MailBot::UUEncode; # jfj create 'profile' for healthnet users who probably have no MIME @ISA = qw( MailBot::Sendable ); use Carp; use strict; my $gEnvelope; # j implement "fake quota" copies sub setEnvelope { $gEnvelope = shift; } sub send { my $self = shift; my $paResource = shift || []; my $config = MailBot::Config -> current; my $ui = MailBot::UI -> current; defined $gEnvelope or croak "no envelope"; my $quotaMultiplier = $gEnvelope -> getQuotaMultiplier; my $from = $gEnvelope -> getFrom; defined $from and $self -> head -> replace('From',$from); my $resource; foreach $resource (@$paResource) { my $resourceMultiplier = $config -> getIniVal("quota",$resource,1); $quotaMultiplier *= $resourceMultiplier; } # jf only chop, not die, if message too long my $length = $self -> get_length; $config -> log("send $length bytes to ", $gEnvelope -> getRecip -> asString()); my $lastByte = $gEnvelope -> getLastByte; $length > $lastByte and die "UNAVAILABLE: message of length $length too long,\nmaximum length is $lastByte\n"; my $quota = $ui -> getQuota; $quota -> bill(1 * $quotaMultiplier,"message"); $quota -> bill($length * $quotaMultiplier,"byte"); my $splitMultiplier = $config -> getSplitMultiplier; my $splitSize = $gEnvelope -> getSplitSize; if ($splitSize < 500 or $splitSize > 200000) { die "split size of $splitSize is illegal, must be between 500 and 200000 bytes\n"; } my $maxChunk = $splitSize * $splitMultiplier; my $paSplit = $self -> split_into_array($splitSize,$maxChunk); my $msg; foreach $msg (@$paSplit) { $ui -> sendMessage($msg); } } # jfj smarter about when to use 7-bit and when to use q-p encoding sub build { my $type = shift; my %opt = @_; my $top = exists($opt{Top}) ? $opt{Top} : 1; my $contentEncoding = $opt{Encoding}; my $self = $type -> SUPER::build(@_); my $header = $self -> head; my $contentType = $header -> mime_type; my $newEncoding; if (! defined $contentEncoding and $contentType !~ m|^multipart/| and $contentType !~ m|^message/|) { my $mime = $$gEnvelope{MIME}; if (defined $contentType and $contentType !~ m!^text/!) { if ($mime) { $newEncoding = "base64"; } else { $newEncoding = "x-uuencode"; } } # default is 7bit } $header -> replace('Content-Transfer-Encoding',$newEncoding) if (defined $newEncoding); my $lastByte = $gEnvelope -> getLastByte; my $length = $self -> get_length; $length <= $lastByte or die "UNAVAILABLE: message longer than $lastByte bytes\n"; return $self unless $top; my $recip = $gEnvelope -> getRecip; if (defined $recip) { $self -> head -> add('to',$recip -> to); $self -> head -> add('cc',$recip -> cc) if $recip -> cc ne ""; } $self -> head -> add('subject',$gEnvelope -> getSubject); if ($top) { my $ui = &MailBot::UI::current; my $paNote = $ui -> getNoteRef; $self -> head -> add('X-MailBot-Note',join(', ',@$paNote)) if @$paNote; @$paNote = (); } $self; } 1; GetWeb-1.15/MailBot/Profile.pm100644 431 36 7526 6314254061 15223 0ustar rolftechnicalpackage MailBot::Profile; =head1 NAME MailBot::Profile - User-specific or group-specific parameters =head1 SYNOPSIS use MailBot::UI; my $profile = MailBot::UI -> current -> getProfile; my $max_wicket = $profile -> getProfileVal("user_specific_wicket_limit"); $wicket > $max_wicket and die "ACCESS_DENIED: too many wickets"; =head1 DESCRIPTION Profiles can be based on domains, hostnames, or individual user names. =head1 METHODS =cut use MailBot::Config; use Carp; use strict; my @gaphGroup = (); # jfj add database support # jfj add table support sub new { my $type = shift; my $address = shift; chomp($address); my $self = {ADDRESS => $address}; bless($self,$type); $self -> setGroupFromAddress($address); $self; } sub getQuota { my $self = shift; my $multiplier = shift; my $address = $$self{ADDRESS}; new MailBot::Quota($address,$multiplier); } # jfj add blocking capability sub tryGroupFromID { my $self = shift; my $id = shift; my $config = MailBot::Config::current; my $group = $config -> getIniVal('map.group',$id); # sanity check, make sure group is defined in ini-file if (defined $group) { my @aSection = $config -> getIni -> Sections; grep($_ eq "profile.$group",@aSection) or die "not found in config file: profile.$group"; } $group; } sub setGroupFromAddress { my $self = shift; my $address = shift; my $group = $self -> addressToGroup($address); $$self{GROUP} = $group; } sub addressToGroup { my $self = shift; my $address = shift; my $host = $address; $host =~ s/.+\@//; $host =~ s/\!.+//; my @aTry = ($address, $host); my $domain = $host; while ($domain =~ s/^[^.]+\.//) { push(@aTry,$domain); } my $try; while (@aTry) { $try = shift @aTry; my $group = $self -> tryGroupFromID($try); return $group if defined $group; } return "normal"; } =head2 getProfileVal($key[,$default]) Gets a value from a key-string, with an optional default. =cut sub getProfileVal { my $self = shift; my ($param,$default) = @_; my $group = $$self{GROUP}; my $config = MailBot::Config::current; my $val = $config -> getIniVal("profile.$group",$param); return $val if defined $val; $config -> getIniVal('profile',$param,$default); } # isContentTypeDenied: based on the MIME content-type of the Web # document and the size, returns "" if OK, or else a nonzero-length # string explaining why it was denied sub isContentTypeDenied { my ($self,$contentType,$size) = @_; my $deny = $self -> _getContentTypeParam($contentType,'deny',0); $deny and return "not allowed to fetch files of content-type '$contentType'"; my $maxSize = $self -> _getContentTypeParam($contentType,'max_size'); if (defined $maxSize and $size > $maxSize) { return "not allowed to fetch $contentType files of length over $maxSize"; } ""; # if not specifically forbidden, then is allowed } sub _getContentTypeParam { my ($self,$contentType,$key,$default) = @_; my $contentTypeBase = $contentType; $contentTypeBase =~ s^/.+^^; foreach (".$contentType", ".$contentTypeBase", "") { my $ret = $self -> getProfileVal("content.$key$_"); return $ret if defined $ret; } $default; } sub dDie { my $self = shift; my $failedAction = shift; my $group = $$self{GROUP}; die "ACCESS DENIED: members of group $group may not $failedAction\n"; } sub allowRedirect { shift -> getProfileVal('allow_redirect'); } 1; =head1 SEE ALSO L, L, L, L =head1 COPYRIGHT Copyright (c) 1997 SatelLife. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 AUTHOR Rolf Nelson =cut GetWeb-1.15/MailBot/Config.pm100644 431 36 11545 6314315026 15043 0ustar rolftechnicalpackage MailBot::Config; =head1 NAME MailBot::Config - interface to config/mailbot.config file =head1 SYNOPSIS use MailBot::Config; MailBot::Config -> setRoot("/usr/local/my_bot/"); my $config = MailBot::Config -> current; $config -> getIniVal("mysection","myparam","mydefault"); =head1 DESCRIPTION MailBot::Config provides an interface for reading the configuration file. =head1 METHODS =cut use MailBot::IniConf; use Carp; use strict; my $gRoot = "/tmp/mailbot"; my $gCurrentConfig; =head2 setRoot($root) Set the root to $root, so that the config file is at $root/config/mailbot.config, and the pub directory is at $root/pub/, etc. Call this method BEFORE your first call to L, otherwise your default root will be /tmp/mailbot/. =cut sub setRoot { my $self = shift; my $rootDir = shift; $gRoot = $rootDir; $gCurrentConfig = new MailBot::Config($gRoot); } =head2 current() get the current MailBot::Config instance. Do not call this method before your call to L. =cut sub current { $gCurrentConfig or croak "have not yet set root"; $gCurrentConfig; } sub getRoot { $gRoot; } sub getIni { my $ini = shift -> {INI}; croak "unloaded inifile" if ! defined $ini; $ini; } sub getMaxSize { shift -> getIniVal("load","maxsize",500000); } sub getEnvelopeVal { my $self = shift; my $condition = shift; my $param = shift; my $lower = lc $condition; $lower =~ s/ /_/g; my $section = "envelope.$lower"; # check if we should use default my @aSection = $self -> getIni -> Sections; grep($_ eq $section,@aSection) or $section = "envelope."; $self -> getIniVal($section,$param); } =head2 getIniVal($section,$param,[$default]) Looks up section and parameter in ini-file. If value is not listed in inifile, returns $default (which may be the undefined value). =cut sub getIniVal { my $ini = shift -> getIni; my ($section,$param,$default) = @_; my $val = scalar($ini -> val($section,$param)); return $val if defined $val; $default; } sub getSplitSize { shift -> getIniVal('smtp','split_size'); } sub getSplitMultiplier { shift -> getIniVal('smtp','split_multiplier'); } sub neverSend { shift -> getIniVal('smtp','never_send'); } sub new { my $type = shift; my $root = shift; my $self = { INTERACTIVE => 0 }; my $mailBotConfigFile = "$root/config/mailbot.config"; my $iniConf = new MailBot::IniConf -file => $mailBotConfigFile; $$self{INI} = $iniConf; bless($self,$type); $self; } sub isInteractive { my $self = shift; $self -> {INTERACTIVE}; } sub getLocalSpool { my $spoolDir = shift -> getDir('spool'); my $progName = $0; $progName =~ s/.+\///; $progName =~ s/\.pl$//; return "$spoolDir/rfc822.in.$progName"; } sub getMailSpool { shift -> {SPOOL}; } =head2 setMailSpool($spool_file), setInteractive(), setCGI() set the interface method: mail spool, interactive command-line, or CGI. Default is individual mail messages. =cut sub setMailSpool { my $self = shift; $self -> {SPOOL} = shift; } sub setInteractive { my $self = shift; $self -> {INTERACTIVE} = 1; } sub isCGI { my $self = shift; $self -> {CGI}; } sub setCGI { my $self = shift; $self -> {CGI} = 1; } sub getBody { shift -> {BODY}; } sub getBounceAddr { my $ini = shift -> {INI}; return undef if ! defined $ini; $ini -> val('address','bounce'); } sub setBody { my $self = shift; $self -> {BODY} = shift; } sub getSubject { shift -> {SUBJECT}; } sub setSubject { my $self = shift; $self -> {SUBJECT} = shift; } sub getDir { my $self = shift; my $dirName = shift; my $path = "$gRoot/$dirName"; if (! -d $path) { mkdir($path,0777) or die "could not mkdir $path: $!"; } $path; } sub getSaveDir { shift -> getDir('save'); } sub getQuotaDir { shift -> getDir('quota'); } =head2 getPubDir() Returns the public directory, usually $root/pub/. =cut sub getPubDir { "$gRoot/pub"; } sub getLogDir { shift -> getDir('log'); } =head2 log($message_string) log message to $root/log/log file, with date. =cut sub log { my $self = shift; my $string = join('',@_); chomp($string); $string =~ s/\n/\\n/g; my $logDir = $self -> getLogDir(); my $logFile = "$logDir/log"; my $logString = scalar(localtime()) . ": " . $string . "\n"; if (open(LOG,">>$logFile")) { print LOG $logString; close(LOG); } else { print STDERR $logString; } } 1; =head1 SEE ALSO L, L, L, L =head1 COPYRIGHT Copyright (c) 1997 SatelLife. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 AUTHOR Rolf Nelson =cut GetWeb-1.15/MailBot/Recip.pm100644 431 36 1122 6271213507 14651 0ustar rolftechnicalpackage MailBot::Recip; use MailBot::Util; use strict; sub d { &MailBot::Util::debug(@_); } sub new { my $type = shift; my @recipient = @_; my $self = {RECIPIENT_LIST => \@recipient }; bless($self,$type); } sub asString { my $paRecipient = shift -> {RECIPIENT_LIST}; join(' ',@$paRecipient); } sub to { my $paRecipient = shift -> {RECIPIENT_LIST}; # &d("main recipient is " . $$paRecipient[0]); $$paRecipient[0]; } sub cc { my $paRecipient = shift -> {RECIPIENT_LIST}; my @aRec = @$paRecipient; shift @aRec; join(' ',@aRec); } 1; GetWeb-1.15/GetWeb/ 40755 431 36 0 6316042225 13003 5ustar rolftechnicalGetWeb-1.15/GetWeb/Parser.pm100644 431 36 14322 6307561025 14720 0ustar rolftechnicalpackage GetWeb::Parser; use GetWeb::Cmd; use GetWeb::SURL; use MailBot::Entity; use Carp; use strict; my $gpaBody; my $gLine; sub sDie { croak "SYNTAX ERROR: ". shift; } sub d { &MailBot::Util::debug(@_); } my %ghSynonym = ( GET => ["\n\n"], SEND => ["GET"], GO => ["GET"], WWW => ["GET"], SEARCH => ["ALIAS"], RGET => ["GET","TO"], RWWW => ["WWW","TO"], RSEND => ["SEND","TO"], RSOURCE => ["SOURCE","TO"], RDEEP => ["DEEP","TO"], ); my @gaOneBefore = qw( SOURCE NOMIME DEEP ); my @gaTwoBefore = qw( SPLIT TO USER PASSWORD ); my @gaSlurp = qw( ALIAS HELP ); my @gaTwoAfter = qw( FOLLOW ); my @gaAny = (@gaOneBefore, @gaTwoBefore, @gaSlurp, @gaTwoAfter, keys %ghSynonym, "\n\n"); sub getCmdIter { my $type = shift; my $cwd = shift; my $paText = shift; $gLine = ""; my $commandIter = new GetWeb::CmdIter; $gpaBody = $paText; # do not define these variables inside the eval, since we nest evals my $command; my $param; my @paramList; eval { my $token = $type -> gwNextKey; while (defined $token) { $command = new GetWeb::Cmd $cwd; my $sawSURL = 0; my $empty = 1; while (defined $token) { if ($token eq "\n\n") { $token = $type -> gwNextKey; last; } my $upperToken = uc $token; if (grep($_ eq $upperToken, @gaOneBefore)) { last if $sawSURL; my $method = "keyOne" . $upperToken; # print STDERR "executing: " . '$command -> ' . $method; #$command -> addCanon($upperToken); $type -> commandMethod($command,$method,$upperToken); #eval '$command -> ' . $method; #$@ and die $@; $empty = 0; next; } if (grep($_ eq $upperToken, @gaTwoBefore)) { last if $sawSURL; my $method = "keyTwo" . $upperToken; $param = $type -> gwNextToken; #$command -> addCanon($upperToken,$param); $type -> commandMethod($command,$method,$upperToken,$param); #eval '$command -> ' . "$method" . '($param)'; #$@ and die $@; $empty = 0; next; } if (grep($_ eq $upperToken, @gaTwoAfter)) { &sDie("$upperToken must go after URL") unless $sawSURL; my $method = "keyAppTwo" . $upperToken; $param = $type -> gwNextToken; #$command -> addCanon($upperToken,$param); $type -> commandMethod($command,$method,$upperToken,$param); #eval '$command -> ' . "$method" . '($param)'; #$@ and die $@; $empty = 0; next; } if (grep($_ eq $upperToken, @gaSlurp)) { last if $sawSURL; $sawSURL = 1; my $method = "keySlurp" . $upperToken; @paramList = (); while ($token = $type -> gwNextToken) { # jfj redo next_token into array my $upper = uc $token; my $paToken = $ghSynonym{$upper}; if ($paToken) { $gLine = join(' ',@$paToken,$gLine); $token = $type -> gwNextToken; redo; } my $upperParam = uc $token; last if grep($_ eq $upperParam,@gaAny); push(@paramList,$token); } #$command -> addCanon($upperToken,@paramList); $type -> commandMethod($command,$method,$upperToken,@paramList); #eval '$command -> ' . "$method" . '(@paramList)'; #$@ and die $@; $sawSURL = 1; $empty = 0; redo; # need to re-use last token } # must be an URL last if $sawSURL; $command -> addCanon($token); my $surl = new GetWeb::SURL($token); $command -> setSURL($surl); $sawSURL = 1; $empty = 0; next; } continue { $token = $type -> gwNextKey; } if (! $empty) { $sawSURL or &sDie("need to specify URL in command: " . $command -> asString . "\n"); $commandIter -> pushCmd($command); } } }; if ($@) { ($@ =~ /^SYNTAX ERROR: (.+)/) or die ($@); $commandIter -> pushError($@); } $commandIter; } sub commandMethod { my ($type, $command, $methodName, $commandName, @paramList) = @_; $command -> addCanon($commandName,@paramList); my $ui = MailBot::UI::current; my $profile = $ui -> getProfile; my $profileKey = lc "deny.$commandName"; my $deny = $profile -> getProfileVal($profileKey); $deny ne "" and die "ACCESS DENIED: '$commandName' command $deny\n"; my $ret = eval '$command -> ' . "$methodName" . '(@paramList)'; $@ and die $@; $ret; } sub gwNextLine { my $self = shift; my $paBody = $gpaBody; my $line; do {$line = shift @$paBody} while $line =~ /^\#/; while ($line =~ s/\\$//) { chomp($line); $line .= shift @$paBody; } $gLine = $line; } sub gwCurrentLine { $gLine; } sub gwNextKey { my $type = shift; my $cmd = shift; my $token = $type -> gwNextToken; return undef unless defined $token; my $upperToken = uc $token; # check if it is synonym, like "RSEND" which is "GET TO" my $paToken = $ghSynonym{$upperToken}; if ($paToken) { $gLine = join(' ',@$paToken,$gLine); return $type -> gwNextKey($cmd); } if ($token =~ /^\d+$/) { $gLine = "GET : FOLLOW $token $gLine"; return $type -> gwNextKey($cmd); } $cmd -> addCanon($token) if defined $cmd; $token; } sub gwNextToken { my $self = shift; my $cmd = shift; my $ret = $self -> gwNextTokenSilent; $cmd -> addCanon($ret) if defined $cmd; $ret; } sub gwNextTokenSilent { my $self = shift; my $paBody = $gpaBody; my $line = $self -> gwCurrentLine(); if (! defined $line) { $line = $self -> gwNextLine(); } if ($line =~ s/^(\n\n)//) { $gLine = $line; return $1; } while (defined $line) { $line =~ s/^\s+//; if ($line =~ s/^\s*\<(url:)?//i) { my $buffer = ""; # parse enclosed as one token, even if on multiple lines while ($line !~ /[^>]*\>/) { $buffer .= $line; $line = $self -> gwNextLine(); &sDie ("unbalanced angle brackets: '<' has no '>'\n") unless defined $line; } $line =~ s/([^>]*)\>//; $buffer .= $1; $buffer =~ s/\s+//g; $buffer =~ s/\n//g; $gLine = $line; &d("buffer is $buffer"); return $buffer; } if ($line =~ s/^(\S+)//) { $gLine = $line; return $1; } $line = $self -> gwNextLine(); if ($line !~ /\S/) { $self -> gwNextLine(); return "\n\n"; } } undef; } 1; GetWeb-1.15/GetWeb/ProcMsg.pm100644 431 36 16746 6315517614 15056 0ustar rolftechnicalpackage GetWeb::ProcMsg; use MailBot::Entity; use MailBot::Sendable; use MailBot::MailBot; use GetWeb::CmdIter; use GetWeb::Parser; use GetWeb::UnformatForm; use GetWeb::Util; use GetWeb::Unformat; use MailBot::Util; #use LWP::Debug qw(+); $MailBot::Sendable::gBase64Preamble = "For help decoding this encoded binary file,\n send a message with the body:\n\nHELP MIME"; use MIME::Latin1 qw(latin1_to_ascii); use LWP::UserAgent; use Carp; use strict; sub sDie { croak "SYNTAX ERROR: ". shift; } sub d { &MailBot::Util::debug(@_); } # jfj process as commands if 'begin' and 'end' block # jfjf ProMED search # jfj convert \x to x in command # jfj add form data as a header # jfjf read 'Content-Transfer-Encoding' incoming header # jfj allow commenting of ***References from this Document*** # jfj add 'day when quota regenerated' to quota message # jf send out only one quota-exceeding message # jfj ignore messages on discard list # jfjf escape embedded spaces in URL's (esp. links) # jfjf add examples to syntax error based on $paFilledForm # jfjf add 'avoid sending documents as quoted-printable' # jf let 'help' recognize keywords like 'get' # jfj pass taint-check # jfj set max binary-file size different # jfj check incoming envelope for 'from <>' # j send as plain-text if OK to send as plain-text # jf send headings with -----'s and not ====='s my $gEncoder; sub new { my $type = shift; my $bot = shift; my $incoming = shift; my $self = {}; $$self{BOT} = $bot; bless($self,$type); eval { my $subject = $incoming -> head -> get("Subject"); my ($cwd) = ($subject =~ /\/); # &d("cwd is $cwd"); $$self{CWD} = $cwd; # try parsing as a returned web-page #my $commandIter = $self -> gwParseAsPage($incoming); my $commandIter = GetWeb::Unformat -> processPage($incoming); if (! defined $commandIter) { # try parsing as list of commands $commandIter = $self -> gwParseAsCommands($incoming); } $commandIter -> isEmpty and &sDie("no commands specified in message body\n"); $self -> gwProcessCommandList($commandIter); }; if ($@) { ($@ =~ /^SYNTAX ERROR: (.+)/) or die ($@); my $error = $1; $self -> gwSyntaxError($error); } $self; } sub gwProcessCommandList { my $self = shift; my $commandIter = shift; my $ua = new LWP::UserAgent; $ua -> agent("GetWeb/0.1 " . $ua -> agent); my $command; while ($command = $commandIter -> next) { $self -> {BOT} -> log("cmd: ", $command -> asString()); my $fetcher = $command -> newFetcher($ua); # jfj set 'unavailable' envelope through "command" interface my $response = $fetcher -> fetch(); my $paNote = $fetcher -> getNoteRef; my $ui = MailBot::UI::current; $ui -> note(@$paNote); my ($finalURL, $finalHost, $finalScheme); eval {$finalURL = $response -> request -> url -> abs -> as_string; my $urlObj = new URI::URL($finalURL); $finalScheme = $urlObj -> scheme; my $host = $urlObj -> host; $finalHost = "$finalScheme://$host"; }; my $paResource = [$finalURL,$finalScheme,$finalHost]; my $died = $response -> header('X-Died'); my $encoder = $command -> getEncoder(); my $result; if (! $response -> is_success) { $self -> {BOT} -> setEnvelopeByCondition("UNAVAILABLE"); my $text = $response -> error_as_HTML; if ($response -> is_redirect) { # unredirectable POST command $text .= " Cannot automatically redirect POST requests (see RFC 1945). Manually redirect to: " . $response -> header('Location'); $text .= $response -> content; # hope it is HTML } if ($text =~ /unauthorized/i) { $text .= "

You might need to enter a username and password; for more info, send a document to getweb with the body:

HELP AUTH"; } # enhance some unhelpful ftp libwww error messages if ($text =~ /Data Connection: /) { $text .= "

This means the data transfer failed because remote ftp server was down.\n"; } if ($text =~ /\"message\" without a package/) { $text .= "

This means the data transfer failed because remote ftp host could not be found.\n"; } $text =~ s/\(in cleanup\) Not a GLOB reference at \S+ line \d+, \S+ chunk \d+\.//g; $encoder -> encode($text, "text/html"); $encoder -> done(); my $pText = $encoder -> getTextRef; my $data = "Could not fetch $finalURL\n\n" . $$pText . "\n\n...while executing the following command:\n\n" . $command -> asString . "\n"; my $entity = build MailBot::Entity ( Data => $data ); $entity -> send($paResource); } else { my $title = $response -> title; $title = latin1_to_ascii($title); my $subject = " " . $title; my $envelope = $command -> getEnvelope(); $envelope -> setSubject($subject); my $baseURL = eval { $response -> base } || $finalURL; $encoder -> encode($response -> content, $response -> content_type, $baseURL); my $fileName = $finalURL; $fileName =~ s|^.*/||; $fileName =~ s|\?.*||; my $pText = $encoder -> getTextRef; my $type = $encoder -> getContentType; &MailBot::Entity::setEnvelope($envelope); my $entity; if ($type !~ m!^text/!) { $entity = build MailBot::Entity (Type => "multipart/mixed" ); attach $entity (Data => $$pText, Type => $type, Filename => $fileName); } else { $entity = build MailBot::Entity (Data => $$pText, Type => $type, Filename => $fileName); } $entity -> send($paResource); } # see if we found other links to follow my $follow = $command -> discoveredReq(); $commandIter -> pushIter($follow) if defined $follow; } } # jfj implement full escapes: "", \", \\ sub gwParseAsCommands { my $self = shift; my $message = shift; &MailBot::Util::setBeginPattern($message,'(?i)^\s*begin\s*\n'); &MailBot::Util::setEndPattern($message,'(?i)^\s*end\s*\n'); &MailBot::Util::setEndPattern($message,'(?i)^\s*regards,\s*\n'); &MailBot::Util::setEndPattern($message,'(?i)^\s*cheers,\s*\n'); &MailBot::Util::setEndPattern($message,'(?i)^--- Pegasus'); &MailBot::Util::setEndPattern($message,'(?i)^\s*_____+\s*$'); &MailBot::Util::setEndPattern($message,'(?i)^\s*=====+\s*$'); &MailBot::Util::setEndPattern($message,'(?i)^\s*-----+\s*$'); &MailBot::Util::setEndPattern($message,'(?i)^\s*--\s*\n'); &MailBot::Util::setEndPattern($message,'(?i)^\*\*\*\*\*\*'); # jf set NOMIME if you see X-Ftn-Origin my $cwd = $$self{CWD}; GetWeb::Parser -> getCmdIter($cwd,$message -> body); } # jf indicate where arguments stopped # j guess what the error was # jfj use HTML for print exceptions sub gwSyntaxError { my $self = shift; my $error = shift; my $data = <<"EOB"; A syntax error occurred: $error Some or all commands were not executed. Tips: * Put commands in the body of the message, not the Subject line. * Make sure your signature begins with '--' Still having trouble? * Try surrounding your body with 'begin' and 'end' * Place a blank line between each command * If command takes up two lines, place a '\\' after the first line For proper usage, send a message containing these three lines: begin HELP end EOB $data .= join('',$self -> {BOT} -> appendOriginalRequest); $self -> {BOT} -> setEnvelopeByCondition("SYNTAX ERROR"); my $entity = build MailBot::Entity ( Data => $data ); $entity -> send; } 1; GetWeb-1.15/GetWeb/Filter.pm100644 431 36 204 6246412541 14643 0ustar rolftechnicalpackage GetWeb::Filter; use strict; sub new { die "class must override"; } sub append { die "class must override"; } 1; GetWeb-1.15/GetWeb/Cmd.pm100644 431 36 16472 6314054150 14171 0ustar rolftechnicalpackage GetWeb::Cmd; use HTML::FormatText; use HTML::Parse; use MailBot::Util; use MailBot::Envelope; use GetWeb::Util; use GetWeb::Encoder; use GetWeb::Chain; use GetWeb::SURL; use GetWeb::Fetcher; use Carp; use strict; sub sDie { croak "SYNTAX ERROR: ". shift; } sub d { &MailBot::Util::debug(@_); } # my %ghSynonym = ( # GET => ["\n\n"], # SEND => ["GET"], # WWW => ["GET"], # SEARCH => ["ALIAS"], # RGET => ["GET,TO"], # RWWW => ["WWW,TO"], # RSEND => ["SEND,TO"], # RSOURCE => ["SOURCE,TO"], # RDEEP => ["DEEP,TO"], # ); # my @gaKeyword = ( qw( SOURCE SPLIT TO ALIAS FOLLOW NOMIME HELP ), "\n\n" # ); # jfj add ENCODING (BASE64, UUE, QP, LATIN) command modifier # jfj make aliases configurable # jfj configure new search-engines on the fly my %ghAlias = ( # HELP => # ['file://help.html'], APS97 => ['http://www.uth.tmc.edu/cgi-bin/apstracts/searchaps.pl', 'indexfile=/usr/local/www/apstracts/1997/aps1997.swish&searchtags=&maxresults=100&submit=Search&keywords=' ], APS96 => ['http://www.uth.tmc.edu/cgi-bin/apstracts/searchaps.pl', 'indexfile=/usr/local/www/apstracts/1996/aps1996.swish&searchtags=&maxresults=100&submit=Search&keywords=' ], APS95 => ['http://www.uth.tmc.edu/cgi-bin/apstracts/searchaps.pl', 'indexfile=/usr/local/www/apstracts/1995/aps95.swish&searchtags=&maxresults=100&submit=Search&keywords=' ], ALTAVISTA => ['http://altavista.digital.com/cgi-bin/query', 'pg=q&what=web&fmt=.&q='], PROMED => ['http://www.healthnet.org/cgi-bin/webglimpse/usr/www/htdocs/.promed', 'errors=0&age=&maxlines=30&query=', { maxfiles => [ qw( 50 10 30 100 1000 ) ] } ] , YAHOO => ['http://search.yahoo.com/bin/search', 'd=y&g=0&s=a&w=s&n=25&p='], GARBAGE_ENGINE => ['file://test/not_there', 'errors=0&age=&maxfiles=50&query=', { maxlines => [ qw( 30 10 50 500 ) ], is_ok => [ qw( yes no ) ], all_right => [ qw( false true ) ] } ] , INFOSEEK => ['http://guide-p.infoseek.com//Titles', 'sv=IS&lk=lcd&qt=', { col => [ qw( WW NN CT EM NW FQ ) ] } ] ); # jfj implement LINE, SIZE sub new { my $type = shift; my $cwd = shift; # my $state = new GetWeb::CmdState(); my $self = { ENCODER => new GetWeb::Encoder(), # STATE => $state, CANON => "GET", CHAIN => new GetWeb::Chain($cwd), ENVELOPE => new MailBot::Envelope(), MIME => 1, CWD => $cwd }; # allowed states: CMD TO ALIAS HELP SURL FOLLOW CHAIN bless($self,$type); } sub getEncoder { shift -> {ENCODER}; } sub getEnvelope { shift -> {ENVELOPE}; } sub keyTwoHELP { my $self = shift; my $param = shift; my $upperParam = uc $param; push(@{$$self{HELP_LIST}},$upperParam); } sub keySlurpALIAS { my $self = shift; my $alias = shift; my $upperAlias = uc $alias; my $paAlias = $ghAlias{$upperAlias}; unless (defined $paAlias) { my $legal = join(', ',keys %ghAlias); $legal =~ s/GARBAGE_ENGINE(, )?//; &sDie("not a legal search alias: $alias; legal aliases are: $legal\n"); } my $retVal = $self -> appendAlias($paAlias); while (@_) { my $param = shift; $self -> appendParam($param); } } sub keyTwoTO { my $self = shift; my $param = shift; my $envelope = $self -> {ENVELOPE}; $envelope -> setRecipientList($param); my $ui = MailBot::UI::current; my $from = $ui -> getFrom; $envelope -> setFrom($from); } sub keyTwoUSER { my $self = shift; $self -> {AUTH_USER} = shift; } sub keyTwoPASSWORD { my $self = shift; $self -> {AUTH_PASSWORD} = shift; } sub keyTwoSPLIT { my $self = shift; my $param = shift; $$self{ENVELOPE} -> setSplitSize($param); } sub keyAppTwoFOLLOW { my $self = shift; my $param = shift; $self -> follow($param); } sub appendAlias { my $self = shift; my $paAlias = shift; my $surl = new GetWeb::SURL @$paAlias; $self -> setSURL($surl); } sub setSURL { my $self = shift; my $surl = shift; $$self{CHAIN} -> setSURL($surl); } sub appendParam { my $self = shift; my $param = shift; my $chain = $$self{CHAIN}; $chain -> addParam($param); 0; } sub addCanon { my $self = shift; my $add = join(' ',@_); $self -> {CANON} .= (" " . $add); } sub keyOneSOURCE { my $self = shift; $$self{ENCODER} -> preferSource; } sub keyOneNOMIME { shift -> {ENVELOPE} -> setMIME(0); } sub keySlurpHELP { my $self = shift; $$self{HELP_LIST} = [ @_ ]; } sub keyNEW_PAR { return 1 unless shift -> isEmpty(); 0; } sub keyOneDEEP { my $self = shift; $$self{DEEP} = 1; } # jfj change from 'newFetcher' to 'currentFetcher' sub newFetcher { my $self = shift; my $ua = shift; my $fetcher = $self -> {currentFetcher}; if (defined $fetcher) { $fetcher -> {UA} = $ua; $fetcher -> authorizeUser($self -> {AUTH_USER}); $fetcher -> authorizePassword($self -> {AUTH_PASSWORD}); } else { $fetcher = new GetWeb::Fetcher($ua); $self -> {currentFetcher} = $fetcher; $fetcher -> authorizeUser($self -> {AUTH_USER}); $fetcher -> authorizePassword($self -> {AUTH_PASSWORD}); # jfj hierarchical help my $chain = $$self{CHAIN}; my $state = $$self{STATE}; my $urlString; my $paHelp = $$self{HELP_LIST}; if (defined $paHelp) { my $ui = MailBot::UI::current; my $file = uc join(' ',@$paHelp); $file =~ /\s/ and &sDie("too many parameters to HELP: $file"); $file eq "" and $file = $ui -> getServiceParam('help'); my $config = MailBot::Config::current; my $pubDir = $config -> getPubDir(); my $helpDir = "help"; my $helpPath = "$pubDir/$helpDir"; if (! -e "$helpPath/$file.html") { my @aLegal = <$helpPath/*.html>; grep(s/\.html$//,@aLegal); grep(s/.+\///,@aLegal); my $helpList = "HELP, HELP " . join(', HELP ',@aLegal); die "illegal help command: HELP $file.\n Legal help commands are: $helpList\n"; }; $urlString = "file://help/$file.html"; } else { $urlString = $chain -> getURL($ua); } $$self{ENCODER} -> base($urlString); $fetcher -> base($urlString); &d("full url is $urlString"); my $paFollow = $chain -> getFollowList(); my $follow; foreach $follow (@$paFollow) { $fetcher -> follow($follow); } } $fetcher; } sub discoveredReq { my $self = shift; # jfj add INLINE command return undef unless $self -> {DEEP}; my $paLink = $self -> {currentFetcher} -> getLinks(['a']); my $cmdIter = new GetWeb::CmdIter; my $link; foreach $link (@$paLink) { # jfj more robust cloning method for commands my $cmdText = $self -> asString; my $newIter = GetWeb::Parser -> getCmdIter("",[$cmdText]); my $cmd = $newIter -> next; defined $cmd or die "could not clone $cmdText"; $newIter -> isEmpty or die "command $cmdText cloned into two commands: first is ", $cmd -> asString, "second is ", $newIter -> next -> asString, "\n"; delete $cmd -> {DEEP}; $cmd -> setSURL(new GetWeb::SURL($link)); $cmd -> addCanon("#deep to $link"); $cmdIter -> pushCmd($cmd); } $cmdIter; } sub follow { my $self = shift; my $followToken = shift; $$self{CHAIN} -> follow($followToken); } sub asString { shift -> {CANON}; } 1; GetWeb-1.15/GetWeb/UnformatForm.pm100644 431 36 13234 6314057246 16107 0ustar rolftechnicalrequire GetWeb::FormatAnnotated; package GetWeb::UnformatForm; use URI::URL; use GetWeb::Util; use URI::Escape; @ISA = qw( GetWeb::FormatAnnotated ); use Carp; use strict; sub new { my $type = shift; my $pBody = shift; my $self = $type -> SUPER::new (@_); $$self{formCount} = 'A'; $$self{pBody} = $pBody; bless($self,$type); $self; } sub form_start { my $self = shift; my ($elem) = @_; # jfjf support mailto correctly $elem -> {phQuery} = {}; my $letter = $self -> {formCount}; my $pBody = $self -> {pBody}; $$pBody =~ s/.*?\// or $self -> myDie("form $letter not found\n"); $self -> SUPER::form_start(@_); } sub formDie { my ($self, $text) = @_; defined $text or $text = "died during form processing\n"; my $form = $self -> {current_form}; defined $form or $self -> myDie("no current form, died from $text"); return if defined $form -> {formDieText}; $form -> {formDieText} = $text; die $text; } sub myDie { my ($self, $text) = @_; defined $text or $text = "died during form processing\n"; return if defined $self -> {myDieText}; $self -> {myDieText} = $text; die $text; } sub addNameValue { my ($self, $elem, $unique) = @_; my $name = $elem -> attr('name'); my $value = $elem -> attr('value'); $self -> addKeyVal($name,$value,$unique); } sub addKeyVal { my ($self, $key, $val, $unique) = @_; # print "(key val is $key $val)\n"; my $phQuery = $self -> {current_form} -> {phQuery}; my $paVal = $phQuery -> {$key}; if (! defined $paVal) { $paVal = []; $phQuery -> {$key} = $paVal; } else { $unique and $self -> formDie("SYNTAX_ERROR: key '$key' selected more than once: '$val' and '" . $$paVal[0] . "'\n\n" . "Please select only one '$key' attribute.\n"); } push(@$paVal,$val); } sub input_hidden_start { my $self = shift; my ($elem) = @_; $self -> addNameValue($elem); $self -> SUPER::input_hidden_start(@_); } sub endsInSlash { my $self = shift; my $text = shift; $text =~ s/\\(.)/$1/g; # print "text is $text.\n"; $text =~ /\\$/; } sub input { my $self = shift; my $pBody = $self -> {pBody}; while (1) { while (1) { $$pBody =~ s/(.*?)\[// or $self -> myDie("CORRUPT: could not find next left bracket\n"); last unless $self -> endsInSlash($1); } my $input = ""; while (1) { $$pBody =~ s/(.*?)\]// or $self -> myDie("CORRUPT: could not find next right bracket\n"); $input .= $1; last unless $self -> endsInSlash($input); $input .= "]"; } $input =~ s/\n/ /g; # next if $input eq 'IMAGE'; next if $input =~ /\d/ and $input =~ /^[\dX]+$/i; # href, ignore $input =~ s/\\(.)/$1/g; # print "found $input\n"; return $input; } } sub input_line { my $self = shift; my $input = $self -> input; $input =~ s/__+$/_/g; $input =~ s/(?!\\)(.)_$/$1/; $input =~ s/^_+//; # repeat same statement to get all unescaped intermediate underscores $input =~ s/(?!\\)(.)_/$1 /g; $input =~ s/(?!\\)(.)_/$1 /g; $input =~ s/\\(.)/$1/g; $input; } sub input_checkbox { my $self = shift; my $input = $self -> input; return 1 if $input =~ /X/i and $input =~ /^[\sX]+$/i; return 0 if $input =~ /^\s*$/i; $self -> formDie("SYNTAX_ERROR: illegal checkbox input: $input\n"); } sub input_text_start { my $self = shift; my ($elem) = @_; my $line = $self -> input_line; my $name = $elem -> attr('name'); $self -> addKeyVal($name,$line); $self -> SUPER::input_text_start(@_); } sub input_submit_start { my $self = shift; my ($elem) = @_; #print "submit here\n"; my $check = $self -> input_checkbox; # sanity check my $pBody = $self -> {pBody}; $$pBody =~ /.+?check preceding box/ or $self -> myDie("CORRUPT: parsed past submit query\n"); my $between = $&; $between =~ /\[/ and $` !~ /\\$/ and $self -> myDie("CORRUPT: submit not aligned with submit query: $between\n"); if ($check) { my $form = $self -> {current_form}; my $formDieText = $form -> {formDieText}; defined $formDieText and $self -> myDie($formDieText); $form -> {getweb_submit} = 1; # jfj check if this key-value is correct my $name = $elem -> attr('name'); defined $name and $self -> addKeyVal($name,$elem -> attr('value')); } $self -> SUPER::input_submit_start; } # jfj eliminate all form letters from code sub input_checkbox_start { my $self = shift; my ($elem) = @_; my $check = $self -> input_checkbox; if ($check) { my $unique = (lc $elem -> attr('type')) eq 'checkbox'?0:1; my $key = $elem -> attr('name'); my $val = $elem -> attr('value'); $val eq '' and $val = 'on'; $self -> addKeyVal($key,$val,$unique); } $self -> SUPER::input_checkbox_start(@_); } sub option_start { my $self = shift; my ($elem) = @_; my $check = $self -> input_checkbox; if ($check) { my $select = $self -> {current_select}; my $unique = ! $select -> attr('multiple'); my $val = $elem -> attr('value'); my $key = $self -> {select_name}; $self -> addKeyVal($key,$val,$unique); } $self -> SUPER::option_start(@_); } sub textarea_start { my $self = shift; my ($elem) = @_; # jfj figure out correct newline behavior in textarea my $text = ""; my $rows = $elem -> attr('rows'); my $i = $rows; while ($i--) { my $line = $self -> input_line; if ($line ne "") { $text .= "$line\n"; } } my $name = $elem -> attr('name'); $self -> addKeyVal($name,$text); $self -> SUPER::textarea_start(@_); } 1; GetWeb-1.15/GetWeb/Fetcher.pm100644 431 36 11443 6315061012 15033 0ustar rolftechnicalpackage GetWeb::Fetcher; use MailBot::Config; use MIME::Base64 qw(encode_base64); use HTML::FormatText; use HTML::Parse; use GetWeb::Util; use LWP::Protocol; use URI::URL; use HTML::LinkExtor; use strict; &URI::URL::implementor('file','GetWeb::File'); my $pUserAgentCallback = sub { my ($data,$response) = @_; if (! $$response{"GETWEB_CHECKED_SIZE"}++) { my $config = MailBot::Config::current; my $maxLength = $config -> getMaxSize; my $length = $response -> content_length; my $err = ""; if ($length >= $maxLength) { $err = "file size exceeded $maxLength bytes"; } else { my $ui = MailBot::UI::current; my $profile = $ui -> getProfile; my $contentType = $response -> content_type; $err = $profile -> isContentTypeDenied($contentType,$length); } if ($err ne "") { $response -> message($err); $response -> code(500); # creates an 'X-Died' header after being caught: die "$err\n"; } } $response -> add_content($data); }; sub new { my $type = shift; my $ua = shift; my $self = {UA => $ua, REDIRECT_LIST => []}; bless($self,$type); $self; } sub base { my $self = shift; my $urlString = shift; my $cwd = shift; $$self{URL} = url $urlString; #$$self{REQUEST} = GetWeb::Util::safeRequest($urlString, $cwd); $$self{REQUEST} = GetWeb::Util::safeRequest($urlString, " "); undef; } sub authorizeUser { my ($self, $user) = @_; $self -> {USER} = $user; } sub authorizePassword { my ($self, $password) = @_; $self -> {PASSWORD} = $password; } sub setAuthHead { my ($self, $request) = @_; my $user = $self -> {USER}; my $password = $self -> {PASSWORD}; (defined $user or defined $password) or return; (defined $user and defined $password) or die "UNAVAILABLE: must specify both username and password\n"; # next 3 lines taken from LWP::UserAgent::request my $uidpwd = "$user:$password"; my $scheme = 'Basic'; my $header = "$scheme " . encode_base64($uidpwd, ''); $request->header('Authorization' => $header); } # jfj also follow text substrings # jfj extract links more elegantly sub follow { my $self = shift; my $follow = shift; my $paRedirect = $$self{REDIRECT_LIST}; $follow =~ /^\d+$/ or die "SYNTAX ERROR: $follow must be a link number"; my $req = $$self{REQUEST}; $self -> setAuthHead($req); my $response = $$self{UA} -> request($req,$pUserAgentCallback); push(@$paRedirect,"following link $follow"); if (! $response -> is_success) { $$self{RESPONSE} = $response; return undef; } my $baseURL = eval {$response -> base} || $$self{URL}; my $encoder = new GetWeb::Encoder(); $encoder -> encode($response -> content, $response -> content_type, $baseURL -> abs -> as_string); eval { $$self{URL} = $response -> base; }; my $pText = $encoder -> getTextRef(); if ($$pText =~ /^\[$follow\] (\S+:(\\\n|.)+)/m) { my $urlString = $1; $urlString =~ s/\\\n//g; $$self{URL} = url $urlString; $$self{REQUEST} = GetWeb::Util::safeRequest($urlString); return $response; } push(@$paRedirect,"could not follow link $follow, sorry"); die "UNAVAILABLE: could not follow link $follow, no such reference"; # jfj return a new category of error condition for not following links return undef; } sub getNoteRef { shift->{REDIRECT_LIST}; } sub getLinks { my $self = shift; my $paLinkType = shift; # 'a' or 'img' my $response = $self -> {RESPONSE}; return [] unless defined $response; my $content = $response -> content; my $extor = new HTML::LinkExtor; $extor -> parse($content); my @links = $extor -> links; my $base = $self -> {URL}; $base -> frag(undef); my %hHREF = (); my $link; foreach $link (@links) { my $linkType = shift @$link; next unless grep($linkType eq $_,@$paLinkType); my %attr = @$link; my $HREF = $attr{href}; next unless defined $HREF; my $url = new URI::URL($HREF,$base); $url -> frag(undef); # ignore fragments my $urlString = $url -> abs -> as_string; # URI::URL::eq is flaky, so also do strcmp: next if $url -> eq($base); next if $base -> abs -> as_string eq $urlString; my $scheme = $url -> scheme; next if grep($scheme eq $_, (qw(mailto telnet news))); # jf avoid duplicates like www.foo.com and WWW.FOO.COM $hHREF{$urlString} = 1; } my @aHREF = keys %hHREF; \@aHREF; } sub fetch { my $self = shift; my $response = $$self{RESPONSE}; return $response if defined $response; my $req = $$self{REQUEST}; $self -> setAuthHead($req); #die "about to send request\n"; $response = $$self{UA} -> request($req,$pUserAgentCallback); $$self{RESPONSE} = $response; #$self -> getLinks; $response; } 1; GetWeb-1.15/GetWeb/GetWeb.pm100644 431 36 2235 6314014312 14607 0ustar rolftechnicalpackage GetWeb; $VERSION = '1.15'; sub Version { $VERSION } package GetWeb::GetWeb; =head1 NAME GetWeb::GetWeb - provide the GetWeb service =head1 SYNOPSIS use MailBot::Config; use GetWeb::GetWeb; MailBot::Config -> setRoot("/usr/local/getweb"); GetWeb::GetWeb -> new -> run; # see MailBot::MailBot =head1 DESCRIPTION GetWeb extends MailBot's message-processing capability to enable email users to access documents from the World Wide Web. =head1 SEE ALSO L, L, L, L =head1 COPYRIGHT Copyright (c) 1997 SatelLife. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 AUTHOR Rolf Nelson =cut use LWP::UserAgent; use MailBot::MailBot; use GetWeb::ProcMsg; use GetWeb::Cmd; use Carp; use MailBot::Util; #use LWP::Debug qw(+); @ISA = qw( MailBot::MailBot ); use strict; sub sDie { croak "SYNTAX ERROR: ". shift; } sub d { &MailBot::Util::debug(@_); } sub vProcess { my $self = shift; my $incoming = shift; new GetWeb::ProcMsg($self,$incoming); } 1; GetWeb-1.15/GetWeb/File.pm100644 431 36 1721 6300671207 14317 0ustar rolftechnicalpackage GetWeb::File; use URI::URL::file; use MailBot::Config; @ISA = qw( URI::URL::file ); use strict; sub newlocal { my($class, $path) = @_; # untaint path # jf fix canonical url mismatch ($path =~ /\.\./) and die "cannot go below public dir"; $path = "./".$path unless $path =~ /^\.\//; $path =~ m!^([_a-zA-Z0-9/.?%+-]+)$! or die "unsafe filename: $path\n"; $path = $1; # Carp::Croak("Only implemented for Unix file systems") # unless $ostype eq "unix"; # XXX: Should implement the same thing for other systems my $url = new URI::URL "file:"; $url->path($path); $url; } sub local_path { my $path = URI::URL::file::local_path(@_); # require Cwd; # my $cwd = Cwd::fastcwd(); my $config = MailBot::Config::current; my $cwd = $config -> getPubDir(); # die "cwd is $cwd"; $cwd =~ s:/?$:/:; # force trailing slash on dir $path = (defined $path) ? $cwd . $path : $cwd; $path; } GetWeb-1.15/GetWeb/Chain.pm100644 431 36 2540 6315060101 14451 0ustar rolftechnicalpackage GetWeb::Chain; use URI::URL; use GetWeb::SURL; use strict; sub d { &MailBot::Util::debug(@_); } sub new { my $type = shift; my $cwd = shift; my $self = { CHAIN => [], # SURL => new GetWeb::SURL(":"), CWD => $cwd }; bless($self,$type); } # jfj move HELP into Chain.pm module sub getFollowList { shift -> {CHAIN}; } sub follow { my $self = shift; my $token = shift; push(@{$$self{CHAIN}},$token); } sub getURL { my $self = shift; my $ua = shift; my $chain = $$self{CHAIN}; # jfj put in stingy-quota option my $cwd = $$self{CWD}; # j only look up a given URL once per inbound message my $surl = $$self{SURL}; my $urlString = $surl -> getURLString; $urlString eq "" and die "urlString is null"; my $url; if ($urlString eq ':') { $url = new URI::URL($cwd); defined $url or die "could not read legal URL from subject line\n"; } else { $url = new URI::URL($urlString); #$url = new URI::URL($urlString, $cwd); if ($url -> abs -> as_string !~ /^\w+:/) { $url = new URI::URL("http://".$urlString); } defined $url or die "not a legal URL: $urlString\n"; } $url -> abs -> as_string; } sub addParam { shift -> {SURL} -> addParam(@_); } sub setSURL { my $self = shift; my $surl = shift; $$self{SURL} = $surl; } 1; GetWeb-1.15/GetWeb/Unformat.pm100644 431 36 13622 6315512140 15252 0ustar rolftechnicaluse HTTP::Status; sub HTTP::Status::RC_BAD_REQUEST_CLIENT { 400; } package GetWeb::Unformat; use GetWeb::Util; use MailBot::UI; use MailBot::Config; use HTML::Parse; use URI::Escape; use strict; sub refHash { my $type = shift; my $scalar = shift; my %hRef = (); #print STDERR "scalar is $scalar\n"; # parse appended links at bottom of document while ($scalar =~ s!^\s*\[(\S+)\]([^\[\]]+)!!) { my ($key, $action) = ($1,$2); $action =~ s/\\\s+//g; $hRef{$key} = $action; } \%hRef; } sub splitOffSuffix { my ($type, $pBody, $tag) = @_; chomp($tag); my $qTag = quotemeta($tag); my ($suffix, $err); ($$pBody, $suffix, $err) = split(/$qTag(?!.+$qTag)/,$$pBody); $err and die "tag $tag found more than once. I can only handle one document at a time!\n"; $suffix =~ /\n\s*\n/ and $suffix = $`; # chop after double-newline #print STDERR "suffix is $suffix\n"; $suffix =~ s/\n/ /g; $suffix; } sub processPage { my $type = shift; my $incoming = shift; my $paBody = $incoming -> body; my $origRefLine = &GetWeb::Util::getRefTag; my $refLine = $origRefLine; chomp($refLine); $refLine = quotemeta($refLine); my $foundTag = 0; my $foundFormTag = 0; foreach (@$paBody) { if (/\\s*//gm; if ($mainBody =~ /Search the entire archive: ProMED-mail/) { die "The form in the FORMS help document was just an example; to use the real ProMED search form, go to http://www.healthnet.org/programs/promed.html\n"; } my $refList = $type -> splitOffSuffix(\$mainBody,$origRefLine); my $formTag = &GetWeb::Util::getFormRefTag; my $form = $type -> splitOffSuffix(\$mainBody,$formTag); $mainBody =~ s/\n/ /g; my $phRef = $type -> refHash($refList); undef $refList; my $ui = MailBot::UI::current; my $profile = $ui -> getProfile; if ($profile -> getProfileVal("refuse_check")) { die "ACCESS DENIED: You cannot return the text of the original message in your e-mail to the\nGetWeb MailBot due to bandwidth limitations. This means that returning\ndocuments with links checked is disabled.\n\nPlease use the GET command interface instead\n"; } my @aRefNum = (); foreach (@$paBody) { # j check against orginal document while (s/\[(\d*)X(\d*)\]//i) { my $refNum = $1.$2; next if $refNum eq ""; push(@aRefNum,$refNum); } } my @aRequest = (); if (defined $form) { my $parsed = parse_html($form); my $formatter = new GetWeb::UnformatForm(\$mainBody); $formatter -> format($parsed); my $died = $formatter -> {myDieText}; die $died if defined $died; my $paFilledForm = $formatter -> {paForm}; defined $paFilledForm or die "CORRUPT: could not read forms"; my $filledForm; foreach $filledForm (@$paFilledForm) { my $formDied = $filledForm -> {formDieText}; die $formDied if defined $formDied; next unless $filledForm -> {getweb_submit}; my $action = $filledForm -> attr('action'); my $method = uc $filledForm -> attr('method'); $method eq '' and $method = 'GET'; $method eq 'POST' or $method eq 'GET' or die "UNAVAILABLE: GetWeb does not support method $method in HTML forms\n"; my $orig = $phRef -> {orig}; #print "orig is $orig\n"; my $url = new URI::URL($action,$orig); $orig ne "" or defined $url -> host or die "CORRUPT: Could not find [orig] reference\n"; my $phQuery = $filledForm -> {phQuery}; defined $phQuery or die "CORRUPT: no query hash\n"; my $urlString = $url -> abs -> as_string; my $queryURL = new URI::URL($urlString); $queryURL -> query_form(%$phQuery); #print "string is " . $queryURL . "\n"; #print "method is $method\n"; my $request; if ($method eq 'GET') { my $urlString = $queryURL -> abs -> as_string; $urlString = uri_escape($urlString,'+ \(\)\[\]'); $request = &GetWeb::Util::safeRequest ($urlString, 0, $method); } else { my $equery = $queryURL -> equery; my $urlString = $url -> abs -> as_string; $request = &GetWeb::Util::safeRequest ($urlString, 0, $method); #print "adding return\n"; #$equery .= "\n"; #print "content is $equery.\n"; $request -> header('Content-Length',length $equery); $request -> header('Content-Type', 'application/x-www-form-urlencoded'); $request -> content($equery); } push(@aRequest,$request); } $parsed -> delete; # avoid memory leak from circular refs } my $refNum; foreach $refNum (@aRefNum) { $refNum =~ s/\s+//g; my $action = $phRef -> {$refNum}; defined $action or die "SYNTAX ERROR: no such link: $refNum\n"; $action =~ /not supported/ and die "$action is not supported\n"; my $request = &GetWeb::Util::safeRequest ($action, 0, 'GET'); defined $request or die "linked to invalid URL: $action\n"; push(@aRequest,$request); } unless (@aRequest) { die "SYNTAX ERROR: You must check a link or a 'submit' button when you send a document back to GetWeb!\n\nMake sure you forwarded the whole document, including any section marked **Form section (ignore)**\n"; } #$incoming -> body(\@aNewBody); my $cmdIter = new GetWeb::CmdIter; my $request; foreach $request (@aRequest) { my $fetcher = new GetWeb::Fetcher; $fetcher -> {REQUEST} = $request; my $cmd = new GetWeb::Cmd; $cmd -> {currentFetcher} = $fetcher; my $url = $request -> url; my $urlString = $url -> as_string; $cmd -> addCanon(" #link"); $cmdIter -> pushCmd($cmd); } $cmdIter; } 1; GetWeb-1.15/GetWeb/Filter/ 40755 431 36 0 6316042214 14226 5ustar rolftechnicalGetWeb-1.15/GetWeb/Filter/HTML2Txt.pm100644 431 36 2073 6301123140 16201 0ustar rolftechnicalpackage GetWeb::Filter::HTML2Txt; use GetWeb::Filter; use HTML::Parse; require GetWeb::FormatAnnotated; @ISA = qw( GetWeb::Filter ); use strict; sub DESTROY { my $self = shift; return unless defined $self; # avoids a memory leak by deleting object with circular reference my $parse = $$self{PARSE}; $parse -> delete if defined $parse; } sub new { my $type = shift; # my $base = shift; my $parse = parse_html(""); my $self = { PARSE => $parse, TOTAL => "", # BASE_URL => $base }; bless($self,$type); } sub append { my $self = shift; my $data = shift; # print STDERR "data is $data"; $$self{TOTAL} .= $data; # j dynamically remove from head of element to save memory $$self{PARSE} = parse_html($data,$$self{PARSE}); return ''; } sub done { my $self = shift; my $baseURL = shift; my $formatter; $formatter = new GetWeb::FormatAnnotated($baseURL); my $parse = $self -> {PARSE}; #print STDERR $parse -> dump; join('',$formatter -> format($parse)); } GetWeb-1.15/GetWeb/FormatText.pm100644 431 36 21405 6314013427 15555 0ustar rolftechnical# Copyright 1997 SatelLife. All rights reserved. # This module is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. # Author: Rolf Nelson # Rev: 0.1 3/19/97 require HTML::FormatText; use URI::URL; package GetWeb::FormatText; @ISA = qw( HTML::FormatText ); use strict; my $DEFAULT_INPUT_COLS = 20; my $DEFAULT_INPUT_SIZE = $DEFAULT_INPUT_COLS; # extensions to HTML::FormatText: # Prints out information in tables and forms # Prevents lines ending in long words from overshooting right-margin # Fixes spaces to be more consistent # Handles lists nicer # Rudimentary table processing # Does not omit data in bad font, basefont tags # Moves left margin to col 0 sub table_start { shift -> vspace(1); 1; } sub table_end { shift -> vspace(1); } sub out { my $self = shift; my $text = shift; if ($self -> {input}) { # in HTML form input area $text = "[$text]"; } # avoid multiple spaces if ($text =~ /^\s+$/) { $self -> {pending_space} = 1; return; } if ($self->{curpos} + length($text) > $self->{rm}) { # line with this text will be too long, prepend line-break if ($self -> {curpos} > $self -> {lm} + 5) { $text =~ s/^\s+//; $self -> vspace(0); } } $self -> SUPER::out($text); } sub begin { my $self = shift; my $retVal = $self->HTML::FormatText::begin (@_); # I prefer the left-margin to be hard to the left # $self->{lm} = 3; $self->{lm} = 0; # left margin # $self->{rm} = 70; $self->{rm} = 68; # right margin $retVal; } sub form_start { my ($self, $elem) = @_; $$elem{option_seen} = {}; $$self{current_form} = $elem; my $phphpaInput = { 'radio' => {}, 'checkbox' => {} }; $elem -> traverse(sub { my ($node, $start, $depth) = @_; return 1 unless $start eq 1; my $tag = $node -> tag; return 1 unless $tag eq 'input'; my $type = $node -> attr('type'); my $phpaInput = $$phphpaInput{$type}; return 1 unless defined $phpaInput; my $name = $node -> attr('name'); my $input_list = $$phpaInput{$name}; if (! defined $input_list) { $$phpaInput{$name} = []; $input_list = $$phpaInput{$name}; } push(@$input_list,$node); 1; }, 1); my $phpaInput = $$phphpaInput{'radio'}; my $paInput; foreach $paInput (values %$phpaInput) { my $oneChecked = 0; my $input; foreach $input (@$paInput) { my $checked = $input -> attr('checked'); if ($checked) { if ($oneChecked++) { $input -> attr('checked',0); } } } unless ($oneChecked) { # check the first radio button $paInput -> [0] -> attr('checked',1); } } # in case another programmer wants to use this structure $elem -> {phphpaInput} = $phphpaInput; 1; } sub form_end { delete shift -> {current_form}; } sub input_start { my $self = shift; my ($elem) = @_; if (! defined $elem -> attr('type')) { $elem -> attr('type','text'); } $self -> input_route("start",@_); } sub input_end { shift -> input_route("end",@_); } sub input_route { my $self = shift; my $direction = shift; my ($elem) = @_; my $type = $elem -> attr('type'); $type = lc $type; # defined $type or $type = 'text'; my $func = "input_${type}_$direction"; my $retval = eval { $self -> $func(@_) }; $@ ? 1 : $retval; } sub input_text_out { my ($self,$size,$text) = @_; $text =~ s^[\[\]\\_]^\\$&^g; my $out; if (length($text) + 2 > $size) { $out = "_${text}_"; } else { $out = '_' x $size; substr($out,1,length($text)) = $text; } #$out =~ /_$/ or $out .= '_'; $self -> {input}++; $self -> out("$out"); $self -> {input}--; } sub input_text_start { my ($self, $elem) = @_; my $size = $elem -> attr('size') || $DEFAULT_INPUT_SIZE; my $value = $elem -> attr('value'); $self -> input_text_out($size,$value); 1; } sub textarea_start { my ($self, $elem) = @_; my $rows = $elem -> attr('rows'); my $cols = $elem -> attr('cols') || $DEFAULT_INPUT_COLS; my $content_line; my $content = $elem -> content; while ($content_line = shift @$content or $rows > 0) { next if ref($content_line); $self -> vspace(0); $rows--; $self -> input_text_out($cols,$content_line); } if ($rows < 0) { # expand row count my $newRows = $elem -> attr('rows') - $rows; $elem -> attr('rows',$newRows); } 0; } sub input_password_start { shift -> input_text_start(@_); } sub checkbox_out { my ($self, $filled) = @_; my $text = $filled?"X":" "; $self -> {input}++; $self -> out("$text"); $self -> {input}--; } sub input_checkbox_start { my ($self, $elem) = @_; my $checked = $elem -> attr('checked'); $self -> checkbox_out($checked); 1; } # TODO: solve radio-link problem of extra

after sub input_radio_start { my $self = shift; my ($elem) = @_; $self -> out("("); $self -> input_checkbox_start(@_); $self -> out(")"); } sub input_image_start { my $self = shift; $self -> out(" [IMAGE] -"); $self -> input_submit_start(@_); } sub button_out { my ($self,$default,$text) = @_; $text = $default unless defined $text; $self -> out(" "); $self -> {input}++; $self -> out("$text"); $self -> {input}--; $self -> out(" "); } sub input_submit_start { my ($self, $elem) = @_; my $text = $elem -> attr('value'); $self -> button_out("submit",$text); 1; } sub input_reset_start { my ($self, $elem) = @_; my $text = $elem -> attr('value'); $self -> button_out("reset",$text); 1; } sub option_start { my $self = shift; my ($elem) = @_; defined $self -> {current_form} or die "no form defined"; my $name = $self -> {select_name}; my $option_seen = $self -> {current_form} -> {option_seen}; $self -> vspace(0); my $conjunction = $$self{conj}; my $need_conj = $$option_seen{$name}++; if ($need_conj) { $self -> out($conjunction); } else { $self -> adjust_lm(length($conjunction)); } $self -> option_out(@_); $self -> {pending_space} = 1; $self -> adjust_lm(-length($conjunction)) unless $need_conj; 1; } sub option_out { my ($self, $elem) = @_; my $multiple = $elem -> attr('multiple'); my $selected = $elem -> attr('selected'); $self -> checkbox_out($selected); } sub select_start { my ($self, $elem) = @_; $self -> vspace(1); $self->adjust_lm( +2 ); $self->adjust_rm( -2 ); $$self{select_name} = $elem -> attr('name'); $$self{current_select} = $elem; my $multiple = $elem -> attr('multiple'); $$self{conj} = $multiple?'AND/OR ':'OR '; return 1 if $multiple; my $select = $elem; # select first radio button if no others selected $elem -> traverse(sub { my ($node, $start, $depth) = @_; return 1 unless $start eq 1; my $tag = $node -> tag; return 1 unless $tag eq 'option'; defined $$select{first_option} or $$select{first_option} = \$node; if (defined $node -> attr('selected')) { # avoid duplicates, protect from bad HTML if ($$select{one_selected}) { #print "deselecting\n"; $node -> attr('selected',0); } else { #print "noting\n"; $$select{one_selected} = 1; } } 1; }, 1); if (! defined $$elem{one_selected}) { ${$elem -> {first_option}} -> attr('selected',1); } 1; } sub select_end { my ($self, $elem) = @_; $self -> vspace(1); $self->adjust_lm( -2 ); $self->adjust_rm( +2 ); } sub tr_start { shift -> vspace(0); 1; } sub tr_end { shift -> vspace(0); 1; } sub li_start { my $self = shift; # make list spacing more regular $self->{pending_space} = 0; # TODO: reduce spacing of recursive lists $self-> HTML::FormatText::li_start (@_); } sub li_end { my $self = shift; #self -> vspace(1); # vspace is 1 in FormatText, single-spaced lists are more standard, so: $self->vspace(0); $self->adjust_lm(-2); my $markers = $self->{markers}; if ($markers->[-1] =~ /^\d+/) { # increment ordered markers $markers->[-1]++; } } sub font_start { my($self, $elem) = @_; my $size = $elem->attr('size'); return 1 unless defined $size; if ($size =~ /^\s*[+\-]/) { my $base = $self->{basefont_size}[-1]; $size = $base + $size; } push(@{$self->{font_size}}, $size); 1; } sub basefont_start { my($self, $elem) = @_; my $size = $elem->attr('size'); return 1 unless defined $size; push(@{$self->{basefont_size}}, $size); 1; } 1; GetWeb-1.15/GetWeb/Util.pm100644 431 36 2236 6310031367 14355 0ustar rolftechnicalpackage GetWeb::Util; use GetWeb::File; use URI::URL; use strict; sub getRefTag { "*** References from this document ***\n"; } sub getFormRefTag { "*** Form section (ignore) ***\n"; } sub untaintURL { my $url = shift; $url =~ /\\/ and die "illegal url: $url"; $url =~ /^file/ and die "file does not pass taint-check"; $url =~ /(.+)/; $1; } sub safeRequest { my $fullString = shift; my $cwd = shift; my $method = shift || 'GET'; $fullString =~ s/^\s+//; if ($cwd eq '') { my $config = MailBot::Config::current; $cwd = $config -> getPubDir; } my $url; if ($fullString =~ s%^file:/*%%) { $url = newlocal GetWeb::File($fullString); } else { $fullString = untaintURL($fullString); $url = new URI::URL($fullString); defined $url or die "could not parse url $fullString"; } my $scheme = $url -> scheme; if ($scheme eq 'news' or $scheme eq 'mailto') { die "UNAVAILABLE: $scheme is not supported\n"; } my $request = new HTTP::Request($method,$url); $scheme eq 'ftp' and $request -> header('Accept','text/html'); # get dir list as HTML $request; } 1; GetWeb-1.15/GetWeb/Encoder.pm100644 431 36 5203 6272224212 15014 0ustar rolftechnicalpackage GetWeb::Encoder; use HTML::Parse; use HTML::FormatText; use GetWeb::Filter::HTML2Txt; use MailBot::Util; use strict; my $DEFAULT_RAW = 1000000; sub d { MailBot::Util::debug(@_); } # jfj cap raw length of total request, incl. redirects sub new { my $type = shift; my $allowRawLength = shift; defined $allowRawLength or $allowRawLength = $DEFAULT_RAW; # my $baseURL = shift; my $self = { PREFER_SOURCE => 0, # BASE_URL => $baseURL, ALLOW_RAW_LENGTH => $allowRawLength, TEXT => '' }; bless($self,$type); } # jfj clean up encoding code sub beginFormat { my $self = shift; # &d("initing format"); undef $$self{FILTER_LIST}; } sub addEncoded { my $self = shift; my $string = shift; my $message = $$self{MESSAGE}; if (defined $message) { $message -> append($string); } # else { $$self{TEXT} .= $string; } } sub getTextRef { my $self = shift; \$$self{TEXT}; } sub getContentType { shift -> {CONTENT_TYPE}; } sub preferSource { shift -> {PREFER_SOURCE} = 1; } sub setMessage { my $self = shift; my $message = shift; $$self{MESSAGE} = $message; } sub encode { my $self = shift; my $inString = shift; my $inType = shift; my $url = shift; my $paFilter = $self -> createFilterList($inType); my $filter; foreach $filter (@$paFilter) { $inString = $filter -> append($inString); $inString .= $filter -> done($url); } $self -> addEncoded($inString); } sub done { my $self = shift; my $baseURL = shift; my $paFilter = $$self{FILTER_LIST}; # if (! defined $paFilter) # { # $self -> append("document contains no data"); # $paFilter = $$self{FILTER_LIST}; # } my $filter; my $data = ""; foreach $filter (@$paFilter) { $data = $filter -> append($data); $data .= $filter -> done($baseURL); } my $message = $$self{MESSAGE}; if (defined $message) { my $fileName = $baseURL; $fileName =~ s|^.*/||; $message -> setFileName($fileName); } $self -> addEncoded($data); } sub base { my $self = shift; $$self{BASE_URL} = shift; } sub createFilterList { my $self = shift; my $contentType = shift; my $paFilter = []; if ($contentType eq "text/html") { if (! $$self{PREFER_SOURCE}) { push(@$paFilter,new GetWeb::Filter::HTML2Txt()); $contentType = "text/plain"; } } my $message = $$self{MESSAGE}; # jfj check content type against "allowed types" if (defined $message) { $message -> setContentType($contentType); } $$self{CONTENT_TYPE} = $contentType; $paFilter; } 1; GetWeb-1.15/GetWeb/CmdIter.pm100644 431 36 2406 6266536565 15012 0ustar rolftechnicalpackage GetWeb::CmdIter; use GetWeb::Cmd; use Carp; use strict; sub new { my $type = shift; my $self = {CMD_ARRAY => [], ERROR_ARRAY => []}; bless($self,$type); } sub _paCmd { shift -> {CMD_ARRAY}; } sub _paError { shift -> {ERROR_ARRAY}; } sub pushCmd { my $self = shift; my $cmd = shift; # return if $cmd -> isEmpty; my $paCmd = $self -> _paCmd; push(@$paCmd,$cmd); } sub isEmpty { my $self = shift; my $paCmd = $self -> _paCmd; return 0 if @$paCmd; my $paError = $self -> _paError; return 0 if @$paError; 1; } sub pushError { my $self = shift; my $error = shift; my $paError = $self -> _paError; push(@$paError,$error); } sub pushIter { my $self = shift; my $iter = shift; my $paOwnCmd = $self -> _paCmd; my $paOwnError = $self -> _paError; my $paOtherCmd = $iter -> _paCmd; my $paOtherError = $iter -> _paError; push(@$paOwnCmd,@$paOtherCmd); push(@$paOwnError,@$paOtherError); } sub next { my $self = shift; my $paCmd = $self -> _paCmd; my $cmd = shift @$paCmd; return $cmd if defined $cmd; my $paError = $self -> _paError; my $error = shift @$paError; die $error if defined $error; undef; } 1; GetWeb-1.15/GetWeb/SURL.pm100644 431 36 3447 6265472142 14243 0ustar rolftechnicalpackage GetWeb::SURL; use Carp; use URI::Escape; use strict; sub new { my $type = shift; my ($url, $paramBase, $paramOpt) = @_; ($url =~ m^:^) or ($url =~ m^\..+\.^) or croak "SYNTAX ERROR: not a valid URL or command: $url\n"; my $self = { URL => $url, PARAM_BASE => $paramBase, PARAM_OPT => $paramOpt, PARAM_TEXT => [] }; bless($self,$type); } sub addParam { my $self = shift; my $param = shift; my $paramText = $$self{PARAM_TEXT}; push(@$paramText,$param); } sub getURLString { my $self = shift; my $url = $$self{URL}; my $paramBase = $$self{PARAM_BASE}; my $paParamText = $$self{PARAM_TEXT}; return $url unless (defined $paramBase or @$paParamText); $url .= "?"; my $paramString = ""; my $optString = ""; my $param; my %hFound; foreach $param (@$paParamText) { my $option = $self -> findKey($param); if ($option) { $hFound{$option} = 1; $optString .= ("$option=" . uri_escape($param) . '&'); } else { $paramString .= ("+" . uri_escape($param)); } } $paramString =~ s/^\+//; # insert defaults my $phpaParamOpt = $$self{PARAM_OPT}; my $option; foreach $option (keys %$phpaParamOpt) { my $paParamOpt = $$phpaParamOpt{$option}; my $defaultOpt = $$paParamOpt[0]; next if $hFound{$option}; next unless defined $defaultOpt; $optString .= ("$option=" . uri_escape($defaultOpt) . "&"); } # $optString =~ s/^\&//; $url . $optString . $paramBase . $paramString; } sub findKey { my $self = shift; my $param = shift; my $phpaParamOpt = $$self{PARAM_OPT}; my $option; foreach $option (keys %$phpaParamOpt) { my $paParamOpt = $$phpaParamOpt{$option}; if (grep($_ eq $param,@$paParamOpt)) { return $option; } } undef; } 1; GetWeb-1.15/GetWeb/FormatAnnotated.pm100644 431 36 23207 6315523533 16555 0ustar rolftechnicalrequire GetWeb::FormatText; use URI::URL; use GetWeb::Util; use HTML::TreeBuilder; $HTML::TreeBuilder::isBodyElement{'frame'} = 1; package GetWeb::FormatAnnotated; @ISA = qw( GetWeb::FormatText ); use Carp; use strict; =head1 NAME GetWeb::FormatAnnotated - Format HTML as annotated text =head1 SYNOPSIS require GetWeb::FormatAnnotated; $html = parse_htmlfile("test.html"); $formatter = new GetWeb::FormatAnnotated; print $formatter->format($html); =head1 DESCRIPTION GetWeb::FormatAnnotated is a formatter that outputs plain latin1 text, with annotations identifiying the hypertext links. It extends HTML::FormatText. =head1 SEE ALSO L, L =head1 COPYRIGHT Copyright (c) 1997 SatelLife. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 AUTHOR Rolf Nelson =cut # jfj center tags, remove ======= underlining # jfj always have exactly one space under tags # jfj indent

blocks # jfj handle file upload sub new { my $type = shift; my $baseURL = shift; my $self = new GetWeb::FormatText (@_); $baseURL = new URI::URL($baseURL); $$self{baseURL} = $baseURL; my $paLink = []; if (defined $baseURL) { push(@$paLink, "[orig] " . $baseURL -> abs -> as_string); } else { push(@$paLink,"[orig]"); } $$self{paLink} = $paLink; $$self{paForm} = []; $$self{formCount} = 'A'; bless($self,$type); $self; } sub form_start { my $self = shift; my ($elem) = @_; my $paForm = $self -> {paForm}; push(@$paForm,$elem); my $letter = $self -> {formCount}++; $elem -> {letter} = $letter; $self -> vspace(1); $self -> out(""); $self -> vspace(1); $elem -> {elementCount} = 'a'; $elem -> {elementList} = []; my $ret = $self -> SUPER::form_start(@_); my $phphpaInput = $elem -> {phphpaInput}; my $phpaInput; foreach $phpaInput (values %$phphpaInput) { my $paInput; foreach $paInput (values %$phpaInput) { $paInput -> [-1] -> {lastInput} = 1; } } $ret; } sub escape_braces { my $self = shift; my $text = shift; if (defined $self -> {current_form}) { $text =~ s/[\\\[\]]/\\$&/g; if ($self -> {input}) { $text =~ s/\d/\\$&/g unless $self -> {href}; } } $text; } sub out { my $self = shift; my $text = shift; $text = $self -> escape_braces($text); $self -> SUPER::out($text); } sub pre_out { my $self = shift; my $text = shift; $text = $self -> escape_braces($text); $self -> SUPER::pre_out($text); } sub record_form_element { my ($self, $elem) = @_; my $form = $self -> {current_form}; my $elementList = $form -> {elementList}; my $elementCount = $form -> {elementCount}++; push(@$elementList,$elem); $elem -> {letter} = $elementCount; } sub note_form_element { my $self = shift; my ($elem) = @_; $self -> record_form_element(@_); my $letter = $elem -> {letter}; # $self -> out(" {$letter} "); } sub input_hidden_start { my $self = shift; my ($elem) = @_; $self -> record_form_element(@_); $self -> SUPER::input_hidden_start(@_); } sub input_password_start { my $self = shift; my ($elem) = @_; $self -> out(" "); $self -> SUPER::input_password_start(@_); } sub input_text_start { my $self = shift; my $ret = eval {$self -> SUPER::input_text_start(@_)}; $ret = $@?1:$ret; $self -> note_form_element(@_); $ret; } sub input_submit_start { my $self = shift; my $ret = eval {$self -> SUPER::input_submit_start(@_)}; $ret = $@?1:$ret; $self -> note_form_element(@_); $ret; } sub button_out { my ($self,$default,$text) = @_; $text = $default unless defined $text; # my $letter = $self -> {current_form} -> {letter}; $self -> vspace(0); $self -> {input}++; $self -> out(" "); $self -> {input}--; $self -> out(" $text: check preceding box, forward entire document to GetWeb"); $self -> vspace(0); } sub input_reset_start { 0; } sub note_if_final { my ($self, $type, $elem) = @_; my $form = $self -> {current_form}; my $letter = $elem -> {letter}; if (! defined $letter) { $letter = $form -> {elementCount}++; my $form = $self -> {current_form}; defined $form or die "no current form"; my $phpaInput = $form -> {phphpaInput} -> {$type}; my $name = $elem -> attr('name'); my $paInput = $phpaInput -> {$name}; my $input; foreach $input (@$paInput) { $input -> {letter} = $letter; } my $elementList = $form -> {elementList}; push(@$elementList,$elem); } my $text = ""; my $currentBoxLetter = $form -> {currentBoxLetter}; if (defined $currentBoxLetter and $currentBoxLetter ne $letter) { $text = "-$currentBoxLetter,"; } $text .= $letter if $elem -> {lastInput}; # $self -> out(" {$text} ") if $text ne ""; } sub input_radio_start { my $self = shift; my $ret = eval {$self -> SUPER::input_radio_start(@_)}; $ret = $@?1:$ret; $self -> note_if_final('radio',@_); $ret; } sub input_checkbox_start { my $self = shift; my $ret = eval{$self -> SUPER::input_checkbox_start(@_)}; $ret = $@?1:$ret; $self -> note_if_final('checkbox',@_); $ret; } sub select_end { my $self = shift; $self -> note_form_element(@_); my $ret = eval{$self -> SUPER::select_end(@_)}; $ret = $@?1:$ret; $ret; } sub textarea_end { my $self = shift; $self -> note_form_element(@_); my $ret = eval{$self -> SUPER::textarea_end(@_)}; $ret = $@?1:$ret; $ret; } # give the user visible links to the frames sub frame_start { my $self = shift; my ($elem) = @_; my $src = $elem -> attr('src'); my $name = $elem -> attr('name'); $elem -> attr('href',$src); $self -> vspace(0); $self -> out("FRAME: $name"); $self -> a_end(@_); $self -> vspace(0); } sub a_end { my $self = shift; my $paLink = $$self{paLink}; my $count = @$paLink; #number of links; [orig] is link 0 my $href = $_[0] -> {'href'}; my $url = new URI::URL $href, $$self{baseURL}; # jfj handle specially links pointing back to the same document, # jfj handle anchors my $footnote = "[$count] " . $url -> abs -> as_string; my $scheme = $url -> scheme; if ((defined $scheme) and (($scheme eq 'telnet') or ($scheme eq 'news'))) { $footnote .= " (not implemented)"; } push(@{$paLink}, $footnote); $self -> {href}++; $self -> {input}++; $self -> out($count); $self -> {input}--; $self -> {href}--; $self -> HTML::FormatText::a_end (@_); } # client-side image maps sub map_start { my $self = shift; $self -> vspace(1); $self -> out("[IMAGE MAP]"); 1; #shift -> a_start(@_); #1; } sub map_end { my $self = shift; $self -> vspace(1); } sub area_start { my $self = shift; # jfj abstract linking to another module $self -> a_end(@_); } sub option_start { my $self = shift; my ($elem) = @_; my $value = $elem -> attr('value'); if (! defined $value) { my $content = $elem -> content; $value = join('',@$content); $value =~ s/\n/ /g; $value =~ s/\s+$//; $value =~ s/^\s+//; $elem -> attr('value',$value); } $self -> SUPER::option_start(@_); } sub conciseStart { my ($self, $element) = @_; my $tag = $element -> tag; my $abbrev = new HTML::Element $tag; my @preserveUs = qw( name type action method rows multiple ); my $type = lc $element -> attr('type'); push(@preserveUs,'value') if (grep ($_ eq $type, (qw( submit radio checkbox image hidden ))) or $tag eq 'option'); # push(@preserveUs,'letter') if $tag eq 'form'; my $preserveMe; foreach $preserveMe (@preserveUs) { my $value = $element -> attr($preserveMe); defined $value and $abbrev -> attr($preserveMe,$value); } my $ret = $abbrev -> starttag; $ret; } sub annotateForm { my ($self,$form) = @_; my $phphpaInput = $form -> {phphpaInput}; my $formLetter = $form -> {letter}; my $paElement = $form -> {elementList}; $self -> out($self -> conciseStart($form)); $form -> traverse(sub { my ($node, $start, $depth) = @_; my $tag = $node -> tag; return 1 unless grep($_ eq $tag, (qw( input option select textarea ))); my $out; if ($start eq 1) { $out = $self -> conciseStart($node); if ($tag ne 'option') { $self -> vspace(0); } } else { return 1 unless grep($_ eq $tag, (qw( select textarea ))); $out = $node -> endtag; } $self -> out($out); 1; }, 1); $self -> out($form -> endtag); } sub end { my $self = shift; my $paForm = $self -> {paForm}; if (@$paForm) { $self -> vspace(1); $self -> out(&GetWeb::Util::getFormRefTag); $self -> vspace(0); my $form; foreach $form (@$paForm) { $self -> annotateForm($form); } } my $paLink = $$self{paLink}; if (@$paLink > 1 or $self -> {baseURL} -> abs -> as_string ne "") # skip if no links { $self -> vspace(1); $self -> out("\n" . &GetWeb::Util::getRefTag); my $count = 0; while (@{$paLink}) { $self -> vspace(0); my $line = shift @$paLink; my $maxLength = $self -> {rm} - $self -> {lm} + 1; if (length($line) > $maxLength) { $maxLength -= 5; $line =~ s/.{$maxLength}(?=.{5})/$&\\\n/g; } $self -> out($line); } } $self->HTML::FormatText::end (@_); } 1; GetWeb-1.15/getweb.pl100755 431 36 12131 6314065131 13555 0ustar rolftechnical#!/usr/bin/perl #- #-getweb.pl: sends formatted web pages via e-mail. #- #-Usage: #- $0 [-hvD] [-r root] #- [(-c | -f spool | -i [-s subject] [-b body])] #- [file ...] #- #-Where: #- -i : interactive mode (read in command, send result to STDOUT) #- -s subject : specify subject on command-line #- -b body : specify message body on command-line #- -r root : system root, default is /usr/local/getweb #- #- file ... : files containing mail messages or input (default is STDIN) #- -c : CGI Web-interface mode #- -f spool : read from mail spoolfile 'spool' (example: /var/spool/mail/me) #- #- -h : print this help message and exit #- -v : print the version number and exit #- -D : print debugging information #- # # Version: 1.2b1 # Author: Rolf Nelson # =head1 NAME getweb - command-line for server to provide the GetWeb service =head1 SYNOPSIS Usage: $0 [-hvD] [-r root] [(-c | -f spool | -i [-s subject] [-b body])] [file ...] Where: -i : interactive mode (read in command, send result to STDOUT) -s subject : specify subject on command-line -b body : specify message body on command-line -r root : system root, default is /usr/local/getweb file ... : files containing mail messages or input (default is STDIN) -c : CGI Web-interface mode -f spool : read from mail spoolfile 'spool' (example: /var/spool/mail/me) -h : print this help message and exit -v : print the version number and exit -D : print debugging information by default, getweb.pl processes incoming mail: % getweb.pl < myrfc822msg getweb.pl can also run in a loop from a mail-spool to reduce CPU load: % getweb.pl -f /var/spool/mail/getweb getweb.pl can also be run in manual test-mode with the B<-i> flag: % getweb.pl -i OR % getweb.pl -i -s 'ignore this subject' -b 'GET http://www.healthnet.org/' getweb.pl can also be run as a CGI script: #!/bin/sh # put this file in the CGI-bin area, and link HTML docs to this script /usr/local/bin/getweb -i -c The B<-r> option is necessary if your config/ and pub/ directories are somewhere other than in /usr/local/getweb/. =head1 DESCRIPTION GetWeb extends MailBot's message-processing capability to enable email users to access documents from the World Wide Web. =head1 SEE ALSO L, L, L, L =head1 COPYRIGHT Copyright (c) 1997 SatelLife. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 AUTHOR Rolf Nelson =cut my $DEFAULT_ROOT = "/usr/local/getweb"; BEGIN { push(@INC,"."); } $ENV{PATH} = "/bin"; use Getopt::Std; use MailBot::Config; use GetWeb::GetWeb; use strict; # untaint @ARGV to get around libwww-perl bug grep {/((.|\n)*)/ and $_ = $1} @ARGV; &procOpts(); my $root = $::opt_r || $DEFAULT_ROOT; MailBot::Config -> setRoot($root); my $mailBotConfig = MailBot::Config::current(); if ($::opt_i) { $mailBotConfig -> setInteractive(); (defined $::opt_s) and $mailBotConfig -> setSubject($::opt_s); (defined $::opt_b) and $mailBotConfig -> setBody($::opt_b); } if (defined $::opt_f) { $mailBotConfig -> setMailSpool($::opt_f); } elsif ($::opt_c) { $mailBotConfig -> setCGI(); } my $in = shift @ARGV; if (defined $in) { open(STDIN,$in) or die "could not open $in for input: $!"; } my $getweb = new GetWeb::GetWeb; $getweb -> run; 0; #---------------------------------------------------------------- # procOpts: process command-line options #---------------------------------------------------------------- sub procOpts { ($::opt_v, $::opt_c, $::opt_h, $::opt_D, $::opt_i, $::opt_r) = (); #avoid warning message getopts('b:cf:ir:s:hvD') || &showUsage("bad command switches"); &d(); $::opt_h && &showUsage(); $::opt_v && &showVersion(); } #---------------------------------------------------------------- # showUsage : display a usage string, then exit. #---------------------------------------------------------------- sub showUsage { my $errMsg = shift; if ($errMsg ne "") { print STDERR "Usage error: $errMsg\n\n"; } seek(DATA,0,0); while () { if (s/^\#\-//) { s/\$0/$0/; print STDERR $_ unless /^\-/; } } exit ($errMsg ne ""); } #---------------------------------------------------------------- # showVersion : print Version and exit. #---------------------------------------------------------------- sub showVersion { seek(DATA,0,0); while () { print STDERR $_ if /\s+Version:/; } exit(0); } #---------------------------------------------------------------- # d : print debugging message if -D verbose flag is on. #---------------------------------------------------------------- sub d { return unless $::opt_D; my $msg = shift; if ($msg eq "") { print STDERR "found -D flag; running $0 in verbose DEBUG mode.\n"; } else { print STDERR $msg, "\n"; } } __END__ GetWeb-1.15/pub/ 40755 431 36 0 6316042200 12405 5ustar rolftechnicalGetWeb-1.15/pub/test/ 40755 431 36 0 6316042222 13370 5ustar rolftechnicalGetWeb-1.15/pub/test/staricn2.gif100644 431 36 322 6313545210 15660 0ustar rolftechnicalGIF89a ÄÿÿÿÀÜÀîðüÞàìÌfÌf3̙̙3Ì™fÌ™™ÌÌfÌÿ™ÿfÿ™ÿ™3ÿ™fÿÌfÿÌ™ÿÌÌÿÿÌÿûð!ù, O Ždiž£D¡ç3:®³1 Hý2a8ó1"ƒDçD†ÑðaQÓªó0L¬h RÒhŠž9!Cbf¸rnÓ!fE_$À ;GetWeb-1.15/pub/test/form.html100644 431 36 33767 6304607425 15367 0ustar rolftechnical SHAREWARE.COM: Power Search Form Exclusive. Netscape Navigator survival guide -- free!

CNET Online

Menu
 NEW ARRIVALS
 MOST POPULAR
 SELECTIONS

 SEARCH
  Quick
  Simple
  Power

 HELP
 ABOUT
 SUBSCRIBE

CNET services
 CNET.COM
 NEWS.COM
 GAMECENTER.COM
 SEARCH.COM
 DOWNLOAD.COM
 ACTIVEX.COM
 MEDIADOME.COM

CNET Marketplace
 Sponsors
 CNET store
BUYDIRECT.COM

SHAREWARE.COM: power search

Blue: Green: Blue: Green:

exclusive 1 have cake
exclusive 1 eat it


Power Search by platform
The platform of files to search:
Search the file's description for:
and for:
but not for:
Check to match case in the above:
Check to search in filenames too:
And matches directory/filename:
Show only files created after:
Limit the number of files listed to:
Sort files:


Power Search by archive
The archives to search inside:
(To select more than one archive hold the Control key.)
Search the file's description for:
and for:
but not for:
Check to match case in the above:
Check to search in filenames too:
And matches directory/filename:
Show only files created after:
Limit the number of files listed to:
Sort files:


OTHER SEARCHES
quick search
designed for minimum fuss
simple search
an easy way to search
for software

 
Back to the top
Check out our latest sites
 Check out
 our latest
 sites:
Go to BUYDIRECT.COM
 Click here to get
 fully-featured, fully supported
 software direct from the publisher.
Go to DOWNLOAD.COM
 Click here to visit
 DOWNLOAD.COM, the
 Internet's Software Source.
CNET disclaims any responsibility for software obtained through this site. Click here for more legal stuff. Copyright © 1995-97 CNET, Inc. All rights reserved.
GetWeb-1.15/pub/test/backgrd.bin100755 431 36 335 6262024661 15547 0ustar rolftechnicalGIF87a„ €ÿÿÿÌÌÌ,„ ¼Œ©Ëí£œØ‹³Þ¼û†âH–扦êʶî ÇòL×öçzKõþ »¢ñˆL*—̦ó J§ª¡õŠÍ6¨Ü®÷ ‹Çä²¹¨M«×”³û ËçôºÊÎë÷÷¾ÿ(8H˜³wˆˆU¸ÈØèøù”HYÙ#‰™©¹ÉÙ¹h ÊàIZjzŠšª#Êʪú +;[ÚjkI›«»ËÛ{v Œè;L\l|<¬œ‡Üìü ¼<m}íY;GetWeb-1.15/pub/test/promed.html100755 431 36 724 6272757631 15651 0ustar rolftechnical ProMED-mail

Here we are! Also visit promed_new.html

Here is a binary character: Ô

Too bad we can't read news yet.

Here is a really long URL GetWeb-1.15/pub/test/promed_new.html100755 431 36 2545 6263243566 16542 0ustar rolftechnical ProMED-mail

Welcome!

Here is 1k of junk:

foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foofoo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo GetWeb-1.15/pub/test/promed_old.html100755 431 36 373 6263237406 16500 0ustar rolftechnical ProMED-mail

The address of this page has changed, please update your bookmarks.

promed.html

GetWeb-1.15/pub/help/ 40755 431 36 0 6316042225 13344 5ustar rolftechnicalGetWeb-1.15/pub/help/BREAK.html100644 431 36 1161 6265241054 15156 0ustar rolftechnical Online Help: BREAK

How can I break a long command between multiple lines?

If the URL is too long to fit into a single line, you can break it up if you surround it with brackets or end the line with a '\':

GET <http://www.yahoo.com/text/Regional/Countries/Czech_
Republic/>

is the same as

GET http://www.yahoo.com/text/Regional/Countries/Czech_Republic/
and is also is the same as
GET http://www.yahoo.com/text/Regional/Co\
untries/Czech_Republic/

Back to the main help page GetWeb-1.15/pub/help/FORMS.html100644 431 36 4726 6307564230 15233 0ustar rolftechnical Online Help: FORMS

How can I fill out HTML forms?

Pages containing HTML forms have <GETWEB: FORM A> at the beginning of each form. To fill out the form, forward the message containing the form back to the server, filling out any inputs surrounded by braces: [] For example, if you send a command to get the ProMED page, part of the document will look like this:


<GETWEB: FORM A>

Search the entire archive: ProMED-mail

String to search for: [______________________________]
[ ] Submit: check preceding box and forward to GetWeb
[ ]Case sensitive     [ ]Partial match

Return only files modified within the last [_____] days.
Maximum number of files returned:

      [ ] 10
   OR [X] 50
   OR [ ] 100
   OR [ ] 1000

To search for 'ebola' and 'zaire' within the last 200 days, returning the top 10 matching files, you would fill out the form as follows:


<GETWEB: FORM A>

Search the entire archive: ProMED-mail

String to search for: [__________ebola zaire____________________]
[X ] Submit: check preceding box and forward to GetWeb
[ ]Case sensitive     [X ]Partial match

Return only files modified within the last [_\200____] days.
Maximum number of files returned:

      [X ] 10
   OR [] 50
   OR [ ] 100
   OR [ ] 1000

Note the '\' before the 200. When filling out a form input, you must 'escape' the following characters by preceding them with a backslash (\):
  • Number: write 3 as \3, you can write 50 as \50 or \5\0
  • Braces: write [ as \[, and ] as \]
  • Underscores: write _ as \_
  • Backslashes themselves: write a literal \ as \\

Remember to 'X' the box where it says to 'check preceding box', or the form will not be processed.

Finally, make sure to fill out at most one box in each radio button group or menu. Radio buttons look like this:

Choose ([X]) Blue or ([ ]) Green, but not both!
Menus look like this:
Choose:

     [X] Red
  OR [ ] Black

but not both!
Yahoo offers a short list of the best search engines; Excite offers a more comprehensive list of search engines.

Back to the main help page GetWeb-1.15/pub/help/.info.html100755 431 36 7045 6314062677 15364 0ustar rolftechnical About SatelLife

About SatelLife

SatelLife is an international not-for-profit organization employing satellite, telephone and radio networking technology to serve the health communication and information needs of countries in the developing world.

More information is available at the SatelLife home page:

http://www.healthnet.org

If you do not have Web access, you can still access the home page by sending a message to getweb@usa.healthnet.org with the body:

GET http://www.healthnet.org

How to use the GetWeb MailBot server

This software is currently in beta testing. Please report any problems to getweb-admin@usa.healthnet.org.

Please note all requests are logged; we cannot guarantee that your requests will remain private.

To request a document from the World Wide Web, send a message to getweb@usa.healthnet.org with the body containing one or more requests like:

GET url

Where url is the URL of the document you request. If the message contains more than one request, separate each request with a blank line.

Here is a message which would fetch the HealthNet home page:

GET http://www.healthnet.org

After recieving the above message, the GetWeb server would format the HealthNet home page as human-readable plain-text and send it to you.

You can enclose your commands in a begin/end block, or comment out lines with '#':

This preamble will not be processed by the MailBot...
begin
GET http://www.healthnet.org
# ...neither will this comment
end
...and neither will this signature.

A hotlist of URLs which we consider especially interesting is available.

Each hypertext link is represented by a number in brackets. Suppose you get a message like this from a GetWeb server:


Some important conferences carried by SatelLife include:

     * ProMED: Program for Monitoring Emerging Diseases[1]
     * ProCAARE: Program for Collaboration Against AIDS[2]
     * E-Drug: Essential Drugs[3]

** References from this document **
[1] http://www.healthnet.org/programs/promed.html
[2] http://www.healthnet.org/programs/procaare.html
[3] http://www.healthnet.org/programs/edrug.html

To get more information about ProCAARE, you would look up link 2 at the bottom of the message to find out the URL is http://www.healthnet.org/programs/procaare.html. You would then send a message to the GetWeb server:

GET http://www.healthnet.org/programs/procaare.html

Follow the links below for more help.

How can I:

How quotas limit server load

Accessing ProMED archives

Other GetWeb-type servers

About the GetWeb MailBot server software

Also see the GetWeb home page.

Send bugs or suggestions for improvement to getweb-admin@usa.healthnet.org. GetWeb-1.15/pub/help/AGORA.html100755 431 36 1110 6265234300 15154 0ustar rolftechnical Online Help: AGORA

Can I use Agora (w3mail) commands?

Most of the access methods of Arthur Secret's Agora server are supported, including:

  • SEND, RSEND, WWW, and RWWW commands
  • Replying with a message containing only the numbers of the links to follow

DEEP and RDEEP commands are not supported.

The technique of inserting an X in desired links and forwarding the document back to the server is currently disabled to save bandwidth.

Back to the main help page GetWeb-1.15/pub/help/AUTH.html100644 431 36 1736 6304605643 15105 0ustar rolftechnical How can I pass in my username and password?

How can I pass in my username and password?

The USER and PASSWORD modifiers are used together, like this:

GET USER myname PASSWORD mypass <rest of command>

For example:

GET USER terry PASSWORD foo http://www.wherever.com

Passwords, like everything else in GetWeb, are not necessarily private, because:

  • GetWeb logs all transactions locally
  • GetWeb's HTTP transactions with the server are unencrypted and may be intercepted by people on the internet

Plus, if your email goes through the internet backbone, your email may be read by anyone at intermediate internet hosts as it hops from host to host on the way to the internet. (Look at the 'Received' headers and see all the machines email travels through.) So, don't send any sensitive information over this insecure channel.

Back to the main help page GetWeb-1.15/pub/help/.index.html100755 431 36 7023 6315530254 15524 0ustar rolftechnical Online Help

How to access GetWeb

Please note access to this server is logged; we cannot guarantee that your requests will remain private.

To request a document from the World Wide Web, send a message to getweb@usa.healthnet.org with the body containing one or more requests like:

GET url

Where url is the URL of the document you request. If the message contains more than one request, separate each request with a blank line.

Here is a message which would fetch the HealthNet home page:

GET http://www.healthnet.org

After receiving the above message, the GetWeb server would format the HealthNet home page as human-readable plain-text and send it to you.

A hotlist of URLs which we consider especially interesting is available.

Each hypertext link is represented by a number in brackets. Suppose you get a message like this from a GetWeb server:


Some important conferences carried by SatelLife include:

     * ProMED: Program for Monitoring Emerging Diseases[1]
     * ProCAARE: Program for Collaboration Against AIDS[2]
     * E-Drug: Essential Drugs[3]

** References from this document **
[1] http://www.healthnet.org/programs/promed.html
[2] http://www.healthnet.org/programs/procaare.html
[3] http://www.healthnet.org/programs/edrug.html

To get more information about ProCAARE, you would look up link 2 at the bottom of the message to find out the URL is http://www.healthnet.org/programs/procaare.html. You would then send a message to the GetWeb server:

GET http://www.healthnet.org/programs/procaare.html

If your mailer program insists puts extra, unwanted text at the beginning or end of your message, then you can enclose your commands in a begin/end block. You can also comment out lines with '#', so that in the following message only the 'GET http://www.healthnet.org' line will be processed:

Hello getweb@usa.healthnet.org!
This preamble will not be processed by the MailBot...

begin

GET http://www.healthnet.org

# ...neither will this comment

end
...and neither will this signature:
--
B. Russell, ontological consultant, phone: (617) 555-1652
"The worse the logic, the more interesting the conclusions"

Follow the links below for more help.

How can I:

How quotas limit server load

Accessing American Physiological Society abstracts

Accessing ProMED archives

Other GetWeb-type servers

About the GetWeb MailBot server software

Also see the GetWeb home page.

Send bugs or suggestions for improvement to getweb-admin@usa.healthnet.org. GetWeb-1.15/pub/help/SEARCHING.html100755 431 36 10403 6273677404 15672 0ustar rolftechnical Online Help: SEARCHING

How can I search the Web?

SatelLife provides an e-mail gateway for selected WWW search engines. These search engines allow you to search the World Wide Web through e-mail. Currently supported are the Infoseek, Yahoo, and AltaVista search engines.

Help on using the ProMED search engine is also available.


The Yahoo search engine allows you to search through a carefully indexed list of World-Wide Web sites. It will produce a small list of well-organized sites which may have the information you are searching for.

We also provide a gateway into the Infoseek and AltaVista search engines. These search engines allow you to search through the entire World Wide Web, producing a larger set of possible sites, but the probability of any given site having the information you're looking for may be lower than with Yahoo. Infoseek also allows you to search through Usenet archives.


To access one of these search engines, send a message to getweb@usa.healthnet.org with the following line:

SEARCH <engine> <keywords...>

with "engine" replaced by either YAHOO, ALTAVISTA, or INFOSEEK depending on which search engine you want to use.


For example, to search for Yahoo categories relating to the Ebola virus outbreak in Zaire, you might send this message to getweb@usa.healthnet.org:

SEARCH YAHOO ebola zaire

You would receive a message containing these lines:

Found 3 matches containing ebola zaire.  Displaying matches 1-3.

...

* Ebola Epidemic in Zaire[9]
* Ebola Outbreak in Zaire - Updates[10]
* Primary Sources: The Ebola in Zaire[11] - from the Nando Times.

...

[9] http://www.uct.ac.za/microbiology/ebopage.html
[10] http://www.bocklabs.wisc.edu/outbreak.html
[11] http://www.nando.net/newsroom/zairesources.html

To gain more information about entry number 10, labelled 'Ebola Outbreak in Zaire', you could then send a message to getweb@usa.healthnet.org with the message body:

SEND http://www.bocklabs.wisc.edu/outbreak.html


We also provide a gateway to the powerful AltaVista search engine. To search the entire World-Wide Web for information about tobacco and lung cancer, send this message to getweb@usa.healthnet.org:

SEARCH ALTAVISTA tobacco "lung cancer"

To search through healthnet.org home pages for information on the Ebola virus, send this message:

SEARCH ALTAVISTA host:healthnet.org ebola

The AltaVista Help page contains additional information on query syntax.


Finally, we also provide a gateway to the popular InfoSeek search engine. To search the entire World-Wide Web for information about exercise and rats, type:

SEARCH INFOSEEK exercise rats This can lead to possibly useful information (like a Mouse and Rat Research Home Page), as well as to useless information (like the home page of someone who refers to himself as "Rat".)

By default, Infoseek will search the World-Wide Web. However, Infoseek recognizes the following keywords:

  • NN searches Usenet newsgroups.
  • CT searches the Infoseek Company Directory.
  • EM searches a database of known e-mail addresses.
  • NW searches through the past month of news.
  • FQ searches through a collection of FAQ documents.

So, to search for recent news on the 15-year-old search for a cure for AIDS, submit this query:

SEARCH INFOSEEK NW cure aids

The Infoseek Search Tips page explains how to create more complex queries, like a query which finds only pages which contain the phrase "San Francisco":

SEARCH INFOSEEK city guide +San Francisco


Please note that SatelLife is in no way affiliated with Infoseek, AltaVista, or Yahoo, and cannot be responsible for the accuracy of these search engines or for the content of retreived WWW documents.

Back to the main help page GetWeb-1.15/pub/help/SERVERS.html100644 431 36 1573 6315530440 15466 0ustar rolftechnical Online Help: SERVERS

What other GetWeb-type servers are available?

Another public GetWeb server is available as:

  • getweb@info.lanic.utexas.edu

Agora (w3mail) servers also provide Web access to e-mail, similar to GetWeb. Send a document with the body 'HELP' to any of the following addresses:

  • agora@dna.affrc.go.jp
  • agora@kamakura.mss.co.jp

The GetWeb server software is freeware; if your organization or an organization you work with has Web access, why not ask them to run a GetWeb server themselves? Contact getweb-admin@usa.healthnet.org for more info.

For a more up-to-date list of servers, send a message to mail-server@rtfm.mit.edu with the body:

send usenet/news.answers/internet-services/access-via-email

Back to the main help page GetWeb-1.15/pub/help/DELIVER.html100755 431 36 1304 6265234340 15426 0ustar rolftechnical Online Help: DELIVER

How can I control how my documents are delivered?

The TO user@host modifier specifies that documents should be sent to user@host rather than to the original send address.

To send the healthnet home-page as source to me@myotheraddress.com, send this command:

GET TO my@myotheraddress.com http://www.healthnet.org

Messages are split into chunks of about 20k by default. To raise or lower this value, use the SPLIT command. The following command splits the file into 40k chunks instead:

SPLIT 40000 http://www.big.com/mybigfile.html

Back to the main help page GetWeb-1.15/pub/help/FOLLOWING.html100755 431 36 2703 6273675476 15722 0ustar rolftechnical Online Help: FOLLOWING

How can I follow chains of linked documents with a single command?

If you know what link you're going to follow from an intermediate document, you do not need to download the intermediate document. You can instead save time and bandwidth by using the FOLLOW command.

Suppose http://www.healthnet.org/programs/ looks like this:


Some important conferences carried by SatelLife include:

     * ProMED: Program for Monitoring Emerging Diseases[1]
     * ProCAARE: Program for Collaboration Against AIDS[2]
     * E-Drug: Essential Drugs[3]

** References from this document **
[1] http://www.healthnet.org/programs/promed.html
[2] http://www.healthnet.org/programs/procaare.html
[3] http://www.healthnet.org/programs/edrug.html

If you send a message to the GetWeb server with the text:

GET http://www.healthnet.org/programs/ FOLLOW 2

The server will send you the description of ProCAARE.

You can chain together multiple FOLLOW directives. If you already know you're going to want the fifth document linked to the ProCAARE page, send a message like this:

GET http://www.healthnet.org/programs/ FOLLOW 2 FOLLOW 5

This would reduce the total turnaround time, since you would get the desired final document in one e-mail round trip rather than in three.

Back to the main help page GetWeb-1.15/pub/help/APS.html100644 431 36 1562 6272210350 14753 0ustar rolftechnical Searching APStracts

How to search through the online APStracts database

Send a message to getweb@usa.healthnet.org with the body containing the search command. For example:

SEARCH APS97 cardiac muscle

will search for a 1997 physiological abstract containing the words 'cardiac' and muscle, while

SEARCH APS95 cardiac or heart

will search for a 1995 abstract containing either the word 'cardiac' OR the word 'heart'.

See the APStract online help for info on more complicated queries, like "SEARCH APS96 smooth not lung".

On each search, you can search either the 1995, 1996, or the 1997 database by selecting specifying either APS95, APS96, or APS97 on the command-line.

Back to the main help page GetWeb-1.15/pub/help/MIME.html100755 431 36 2022 6273675572 15100 0ustar rolftechnical Online Help: MIME

How can I decode binary files?

Binary messages are sent as Base64 MIME file-attaches. Like UUEncode, MIME is a method of encoding binary files into a mailable text format.

The current versions of Eudora Lite and (UUCP) Pegasus both support MIME.

If you can't change your mailer, you can always use a very basic standalone MIME-reading program like mpack.

As an alternative, the NOMIME modifier allows you to retrive binary files uuencoded rather than in MIME format. So, to get the zipped copy of the mpack mailer in uuencode format:

SEND NOMIME ftp://ftp.andrew.cmu.edu/pub/mpack/mpack15d.zip

More detailed information about MIME and about various decoders and mailers is available in the MIME FAQ.

GetWeb does not send out files longer than 100k.

Back to the main help page GetWeb-1.15/pub/help/PROMED.html100755 431 36 2354 6273676307 15344 0ustar rolftechnical Online Help: PROMED

Accessing ProMED archives

To search the ProMED database, send a message to getweb@usa.healthnet.org. The body of the message should contain the line:

SEARCH PROMED keyword1 keyword2 ...

Where "keyword1 keyword2 ..." is a list of one or more keywords which you expect the documents you're searching for to contain.

For example, to search for articles on yellow fever in ghana, send a message:

SEARCH PROMED yellow fever ghana

You will get back a list of messages which have text matching one or more keywords:


90%  promed-mail 9612: PRO/AH/EDR> Yellow fever - Ghana[3]
78%  promed-mail 9611: Yellow fever, imported - USA from Brazil[4]

...

[3] http://www.healthnet.org/programs/promed-hma/9612/0010.html
[4] http://www.healthnet.org/programs/promed-hma/9611/0040.html

To access the message titled "Yellow fever - Ghana", look at the end of the message for an index of hypertext links and choose the link for 3. Then send another message to getweb@usa.healthnet.org:

GET http://www.healthnet.org/programs/promed-hma/9611/0040.html


Back to the main help page GetWeb-1.15/pub/help/QUOTA.html100755 431 36 1364 6307564135 15240 0ustar rolftechnical Online Help: QUOTA

How quotas limit server load

Casual users on this server are limited to a certain maximum number of bytes, and a certain maximum number of messages. Syntax errors and access to pages on this server are generally not counted towards this total.

Quotas are currently about 70 document requests or 7000 outgoing kilobytes for most users during the course of a week.

Quotas are regenerated after seven full days; for example, if you run out of quota on a Wedensday, you will be able to use the system again the next Wedensday. If you run out on a Friday, you will have to wait until the following Friday.

Back to the main help page GetWeb-1.15/pub/help/.aps.html100644 431 36 10143 6314062677 15222 0ustar rolftechnical Searching APStracts

How to search through the online APStracts database

Send a message to apsearch@usa.healthnet.org with the body containing the search command. For example:

SEARCH APS97 cardiac muscle

will search for a 1997 physiological abstract containing the words 'cardiac' and muscle, while

SEARCH APS95 cardiac or heart

will search for a 1995 abstract containing either the word 'cardiac' OR the word 'heart'.

See the APStract online help for info on more complicated queries, like "SEARCH APS96 smooth not lung".

On each search, you can search either the 1995, 1996, or the 1997 database by selecting specifying either APS95, APS96, or APS97 on the command-line.

After submitting your search, you will receive an e-mail message back containg a list of URL's which match your query. You can follow those URL's by following the directions below.

You can also use the directions below to browse the APStracts web page, which sorts all of the abstracts by journal and by month. Simply send a message to apsearch@usa.healthnet.org with the body:

GET http://www.uth.tmc.edu/apstracts/

How to use the GetWeb MailBot server

This software is currently in beta testing. Please report any problems to getweb-admin@usa.healthnet.org.

Please note all requests are logged; we cannot guarantee that your requests will remain private.

To request a document from the World Wide Web, send a message to apsearch@usa.healthnet.org with the body containing one or more requests like:

GET url

Where url is the URL of the document you request. If the message contains more than one request, separate each request with a blank line.

Here is a message which would fetch the HealthNet home page:

GET http://www.healthnet.org

After recieving the above message, the GetWeb server would format the HealthNet home page as human-readable plain-text and send it to you.

You can enclose your commands in a begin/end block, or comment out lines with '#':

This preamble will not be processed by the MailBot...
begin
GET http://www.healthnet.org
# ...neither will this comment
end
...and neither will this signature.

A hotlist of URLs which we consider especially interesting is available.

Each hypertext link is represented by a number in brackets. Suppose you get a message like this from a GetWeb server:


Some important conferences carried by SatelLife include:

     * ProMED: Program for Monitoring Emerging Diseases[1]
     * ProCAARE: Program for Collaboration Against AIDS[2]
     * E-Drug: Essential Drugs[3]

** References from this document **
[1] http://www.healthnet.org/programs/promed.html
[2] http://www.healthnet.org/programs/procaare.html
[3] http://www.healthnet.org/programs/edrug.html

To get more information about ProCAARE, you would look up link 2 at the bottom of the message to find out the URL is http://www.healthnet.org/programs/procaare.html. You would then send a message to the GetWeb server:

GET http://www.healthnet.org/programs/procaare.html

Follow the links below for more help.

How can I:

How quotas limit server load

Accessing ProMED archives

About the GetWeb MailBot server software

Also see the GetWeb home page.

Send bugs or suggestions for improvement to getweb-admin@usa.healthnet.org. GetWeb-1.15/pub/help/HOTLIST.html100755 431 36 5520 6265234622 15471 0ustar rolftechnical Online Help: HOTLIST

Hotlist of interesting links

For those new to the World Wide Web, here are some possible starting points.

Yahoo has a comprehensive directory by category of popular web sites. Of special interest is the list of Web beginner's guides.

The World Wide Web FAQ contains an overview of how the World Wide Web works.


Finally, here are some sites that may be of interest to health-care workers in the developing world:

Institutions

National Institutes of Health, USA (NIH)

U.S. Centers for Disease Control and Prevention (CDC) provides public health information for care providers and consumers, access to U.S. health statistics and documents such as MMWR and AIDS Daily Summaries:

For international public health information: World Health Organization, Geneva, Switzerland (WHO)

Journals

BMJ Publishing Group provides access to the BMJ and Student BMJ, information on conferences, books, and other items of health-related interest.

The British Medical Journal

The New England Journal of Medicine

Organizations/Associations

American Public Health Association (APHA)

Appropriate Health Resources and Technologies Action Group (AHRTAG)

Pan American Health Organization (PAHO)

Medical and Public Health Schools

Harvard Medical School

Harvard School of Public Health

Johns Hopkins School of Public Health Funding Opportunities The Third World Academy of Sciences

Other

Doctor's Guide to Medical Conferences & Meetings

Johns Hopkins School of Public Health Internet Resources provides a list of many public-health related resources (organizations, associations, schools of Public Health, and more) on the Internet.

SatelLife has its own home page describing its ongoing international projects.

Hotlist produced by Clara Chen.

Back to the main help page GetWeb-1.15/pub/help/FORMAT.html100755 431 36 676 6265234563 15326 0ustar rolftechnical Online Help: FORMAT

How can I request raw HTML source rather than formatted text?

The SOURCE modifier specifies that HTML documents should be sent as HTML source rather than as modified plain-text.

To receive the healthnet home-page as source, send this command:

GET SOURCE http://www.healthnet.org

Back to the main help page GetWeb-1.15/pub/help/INFO.html100755 431 36 3337 6301130327 15066 0ustar rolftechnical Online Help: INFO

About the GetWeb MailBot server software

GetWeb was developed by SatelLife. SatelLife is an international not-for-profit organization employing satellite, telephone and radio networking technology to serve the health communication and information needs of countries in the developing world.

Please address any suggestions to the author, Rolf Nelson.

Funding was provided by the American Physiological Society, Management Sciences for Health, NEC, and the National Science Foundation.

SatelLife wishes to thank CERN, the European Laboratory for Particle Physics, for its role in the development of methods of offline Web access, especially for developing the Agora (W3mail) Server software.

Special thanks also to the author of Agora, Arthur Secret; and to Hugh Sasse and Guido Hansen, who have used their prior experience running w3mail servers to provide invaluable input to the development process.

The GetWeb MailBot server program is copyright (c) 1996 SatelLife. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl. There is no warranty for the service nor the software.

Back to the main help page GetWeb-1.15/BUGS100644 431 36 2434 6315550236 12416 0ustar rolftechnicalKnown bugs and limitations: GetWeb does not support the news: protocol. Gopher URLS often don't work, probably there are multiple bugs in the libwww-perl library involving gopher handling. Users have no consistent way of telling which radio buttons are grouped together. There are two distinct interfaces: marking up the web-page and sending it back, which allows you to fill out HTML forms; and a command-line interface, which allows you to use redirection, split size specification, and passwords. There is no way of using both sets of features simultaneously; this could be implemented in the future using user-profiles, or a set of header fields. The MailBot does not parse incoming MIME messages specially. This means incoming multi-part MIME messages cannot be parsed correctly unless the user uses the 'begin..end' syntax. This also means anyone sending a message to GetWeb in quoted-printable may be in trouble, and anyone trying to send a Base64 message to GetWeb is out of luck. HTML Form interface is hard to use correctly, partly because of the limitations of using a Mail User-Agent to fill out forms. If an HTML form input is nothing but a number, then it has to be escaped; otherwise GetWeb thinks it's a link. The CGI interface does not work correctly with the new Perl5.004 beta. GetWeb-1.15/COPYING100644 431 36 372 6314036624 12744 0ustar rolftechnicalThe GetWeb MailBot server software is copyright (c) 1996 SatelLife. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl. See MailBot/IniConf.pm for the IniConf copyright message. GetWeb-1.15/Makefile.PL100644 431 36 3317 6314266314 13706 0ustar rolftechnicaluse ExtUtils::MakeMaker; $VERSION="1.15"; # borrowed from libwww-perl require 5.002; $| = 1; my $missing_modules = 0; print "Checking for LWP."; eval { require LWP; LWP->require_version('5.04'); }; if ($@) { print " failed\n"; $missing_modules++; print < to find a CPAN site near you. EOT @programs_to_install = (); # qw( getweb.pl ); WriteMakefile( NAME => "GetWeb", DISTNAME => "GetWeb", VERSION => $VERSION, PMLIBDIRS => [ 'GetWeb', 'MailBot' ], PL_FILES => { map {("bin/$_.PL" => "bin/$_")} @programs_to_install }, EXE_FILES => [ map {"bin/$_"} @programs_to_install ], 'clean' => { FILES => '$(EXE_FILES)' }, # EXE_FILES => [ qw( getweb.pl ) ], dist => {COMPRESS => 'gzip -9f', SUFFIX => 'gz'}, ); sub MY::test { q( test: -ln -fs ../../pub t/testRoot/ -ln -fs ../../pub t/quotaTestRoot/ @echo making sure there is no AutoLoader.pm cleanup bug... @$(FULLPERL) getweb.pl -r t/testRoot -i -s 'test' -b 'help' | grep DESTROY.al 2> /dev/null; \ if [ $$? -eq "0" ]; then \ echo "You must use AutoLoader.patch; see README file. Test failed!" 1>&2; \ exit 1; \ fi @echo ...AutoLoader.pm is ok. @echo $(FULLPERL) t/TEST ); } GetWeb-1.15/CHANGELOG100644 431 36 2675 6315772172 13161 0ustar rolftechnical1.2b1 release (1.15): Minor modifications: * Support Perl5.004 beta 1 * Support MailTools-1.09 * Sysadmin-level documentation * Rudimentary frame support * Max message size is a function of by user and content-type * Mail-loop check can be disabled in config file Bug fixes: * Escapes []'s inside

 combination

3/8/97 1.1 release (1.11):

Major additions:

* Added DEEP command (which is disabled by default)

Minor modifications:

* Assumes binary HTML are Latin-1 accent characters
* Support for client-side imagemaps

Bug fixes:

* FTP directories were not annotated
* rget, rsend, rwww, rsource were broken
* Didn't work with MIME-Tools-3.xx
* Confusing errmsgs after failed ftp session
* Could not process image-submit form
* Could not find form if at start of document


2/25/97 1.1b1 (1.10):

Major additions:

* Fill out arbitrary HTML GET and POST forms
* Basic User-Password authentication
* AdvCGI module allows simulated forwarding

Minor modifications:

* Abandoned 'cwd' concept (subject line is now only used when following
  links)
* More .sigs recognized
* checked links extracted from msg body, avoiding repeat HTTP req
* TO command changes 'From' field to original sender
* Removed 'Received' header hop-count

Bug fixes:

* References were not appended to error messages
* Mail-spool command was not actually configurable
* 'HELP' messages to unknown service caused error
* Splitting occurred at 2 * $splitSize rather than $splitSize
GetWeb-1.15/FEATURE.MAILBOT100644    431     36        1544  6314053150  14030 0ustar  rolftechnicalFeatures of MailBot:

* major features

** provides multiple interfaces

Can process incoming mail messages piped into program
Can batch-processes mail messages in mail-spool
Can process through interactive command-line for testing purposes
Can process interactive messages through CGI for testing purposes

** miscellaneous major features

Extensible, object-oriented architecture
Written in perl5
Quotas, access control by user address/domain and/or by resource identifier
Bounces unexpected errors to administrator
Splits large files into MIME message/partial chunks

* minor features

Interfaces with Mail::* utilities
Provides logging mechanism
Can save incoming/outgoing messages
Customizable .ini-style configuration file
Timeouts
Checks for mail-loops
Removes .signatures
Configurable maximum size

* limitations

Requires Perl5.002 or later
Only runs on Unix
GetWeb-1.15/README100644    431     36        5427  6315774520  12624 0ustar  rolftechnicalSee the GetWeb home-page for an on-line demo:

http://www.healthnet.org/dist/getweb/

See COPYING for copyright information.

Install Directions
==================

You must have Perl 5.002 or higher on a UNIX system.  Note that the
CGI interface does not currently work with the new Perl5.004 beta 1.

Install instructions for GetWeb-1.15 (1.2 beta 1):

1.  First install libwww-perl with the following steps:

    a)  Install IO-1.12 or later
    b)  Install libnet-1.01 or later
    c)  Install libwww-perl-5.04 or later.  Ignore any MD5 warnings.

All of these modules are available through CPAN, the Comprehensive
Perl Archive Network (See http://www.perl.com/CPAN)

I have tested with both libwww-perl-5.04 and 5.07.  Please install
5.07 or later if you are installing a new libwww-perl from scratch.

2.  Install MIME-tools with the following steps:

    a)  Install MailTools-1.06 or later (pref. MailTools-1.09)
    b)  Install MIME-tools-2.04 or later

I have tested with both MIME-tools-2.04 and 3.204.  3.204 encodes
Latin-1 accents a little better, so use 3.204 if you are installing
from scratch.

2a.  (optional) Install CGI-modules-2.75 or later, if you want to
     use the CGI interface to run demos such as the demo at
     

3.  Untar the latest GetWeb distribution into the getweb home
    directory.  Chdir to that directory.

4.  Run:

     # perl Makefile.PL
     # make
     # make test
     # make install

5.  Create a new user account, "getweb".

6.  Copy config/mailbot.config into /usr/local/getweb/config.  Edit
    it to reflect your local configuration.  (In particular, if you
    have a thicker link to the internet than our 56k line, you can
    set quota.message higher than our 70 messages per week.)

7.  For now, copy the pub/ area into /usr/local/getweb/pub.  You may
    want to change these files later.  (In particular, you should
    eventually change 'getweb@usa.healthnet.org' to the address that you
    are running getweb as.)

8.  Create a ~getweb/.forward file containing the following line:

     "| getweb.pl"

    (Or, if you want to batch these, you can instead run
     a daemon process like: "getweb.pl -f /var/spool/mail/getweb".  If
     you do this, change spool.get in mailbot.config to a command
     which fetches mail on your local system.)

AutoLoader Patch
================

If your AutoLoader.pm file is buggy, you may get this line while
running 'make test':

      You must use AutoLoader.patch; see README file.  Test failed!

If so, you need to patch your Autoload file because of a bug in
perl5.003.  One way to do this is to apply AutoLoader.patch, included
in this distribution:

      # cd /usr/lib/perl5
      # ls AutoLoader.pm
      AutoLoader.pm
      # patch < /usr/home/getweb/GetWeb-x.xx/AutoLoader.patch
GetWeb-1.15/config/ 40755    431     36           0  6316042214  13071 5ustar  rolftechnicalGetWeb-1.15/config/mailbot.config100644    431     36        5436  6314053411  16013 0ustar  rolftechnical[address]
# alias for bounces
bounce=owner-getweb@ariel.healthnet.org
# alias for internal errors
admin=getweb-admin@usa.healthnet.org

# map e-mail domains, hosts, or addresses to user groups
[map.group]
usa.healthnet.org=unlimited
healthnet.org=privileged
getweb-miser-test@usa.healthnet.org=miser

[load]
# for spool mode only:
sleep.spool=15
sleep.message=30
# for all modes:
# kill process after one hour, just in case of infinite loop
timeout=3600
# allow no outgoing messages of size > 300k
maxsize=300000

[spool]
# command to move incoming mail from $MAIL to $localSpool
get=/bin/echo 's * $localSpool' | /usr/bin/Mail -n

# specify "freebie" hosts and schemes which will not count against quota
[quota]
http://www.uth.tmc.edu=0
http://www.healthnet.org=0
ftp://www.healthnet.org=0
http://www.msh.org=0
file=0
http://www.zxvba_test_ignore.com=0

# quota.message indicates how many messages users can request per
# week.  If you serve everyone on the internet through a 56k line, set
# it to 70.  If you have a T1, you should set this much higher.

[profile]
allow_redirect=1
deny.deep=is disabled to save bandwidth
quota.message=70
quota.byte=message*10000
content.deny.image=1
#refuse.check=1
#multiplier.quota.message=0
#multiplier.quota.byte=0

# probably do not need to edit anything below this line

[save]
incoming=0
outgoing=0
exception=1

[smtp]
# host=smtp
split_multiplier=1
split_size=36000

[service.getweb]
help=.index

[service.info]
help=.info

[service.apstract]
help=.apstract

[profile.miser]
allow_redirect=0
quota.message=2

[profile.privileged]
quota.message=350

[profile.unlimited]
quota.message=3500

[envelope.]
cc=admin
subject=Internal Error
quota_multiplier=0
desc=An unexpected internal error occurred:

[envelope.access_denied]
cc=admin
quota_multiplier=0
subject=Access Denied
desc=An attempted operation was not allowed:

[envelope.quota]
subject=Weekly Quota Exhausted
quota_multiplier=0
desc=<