comparison src/fetch.c @ 464:d9035d08fe51 noffle

[svn] * src/fetch.c: Log failed posting that we can't mail back to the sender or where sending fails to <Noffle spool>/failed.posting.
author bears
date Wed, 23 Jul 2003 10:32:25 +0100
parents 39d9c19ffba4
children 614a3177b15c
comparison
equal deleted inserted replaced
463:95697d7c97a1 464:d9035d08fe51
1 /* 1 /*
2 fetch.c 2 fetch.c
3 3
4 $Id: fetch.c 415 2003-01-10 22:40:18Z bears $ 4 $Id: fetch.c 609 2003-07-23 09:32:25Z bears $
5 */ 5 */
6 6
7 #if HAVE_CONFIG_H 7 #if HAVE_CONFIG_H
8 #include <config.h> 8 #include <config.h>
9 #endif 9 #endif
294 Lock_closeDatabases(); 294 Lock_closeDatabases();
295 return res; 295 return res;
296 } 296 }
297 297
298 static void 298 static void
299 saveArticleInFailedPostings( const char *msgId, const char *article )
300 {
301
302 Utl_writeFile( Cfg_spoolDir(), "failed.posting", msgId, article );
303 }
304
305 static void
299 returnArticleToSender( const char *sender, const char *reason, 306 returnArticleToSender( const char *sender, const char *reason,
300 const char *article ) 307 const char *msgId, const char *article )
301 { 308 {
302 int ret; 309 int ret;
303 Str cmd; 310 Str cmd;
304 FILE *f; 311 FILE *f;
305 SignalHandler lastHandler; 312 SignalHandler lastHandler;
307 Log_err( "Return article to '%s' by mail", sender ); 314 Log_err( "Return article to '%s' by mail", sender );
308 snprintf( cmd, MAXCHAR, "%s -t -oi", SENDMAILPROG); 315 snprintf( cmd, MAXCHAR, "%s -t -oi", SENDMAILPROG);
309 lastHandler = signal( SIGPIPE, SIG_IGN ); 316 lastHandler = signal( SIGPIPE, SIG_IGN );
310 f = popen( cmd, "w" ); 317 f = popen( cmd, "w" );
311 if ( f == NULL ) 318 if ( f == NULL )
319 {
312 Log_err( "Invocation of '%s' failed (%s)", cmd, strerror( errno ) ); 320 Log_err( "Invocation of '%s' failed (%s)", cmd, strerror( errno ) );
321 saveArticleInFailedPostings( msgId, article );
322 }
313 else 323 else
314 { 324 {
315 fprintf( f, 325 fprintf( f,
316 "To: %s\n" 326 "To: %s\n"
317 "Subject: [ NOFFLE: Posting failed ]\n" 327 "Subject: [ NOFFLE: Posting failed ]\n"
329 ".\n", 339 ".\n",
330 sender, 340 sender,
331 reason, article ); 341 reason, article );
332 ret = pclose( f ); 342 ret = pclose( f );
333 if ( ret != EXIT_SUCCESS ) 343 if ( ret != EXIT_SUCCESS )
344 {
334 Log_err( "'%s' exit value %d", cmd, ret ); 345 Log_err( "'%s' exit value %d", cmd, ret );
346 saveArticleInFailedPostings( msgId, article );
347 }
335 signal( SIGPIPE, lastHandler ); 348 signal( SIGPIPE, lastHandler );
336 } 349 }
337 } 350 }
338 351
339 Bool 352 Bool
370 && ! Prt_searchHeader( txt, "REPLY-TO", sender ) 383 && ! Prt_searchHeader( txt, "REPLY-TO", sender )
371 && ! Prt_searchHeader( txt, "SENDER", sender ) 384 && ! Prt_searchHeader( txt, "SENDER", sender )
372 && ! Prt_searchHeader( txt, "X-NOFFLE-X-SENDER", 385 && ! Prt_searchHeader( txt, "X-NOFFLE-X-SENDER",
373 sender ) /* see server.c */ 386 sender ) /* see server.c */
374 && ! Prt_searchHeader( txt, "FROM", sender ) ) 387 && ! Prt_searchHeader( txt, "FROM", sender ) )
388 {
375 Log_err( "Article %s has no From/Sender/X-Sender field", 389 Log_err( "Article %s has no From/Sender/X-Sender field",
376 msgId ); 390 msgId );
391 saveArticleInFailedPostings( msgId, txt );
392 }
377 else 393 else
378 returnArticleToSender( sender, errStr, txt ); 394 returnArticleToSender( sender, errStr, msgId, txt );
379 } 395 }
380 } 396 }
381 while ( Out_next( msgId, s ) ); 397 while ( Out_next( msgId, s ) );
382 } 398 }
383 del_DynStr( s ); 399 del_DynStr( s );