annotate src/post.c @ 279:49b452b667a6 noffle

[svn] * src/util.c: localTimeDiff() cached its value and recalculated it every hour of clock time, regardless of the time the calculated was based on. This is potentially dangerous at daylight saving changes. So instead use the cached last result only when the new request is to be based on a time in the same hour as the cached result. * src/util.c: Replace the alternate Utl_mktimeGMT() implementation used when timegm() is not available. The previous version, as suggested by the glibc timegm() man page, used setenv() and unsetenv() for changing the environment. These aren't POSIX function, and the POSIX putenv() (a) is tricky to manage if the same var is being constantly update and memory isn't to leak, and (b) provides no way to remove an environment entry. So change to an implementation Wget uses. This should compile on not glibc systems - the previous version failed to build on Solaris.
author bears
date Sun, 17 Nov 2002 15:18:19 +0000
parents 7a830ce3211e
children baa6408d1bbc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
1 /*
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
2 post.c
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
3
247
7a830ce3211e [svn] *** empty log message ***
mirkol
parents: 240
diff changeset
4 $Id: post.c 379 2002-03-26 17:52:01Z mirkol $
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
5 */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
6
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
7 #if HAVE_CONFIG_H
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
8 #include <config.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
9 #endif
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
10
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
11 #include <errno.h>
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
12 #include <pwd.h>
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
13 #include <stdio.h>
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
14 #include <sys/types.h>
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
15 #include <unistd.h>
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
16 #include <string.h>
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
17 #include "common.h"
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
18 #include "configfile.h"
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
19 #include "content.h"
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
20 #include "control.h"
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
21 #include "database.h"
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
22 #include "group.h"
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
23 #include "itemlist.h"
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
24 #include "log.h"
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
25 #include "outgoing.h"
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
26 #include "over.h"
197
24d4cd032da5 [svn] * AUTHORS,INSTALL,NEWS,README,TODO,docs/NOTES,src/client.c,src/protocol.c,
bears
parents: 191
diff changeset
27 #include "portable.h"
24d4cd032da5 [svn] * AUTHORS,INSTALL,NEWS,README,TODO,docs/NOTES,src/client.c,src/protocol.c,
bears
parents: 191
diff changeset
28 #include "post.h"
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
29 #include "protocol.h"
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
30 #include "util.h"
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
31
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
32 #define BEGIN_SIG "-- "
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
33 #define SIG_FILE "/.signature"
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
34
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
35 struct OverInfo
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
36 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
37 Str subject;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
38 Str from;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
39 Str date;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
40 Str msgId;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
41 Str ref;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
42 size_t bytes;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
43 size_t lines;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
44 };
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
45
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
46 struct Article
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
47 {
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
48 DynStr *text; /* Processed article text */
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
49 ItemList *newsgroups; /* Newsgroups for dispatch */
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
50 ItemList *control; /* Control message? NULL if not */
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
51 Bool approved; /* Has Approved: header? */
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
52 Bool posted; /* Has it been put in the article database? */
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
53 int flags; /* Posting flags */
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
54 struct OverInfo over;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
55 };
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
56
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
57 static struct Article article = { NULL, NULL, NULL, FALSE, FALSE, 0,
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
58 { "", "", "", "", "", 0, 0 } };
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
59
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
60 /* Add the article to a group. */
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
61 static Bool
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
62 addToGroup( const char * grp )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
63 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
64 Over * over;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
65 const char *msgId;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
66
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
67 over = new_Over( article.over.subject,
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
68 article.over.from,
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
69 article.over.date,
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
70 article.over.msgId,
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
71 article.over.ref,
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
72 article.over.bytes,
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
73 article.over.lines );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
74
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
75 msgId = article.over.msgId;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
76
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
77 Cont_read( grp );
240
fbff73fe5b40 [svn] * src/client.c: That wasn't a memory leak fixed on Feb 8th. That was a
bears
parents: 223
diff changeset
78 Cont_app( over ); /* Cont modules owns ov after this */
185
fed1334d766b [svn] * src/client.c: Change variable only used on constant to 'const'.
bears
parents: 179
diff changeset
79 Log_dbg( LOG_DBG_POST, "Added message '%s' to group '%s'.", msgId, grp );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
80
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
81 if ( !article.posted )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
82 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
83 Log_inf( "Added '%s' to database.", msgId );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
84 if ( ! Db_prepareEntry( over, Cont_grp(), Cont_last() )
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
85 || ! Db_storeArt ( msgId, DynStr_str( article.text ) ) )
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
86 return FALSE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
87 article.posted = TRUE;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
88 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
89 else
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
90 {
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
91 Str t;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
92 const char *xref;
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
93
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
94 xref = Db_xref( msgId );
185
fed1334d766b [svn] * src/client.c: Change variable only used on constant to 'const'.
bears
parents: 179
diff changeset
95 Log_dbg( LOG_DBG_POST, "Adding '%s' to Xref of '%s'", grp, msgId );
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
96 snprintf( t, MAXCHAR, "%s %s:%i", xref, grp, Ov_numb( over ) );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
97 Db_setXref( msgId, t );
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
98 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
99
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
100 if ( Cont_write() )
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
101 {
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
102 Grp_setFirstLast( Cont_grp(), Cont_first(), Cont_last() );
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
103 Grp_setLastPostTime( Cont_grp() );
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
104 return TRUE;
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
105 }
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
106 else
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
107 return FALSE;
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
108 }
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
109
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
110 static Bool
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
111 checkPostableNewsgroup( void )
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
112 {
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
113 const char * grp;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
114 Bool knownGrp = FALSE;
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
115 Bool postAllowedGrp = TRUE;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
116 Bool local;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
117
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
118 /*
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
119 * Check all known groups are writeable, and there is
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
120 * at least one known group.
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
121 */
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
122 for( grp = Itl_first( article.newsgroups );
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
123 postAllowedGrp && grp != NULL;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
124 grp = Itl_next( article.newsgroups ) )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
125 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
126 if ( Grp_exists( grp ) )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
127 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
128 local = Grp_local( grp );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
129 knownGrp = TRUE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
130 switch( Grp_postAllow( grp ) )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
131 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
132 case 'n':
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
133 postAllowedGrp = FALSE;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
134 break;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
135 case 'y':
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
136 break;
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
137 case 'm':
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
138 /*
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
139 * Can post to moderated groups if *either*
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
140 * 1. Group is local and article approved, or
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
141 * 2. Group is external
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
142 */
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
143 postAllowedGrp =
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
144 ! local ||
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
145 article.approved;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
146 break;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
147 default:
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
148 /*
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
149 * Unknown mode for local groups. Forward
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
150 * to server for external groups; presumably the
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
151 * server knows what to do.
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
152 */
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
153 postAllowedGrp = ! local;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
154 break;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
155 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
156 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
157 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
158
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
159 if ( ! knownGrp )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
160 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
161 Log_err( "No known group in Newsgroups header field" );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
162 return FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
163 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
164 else if ( ! postAllowedGrp )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
165 {
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
166 Log_err( "A group does not permit posting" );
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
167 return FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
168 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
169
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
170 return TRUE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
171 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
172
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
173 /* Get article text, check for validity & build overview. */
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
174 static Bool
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
175 getArticleText( const char *p )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
176 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
177 DynStr * s;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
178 Str line, field, value;
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
179 Bool replyToFound, pathFound, orgFound;
93
eb522db0d032 [svn] Renamed date format and enforce correct date format on post
bears
parents: 88
diff changeset
180 time_t t;
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
181 int sigLines;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
182
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
183 s = new_DynStr( 10000 );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
184 article.text = s;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
185
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
186 replyToFound = pathFound = orgFound = FALSE;
247
7a830ce3211e [svn] *** empty log message ***
mirkol
parents: 240
diff changeset
187
7a830ce3211e [svn] *** empty log message ***
mirkol
parents: 240
diff changeset
188 field[ 0 ] = '\0';
7a830ce3211e [svn] *** empty log message ***
mirkol
parents: 240
diff changeset
189
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
190 /* Grab header lines first, getting overview info as we go. */
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
191 while ( ( p = Utl_getHeaderLn( line, p ) ) != NULL
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
192 && line[ 0 ] != '\0'
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
193 && Prt_getField( field, value, line ) )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
194 {
247
7a830ce3211e [svn] *** empty log message ***
mirkol
parents: 240
diff changeset
195 if ( field [ 0 ] == '\0' )
7a830ce3211e [svn] *** empty log message ***
mirkol
parents: 240
diff changeset
196 {
7a830ce3211e [svn] *** empty log message ***
mirkol
parents: 240
diff changeset
197 /* Error! Continuation without preceding header. */
7a830ce3211e [svn] *** empty log message ***
mirkol
parents: 240
diff changeset
198 Log_err( "First header line started with white space" );
7a830ce3211e [svn] *** empty log message ***
mirkol
parents: 240
diff changeset
199 return FALSE;
7a830ce3211e [svn] *** empty log message ***
mirkol
parents: 240
diff changeset
200 }
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
201 /* Look for headers we need to stash. */
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
202 if ( strcmp( field, "subject" ) == 0 )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
203 {
247
7a830ce3211e [svn] *** empty log message ***
mirkol
parents: 240
diff changeset
204 Utl_catStr( article.over.subject, value );
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
205 DynStr_appLn( s, line );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
206 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
207 else if ( strcmp ( field, "from" ) == 0 )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
208 {
247
7a830ce3211e [svn] *** empty log message ***
mirkol
parents: 240
diff changeset
209 Utl_catStr( article.over.from, value );
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
210 DynStr_appLn( s, line );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
211 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
212 else if ( strcmp ( field, "date" ) == 0 )
247
7a830ce3211e [svn] *** empty log message ***
mirkol
parents: 240
diff changeset
213 Utl_catStr( article.over.date, value );
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
214 else if ( strcmp ( field, "references" ) == 0 )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
215 {
247
7a830ce3211e [svn] *** empty log message ***
mirkol
parents: 240
diff changeset
216 Utl_catStr( article.over.ref, value );
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
217 DynStr_appLn( s, line );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
218 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
219 else if ( strcmp ( field, "message-id" ) == 0 )
247
7a830ce3211e [svn] *** empty log message ***
mirkol
parents: 240
diff changeset
220 /* Utl_catStr( article.over.msgId, value ); */
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
221 Utl_cpyStr( article.over.msgId, value );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
222 else if ( strcmp ( field, "newsgroups" ) == 0 )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
223 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
224 article.newsgroups = new_Itl( value, " ,\n\t" );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
225 DynStr_appLn( s, line );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
226 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
227 else if ( strcmp ( field, "control" ) == 0 )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
228 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
229 article.control = new_Itl( value, " " );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
230 DynStr_appLn( s, line );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
231 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
232 else if ( strcmp ( field, "reply-to" ) == 0 )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
233 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
234 replyToFound = TRUE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
235 DynStr_appLn( s, line );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
236 }
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
237 else if ( strcmp ( field, "approved" ) == 0 )
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
238 {
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
239 article.approved = TRUE;
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
240 DynStr_appLn( s, line );
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
241 }
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
242 else if ( strcmp ( field, "path" ) == 0 )
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
243 {
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
244 pathFound = TRUE;
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
245 DynStr_appLn( s, line );
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
246 }
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
247 else if ( strcmp ( field, "organization" ) == 0 )
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
248 {
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
249 orgFound = TRUE;
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
250 DynStr_appLn( s, line );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
251 }
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
252 else if ( strcmp ( field, "x-sender" ) == 0 )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
253 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
254 DynStr_app( s, "X-NOFFLE-X-Sender: " );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
255 DynStr_appLn( s, value );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
256 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
257 else if ( strcmp ( field, "xref" ) == 0 )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
258 Log_inf( "Xref header in post ignored" );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
259 else
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
260 DynStr_appLn( s, line );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
261 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
262
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
263 /* Now sort header-related issues */
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
264 if ( article.over.from[ 0 ] == '\0' )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
265 {
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
266 if ( article.flags & POST_ADD_FROM )
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
267 {
185
fed1334d766b [svn] * src/client.c: Change variable only used on constant to 'const'.
bears
parents: 179
diff changeset
268 Log_dbg( LOG_DBG_POST, "Adding From field to posted message." );
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
269 DynStr_app( s, "From: " );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
270 if ( ! Prt_genFromHdr( article.over.from ) )
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
271 {
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
272 Log_err( "Can't generate From field" );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
273 return FALSE;
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
274 }
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
275 DynStr_appLn( s, article.over.from );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
276 }
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
277 else
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
278 {
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
279 Log_err( "Posted message has no From field" );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
280 return FALSE;
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
281 }
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
282 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
283 if ( article.over.subject[ 0 ] == '\0' )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
284 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
285 Log_err( "Posted message has no Subject field" );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
286 return FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
287 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
288 if ( article.newsgroups == NULL || Itl_count( article.newsgroups) == 0 )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
289 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
290 Log_err( "Posted message has no valid Newsgroups field" );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
291 return FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
292 }
93
eb522db0d032 [svn] Renamed date format and enforce correct date format on post
bears
parents: 88
diff changeset
293
eb522db0d032 [svn] Renamed date format and enforce correct date format on post
bears
parents: 88
diff changeset
294 /* Ensure correctly formatted date */
eb522db0d032 [svn] Renamed date format and enforce correct date format on post
bears
parents: 88
diff changeset
295 t = Utl_parseNewsDate( article.over.date );
eb522db0d032 [svn] Renamed date format and enforce correct date format on post
bears
parents: 88
diff changeset
296 if ( t == (time_t) -1 )
eb522db0d032 [svn] Renamed date format and enforce correct date format on post
bears
parents: 88
diff changeset
297 {
eb522db0d032 [svn] Renamed date format and enforce correct date format on post
bears
parents: 88
diff changeset
298 time( &t );
eb522db0d032 [svn] Renamed date format and enforce correct date format on post
bears
parents: 88
diff changeset
299 Utl_newsDate( t, article.over.date );
eb522db0d032 [svn] Renamed date format and enforce correct date format on post
bears
parents: 88
diff changeset
300 }
100
af51bf245bc3 [svn] Fix stupid Date: bug
bears
parents: 93
diff changeset
301 DynStr_app( s, "Date: " );
af51bf245bc3 [svn] Fix stupid Date: bug
bears
parents: 93
diff changeset
302 DynStr_appLn( s, article.over.date );
93
eb522db0d032 [svn] Renamed date format and enforce correct date format on post
bears
parents: 88
diff changeset
303
eb522db0d032 [svn] Renamed date format and enforce correct date format on post
bears
parents: 88
diff changeset
304 /* Ensure Message ID is present and valid */
222
bf290632d29e [svn] * src/post.c: Always replace message ID in posted message if existing
bears
parents: 197
diff changeset
305 if ( article.over.msgId[ 0 ] == '\0' )
bf290632d29e [svn] * src/post.c: Always replace message ID in posted message if existing
bears
parents: 197
diff changeset
306 {
bf290632d29e [svn] * src/post.c: Always replace message ID in posted message if existing
bears
parents: 197
diff changeset
307 Prt_genMsgId( article.over.msgId, article.over.from, "NOFFLE" );
bf290632d29e [svn] * src/post.c: Always replace message ID in posted message if existing
bears
parents: 197
diff changeset
308 Log_inf( "Adding missing Message-ID '%s'", article.over.msgId );
bf290632d29e [svn] * src/post.c: Always replace message ID in posted message if existing
bears
parents: 197
diff changeset
309 }
bf290632d29e [svn] * src/post.c: Always replace message ID in posted message if existing
bears
parents: 197
diff changeset
310 else if ( ! Prt_isValidMsgId( article.over.msgId ) || Cfg_replaceMsgId() )
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
311 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
312 Prt_genMsgId( article.over.msgId, article.over.from, "NOFFLE" );
185
fed1334d766b [svn] * src/client.c: Change variable only used on constant to 'const'.
bears
parents: 179
diff changeset
313 Log_dbg( LOG_DBG_POST,
fed1334d766b [svn] * src/client.c: Change variable only used on constant to 'const'.
bears
parents: 179
diff changeset
314 "Replacing Message-ID with '%s'",
fed1334d766b [svn] * src/client.c: Change variable only used on constant to 'const'.
bears
parents: 179
diff changeset
315 article.over.msgId );
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
316 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
317 DynStr_app( s, "Message-ID: " );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
318 DynStr_appLn( s, article.over.msgId );
93
eb522db0d032 [svn] Renamed date format and enforce correct date format on post
bears
parents: 88
diff changeset
319
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
320 /* Ensure Path header */
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
321 if ( ! pathFound )
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
322 {
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
323 Str path;
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
324
185
fed1334d766b [svn] * src/client.c: Change variable only used on constant to 'const'.
bears
parents: 179
diff changeset
325 Log_dbg( LOG_DBG_POST, "Adding Path field to posted message." );
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
326 DynStr_app( s, "Path: " );
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
327 Utl_cpyStr( path, Cfg_pathHeader() );
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
328 if ( path[ 0 ] == '\0' )
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
329 Prt_genPathHdr( path, article.over.from );
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
330 DynStr_appLn( s, path );
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
331 }
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
332
93
eb522db0d032 [svn] Renamed date format and enforce correct date format on post
bears
parents: 88
diff changeset
333 /* Ensure Reply-To header */
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
334 if ( ! replyToFound )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
335 {
185
fed1334d766b [svn] * src/client.c: Change variable only used on constant to 'const'.
bears
parents: 179
diff changeset
336 Log_dbg( LOG_DBG_POST, "Adding Reply-To field to posted message." );
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
337 DynStr_app( s, "Reply-To: " );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
338 DynStr_appLn( s, article.over.from );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
339 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
340
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
341 /* Ensure Organization header if required */
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
342 if ( ( ! orgFound ) && ( article.flags & POST_ADD_ORG ) )
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
343 {
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
344 Str org;
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
345
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
346 Utl_cpyStr( org, Cfg_organization() );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
347 if ( org[ 0 ] != '\0' )
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
348 {
185
fed1334d766b [svn] * src/client.c: Change variable only used on constant to 'const'.
bears
parents: 179
diff changeset
349 Log_dbg( LOG_DBG_POST,
fed1334d766b [svn] * src/client.c: Change variable only used on constant to 'const'.
bears
parents: 179
diff changeset
350 "Adding Organization field to posted message." );
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
351 DynStr_app( s, "Organization: " );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
352 DynStr_appLn( s, org );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
353 }
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
354 }
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
355
93
eb522db0d032 [svn] Renamed date format and enforce correct date format on post
bears
parents: 88
diff changeset
356 /* OK, header ready to roll. Something to accompany it? */
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
357 if ( p == NULL || p[ 0 ] == '\0' )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
358 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
359 Log_err( "Posted message has no body" );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
360 return FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
361 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
362
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
363 /* Add the empty line separating header and body */
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
364 DynStr_appLn( s, "" );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
365
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
366 /* Now pop on the rest of the body */
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
367 DynStr_app( s, p );
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
368
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
369 /* Add a signature if requested to do so and if one found. */
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
370 sigLines = 0;
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
371 if ( article.flags & POST_ADD_SIG )
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
372 {
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
373 Str sigfile;
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
374 struct passwd *pwd;
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
375 FILE *f;
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
376
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
377 /* Generate sig file path */
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
378 pwd = getpwuid( getuid() );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
379 Utl_cpyStr( sigfile, pwd->pw_dir );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
380 Utl_catStr( sigfile, SIG_FILE );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
381
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
382 f = fopen( sigfile, "r" );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
383 if ( f == NULL )
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
384 {
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
385 /* If err is ENOENT, file doesn't exist. This is OK. */
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
386 if ( errno != ENOENT )
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
387 {
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
388 Log_err( "Can't access .signature file (%s), "
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
389 "article not posted.",
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
390 strerror( errno ) );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
391 return FALSE;
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
392 }
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
393 }
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
394 else
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
395 {
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
396 /* OK, try to add it. */
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
397 Str sline;
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
398
185
fed1334d766b [svn] * src/client.c: Change variable only used on constant to 'const'.
bears
parents: 179
diff changeset
399 Log_dbg( LOG_DBG_POST, "Adding .signature to posted message." );
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
400
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
401 DynStr_appLn( s, BEGIN_SIG );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
402 sigLines++;
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
403 while ( Prt_getLn( sline, f, 0 ) )
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
404 {
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
405 DynStr_appLn( s, sline );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
406 sigLines++;
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
407 }
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
408
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
409 if ( ferror( f ) )
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
410 {
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
411 Log_err( "Error reading .signature file (%s), "
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
412 "article not posted.",
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
413 strerror( errno ) );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
414 fclose( f );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
415 return FALSE;
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
416 }
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
417
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
418 fclose( f );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
419 }
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
420 }
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
421
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
422 /*
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
423 * Count the lines & bytes. This counts the original number of
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
424 * lines in the supplied body, so add in the number of signature
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
425 * lines added, including the separator.
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
426 */
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
427 for ( p++, article.over.lines = sigLines; *p != '\0'; p++ )
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
428 if ( *p == '\n' )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
429 article.over.lines++;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
430 article.over.bytes = DynStr_len( s );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
431
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
432 return TRUE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
433 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
434
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
435 /* Add article to outgoing if needs be */
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
436 static Bool
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
437 postExternal( void )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
438 {
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
439 const char * grp;
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
440 Str serversSeen;
153
945501c95a4e [svn] Undo change to post.c that only sent moderated articles to one server.
bears
parents: 152
diff changeset
441 Bool err;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
442
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
443 /*
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
444 * For each external group, send to that group's server if it has
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
445 * not seen the post already.
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
446 */
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
447 serversSeen[ 0 ] = '\0';
153
945501c95a4e [svn] Undo change to post.c that only sent moderated articles to one server.
bears
parents: 152
diff changeset
448 err = FALSE;
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
449
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
450 for ( grp = Itl_first( article.newsgroups );
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
451 grp != NULL;
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
452 grp = Itl_next( article.newsgroups ) )
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
453 {
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
454 if ( Grp_exists( grp ) && ! Grp_local( grp ) )
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
455 {
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
456 const char * servName = Grp_server( grp );
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
457
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
458 if ( strstr( serversSeen, servName ) != NULL )
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
459 continue;
152
ca9769519c96 [svn] * src/post.c: When posting to a non-local moderated group, only
bears
parents: 150
diff changeset
460
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
461 if ( ! Out_add( servName, article.over.msgId, article.text ) )
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
462 {
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
463 Log_err( "Cannot add posted article to outgoing directory" );
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
464 err = TRUE;
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
465 }
152
ca9769519c96 [svn] * src/post.c: When posting to a non-local moderated group, only
bears
parents: 150
diff changeset
466
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
467 Utl_catStr( serversSeen, " " );
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
468 Utl_catStr( serversSeen, servName );
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
469 }
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
470 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
471
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
472 return err;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
473 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
474
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
475 /* Cancel and return TRUE if need to send cancel message on to server. */
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
476 static Bool
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
477 controlCancel( const char *cancelId )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
478 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
479 return ( Ctrl_cancel( cancelId ) == CANCEL_NEEDS_MSG );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
480 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
481
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
482 /*
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
483 It's a control message. Currently we only know about 'cancel'
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
484 messages; others are passed on for outside groups, and logged
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
485 as ignored for local groups.
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
486 */
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
487 static Bool
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
488 handleControl( void )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
489 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
490 const char *grp;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
491 const char *op;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
492
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
493 op = Itl_first( article.control );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
494 if ( op == NULL )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
495 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
496 Log_err( "Malformed control line." );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
497 return TRUE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
498 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
499 else if ( strcasecmp( op, "cancel" ) == 0 )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
500 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
501 if ( ! controlCancel( Itl_next( article.control ) ) )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
502 return TRUE; /* Handled entirely locally */
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
503 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
504 else
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
505 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
506 /* Log 'can't do' for internal groups. */
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
507 for( grp = Itl_first( article.newsgroups );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
508 grp != NULL;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
509 grp = Itl_next( article.newsgroups ) )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
510 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
511 if ( Grp_exists( grp ) && Grp_local( grp ) )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
512 Log_inf( "Ignoring control '%s' for '%s'.", op, grp );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
513 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
514 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
515
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
516 return postExternal();
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
517 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
518
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
519 static Bool
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
520 postArticle( void )
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
521 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
522 const char *grp;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
523 Bool err;
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
524 Bool local;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
525 Bool postLocal;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
526
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
527 err = FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
528 postLocal = Cfg_postLocal();
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
529
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
530 /*
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
531 * Run round first doing all local groups.
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
532 * Remember, we've already checked it is OK to post to them all.
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
533 */
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
534 for( grp = Itl_first( article.newsgroups );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
535 grp != NULL;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
536 grp = Itl_next( article.newsgroups ) )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
537 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
538 local = Grp_local( grp );
179
f973675760dc [svn] * src/post.c: If post-locally is set, only do immediate local posting
bears
parents: 153
diff changeset
539
f973675760dc [svn] * src/post.c: If post-locally is set, only do immediate local posting
bears
parents: 153
diff changeset
540 /*
f973675760dc [svn] * src/post.c: If post-locally is set, only do immediate local posting
bears
parents: 153
diff changeset
541 * Only post locally to external group if that group's post
f973675760dc [svn] * src/post.c: If post-locally is set, only do immediate local posting
bears
parents: 153
diff changeset
542 * status is 'y'. Otherwise retrieve from upstream server -
f973675760dc [svn] * src/post.c: If post-locally is set, only do immediate local posting
bears
parents: 153
diff changeset
543 * for example, we don't want to immediately post locally articles
f973675760dc [svn] * src/post.c: If post-locally is set, only do immediate local posting
bears
parents: 153
diff changeset
544 * destined for the moderator of a moderated group.
f973675760dc [svn] * src/post.c: If post-locally is set, only do immediate local posting
bears
parents: 153
diff changeset
545 */
f973675760dc [svn] * src/post.c: If post-locally is set, only do immediate local posting
bears
parents: 153
diff changeset
546 if ( ! local && ( ! postLocal || Grp_postAllow( grp ) != 'y' ) )
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
547 continue;
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
548 err = addToGroup( grp ) && err;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
549 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
550
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
551 return postExternal() && err;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
552 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
553
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
554
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
555 static void
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
556 clearArticleInfo( void )
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
557 {
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
558 article.text = NULL;
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
559 article.newsgroups = NULL;
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
560 article.control = NULL;
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
561 article.approved = FALSE;
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
562 article.posted = FALSE;
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
563 article.flags = 0;
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
564 memset( &article.over, 0, sizeof( article.over ) );
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
565 }
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
566
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
567 /* Register an article for posting. */
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
568 Bool
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
569 Post_open( const char * text, unsigned flags )
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
570 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
571 if ( article.text != NULL )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
572 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
573 Log_err( "Busy article in Post_open." );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
574 return FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
575 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
576
223
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
577 clearArticleInfo();
ffb1848a39db [svn] * src/util.c: Improve (correct) error detection when updating
bears
parents: 222
diff changeset
578
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
579 article.flags = flags;
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
580 if ( ! getArticleText( text ) )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
581 return FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
582
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
583 if ( Db_contains( article.over.msgId ) )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
584 {
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
585 Post_close();
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
586 Log_err( "Duplicate article %s.", article.over.msgId );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
587 return FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
588 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
589
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
590 return TRUE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
591 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
592
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
593 /* Process the posting */
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
594 Bool
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
595 Post_post( void )
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
596 {
150
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
597 if ( article.flags & POST_DEBUG )
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
598 {
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
599 fputs( DynStr_str( article.text ), stdout );
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
600 return TRUE;
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
601 }
1c7303c71f66 [svn] * src/protocol.c: Fix bug in Prt_getLn if we should read a line
bears
parents: 136
diff changeset
602
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
603 if ( ! checkPostableNewsgroup() )
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
604 return FALSE;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
605
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
606 return ( article.control == NULL )
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
607 ? ! postArticle()
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
608 : ! handleControl();
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
609 }
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
610
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
611 /* Done with article - tidy up. */
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
612 void
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
613 Post_close( void )
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
614 {
88
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
615 if ( article.text != NULL )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
616 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
617 del_DynStr( article.text );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
618 article.text = NULL;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
619 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
620 if ( article.newsgroups != NULL )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
621 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
622 del_Itl( article.newsgroups );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
623 article.newsgroups = NULL;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
624 }
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
625 if ( article.control != NULL )
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
626 {
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
627 del_Itl( article.control );
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
628 article.control = NULL;
1fcdced0246e [svn] Move posting code to post.c, add command line posting
bears
parents: 64
diff changeset
629 }
43
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
630 }
2842f50feb55 [svn] * client.c, client.h, common.h, config.c, config.h, content.c, content.h,
uh1763
parents:
diff changeset
631
115
3b4db42990e0 [svn] Approved: header, group check before post, all external servers.
bears
parents: 100
diff changeset
632