----------------------------------------------------------------------------- MANIFEST | 62 +++++++-------- Makefile | 4 - configure | 2 configure.in | 2 doc/CHANGES | 44 ++++++++++- doc/TODO | 23 ----- doc/tin.1 | 118 +++++++++++++++--------------- doc/tin.5 | 2 include/proto.h | 5 - include/tin.h | 15 +++ include/version.h | 6 - po/de.gmo |binary po/de.po | 17 ++-- po/en_GB.gmo |binary po/en_GB.po | 12 +-- po/et.gmo |binary po/et.po | 15 ++- po/fr.gmo |binary po/fr.po | 17 ++-- po/messages |binary po/tin.pot | 12 +-- src/art.c | 4 - src/config.c | 54 ++++++------- src/cook.c | 3 src/feed.c | 4 - src/init.c | 3 src/lang.c | 4 - src/mimetypes.c | 3 src/misc.c | 28 +++---- src/open.c | 4 - src/page.c | 4 - src/post.c | 7 + src/rfc1524.c | 204 ++++++++++++++++++++++------------------------------ src/rfc2046.c | 134 +++++++++++++++++++++++++++++----- src/save.c | 22 +---- 35 files changed, 471 insertions, 363 deletions ----------------------------------------------------------------------------- diff -Nurp tin-1.6.1/MANIFEST tin-1.6.2/MANIFEST --- tin-1.6.1/MANIFEST Sun Aug 10 14:54:18 2003 +++ tin-1.6.2/MANIFEST Wed Sep 10 17:10:28 2003 @@ -1,4 +1,4 @@ -MANIFEST for tin-1.6.1 (Sun Aug 10 14:54:18 CEST 2003) +MANIFEST for tin-1.6.2 (Wed Sep 10 17:10:27 CEST 2003) ---------------------------------------------------- 13085 ./Makefile 7531 ./MANIFEST @@ -16,11 +16,11 @@ MANIFEST for tin-1.6.1 (Sun Aug 10 14:54 777 ./mkdirs.sh 1505 ./tin.spec 18847 ./doc/ABOUT-NLS - 2296 ./doc/CHANGES + 3839 ./doc/CHANGES 226345 ./doc/CHANGES.old 1469 ./doc/DEBUG_REFS 29430 ./doc/INSTALL - 31380 ./doc/TODO + 30582 ./doc/TODO 3302 ./doc/WHATSNEW 2617 ./doc/art_handling.txt 3862 ./doc/auth.txt @@ -46,7 +46,7 @@ MANIFEST for tin-1.6.1 (Sun Aug 10 14:54 4168 ./doc/mmdf.5 2128 ./doc/newsoverview.5 6963 ./doc/plp_snprintf.3 - 120218 ./doc/tin.1 + 120237 ./doc/tin.1 69817 ./doc/tin.5 4733 ./doc/w2r.1 2196 ./doc/wildmat.3 @@ -67,27 +67,27 @@ MANIFEST for tin-1.6.1 (Sun Aug 10 14:54 6539 ./include/nntplib.h 665 ./include/plp_snprintf.h 11836 ./include/policy.h - 29869 ./include/proto.h + 29936 ./include/proto.h 5047 ./include/rfc2046.h 3373 ./include/stpwatch.h 5400 ./include/tcurses.h - 66312 ./include/tin.h + 66419 ./include/tin.h 12814 ./include/tinrc.h 5736 ./include/tnntp.h 2256 ./include/trace.h - 2686 ./include/version.h + 2684 ./include/version.h 24977 ./src/active.c - 50476 ./src/art.c + 50517 ./src/art.c 30113 ./src/attrib.c 12301 ./src/auth.c 13846 ./src/charset.c 5981 ./src/color.c - 85273 ./src/config.c - 29286 ./src/cook.c + 85294 ./src/config.c + 29311 ./src/cook.c 34665 ./src/curses.c 9928 ./src/debug.c 3414 ./src/envarg.c - 25208 ./src/feed.c + 25215 ./src/feed.c 52178 ./src/filter.c 17968 ./src/getline.c 7254 ./src/global.c @@ -96,10 +96,10 @@ MANIFEST for tin-1.6.1 (Sun Aug 10 14:54 9671 ./src/header.c 27952 ./src/help.c 13778 ./src/inews.c - 31889 ./src/init.c + 31918 ./src/init.c 2845 ./src/joinpath.c 38017 ./src/keymap.c - 113887 ./src/lang.c + 113904 ./src/lang.c 4310 ./src/langinfo.c 7033 ./src/list.c 6672 ./src/lock.c @@ -107,26 +107,26 @@ MANIFEST for tin-1.6.1 (Sun Aug 10 14:54 26791 ./src/main.c 10227 ./src/makecfg.c 12207 ./src/memory.c - 5222 ./src/mimetypes.c - 83791 ./src/misc.c + 5257 ./src/mimetypes.c + 83905 ./src/misc.c 37475 ./src/newsrc.c 27739 ./src/nntplib.c 7248 ./src/nrctbl.c - 26546 ./src/open.c - 55079 ./src/page.c + 26600 ./src/open.c + 55142 ./src/page.c 24132 ./src/parsdate.y 16966 ./src/plp_snprintf.c 12670 ./src/pgp.c - 130358 ./src/post.c + 130410 ./src/post.c 13850 ./src/prompt.c 10822 ./src/read.c 24976 ./src/refs.c 4621 ./src/regex.c - 14215 ./src/rfc1524.c + 14487 ./src/rfc1524.c 5553 ./src/rfc2045.c - 26708 ./src/rfc2046.c + 28567 ./src/rfc2046.c 23766 ./src/rfc2047.c - 36925 ./src/save.c + 36896 ./src/save.c 11495 ./src/screen.c 12769 ./src/search.c 30574 ./src/select.c @@ -281,13 +281,13 @@ MANIFEST for tin-1.6.1 (Sun Aug 10 14:54 41 ./intl/VERSION 4962 ./po/Makefile.inn 839 ./po/POTFILES.in - 120802 ./po/tin.pot - 164538 ./po/de.gmo - 195132 ./po/de.po - 7445 ./po/en_GB.gmo - 123327 ./po/en_GB.po - 157074 ./po/et.gmo - 187218 ./po/et.po - 104613 ./po/fr.gmo - 165617 ./po/fr.po -5913370 total + 120825 ./po/tin.pot + 164392 ./po/de.gmo + 195103 ./po/de.po + 7444 ./po/en_GB.gmo + 123344 ./po/en_GB.po + 156928 ./po/et.gmo + 187188 ./po/et.po + 104476 ./po/fr.gmo + 165597 ./po/fr.po +5916397 total diff -Nurp tin-1.6.1/Makefile tin-1.6.2/Makefile --- tin-1.6.1/Makefile Sun Aug 10 14:54:16 2003 +++ tin-1.6.2/Makefile Wed Sep 10 17:10:24 2003 @@ -7,9 +7,9 @@ PROJECT = tin LVER = 1 PVER = 6 -SVER = 1 +SVER = 2 VER = $(LVER).$(PVER).$(SVER) -DVER = 20030810 +DVER = 20030910 EXE = tin # directory structure diff -Nurp tin-1.6.1/configure tin-1.6.2/configure --- tin-1.6.1/configure Sun Aug 10 14:54:18 2003 +++ tin-1.6.2/configure Wed Sep 10 17:10:27 2003 @@ -617,7 +617,7 @@ fi PACKAGE=tin -VERSION=1.6.1 +VERSION=1.6.2 cat >> confdefs.h < + BUG. thinko in read_server_config() + FIX. config.c + + 012) Urs Janssen + BUG. overview data wasn't unfolded before storing it + BUG. mem-leak in free_and_init_header() + BUG. "domainname missing" warning was displayed too short + BUG. allowed spaces in username/password portion of URLs + FIX. tin.h art.c, init.c, lang.c, rfc2046.c + + 011) Dirk Nimmich + BUG. 'V' didn't work with one multimedia part only + BUG. possible buffer overrun in escape_shell_meta() + BUG. mailcap command expansion didn't take shell meta characters into + account + BUG. mailcap nametemplate expansion took place twice + BUG. MIME Content-Type parameters parsed incorrectly + BUG. didn't refresh screen after viewing files and URLs + BUG. mem-leak in _lookup_mimetype + BUG. mem-leak in new_uu() + FIX. proto.h, tin.h, cook.c, mimetypes.c, misc.c, page.c, rfc1524.c + rfc2046.c, save.c + + 010) Michael Bienia + BUG. source and destination overlap in strncpy + FIX. config.c + + 009) Dirk Nimmich + BUG. doesn't try to reconnect after a 205 response + FIX. open.c + + 008) Darrell Tangman + BUG. refine txt_help_thread_mark_article_read + FIX. lang.c + + 007) Dirk Nimmich + BUG. attributes were ignored when mailing + FIX. proto.h, feed.c, post.c + -- 1.6.1 release 20030810 "Mingulay" -- 006) Darrell Tangman @@ -8,7 +50,7 @@ 005) Dirk Nimmich BUG. make install_sysdefs didn't honor $DESTDIR BUG. filter on References didn't work on deep threads - BUG. upgrading from use_metamail=ON could lead to + BUG. upgrading from use_metamail=ON could lead to metamail_prog=--internal BUG. lines that were exactly cCOLS bytes long introduced an extra line in raw mode diff -Nurp tin-1.6.1/doc/TODO tin-1.6.2/doc/TODO --- tin-1.6.1/doc/TODO Tue Aug 5 12:27:20 2003 +++ tin-1.6.2/doc/TODO Tue Aug 26 15:09:58 2003 @@ -16,19 +16,9 @@ o Changes to int/bool tinrc variables i flashing changes to all affected groups and remove the reread of the attributes file from select.c -o single quotes in attachment names aren't escaped - (see ) - o 'C'atchup in pager is still not correct (we don't ever enter the next group) [20030515 Urs Janssen ] -o reconnect problem reported in debian bug #188052 - - [probabely fixed] - -o reconnect problem reported in debian bug #143417 - - o 'article loss' reported in @@ -41,10 +31,6 @@ o better integrate saving of MIME/non-M [mostly done] [Jason Faultless ] -o attributes are ignored for mail-actions (except mail_to_author()) - cause mail_loop() usualy doesn't know the group we are in. - [20020211 Andreas Metzler ] - o reusing p'o'stponed articles in mailing_list groups doesn't work (possible fix: store Newsgroups (and other infos) via msg_add_header() (to overwrite any old values) in X-Tin-Postponed:-header and remove it @@ -69,7 +55,7 @@ o '-s' cmd-line switch implicitly chang o add version number to other config-files (e.g. tin.defaults, keymap) and do the same checks as for TINRC_VERSION/tinrc. for the filter (and attributes) file also store the editor offset (different - languages do use different headres) and the filter method used + languages do use different headers) and the filter method used (wildmat or regexp) and the charset the file is written in (e.g. ISO-8859-x vs. unicode) [Urs Janssen ] @@ -102,11 +88,6 @@ o tin uses the first sig-isolator as re o iso2asc conversion is missing for 'internal' strings (e.g. 'M'enu) [20020319 Urs Janssen ] -o fix the outstandig mem-leaks, see - and - - for details [20030504 Urs Janssen ] - Pager Problems -------------- o raw mode loses (illegal) chars in multibyte based groups @@ -342,7 +323,7 @@ o Additions to the thread menu: ';' (mark unread arts as hot if >= 1 art in thread is hot) '+' (mark thread as hot) '=' (mark pattern as hot) - 'Y' (check for new articles in thead) + 'Y' (check for new articles in thread) '%' (toggle rot13 encoding of screen content) 'o' (print) 'x' (repost) diff -Nurp tin-1.6.1/doc/tin.1 tin-1.6.2/doc/tin.1 --- tin-1.6.1/doc/tin.1 Sun Aug 10 03:35:36 2003 +++ tin-1.6.2/doc/tin.1 Mon Sep 1 00:42:09 2003 @@ -3,13 +3,13 @@ .\" Module : tin.1 .\" Author : I. Lea, U. Janssen .\" Created : 1991-08-23 -.\" Updated : 2003-08-10 +.\" Updated : 2003-09-01 .\" Notes : use american english; still needs some work, i.e.: .\" - document authorization (.newsauth) .\" - document random organization feature .\" .\" -.TH tin 1 "August 10th, 2003" "1.6.1" "A Usenet newsreader" +.TH tin 1 "September 1st, 2003" "1.6.2" "A Usenet newsreader" .\" .\" .SH NAME @@ -3205,63 +3205,63 @@ Brolik, Herman ten Brugge, Martin Buck, Burrell-Davis, Sean Casey, Peter Castro, Troy Cauble, Andrey A. Chernov, Albert Chin-A-Young, Park Chong-Dae, Tan Kwee Chuan, Boleslaw Ciesielski, Robert Claeson, Steven Cogswell, Don Costello, -Bryan Curnutt, Ned Danieley, Lars Dannenberg, Chris Davies, John -Davis, Borislav Deianov, Thomas E. Dickey, Martin Dickopp, Olaf -Dietrich, Herbert Martin Dietze, Theo Van Dinter, Ralf Doeblitz, -Bryan Dongray, Michael Douglass, Nickolay Dudorov, Craig Durland, -Bernd Eckenfels, Phil Edge, Kirk Edson, Nick Efthymiou, Stefan Elf, -Nigel Ellis, L. Scott Emmons, Rob Engle, Olle Eriksson, Brent -Ermlick, Bernd Ernesti, Ragnar Hojland Espinosa, Jason Faultless, -Michael Faurot, Werner Fleck, John M. Flinchbaugh, Andy Gabor, -Christian Garbs, Torsten Gesang, Ruediger Geys, Callum Gibson, Mike -Glendinning, Igor Goryachev, Philippe Goujard, Dan Greenspan, Karlo -Gross, Carl Hage, Piers Haken, Paul Halsema, Ed Hanway, Scott Hauck, -Christian Haul, James Hawtin, Per Headland, Arnold Hendriks, Daniel -Hermans, Jose Herrero, Dave Hill, Tom Hite, Torsten Homeyer, Ulli -Horlacher, Keith Howell, Tommy Hsieh, Shih-Kun Huang, Steve Hunt, -Jeff Hurwitt, Jeon Hyoung-Jo, Pieter Immelman, Jarkko Isokungas, -Patrick St. Jean, Hal Jespersen, Park Sang Jin, Robbin Johnson, -Jarkko Jormanainen, Yury July, Nelson Kading, Geoffrey Keating, -Karsten Keil, Charles S. Kerr, Fritz Kleeman, Andreas Kies, Janne -Kiviluoto, Tomasz Kloczko, Dwarven Knight, Thomas Koenig, Karl-Koenig -Koenigsson, Martin Kraemer, Gerald Krause, Thomas Kroener, Florian -Kuehnert, Bernd Kuemmerlen, Kris Kugel, Stephan Kulow, Manoj Kumar, -Dawid Kuroczko, Yuri Kuzmenko, Olivier Lacroix, Geoff Lane, Alex -Lange, Alain Lasserre, Stanislav Latishko, Hannu Laurila, Yen-Ming -Lee, Vincent Lefevre, Alexander Lehmann, Marty Leisner, Thomas -Leitner, Hakan Lennestal, Kevin Lentin, Chua Choon Leong, Chris -Lewis, Andreas Ley, David-Michael Lincke, Otto Lind, Richard Lloyd, -Florian Lohoff, Reinhard Luebke, Clifford Luke, Michael Lupp, David -MacKenzie, Hugh Mahon, Giuseppe De Marco, Scott Marovich, Dmitri A. -Martynoff, Kazushi Marukawa, Timur Maryin, William McBrine, Owen -Medd, Philipp Mergenthaler, Andreas Metzler, Arkadiusz Miskiewicz, -Soren Moller, Bruce Momjian, Sergio Morales, Michael Morrell, Klaus -Mueller, Mike Muise, Udo Munk, John R. Myers, Daniel Naber, Torsten -Neumann, Dirk Nimmich, James Nugen, David E. O'Brien, Michael -O'Reilly, Oleg Ohotnikov, Ronald Orr, Julien Oster, Guido Ostkamp, -Philip Paeps, Jeb Palmer, Neil Parker, Joseph Parmelee, Tom Parry, -Jim Patterson, Sven Paulus, Walter Pelissero, Cameron Perkins, Colin -Perkins, Eric Peterson, Tim Pierce, Bill Poitras, Scott W. Powers, -Wolfgang Prediger, Marc Prud'hommeaux, GianPiero Puccioni, Thomas -Quinot, Stefan Rapp, Martin Reising, Kyle Rhorer, Ted Richards, Steve -Robbins, Ollivier Robert, Branden Robinson, Jim Robinson, Thomas -Roessler, Erik van Roode, Meelis Roos, Stephen Roseman, Roland -Rosenfeld, Peter Van Rossem, Clifton Royston, Juergen Salk, Rich -Salz, Gary Sanders, Nickolay Saukh, John Sauter, Christopher Sawtell, -Holger Schif, Volker Schmidt, John Schmitz, Torsten Schneider, Stefan -Scholl, Rainer Scholz, Juergen Schroeder, Larry Schwimmer, Randy -Scott, Bart Sears, Karl-Olav Serrander, Doug Sewell, Philip Shearer, -Jungshik Shin, Sergey Shkonda, Andreas Siegert, Mark Smith, Toomas -Soome, Steve Spearman, Helmut Springer, Cliff Stanford, Steve Starck, -Jason Steiner, Ralf Stephan, Michael Stenns, Helmrich Streitmatter, -Hans Werner Strube, Dieter Stueken, Ed Sznyter, Lech Szychowski, Dean -Takemori, Darrell Tangman, Derek Terveer, Carsten Theis, Julian -Thompson, David Tiller, Andry Timonin, Mark Tomlin, Michael Traub, -Mark Trumbull, Alex Vasylenko, Michael Velten, Adri Verhoef, Paul -Vickers, Corinna Vinschen, Oliver B. Warzecha, Jason Wessel, Cary -Whitney, Henrik Wist, Greg Woods, Andreas Wrede, Lloyd Wright, Jens -Wuepper, Billy Y., Hideaki Yoshfuji, Nickolai Zeldovich, Zbigniew -Zych +Joshua Crawford, Bryan Curnutt, Ned Danieley, Lars Dannenberg, Chris +Davies, John Davis, Borislav Deianov, Thomas E. Dickey, Martin +Dickopp, Olaf Dietrich, Herbert Martin Dietze, Theo Van Dinter, Ralf +Doeblitz, Bryan Dongray, Michael Douglass, Nickolay Dudorov, Craig +Durland, Bernd Eckenfels, Phil Edge, Kirk Edson, Nick Efthymiou, +Stefan Elf, Nigel Ellis, L. Scott Emmons, Rob Engle, Olle Eriksson, +Brent Ermlick, Bernd Ernesti, Ragnar Hojland Espinosa, Jason +Faultless, Michael Faurot, Werner Fleck, John M. Flinchbaugh, Andy +Gabor, Christian Garbs, Torsten Gesang, Ruediger Geys, Callum Gibson, +Mike Glendinning, Igor Goryachev, Philippe Goujard, Dan Greenspan, +Karlo Gross, Carl Hage, Piers Haken, Paul Halsema, Ed Hanway, Scott +Hauck, Christian Haul, James Hawtin, Per Headland, Arnold Hendriks, +Daniel Hermans, Jose Herrero, Dave Hill, Tom Hite, Torsten Homeyer, +Ulli Horlacher, Keith Howell, Tommy Hsieh, Shih-Kun Huang, Steve +Hunt, Jeff Hurwitt, Jeon Hyoung-Jo, Pieter Immelman, Jarkko +Isokungas, Patrick St. Jean, Hal Jespersen, Park Sang Jin, Robbin +Johnson, Jarkko Jormanainen, Yury July, Nelson Kading, Geoffrey +Keating, Karsten Keil, Charles S. Kerr, Fritz Kleeman, Andreas Kies, +Janne Kiviluoto, Tomasz Kloczko, Dwarven Knight, Thomas Koenig, +Karl-Koenig Koenigsson, Martin Kraemer, Gerald Krause, Thomas +Kroener, Florian Kuehnert, Bernd Kuemmerlen, Kris Kugel, Stephan +Kulow, Manoj Kumar, Dawid Kuroczko, Yuri Kuzmenko, Olivier Lacroix, +Geoff Lane, Alex Lange, Alain Lasserre, Stanislav Latishko, Hannu +Laurila, Yen-Ming Lee, Vincent Lefevre, Alexander Lehmann, Marty +Leisner, Thomas Leitner, Hakan Lennestal, Kevin Lentin, Chua Choon +Leong, Chris Lewis, Andreas Ley, David-Michael Lincke, Otto Lind, +Richard Lloyd, Florian Lohoff, Reinhard Luebke, Clifford Luke, +Michael Lupp, David MacKenzie, Hugh Mahon, Giuseppe De Marco, Scott +Marovich, Dmitri A. Martynoff, Kazushi Marukawa, Timur Maryin, +William McBrine, Owen Medd, Philipp Mergenthaler, Andreas Metzler, +Arkadiusz Miskiewicz, Soren Moller, Bruce Momjian, Sergio Morales, +Michael Morrell, Klaus Mueller, Mike Muise, Udo Munk, John R. Myers, +Daniel Naber, Torsten Neumann, Dirk Nimmich, James Nugen, David E. +O'Brien, Michael O'Reilly, Oleg Ohotnikov, Ronald Orr, Julien Oster, +Guido Ostkamp, Philip Paeps, Jeb Palmer, Neil Parker, Joseph +Parmelee, Tom Parry, Jim Patterson, Sven Paulus, Walter Pelissero, +Cameron Perkins, Colin Perkins, Eric Peterson, Tim Pierce, Bill +Poitras, Scott W. Powers, Wolfgang Prediger, Marc Prud'hommeaux, +GianPiero Puccioni, Thomas Quinot, Stefan Rapp, Martin Reising, Kyle +Rhorer, Ted Richards, Steve Robbins, Ollivier Robert, Branden +Robinson, Jim Robinson, Thomas Roessler, Erik van Roode, Meelis Roos, +Stephen Roseman, Roland Rosenfeld, Peter Van Rossem, Clifton Royston, +Juergen Salk, Rich Salz, Gary Sanders, Nickolay Saukh, John Sauter, +Christopher Sawtell, Holger Schif, Volker Schmidt, John Schmitz, +Torsten Schneider, Stefan Scholl, Rainer Scholz, Juergen Schroeder, +Larry Schwimmer, Randy Scott, Bart Sears, Karl-Olav Serrander, Doug +Sewell, Philip Shearer, Jungshik Shin, Sergey Shkonda, Andreas +Siegert, Mark Smith, Toomas Soome, Steve Spearman, Helmut Springer, +Cliff Stanford, Steve Starck, Jason Steiner, Ralf Stephan, Michael +Stenns, Helmrich Streitmatter, Hans Werner Strube, Dieter Stueken, Ed +Sznyter, Lech Szychowski, Dean Takemori, Darrell Tangman, Derek +Terveer, Carsten Theis, Julian Thompson, David Tiller, Andry Timonin, +Mark Tomlin, Michael Traub, Mark Trumbull, Alex Vasylenko, Michael +Velten, Adri Verhoef, Paul Vickers, Corinna Vinschen, Oliver B. +Warzecha, Jason Wessel, Cary Whitney, Henrik Wist, Greg Woods, +Andreas Wrede, Lloyd Wright, Jens Wuepper, Billy Y., Hideaki +Yoshfuji, Nickolai Zeldovich, Zbigniew Zych .\" .\" .SH AUTHOR diff -Nurp tin-1.6.1/doc/tin.5 tin-1.6.2/doc/tin.5 --- tin-1.6.1/doc/tin.5 Sun Aug 10 03:36:51 2003 +++ tin-1.6.2/doc/tin.5 Fri Aug 15 21:21:20 2003 @@ -5,7 +5,7 @@ .\" Updated : 2003-08-10 .\" Notes : needs a some work .\" -.TH tin 5 "August 10th, 2003" "1.6.1" "A Usenet newsreader" +.TH tin 5 "August 10th, 2003" "1.6.2" "A Usenet newsreader" .SH NAME tin, rtin \- related files diff -Nurp tin-1.6.1/include/proto.h tin-1.6.2/include/proto.h --- tin-1.6.1/include/proto.h Tue Jul 22 17:34:02 2003 +++ tin-1.6.2/include/proto.h Tue Aug 26 15:10:18 2003 @@ -3,7 +3,7 @@ * Module : proto.h * Author : Urs Janssen * Created : - * Updated : 2003-06-29 + * Updated : 2003-08-26 * Notes : * * Copyright (c) 1997-2003 Urs Janssen @@ -472,7 +472,7 @@ extern time_t parsedate(char *p, TIMEINF /* post.c */ extern int count_postponed_articles(void); extern int mail_to_author(const char *group, int respnum, t_bool copy_text, t_bool with_headers, t_bool raw_data); -extern int mail_to_someone(const char *address, t_bool confirm_to_mail, t_openartinfo *artinfo); +extern int mail_to_someone(const char *address, t_bool confirm_to_mail, t_openartinfo *artinfo, const struct t_group *group); extern int post_response(const char *group, int respnum, t_bool copy_text, t_bool with_headers, t_bool raw_data); extern int repost_article(const char *group, int respnum, t_bool supersede, t_openartinfo *artinfo); extern t_bool cancel_article(struct t_group *group, struct t_article *art, int respnum); @@ -542,6 +542,7 @@ extern int parse_rfc822_headers(struct t extern t_part *new_part(t_part *part); extern void art_close(t_openartinfo *artinfo); extern void free_and_init_header(struct t_header *hdr); +extern void free_list(t_param *list); extern void free_parts(t_part *ptr); extern void unfold_header(char *line); diff -Nurp tin-1.6.1/include/tin.h tin-1.6.2/include/tin.h --- tin-1.6.1/include/tin.h Mon Jul 28 12:55:24 2003 +++ tin-1.6.2/include/tin.h Fri Sep 5 17:55:45 2003 @@ -3,7 +3,7 @@ * Module : tin.h * Author : I. Lea & R. Skrenta * Created : 1991-04-01 - * Updated : 2003-07-28 + * Updated : 2003-09-05 * Notes : #include files, #defines & struct's * * Copyright (c) 1997-2003 Iain Lea , Rich Skrenta @@ -768,9 +768,9 @@ enum rc_state { RC_IGNORE, RC_CHECK, RC_ * NOTE: the "-(?!-)" assertion must be removed when IDN is introduced */ #if 0 /* this one is ok for IPv4 */ -# define URL_REGEX "\\b(?:https?|ftp|gopher)://(?:[^:@/]*(?::[^:@/]*)?@)?(?:(?:[^\\W_](?:(?:-(?!-)|[^\\W_]){0,61}[^\\W_])?\\.)+[a-z]{2,6}\\.?|localhost|(?:(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?))(?::\\d+)?(?:/[^)\\>\"\\s]*|$|(?=[)\\>\"\\s]))" +# define URL_REGEX "\\b(?:https?|ftp|gopher)://(?:[^:@/\\s]*(?::[^:@/\\s]*)?@)?(?:(?:[^\\W_](?:(?:-(?!-)|[^\\W_]){0,61}[^\\W_])?\\.)+[a-z]{2,6}\\.?|localhost|(?:(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?))(?::\\d+)?(?:/[^)\\>\"\\s]*|$|(?=[)\\>\"\\s]))" #else /* this one should be IPv6 safe - test me! */ -# define URL_REGEX "\\b(?:https?|ftp|gopher)://(?:[^:@/]*(?::[^:@/]*)?@)?(?:(?:[^\\W_](?:(?:-(?!-)|[^\\W_]){0,61}[^\\W_])?\\.)+[a-z]{2,6}\\.?|localhost|(?:(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)|\\[(?:(?:[0-9A-F]{0,4}:){1,7}[0-9A-F]{1,4}|(?:[0-9A-F]{0,4}:){1,3}(?:(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?))\\])(?::\\d+)?(?:/[^)\\>\"\\s]*|$|(?=[)\\>\"\\s]))" +# define URL_REGEX "\\b(?:https?|ftp|gopher)://(?:[^:@/\\s]*(?::[^:@/\\s]*)?@)?(?:(?:[^\\W_](?:(?:-(?!-)|[^\\W_]){0,61}[^\\W_])?\\.)+[a-z]{2,6}\\.?|localhost|(?:(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)|\\[(?:(?:[0-9A-F]{0,4}:){1,7}[0-9A-F]{1,4}|(?:[0-9A-F]{0,4}:){1,3}(?:(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(?:2[0-4]\\d|25[0-5]|[01]?\\d\\d?))\\])(?::\\d+)?(?:/[^)\\>\"\\s]*|$|(?=[)\\>\"\\s]))" #endif /* 0 */ /* * case insensitive @@ -1262,6 +1262,15 @@ enum rc_state { RC_IGNORE, RC_CHECK, RC_ #define UUE_NO 0 /* Don't hide uue data */ #define UUE_YES 1 /* Hide uue data */ #define UUE_ALL 2 /* Hide uue data harder */ + +/* + * used in misc.c/rfc1524.c + */ +enum quote_enum { + no_quote = 0, + dbl_quote, + sgl_quote +}; /* diff -Nurp tin-1.6.1/include/version.h tin-1.6.2/include/version.h --- tin-1.6.1/include/version.h Sun Aug 10 14:54:16 2003 +++ tin-1.6.2/include/version.h Wed Sep 10 17:10:24 2003 @@ -40,10 +40,10 @@ # define PRODUCT "tin" # ifndef TIN_AUTOCONF_H -# define VERSION "1.6.1" +# define VERSION "1.6.2" # endif /* !TIN_AUTOCONF_H */ -# define RELEASEDATE "20030810" -# define RELEASENAME "Mingulay" +# define RELEASEDATE "20030910" +# define RELEASENAME "Pabbay" /* config-file versions - must by dotted triples */ # define TINRC_VERSION "1.3.6" # define ATTRIBUTES_VERSION "1.0.0" Binary files tin-1.6.1/po/de.gmo and tin-1.6.2/po/de.gmo differ diff -Nurp tin-1.6.1/po/de.po tin-1.6.2/po/de.po --- tin-1.6.1/po/de.po Sun Aug 10 14:53:40 2003 +++ tin-1.6.2/po/de.po Wed Sep 10 17:08:19 2003 @@ -5,8 +5,8 @@ # Christian Garbs , 2003 # msgid "" -msgstr "Project-Id-Version: tin 1.6.0\n" - "POT-Creation-Date: 2003-08-10 03:49+0200\n" +msgstr "Project-Id-Version: tin 1.6.2\n" + "POT-Creation-Date: 2003-09-10 17:05+0200\n" "PO-Revision-Date: 2003-03-13 04:15+0200\n" "Last-Translator: Sven Hartge , Kai Bojens " "\n" @@ -261,7 +261,7 @@ msgstr "# in *binaries* Nachbearbeitung, msgid "# and set Followup-To: poster\n" msgstr "# und Antwort per EMail (Followup-To: poster) anfordern\n" -#: src/cook.c:798 +#: src/cook.c:799 msgid "(unknown)" msgstr "(unbekannt)" @@ -942,8 +942,8 @@ msgid "MIME parse error: Start boundary msgstr "" #: src/lang.c:203 -msgid "Can't get a (fully-qualified) domain-name!\n" -msgstr "Kann keinen (vollqualifizierten) Domainnamen finden!\n" +msgid "Can't get a (fully-qualified) domain-name!" +msgstr "Kann keinen (vollqualifizierten) Domainnamen finden!" #: src/lang.c:204 #, c-format @@ -1738,9 +1738,10 @@ msgstr "wähle ersten Artikel in der List msgid "choose last article in list" msgstr "wähle letzten Artikel in der Liste" +# TRANSLATION MISSING #: src/lang.c:408 -msgid "mark article as read and move cursor to next unread article" -msgstr "markiert Artikel als gelesen geht zum nächsten ungelesenen Artikel" +msgid "mark article or tagged articles as read and move cursor to next unread article" +msgstr "" #: src/lang.c:411 msgid "Display properties\n" @@ -6258,7 +6259,7 @@ msgid "Posting: %.*s ..." msgstr "Poste: %.*s ..." #. TODO: -> lang.c -#: src/post.c:4037 +#: src/post.c:4038 #, c-format msgid "Rereading %s..." msgstr "Lese %s..." Binary files tin-1.6.1/po/en_GB.gmo and tin-1.6.2/po/en_GB.gmo differ diff -Nurp tin-1.6.1/po/en_GB.po tin-1.6.2/po/en_GB.po --- tin-1.6.1/po/en_GB.po Sun Aug 10 14:54:02 2003 +++ tin-1.6.2/po/en_GB.po Wed Sep 10 17:08:58 2003 @@ -2,8 +2,8 @@ # Robert Brady , 2000-2002 # msgid "" -msgstr "Project-Id-Version: tin 1.6.0\n" - "POT-Creation-Date: 2003-08-10 03:49+0200\n" +msgstr "Project-Id-Version: tin 1.6.2\n" + "POT-Creation-Date: 2003-09-10 17:05+0200\n" "PO-Revision-Date: 2002-11-15 20:10+0000\n" "Last-Translator: Robert Brady \n" "Language-Team: \n" @@ -207,7 +207,7 @@ msgstr "" msgid "# and set Followup-To: poster\n" msgstr "" -#: src/cook.c:798 +#: src/cook.c:799 msgid "(unknown)" msgstr "" @@ -852,7 +852,7 @@ msgid "MIME parse error: Start boundary msgstr "" #: src/lang.c:203 -msgid "Can't get a (fully-qualified) domain-name!\n" +msgid "Can't get a (fully-qualified) domain-name!" msgstr "" #: src/lang.c:204 @@ -1604,7 +1604,7 @@ msgid "choose last article in list" msgstr "" #: src/lang.c:408 -msgid "mark article as read and move cursor to next unread article" +msgid "mark article or tagged articles as read and move cursor to next unread article" msgstr "" #: src/lang.c:411 @@ -5808,7 +5808,7 @@ msgid "Posting: %.*s ..." msgstr "" #. TODO: -> lang.c -#: src/post.c:4037 +#: src/post.c:4038 #, c-format msgid "Rereading %s..." msgstr "" Binary files tin-1.6.1/po/et.gmo and tin-1.6.2/po/et.gmo differ diff -Nurp tin-1.6.1/po/et.po tin-1.6.2/po/et.po --- tin-1.6.1/po/et.po Sun Aug 10 03:52:20 2003 +++ tin-1.6.2/po/et.po Wed Sep 10 17:07:56 2003 @@ -4,7 +4,7 @@ # msgid "" msgstr "Project-Id-Version: tin 1.6.0\n" - "POT-Creation-Date: 2003-08-10 03:49+0200\n" + "POT-Creation-Date: 2003-09-10 17:05+0200\n" "PO-Revision-Date: 2003-07-15 11:07+0300\n" "Last-Translator: Toomas Soome \n" "Language-Team: Estonian \n" @@ -213,7 +213,7 @@ msgstr "# *binaarfailidel* sea täielik j msgid "# and set Followup-To: poster\n" msgstr "# ja sea Followup-To: postitaja\n" -#: src/cook.c:798 +#: src/cook.c:799 msgid "(unknown)" msgstr "(tundmatu)" @@ -894,8 +894,8 @@ msgid "MIME parse error: Start boundary msgstr "MIME parsimise viga: Algas eraldaja aga loen alles päiseid" #: src/lang.c:203 -msgid "Can't get a (fully-qualified) domain-name!\n" -msgstr "Ei õnnestu saada (täis) doomeninime!\n" +msgid "Can't get a (fully-qualified) domain-name!" +msgstr "Ei õnnestu saada (täis) doomeninime!" #: src/lang.c:204 #, c-format @@ -1679,9 +1679,10 @@ msgstr "vali loendis esimene artikkel" msgid "choose last article in list" msgstr "vali loendis viimane artikkel" +# TRANSLATION MISSING #: src/lang.c:408 -msgid "mark article as read and move cursor to next unread article" -msgstr "märgi artikkel loetuks ja liigu edasi järgmisele lugemata artiklile" +msgid "mark article or tagged articles as read and move cursor to next unread article" +msgstr "" #: src/lang.c:411 msgid "Display properties\n" @@ -6193,7 +6194,7 @@ msgid "Posting: %.*s ..." msgstr "Postitan: %.*s ..." #. TODO: -> lang.c -#: src/post.c:4037 +#: src/post.c:4038 #, c-format msgid "Rereading %s..." msgstr "Loen %s uuesti..." Binary files tin-1.6.1/po/fr.gmo and tin-1.6.2/po/fr.gmo differ diff -Nurp tin-1.6.1/po/fr.po tin-1.6.2/po/fr.po --- tin-1.6.1/po/fr.po Sun Aug 10 14:53:51 2003 +++ tin-1.6.2/po/fr.po Wed Sep 10 17:08:26 2003 @@ -2,8 +2,8 @@ # Matt Anton , 2003 # msgid "" -msgstr "Project-Id-Version: 1.6.0\n" - "POT-Creation-Date: 2003-08-10 03:49+0200\n" +msgstr "Project-Id-Version: 1.6.2\n" + "POT-Creation-Date: 2003-09-10 17:05+0200\n" "PO-Revision-Date: 2003-07-04 04:15+0200\n" "Last-Translator: Matt Anton \n" @@ -212,7 +212,7 @@ msgstr "# dans *binaries* faire traiteme msgid "# and set Followup-To: poster\n" msgstr "# et utiliser Followup-To: poster\n" -#: src/cook.c:798 +#: src/cook.c:799 msgid "(unknown)" msgstr "(inconnu)" @@ -900,8 +900,8 @@ msgid "MIME parse error: Start boundary msgstr "Erreur MIME : Début de la borne lors de la lecture des en-têtes" #: src/lang.c:203 -msgid "Can't get a (fully-qualified) domain-name!\n" -msgstr "Nom de domaine (qualifié) introuvable !\n" +msgid "Can't get a (fully-qualified) domain-name!" +msgstr "Nom de domaine (qualifié) introuvable !" #: src/lang.c:204 #, c-format @@ -1658,9 +1658,10 @@ msgstr "choisir le 1er article dans la l msgid "choose last article in list" msgstr "choisir le dernier article dans la liste" +# TRANSLATION MISSING #: src/lang.c:408 -msgid "mark article as read and move cursor to next unread article" -msgstr "marquer article comme lu et voir l'article non lu suivant" +msgid "mark article or tagged articles as read and move cursor to next unread article" +msgstr "" #: src/lang.c:411 msgid "Display properties\n" @@ -6068,7 +6069,7 @@ msgstr "Postage : %.*s ..." # TRANSLATION MISSING #. TODO: -> lang.c -#: src/post.c:4037 +#: src/post.c:4038 #, c-format msgid "Rereading %s..." msgstr "" Binary files tin-1.6.1/po/messages and tin-1.6.2/po/messages differ diff -Nurp tin-1.6.1/po/tin.pot tin-1.6.2/po/tin.pot --- tin-1.6.1/po/tin.pot Sun Aug 10 03:49:58 2003 +++ tin-1.6.2/po/tin.pot Wed Sep 10 17:05:47 2003 @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2003-08-10 03:49+0200\n" +"POT-Creation-Date: 2003-09-10 17:05+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -214,7 +214,7 @@ msgstr "" msgid "# and set Followup-To: poster\n" msgstr "" -#: src/cook.c:798 +#: src/cook.c:799 msgid "(unknown)" msgstr "" @@ -887,7 +887,7 @@ msgid "MIME parse error: Start boundary msgstr "" #: src/lang.c:203 -msgid "Can't get a (fully-qualified) domain-name!\n" +msgid "Can't get a (fully-qualified) domain-name!" msgstr "" #: src/lang.c:204 @@ -1651,7 +1651,9 @@ msgid "choose last article in list" msgstr "" #: src/lang.c:408 -msgid "mark article as read and move cursor to next unread article" +msgid "" +"mark article or tagged articles as read and move cursor to next unread " +"article" msgstr "" #: src/lang.c:411 @@ -6019,7 +6021,7 @@ msgid "Posting: %.*s ..." msgstr "" #. TODO: -> lang.c -#: src/post.c:4037 +#: src/post.c:4038 #, c-format msgid "Rereading %s..." msgstr "" diff -Nurp tin-1.6.1/src/art.c tin-1.6.2/src/art.c --- tin-1.6.1/src/art.c Sat Jul 12 15:49:46 2003 +++ tin-1.6.2/src/art.c Tue Aug 26 15:11:35 2003 @@ -3,7 +3,7 @@ * Module : art.c * Author : I.Lea & R.Skrenta * Created : 1991-04-01 - * Updated : 2003-06-29 + * Updated : 2003-08-23 * Notes : * * Copyright (c) 1991-2003 Iain Lea , Rich Skrenta @@ -1415,6 +1415,7 @@ write_nov_file( * ignore stuff like this. */ p = rfc1522_encode(article->subject, tinrc.mm_local_charset, FALSE); + unfold_header(p); /* * replace any '\t's with ' ' in the references-data @@ -1970,6 +1971,7 @@ print_from( if (article->name != NULL) { p = rfc1522_encode(article->name, tinrc.mm_local_charset, FALSE); + unfold_header(p); if (strpbrk(article->name, "\".:;<>@[]()\\") != NULL && article->name[0] != '"' && article->name[strlen(article->name)] != '"') snprintf(from, sizeof(from), "\"%s\" <%s>", tinrc.post_8bit_header ? article->name : p, article->from); else diff -Nurp tin-1.6.1/src/config.c tin-1.6.2/src/config.c --- tin-1.6.1/src/config.c Sun Aug 10 03:37:22 2003 +++ tin-1.6.2/src/config.c Mon Sep 1 00:39:42 2003 @@ -3,7 +3,7 @@ * Module : config.c * Author : I. Lea * Created : 1991-04-01 - * Updated : 2003-08-10 + * Updated : 2003-09-01 * Notes : Configuration file routines * * Copyright (c) 1991-2003 Iain Lea @@ -94,7 +94,7 @@ read_config_file( { FILE *fp; char newnews_info[PATH_LEN]; - char buf[LEN]; + char buf[LEN], tmp[LEN]; int upgrade = RC_CHECK; if ((fp = fopen(file, "r")) == NULL) @@ -128,48 +128,48 @@ read_config_file( if (match_boolean(buf, "alternative_handling=", &tinrc.alternative_handling)) break; - if (match_string(buf, "art_marked_deleted=", buf, sizeof(buf))) { - tinrc.art_marked_deleted = !buf[0] ? ART_MARK_DELETED : DASH_TO_SPACE(buf[0]); + if (match_string(buf, "art_marked_deleted=", tmp, sizeof(tmp))) { + tinrc.art_marked_deleted = !tmp[0] ? ART_MARK_DELETED : DASH_TO_SPACE(tmp[0]); break; } - if (match_string(buf, "art_marked_inrange=", buf, sizeof(buf))) { - tinrc.art_marked_inrange = !buf[0] ? MARK_INRANGE : DASH_TO_SPACE(buf[0]); + if (match_string(buf, "art_marked_inrange=", tmp, sizeof(tmp))) { + tinrc.art_marked_inrange = !tmp[0] ? MARK_INRANGE : DASH_TO_SPACE(tmp[0]); break; } - if (match_string(buf, "art_marked_killed=", buf, sizeof(buf))) { - tinrc.art_marked_killed = !buf[0] ? ART_MARK_KILLED : DASH_TO_SPACE(buf[0]); + if (match_string(buf, "art_marked_killed=", tmp, sizeof(tmp))) { + tinrc.art_marked_killed = !tmp[0] ? ART_MARK_KILLED : DASH_TO_SPACE(tmp[0]); break; } - if (match_string(buf, "art_marked_read=", buf, sizeof(buf))) { - tinrc.art_marked_read = !buf[0] ? ART_MARK_READ : DASH_TO_SPACE(buf[0]); + if (match_string(buf, "art_marked_read=", tmp, sizeof(tmp))) { + tinrc.art_marked_read = !tmp[0] ? ART_MARK_READ : DASH_TO_SPACE(tmp[0]); break; } - if (match_string(buf, "art_marked_read_selected=", buf, sizeof(buf))) { - tinrc.art_marked_read_selected = !buf[0] ? ART_MARK_READ_SELECTED : DASH_TO_SPACE(buf[0]); + if (match_string(buf, "art_marked_read_selected=", tmp, sizeof(tmp))) { + tinrc.art_marked_read_selected = !tmp[0] ? ART_MARK_READ_SELECTED : DASH_TO_SPACE(tmp[0]); break; } - if (match_string(buf, "art_marked_recent=", buf, sizeof(buf))) { - tinrc.art_marked_recent = !buf[0] ? ART_MARK_RECENT : DASH_TO_SPACE(buf[0]); + if (match_string(buf, "art_marked_recent=", tmp, sizeof(tmp))) { + tinrc.art_marked_recent = !tmp[0] ? ART_MARK_RECENT : DASH_TO_SPACE(tmp[0]); break; } - if (match_string(buf, "art_marked_return=", buf, sizeof(buf))) { - tinrc.art_marked_return = !buf[0] ? ART_MARK_RETURN : DASH_TO_SPACE(buf[0]); + if (match_string(buf, "art_marked_return=", tmp, sizeof(tmp))) { + tinrc.art_marked_return = !tmp[0] ? ART_MARK_RETURN : DASH_TO_SPACE(tmp[0]); break; } - if (match_string(buf, "art_marked_selected=", buf, sizeof(buf))) { - tinrc.art_marked_selected = !buf[0] ? ART_MARK_SELECTED : DASH_TO_SPACE(buf[0]); + if (match_string(buf, "art_marked_selected=", tmp, sizeof(tmp))) { + tinrc.art_marked_selected = !tmp[0] ? ART_MARK_SELECTED : DASH_TO_SPACE(tmp[0]); break; } - if (match_string(buf, "art_marked_unread=", buf, sizeof(buf))) { - tinrc.art_marked_unread = !buf[0] ? ART_MARK_UNREAD : DASH_TO_SPACE(buf[0]); + if (match_string(buf, "art_marked_unread=", tmp, sizeof(tmp))) { + tinrc.art_marked_unread = !tmp[0] ? ART_MARK_UNREAD : DASH_TO_SPACE(tmp[0]); break; } @@ -340,8 +340,8 @@ read_config_file( if (match_boolean(buf, "default_filter_select_expire=", &tinrc.default_filter_select_expire)) break; - if (match_string(buf, "default_save_mode=", buf, sizeof(buf))) { - tinrc.default_save_mode = buf[0]; + if (match_string(buf, "default_save_mode=", tmp, sizeof(tmp))) { + tinrc.default_save_mode = tmp[0]; break; } @@ -2880,19 +2880,19 @@ read_server_config( snprintf(tmp_info, tmp_len, "%s %s", nntp_server, newnews_info); load_newnews_info(tmp_info); free(tmp_info); - break; + continue; } if (match_string(line, "version=", version, sizeof(version))) { if (RC_CHECK != upgrade) - /* ignore duplicate version lines; first match counts */ - break; + /* ignore duplicate version lines; last match counts */ + continue; upgrade = check_upgrade(line, "version=", SERVERCONFIG_VERSION); if (RC_IGNORE == upgrade) /* Expected version number; nothing to do -> continue */ - break; + continue; /* Nothing to do yet for RC_UPGRADE and RC_DOWNGRADE */ - break; + continue; } } fclose(fp); diff -Nurp tin-1.6.1/src/cook.c tin-1.6.2/src/cook.c --- tin-1.6.1/src/cook.c Mon Jul 21 00:20:57 2003 +++ tin-1.6.2/src/cook.c Tue Aug 26 14:34:07 2003 @@ -3,7 +3,7 @@ * Module : cook.c * Author : J. Faultless * Created : 2000-03-08 - * Updated : 2003-07-21 + * Updated : 2003-08-26 * Notes : Split from page.c * * Copyright (c) 2000-2003 Jason Faultless @@ -573,6 +573,7 @@ new_uue( if (!(*part)->uue) /* new_part() is simple and doesn't attach list heads */ (*part)->uue = ptr; + free_list(ptr->params); /* * Load the name into the parameter list */ diff -Nurp tin-1.6.1/src/feed.c tin-1.6.2/src/feed.c --- tin-1.6.1/src/feed.c Sun Jul 20 12:48:06 2003 +++ tin-1.6.2/src/feed.c Sun Aug 10 15:31:13 2003 @@ -3,7 +3,7 @@ * Module : feed.c * Author : I. Lea * Created : 1991-08-31 - * Updated : 2003-07-19 + * Updated : 2003-08-10 * Notes : provides same interface to mail,pipe,print,save & repost commands * * Copyright (c) 1991-2003 Iain Lea @@ -408,7 +408,7 @@ feed_article( switch (function) { case FEED_MAIL: - switch (mail_to_someone(tinrc.default_mail_address, confirm, openartptr)) { + switch (mail_to_someone(tinrc.default_mail_address, confirm, openartptr, group)) { case POSTED_REDRAW: redraw_screen = TRUE; /* FALLTHROUGH */ diff -Nurp tin-1.6.1/src/init.c tin-1.6.2/src/init.c --- tin-1.6.1/src/init.c Sun Aug 10 03:37:40 2003 +++ tin-1.6.2/src/init.c Wed Aug 27 23:16:56 2003 @@ -674,10 +674,11 @@ init_selfinfo( /* * the site_config-file was the last chance to set the domainname - * if it's still unset exit tin. + * if it's still unset fall into no posting mode. */ if (domain_name[0] == '\0') { error_message(_(txt_error_no_domain_name)); + sleep(2); force_no_post = TRUE; } diff -Nurp tin-1.6.1/src/lang.c tin-1.6.2/src/lang.c --- tin-1.6.1/src/lang.c Sun Aug 10 03:37:54 2003 +++ tin-1.6.2/src/lang.c Wed Aug 27 23:17:21 2003 @@ -200,7 +200,7 @@ constext txt_error_invalid_response_to_g constext txt_error_locale[] = "Can't set the specified locale!"; constext txt_error_mime_end[] = N_("MIME parse error: Unexpected end of %s/%s article"); constext txt_error_mime_start[] = N_("MIME parse error: Start boundary whilst reading headers"); -constext txt_error_no_domain_name[] = N_("Can't get a (fully-qualified) domain-name!\n"); +constext txt_error_no_domain_name[] = N_("Can't get a (fully-qualified) domain-name!"); constext txt_error_no_enter_permission[] = N_("No permissions to go into %s\n"); constext txt_error_no_from[] = N_("\nError: From: line missing.\n"); constext txt_error_no_read_permission[] = N_("No read permissions for %s\n"); @@ -405,7 +405,7 @@ constext txt_help_thread_catchup[] = N_( constext txt_help_thread_catchup_next_unread[] = N_("mark thread as read and enter next unread thread or group"); constext txt_help_thread_first_article[] = N_("choose first article in list"); constext txt_help_thread_last_article[] = N_("choose last article in list"); -constext txt_help_thread_mark_article_read[] = N_("mark article as read and move cursor to next unread article"); +constext txt_help_thread_mark_article_read[] = N_("mark article or tagged articles as read and move cursor to next unread article"); constext txt_help_thread_read_article[] = N_("read chosen article"); constext txt_help_thread_toggle_subj_display[] = N_("cycle the display of authors email address, real name, both or neither"); constext txt_help_title_disp[] = N_("Display properties\n------------------"); diff -Nurp tin-1.6.1/src/mimetypes.c tin-1.6.2/src/mimetypes.c --- tin-1.6.1/src/mimetypes.c Sat Jul 12 15:49:46 2003 +++ tin-1.6.2/src/mimetypes.c Tue Aug 26 14:36:27 2003 @@ -3,7 +3,7 @@ * Module : mimetypes.c * Author : J. Faultless * Created : 2000-03-31 - * Updated : 2003-04-10 + * Updated : 2003-08-26 * Notes : mime.types handling * * Copyright (c) 2000-2003 Jason Faultless @@ -77,6 +77,7 @@ _lookup_mimetype( if ((i = content_type(strtok(buf, "/"))) != -1) { if ((ptr = strtok(NULL, "\n")) != NULL) { part->type = i; + FreeIfNeeded(part->subtype); part->subtype = my_strdup(ptr); fclose(fp); return TRUE; diff -Nurp tin-1.6.1/src/misc.c tin-1.6.2/src/misc.c --- tin-1.6.1/src/misc.c Sat Jul 12 15:49:46 2003 +++ tin-1.6.2/src/misc.c Sun Aug 24 02:42:38 2003 @@ -3,7 +3,7 @@ * Module : misc.c * Author : I. Lea & R. Skrenta * Created : 1991-04-01 - * Updated : 2003-06-17 + * Updated : 2003-08-24 * Notes : * * Copyright (c) 1991-2003 Iain Lea , Rich Skrenta @@ -1697,13 +1697,6 @@ strfpath( } -enum quote_enum { - no_quote = 0, - dbl_quote, - sgl_quote -}; - - /* * TODO: Properly explain this */ @@ -1714,37 +1707,46 @@ escape_shell_meta( { static char buf[PATH_LEN]; char *dest = buf; + int space = sizeof(buf) - 2; switch (quote_area) { case no_quote: - while (*source) { + while (*source && (space > 0)) { if (*source == '\'' || *source == '\\' || *source == '"' || *source == '$' || *source == '`' || *source == '*' || *source == '&' || *source == '|' || *source == '<' || *source == '>' || *source == ';' || *source == '(' || - *source == ')') + *source == ')') { *dest++ = '\\'; + space--; + } *dest++ = *source++; + space--; } break; case dbl_quote: - while (*source) { + while (*source && (space > 0)) { if (*source == '\\' || *source == '"' || *source == '$' || - *source == '`') + *source == '`') { *dest++ = '\\'; + space--; + } *dest++ = *source++; + space--; } break; case sgl_quote: - while (*source) { + while (*source && (space > 4)) { if (*source == '\'') { *dest++ = '\''; *dest++ = '\\'; *dest++ = '\''; + space -= 3; } *dest++ = *source++; + space--; } break; diff -Nurp tin-1.6.1/src/open.c tin-1.6.2/src/open.c --- tin-1.6.1/src/open.c Tue Jul 22 16:18:36 2003 +++ tin-1.6.2/src/open.c Fri Aug 15 17:45:27 2003 @@ -3,7 +3,7 @@ * Module : open.c * Author : I. Lea & R. Skrenta * Created : 1991-04-01 - * Updated : 2003-07-22 + * Updated : 2003-08-15 * Notes : Routines to make reading news locally (ie. /var/spool/news) * or via NNTP transparent * @@ -406,7 +406,7 @@ get_only_respcode( DEBUG_IO((stderr, "get_only_respcode(%d)\n", respcode)); /* TODO: reconnect on ERR_FAULT? */ - if ((respcode == ERR_FAULT || respcode == ERR_GOODBYE) && last_put[0] != '\0') { + if ((respcode == ERR_FAULT || respcode == ERR_GOODBYE || respcode == OK_GOODBYE) && last_put[0] != '\0' && strcmp(last_put, "QUIT")) { /* * Maybe server timed out. * If so, retrying will force a reconnect. diff -Nurp tin-1.6.1/src/page.c tin-1.6.2/src/page.c --- tin-1.6.1/src/page.c Sun Aug 3 20:51:38 2003 +++ tin-1.6.2/src/page.c Sun Aug 24 02:43:09 2003 @@ -3,7 +3,7 @@ * Module : page.c * Author : I. Lea & R. Skrenta * Created : 1991-04-01 - * Updated : 2003-08-03 + * Updated : 2003-08-24 * Notes : * * Copyright (c) 1991-2003 Iain Lea , Rich Skrenta @@ -993,6 +993,7 @@ return_to_index: case iKeyPageViewAttach: XFACE_SUPPRESS(); decode_save_mime(&pgart, FALSE); + draw_page(group->name, 0); XFACE_SHOW(); break; @@ -1002,6 +1003,7 @@ return_to_index: resize_article(FALSE, &pgart); /* umbreak long lines */ process_url(); resize_article(TRUE, &pgart); /* rebreak long lines */ + draw_page(group->name, 0); XFACE_SHOW(); } break; diff -Nurp tin-1.6.1/src/post.c tin-1.6.2/src/post.c --- tin-1.6.1/src/post.c Sun Jul 27 14:21:59 2003 +++ tin-1.6.2/src/post.c Sun Aug 10 15:31:03 2003 @@ -3,7 +3,7 @@ * Module : post.c * Author : I. Lea * Created : 1991-04-01 - * Updated : 2003-06-18 + * Updated : 2003-08-10 * Notes : mail/post/replyto/followup/repost & cancel articles * * Copyright (c) 1991-2003 Iain Lea @@ -2898,7 +2898,8 @@ int mail_to_someone( const char *address, t_bool confirm_to_mail, - t_openartinfo *artinfo) + t_openartinfo *artinfo, + const struct t_group *group) { FILE *fp; char ch = iKeyPostSend; @@ -2943,7 +2944,7 @@ mail_to_someone( } else { if (confirm_to_mail) ch = prompt_to_send(subject); - ret_code = mail_loop(nam, ch, subject, NULL, NULL); + ret_code = mail_loop(nam, ch, subject, group ? group->name : NULL, NULL); } if (tinrc.unlink_article) diff -Nurp tin-1.6.1/src/rfc1524.c tin-1.6.2/src/rfc1524.c --- tin-1.6.1/src/rfc1524.c Sat Jul 12 15:49:46 2003 +++ tin-1.6.2/src/rfc1524.c Sun Aug 24 02:43:01 2003 @@ -3,7 +3,7 @@ * Module : rfc1524.c * Author : Urs Janssen , Jason Faultless * Created : 2000-05-15 - * Updated : 2002-06-18 + * Updated : 2002-08-24 * Notes : mailcap parsing as defined in RFC 1524 * * Copyright (c) 2000-2003 Urs Janssen , Jason Faultless @@ -48,7 +48,7 @@ #define MAILCAPFIELDS 13 /* local prototypes */ -static char *expand_mailcap_meta(const char *mailcap, t_part *part, char *nametemplate, const char *path); +static char *expand_mailcap_meta(const char *mailcap, t_part *part, t_bool escape_shell_meta_chars, const char *path); static char *get_mailcap_field(char *mailcap); static t_mailcap *parse_mailcap_line(const char *mailcap, t_part *part, const char *path); @@ -208,7 +208,7 @@ parse_mailcap_line( ptr += strlen(ptr) + 1; } if (!strncasecmp(ptr, "nametemplate=", 13)) { - tmailcap->nametemplate = expand_mailcap_meta(ptr + 13, part, (char *) 0, path); + tmailcap->nametemplate = expand_mailcap_meta(ptr + 13, part, FALSE, path); ptr += strlen(ptr) + 1; } if (!strncasecmp(ptr, "test=", 5)) { @@ -246,21 +246,21 @@ parse_mailcap_line( * nametemplate */ if (tmailcap->command != NULL) - tmailcap->command = expand_mailcap_meta(tmailcap->command, part, tmailcap->nametemplate, path); + tmailcap->command = expand_mailcap_meta(tmailcap->command, part, TRUE, tmailcap->nametemplate ? tmailcap->nametemplate : path); if (tmailcap->description != NULL) - tmailcap->description = expand_mailcap_meta(tmailcap->description, part, tmailcap->nametemplate, path); + tmailcap->description = expand_mailcap_meta(tmailcap->description, part, FALSE, tmailcap->nametemplate ? tmailcap->nametemplate : path); if (tmailcap->test != NULL) - tmailcap->test = expand_mailcap_meta(tmailcap->test, part, tmailcap->nametemplate, path); + tmailcap->test = expand_mailcap_meta(tmailcap->test, part, TRUE, tmailcap->nametemplate ? tmailcap->nametemplate : path); if (tmailcap->compose != NULL) - tmailcap->compose = expand_mailcap_meta(tmailcap->compose, part, tmailcap->nametemplate, path); + tmailcap->compose = expand_mailcap_meta(tmailcap->compose, part, TRUE, tmailcap->nametemplate ? tmailcap->nametemplate : path); if (tmailcap->composetyped != NULL) - tmailcap->composetyped = expand_mailcap_meta(tmailcap->composetyped, part, tmailcap->nametemplate, path); + tmailcap->composetyped = expand_mailcap_meta(tmailcap->composetyped, part, TRUE, tmailcap->nametemplate ? tmailcap->nametemplate : path); if (tmailcap->edit != NULL) - tmailcap->edit = expand_mailcap_meta(tmailcap->edit, part, tmailcap->nametemplate, path); + tmailcap->edit = expand_mailcap_meta(tmailcap->edit, part, TRUE, tmailcap->nametemplate ? tmailcap->nametemplate : path); if (tmailcap->print != NULL) - tmailcap->print = expand_mailcap_meta(tmailcap->print, part, tmailcap->nametemplate, path); + tmailcap->print = expand_mailcap_meta(tmailcap->print, part, TRUE, tmailcap->nametemplate ? tmailcap->nametemplate : path); if (tmailcap->x11bitmap != NULL) - tmailcap->x11bitmap = expand_mailcap_meta(tmailcap->x11bitmap, part, tmailcap->nametemplate, path); + tmailcap->x11bitmap = expand_mailcap_meta(tmailcap->x11bitmap, part, TRUE, tmailcap->nametemplate ? tmailcap->nametemplate : path); free(optr); @@ -345,13 +345,12 @@ static char * expand_mailcap_meta( const char *mailcap, t_part *part, - char *nametemplate, + t_bool escape_shell_meta_chars, const char *path) { const char *ptr; char *line, *lptr; - t_bool quote = FALSE; - t_bool percent = FALSE; + int quote = no_quote; size_t linelen, space, olen; if ((ptr = strchr(mailcap, '%')) == NULL) /* nothing to expand */ @@ -377,116 +376,87 @@ expand_mailcap_meta( lptr = line + olen; /* adjust pointer to current position */ } - switch (*ptr) { - case '\\': - quote = bool_not(quote); - break; - - case '%': - if (!quote) - percent = TRUE; - else { - *lptr++ = '%'; - space--; - quote = FALSE; - } - break; - - case '{': - if (percent) { - char *end; - - percent = FALSE; - if ((end = strchr(ptr, '}')) != NULL) { - if (part->params != NULL) { - char *parameter; - const char *value; - - parameter = my_calloc(1, end - ptr + 1); - strncpy(parameter, ptr + 1, end - ptr - 1); /* extract paramter name */ - - if ((value = get_param(part->params, parameter)) != NULL) { /* match? */ - CHECK_SPACE(strlen(value)); - strcat(line, value); - lptr = line + strlen(line); - space -= strlen(line); - } - free(parameter); + if ('\\' == *ptr) { + ptr++; + if (('\\' == *ptr) || ('%' == *ptr)) { + *lptr++ = *ptr++; + space--; + } + continue; + } + if ('%' == *ptr) { + ptr++; + if ('{' == *ptr) { /* Content-Type parameter */ + char *end; + + if ((end = strchr(ptr, '}')) != NULL) { + if (part->params != NULL) { + char *parameter; + const char *value; + + parameter = my_calloc(1, end - ptr + 1); + strncpy(parameter, ptr + 1, end - ptr - 1); /* extract paramter name */ + if ((value = get_param(part->params, parameter)) != NULL) { /* match? */ + const char *nptr = escape_shell_meta_chars ? escape_shell_meta(value, quote) : value; + + CHECK_SPACE(strlen(nptr)); + strcat(line, nptr); + lptr = line + strlen(line); + space -= strlen(line); } - ptr = end; /* skip past closing } */ + free(parameter); } - break; /* full %{...} */ - } - /* FALLTHROUGH */ - -#if 0 /* TODO: */ - case 'F': - if (percent) { - percent = FALSE; - break; - } - /* FALLTHROUGH */ - - case 'n': - if (percent) { - percent = FALSE; - break; + ptr = end; /* skip past closing } */ + ptr++; + } else { + /* sequence broken, output literally */ + *lptr++ = '%'; + *lptr++ = *ptr++; + space -= 2; } - /* FALLTHROUGH */ + continue; +#if 0 /* TODO */ + } else if ('F' == *ptr) { /* Content-Types and Filenames of sub parts */ + } else if ('n' == *ptr) { /* Number of sub parts */ + } #endif /* 0 */ + } else if ('s' == *ptr) { /* Filename */ + const char *nptr = escape_shell_meta_chars ? escape_shell_meta(path, quote) : path; - case 's': - if (percent) { - char *nptr = (char *) 0; - - if (nametemplate && (nptr = expand_mailcap_meta(nametemplate, part, (char *) 0, path)) != 0) { - CHECK_SPACE(strlen(nptr) + 2); - strcat(line, nptr); - free(nptr); - } else { - CHECK_SPACE(strlen(path) + 2); - strcat(line, path); - } - - lptr = line + strlen(line); - space -= strlen(line); - percent = FALSE; - break; - } - /* FALLTHROUGH */ - - case 't': - if (percent) { - CHECK_SPACE((strlen(content_types[part->type]) + 1 + strlen(part->subtype))); - strcat(line, content_types[part->type]); - strcat(line, "/"); - strcat(line, part->subtype); - lptr = line + strlen(line); - space -= strlen(line); - percent = FALSE; - break; - } - /* FALLTHROUGH */ - - default: - if (quote) { /* last char was \ */ - *lptr = '\\'; - lptr++; - space--; - quote = FALSE; - } - if (percent) { /* unknow %x sequence */ - *lptr = '%'; - lptr++; - space--; - percent = FALSE; - quote = FALSE; - } - *lptr = *ptr; - lptr++; + CHECK_SPACE(strlen(nptr) + 2); + strcat(line, nptr); + lptr = line + strlen(line); + space -= strlen(line); + ptr++; + continue; + } else if ('t' == *ptr) { /* Content-Type */ + const char *nptr = escape_shell_meta_chars ? escape_shell_meta(part->subtype, quote) : part->subtype; + + CHECK_SPACE((strlen(content_types[part->type]) + 1 + strlen(nptr))); + strcat(line, content_types[part->type]); + strcat(line, "/"); + strcat(line, nptr); + lptr = line + strlen(line); + space -= strlen(line); + ptr++; + continue; + } else { /* unknown % sequence */ + *lptr++ = '%'; space--; + continue; + } } - ptr++; + + if (escape_shell_meta_chars) { + if (('\'' == *ptr) && (quote != dbl_quote)) + quote = (quote == no_quote ? sgl_quote : no_quote); + else if (('"' == *ptr) && (quote != sgl_quote)) + quote = (quote == no_quote ? dbl_quote : no_quote); + } + + /* any other char */ + *lptr++ = *ptr++; + space--; } return line; } diff -Nurp tin-1.6.1/src/rfc2046.c tin-1.6.2/src/rfc2046.c --- tin-1.6.1/src/rfc2046.c Sat Jul 12 15:49:46 2003 +++ tin-1.6.2/src/rfc2046.c Tue Aug 26 15:14:34 2003 @@ -3,7 +3,7 @@ * Module : rfc2046.c * Author : Jason Faultless * Created : 2000-02-18 - * Updated : 2003-06-09 + * Updated : 2003-08-26 * Notes : RFC 2046 MIME article parsing * * Copyright (c) 2000-2003 Jason Faultless @@ -46,13 +46,16 @@ /* * local prototypes */ +static char *get_quoted_string(char *source, char **dest); +static char *get_token(const char *source); +static char *skip_equal_sign(char *source); +static char *skip_space(char *source); static int boundary_cmp(const char *line, const char *boundary); static int count_lines(char *line); static int parse_multipart_article(FILE *infile, t_openartinfo *artinfo, t_part *part, int depth, t_bool show_progress_meter); static int parse_normal_article(FILE *in, t_openartinfo *artinfo, t_bool show_progress_meter); static int parse_rfc2045_article(FILE *infile, int line_count, t_openartinfo *artinfo, t_bool show_progress_meter); static unsigned int parse_content_encoding(const char *encoding); -static void free_list(t_param *list); static void parse_content_type(char *type, t_part *content); static void parse_content_disposition(char *disp, t_part *part); static void parse_params(char *params, t_part *content); @@ -173,6 +176,79 @@ boundary_check( } +#define ATTRIBUTE_DELIMS "()<>@,;:\\\"/[]?=" + +static char * +skip_space( + char *source) +{ + while ((*source) && ((' ' == *source) || ('\t' == *source))) + source++; + return *source ? source : NULL; +} + + +static char * +get_token( + const char *source) +{ + char *dest = my_strdup(source); + char *ptr = dest; + + while (isascii(*ptr) && isprint(*ptr) && *ptr != ' ' && !strchr(ATTRIBUTE_DELIMS, *ptr)) + ptr++; + *ptr = '\0'; + + return my_realloc(dest, strlen(dest) + 1); +} + + +static char * +get_quoted_string( + char *source, + char **dest) +{ + char *ptr; + t_bool quote = FALSE; + + *dest = my_malloc(strlen(source)); + ptr = *dest; + source++; /* skip over double quote */ + while (*source) { + if ('\\' == *source) { + quote = TRUE; /* next char as-is */ + source++; + continue; + } + if (('"' == *source) && !quote) + break; /* end of quoted-string */ + *ptr++ = *source++; + quote = FALSE; + } + *ptr = '\0'; + *dest = my_realloc(*dest, strlen(*dest) + 1); + return *source ? source++ : source; +} + + +/* + * Skip equal sign and (non compliant) white space around it + */ +static char * +skip_equal_sign( + char *source) +{ + if (!(source = skip_space(source))) + return NULL; + + if ('=' != *source++) + /* no equal sign, invalid header, stop parsing here */ + return NULL; + + return skip_space(source); +} + + /* * Parse a Content-* parameter list into a linked list * Ensure the ->params element is correctly initialised before calling @@ -183,27 +259,49 @@ parse_params( char *params, t_part *content) { - char *eql, *param; + char *name, *param, *value; t_param *ptr; - for (param = strtok(params, ";"); param; param = strtok(NULL, PARAM_SEP)) { - if ((eql = strchr(param, '=')) == NULL) - continue; /* No =, Malformed param */ + param = params; + while (*param) { + /* Skip over white space */ + if (!(param = skip_space(param))) + break; - *eql++ = '\0'; /* Split at = */ + /* catch parameter name */ + name = get_token(param); + param += strlen(name); + if (!*param) { + /* Nothing follows, invalid, stop here */ + FreeIfNeeded(name); + break; + } - ptr = my_malloc(sizeof(t_param)); - str_trim(param); - ptr->name = my_strdup(param); + if (!(param = skip_equal_sign(param))) { + FreeIfNeeded(name); + break; + } - str_trim(eql); /* See if in "" */ - if (*eql == '"' && (param = strrchr(eql, '"')) != NULL) { - eql++; - *param = '\0'; + /* catch parameter value; may be surrounded by double quotes */ + if ('"' == *param) /* parse quoted-string */ + param = get_quoted_string(param, &value); + else { + /* parse token */ + value = get_token(param); + param += strlen(value); } - ptr->value = my_strdup(rfc1522_decode(eql)); + + ptr = my_malloc(sizeof(t_param)); + ptr->name = name; + ptr->value = value; /* TODO don't RFC1522 decode, parameter encoding is per RFC2231 (not implemented yet) */ ptr->next = content->params; /* Push onto start of list */ content->params = ptr; + + /* advance pointer to next parameter */ + while ((*param) && (';' != *param)) + param++; + if (';' == *param) + param++; } } @@ -211,7 +309,7 @@ parse_params( /* * Free up a generic list object */ -static void +void free_list( t_param *list) { @@ -414,8 +512,6 @@ new_part( /* * Free a linked list of t_part - * - * TODO: plug mem leak: ptr->uue is not entirely freed */ void free_parts( @@ -445,6 +541,8 @@ free_and_init_header( */ FreeAndNull(hdr->from); FreeAndNull(hdr->to); + FreeAndNull(hdr->cc); + FreeAndNull(hdr->bcc); FreeAndNull(hdr->date); FreeAndNull(hdr->subj); FreeAndNull(hdr->org); diff -Nurp tin-1.6.1/src/save.c tin-1.6.2/src/save.c --- tin-1.6.1/src/save.c Sun Aug 3 20:23:21 2003 +++ tin-1.6.2/src/save.c Tue Aug 26 20:26:16 2003 @@ -3,7 +3,7 @@ * Module : save.c * Author : I. Lea & R. Skrenta * Created : 1991-04-01 - * Updated : 2003-08-03 + * Updated : 2003-08-26 * Notes : * * Copyright (c) 1991-2003 Iain Lea , Rich Skrenta @@ -1430,20 +1430,9 @@ decode_save_mime( t_part *ptr, *uueptr; /* - * Process only the uue part in the 'main' article to prevent saving out the - * preamble as a text section etc.. - */ - if (!postproc) { - for (uueptr = art->hdr.ext->uue; uueptr != NULL; uueptr = uueptr->next) { - if (!(decode_save_one(uueptr, art->raw, postproc))) - break; - } - } - - /* * Iterate over all the attachments */ - for (ptr = art->hdr.ext->next; ptr != NULL; ptr = ptr->next) { + for (ptr = art->hdr.ext; ptr != NULL; ptr = ptr->next) { /* * Handle uuencoded sections in this message part. * Only works when the uuencoded file is entirely within the current @@ -1459,9 +1448,12 @@ decode_save_mime( } /* - * TYPE_MULTIPART is an envelope type, don't process it + * TYPE_MULTIPART is an envelope type, don't process it. + * If we had an UUE part, the "surrounding" text/plain plays + * the role of a multipart part. Check to see if we want to + * save text and if not, skip this part. */ - if (ptr->type == TYPE_MULTIPART) + if ((ptr->type == TYPE_MULTIPART || ((NULL != ptr->uue) && (!check_save_mime_type(ptr, CURR_GROUP.attribute->mime_types_to_save))))) continue; if (!(decode_save_one(ptr, art->raw, postproc)))