home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume30 / tin / part14 / inews.c < prev    next >
C/C++ Source or Header  |  1992-05-20  |  4KB  |  178 lines

  1. /*
  2.  *  Project   : tin - a threaded Netnews reader
  3.  *  Module    : inews.c
  4.  *  Author    : I.Lea
  5.  *  Created   : 17-03-92
  6.  *  Updated   : 06-05-92
  7.  *  Notes     : NNTP builtin version of inews
  8.  *  Copyright : (c) Copyright 1991-92 by Iain Lea
  9.  *              You may  freely  copy or  redistribute  this software,
  10.  *              so  long as there is no profit made from its use, sale
  11.  *              trade or  reproduction.  You may not change this copy-
  12.  *              right notice, and it must be included in any copy made
  13.  */
  14.  
  15. #include    "tin.h"
  16. #include    "nntplib.h"
  17.  
  18. #ifdef BSD
  19. #    ifdef apollo
  20. #        include    </bsd4.3/usr/include/netdb.h>
  21. #    else
  22. #        include    <netdb.h>
  23. #    endif
  24. #endif
  25.  
  26.  
  27. int submit_inews (name)
  28.     char *name;
  29. {
  30.     int    ret_code = FALSE;
  31.  
  32. #if !defined(INDEX_DAEMON) && !defined(XSPOOLDIR)
  33.  
  34. #ifdef NNTP_INEWS
  35.     char    from_name[256];
  36.     char    host_name[128];
  37.     char    line[NNTP_STRLEN];
  38.     FILE    *fp;
  39.     int    len = 0;
  40.     int    respcode;
  41.  
  42.     if ((fp = fopen (name, "r")) == NULL) {
  43.         return (ret_code);
  44.     }
  45.  
  46.     /*
  47.      * Send POST command to NNTP server
  48.      */
  49.     put_server ("post");
  50.  
  51.     /*
  52.      * Receive CONT_POST or ERROR response code from NNTP server
  53.      */
  54.     if ((respcode = get_respcode ()) != CONT_POST) {
  55.         error_message ("%s", nntp_respcode (respcode));
  56.         debug_nntp ("submit_inews", nntp_respcode (respcode));
  57.         return (ret_code);
  58.     }
  59.  
  60.     get_host_name (host_name);    
  61.     get_from_name (from_name);
  62.     
  63.     /*
  64.      * Send Path: and From: article headers
  65.      */
  66. #ifdef NNTP_INEWS_GATEWAY
  67.     sprintf (line, "Path: %s", userid);
  68. #else
  69.     sprintf (line, "Path: %s!%s", host_name, userid);
  70. #endif    
  71.     put_server (line);
  72.     sprintf (line, "From: %s", from_name);
  73.     put_server (line);
  74.  
  75.     /*
  76.      * Send article 1 line at a time ending with "."
  77.      */
  78.     while (fgets (line, sizeof (line), fp) != NULL) {
  79.         len = strlen (line);
  80.         line[len-1] = '\0';
  81.         fprintf (ser_wr_fp, "%s\r\n", line);
  82.     }
  83.     
  84.     put_server (".");
  85.  
  86.     /*
  87.      * Receive OK_POSTED or ERROR response code from NNTP server
  88.      */
  89.     if ((respcode = get_respcode ()) != OK_POSTED) {
  90.         error_message ("%s", nntp_respcode (respcode));
  91.         debug_nntp ("submit_inews", nntp_respcode (respcode));
  92.         return (ret_code);
  93.       }
  94.       
  95.     ret_code = TRUE;
  96.  
  97. #endif /* NNTP_ABLE */
  98.  
  99. #endif /* INDEX_DAEMON */
  100.  
  101.     return (ret_code);
  102. }
  103.  
  104. /*
  105.  * Find real hostname / substitute hostname if news gateway name 
  106.  */
  107.  
  108. void get_host_name (host_name)
  109.     char *host_name;
  110. {
  111. #ifndef INDEX_DAEMON
  112.  
  113. #ifdef NNTP_INEWS_GATEWAY
  114.     strcpy (host_name, NNTP_INEWS_GATEWAY);
  115. #else
  116.     char host[256];
  117.  
  118. #    if defined(BSD) || defined(sinix) || defined(RS6000) || defined(HPUX)
  119.     {
  120.         struct hostent *host_entry;
  121.  
  122.         gethostname (host, sizeof (host)); 
  123.         host_entry = gethostbyname (host);
  124.         my_strncpy (host, host_entry->h_name, sizeof (host)); 
  125.     }    
  126. #    else    
  127.     {
  128.         struct utsname uts_name;
  129.  
  130.         uname (&uts_name);
  131.         my_strncpy (host, uts_name.nodename, sizeof (host));
  132.     }
  133. #    endif
  134.  
  135.     strcpy (host_name, host);
  136. #endif
  137.  
  138. #endif /* INDEX_DAEMON */
  139. }
  140.  
  141. /*
  142.  * Find users & hosts name
  143.  */
  144.  
  145. void get_from_name (from_name)
  146.     char *from_name;
  147. {
  148. #ifndef INDEX_DAEMON
  149.  
  150.     char full_name[128];
  151.     char host_name[256];
  152.     char *ptr;
  153.     
  154.     if ((ptr = (char *) getenv ("NAME")) != (char *) 0) {
  155.         my_strncpy (full_name, ptr, sizeof (full_name));
  156.     } else {    
  157.         my_strncpy (full_name, myentry->pw_gecos, sizeof (full_name));
  158.         if ((ptr = (char *) strchr (full_name, ','))) {
  159.             *ptr = '\0';            
  160.         }
  161.     }
  162.  
  163.     get_host_name (host_name);
  164.  
  165. #ifdef NNTP_INEWS_DOMAIN
  166.     sprintf (from_name, "%s@%s%s (%s)",
  167.         userid, host_name, NNTP_INEWS_DOMAIN, full_name);
  168. #else    
  169.     sprintf (from_name, "%s@%s (%s)", userid, host_name, full_name);
  170. #endif
  171.  
  172.     if (debug == 2) {
  173.         error_message ("FROM: %s", from_name);
  174.     }    
  175.  
  176. #endif /* INDEX_DAEMON */
  177. }
  178.