<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">










<html>
  <head>
    <title>James Server - 
  James 2.3 - Configuring the NNTP Service</title>
    <style type="text/css" media="all">
      @import url("./css/maven-base.css");
      @import url("./css/maven-theme.css");
      @import url("./css/site.css");
    </style>
    <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
      </head>
  <body class="composite">
    <div id="banner">
                  <a href="http://james.apache.org/index.html" id="bannerLeft">
    
                                            <img src="images/james-server-logo.gif" alt="" />
    
            </a>
                        <a href="http://www.apache.org/index.html" id="bannerRight">
    
                                            <img src="images/asf-logo-reduced.gif" alt="" />
    
            </a>
            <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
          
  

  
    
  
  
            <div class="xleft">
        Last Published: 04/19/2007
                      </div>
            <div class="xright">      <a href="../../index.html">JAMES Project</a>
          |
          <a href="../../server/index.html">Server</a>
          |
          <a href="../../jspf/index.html">jSPF</a>
          |
          <a href="../../mime4j/index.html">Mime4J</a>
          |
          <a href="../../jsieve/index.html">JSieve</a>
          |
          <a href="../../postage/index.html">Postage</a>
          
  

  
    
  
  
  </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
           
  

  
    
  
  
                   <h5>James Server</h5>
        <ul>
              
    <li class="none">
              <a href="../index.html">Overview</a>
        </li>
              
    <li class="none">
              <a href="../design_objectives.html">Objectives</a>
        </li>
              
          
              
      
              
        <li class="expanded">
              <a href="../FAQ.html">James FAQ</a>
                <ul>
                  
    <li class="none">
              <a href="../james_and_sendmail.html">James and Sendmail</a>
        </li>
              </ul>
        </li>
              
    <li class="none">
              <a href="http://wiki.apache.org/james">Wiki</a>
        </li>
              
    <li class="none">
              <a href="../rfclist.html">Useful RFCs</a>
        </li>
          </ul>
          <h5>Concepts</h5>
        <ul>
              
    <li class="none">
              <a href="summary.html">Summary</a>
        </li>
              
    <li class="none">
              <a href="spoolmanager.html">SpoolManager</a>
        </li>
              
    <li class="none">
              <a href="repositories.html">Repositories</a>
        </li>
              
    <li class="none">
              <a href="mailet_api.html">The Mailet API</a>
        </li>
          </ul>
          <h5>How to...</h5>
        <ul>
              
    <li class="none">
              <a href="build_instructions.html">Build James</a>
        </li>
              
    <li class="none">
              <a href="installation_instructions.html">Install James</a>
        </li>
          </ul>
          <h5>Configuration</h5>
        <ul>
              
    <li class="none">
              <a href="dns_configuration.html">DNS Server</a>
        </li>
              
    <li class="none">
              <a href="pop3_configuration.html">POP3 Server</a>
        </li>
              
    <li class="none">
              <a href="smtp_configuration.html">SMTP Server</a>
        </li>
              
    <li class="none">
              <strong>NNTP Server</strong>
        </li>
              
    <li class="none">
              <a href="fetchmail_configuration.html">FetchMail</a>
        </li>
              
    <li class="none">
              <a href="remotemanager_configuration.html">RemoteManager</a>
        </li>
              
    <li class="none">
              <a href="spoolmanager_configuration.html">SpoolManager</a>
        </li>
              
    <li class="none">
              <a href="serverwide_configuration.html">Server-wide</a>
        </li>
              
    <li class="none">
              <a href="adding_users.html">Adding Users</a>
        </li>
              
    <li class="none">
              <a href="provided_matchers.html">Provided Matchers</a>
        </li>
              
    <li class="none">
              <a href="provided_mailets.html">Provided Mailets</a>
        </li>
          </ul>
          <h5>Common Configurations</h5>
        <ul>
              
    <li class="none">
              <a href="smtp_auth.html">Using SMTP AUTH</a>
        </li>
              
    <li class="none">
              <a href="using_database.html">Using a Database with James</a>
        </li>
              
    <li class="none">
              <a href="usingTLS.html">Using TLS/SSL</a>
        </li>
              
    <li class="none">
              <a href="mailing_lists.html">Creating Mailing Lists</a>
        </li>
          </ul>
          <h5>Customization</h5>
        <ul>
              
    <li class="none">
              <a href="custom_matcher.html">How to write a custom Matcher</a>
        </li>
              
    <li class="none">
              <a href="custom_mailet.html">How to write a custom Mailet</a>
        </li>
          </ul>
          <h5>Project</h5>
        <ul>
              
    <li class="none">
              <a href="changelog.html">Changelog</a>
        </li>
          </ul>
          <h5>Project Documentation</h5>
        <ul>
              
                
              
      
            
      
            
      
            
      
            
      
            
      
            
      
            
      
              
        <li class="collapsed">
              <a href="project-info.html">Project Information</a>
              </li>
              
                
              
      
            
      
            
      
            
      
              
        <li class="collapsed">
              <a href="project-reports.html">Project Reports</a>
              </li>
          </ul>
          <h5>Project</h5>
        <ul>
              
    <li class="none">
              <a href="http://issues.apache.org/jira/browse/JAMES">Bug Database</a>
        </li>
              
    <li class="none">
              <a href="http://svn.apache.org/viewvc/james/server/">Source Code</a>
        </li>
              
    <li class="none">
              <a href="../todo.html">TODO</a>
        </li>
          </ul>
          <h5>Downloads</h5>
        <ul>
              
    <li class="none">
              <a href="../../download.cgi">Stable releases</a>
        </li>
              
    <li class="none">
              <a href="../../downloadunstable.cgi">Unstable releases</a>
        </li>
              
    <li class="none">
              <a href="http://people.apache.org/builds/james/nightly/">Nightly builds</a>
        </li>
          </ul>
                                       <a href="http://maven.apache.org/" title="Built by Maven" id="poweredBy">
            <img alt="Built by Maven" src="./images/logos/maven-feather.png"></img>
          </a>
                       
  

  
    
  
  
        </div>
    </div>
    <div id="bodyColumn">
      <div id="contentBox">
        

 


<a name="NNTP Configuration"></a><div class="section"><h2>NNTP Configuration</h2>
<p>The NNTP service is controlled by a two configuration blocks in the config.xml.  These are the nntpserver block and the nntp-repository block.</p>
<a name="The nntpserver block"></a><div class="section"><h3>The nntpserver block</h3>
<p>The nntpserver tag defines the boundaries of the configuration block.  It encloses 
much of the relevant configuration for the NNTP server.</p>

<p>This tag has an optional boolean attribute - <strong>enabled</strong> - that defines whether the service is active or not.  The value defaults to &quot;true&quot; if
not present.</p>
<p>The standard children of the nntpserver tag are:</p>
<ul>
<li><strong>port</strong> - This is an optional integer value.  This value is the port on which this NNTP server is configured 
to listen.If the tag or value is omitted, the value will default to the standard NNTP port, 119.</li>
<li><strong>bind</strong> - This is an optional value.  If present, this value is a string describing 
the IP address to which this service should be bound.  If the tag or value is absent then the service 
will bind to all network interfaces for the machine.</li>
<li><strong>useTLS</strong> - This is an optional boolean value.  If this value is true, then the &quot;ssl&quot;
server socket factory is used to generate the server socket for this service.  If it is false, the 
&quot;plain&quot; server socket factory is used.  In either case this behavior is overridden by the serverSocketType 
tag which is described under the expert configuration options.</li>
<li><strong>handler</strong> - This is an artifact preserved for backwards compatibility.  This tag 
was used to group related parameters.  It should disappear in future versions.</li>
<ul>
<li><strong>helloName</strong> - This is a required tag with an optional body that defines the server name 
used in the initial service greeting.  The tag may have an optional attribute - <strong>autodetect</strong>.  If 
the autodetect attribute is present and true, the service will use the local hostname
returned by the Java libraries.  If autodetect is absent or false, the body of the tag will be used.  In
this case, if no body is present, the value &quot;localhost&quot; will be used.</li>
<li><strong>connectionTimeout</strong> - This is an optional tag with a non-negative integer body.  </li>
<li><strong>authRequired</strong> - This is an optional tag with a boolean body.  If true, then the server will 
require authentication before allowing the client to view news articles.  If this tag is absent, or the value 
is false then the client will not be prompted for authentication.  Only simple user/password authentication is
supported at this time.</li>
</ul>
</ul>
There are a few additional children of the nntpserver tag that are appropriate for advanced 
configurations.  These should only be used by expert administrators.  All tags in this group are optional.
<ul>
<li><strong>serverSocketFactory</strong> - This is an optional tag with a string body.  If the tag is present, 
the body must be the name of one of the server socket factories specified in the socket manager block.  Any other 
value will result in an error.  If present, this tag overrides the useTLS tag.</li>
<li><strong>threadGroup</strong> - This is an optional tag with a string body.  If the tag is present, 
the body must be the name of one of the thread groups specified in the thread manager block.  Any other 
value will result in an error.  This tag is best used to fine tune thread allocation between the services.</li>
<li><strong>connectionLimit</strong> - The connectionLimit parameter specifies the maximum number of client 
connections that this service will allow.  If no value is specified, the value defaults to that specified in 
the connectionmanager block.  A value of 0 means that there is no limit imposed 
by the service, although resource limitations imposed by other components 
(i.e. max # of threads) may serve to limit the number of open connections.</li>
</ul>
</div>
<a name="The nntp-repository block"></a><div class="section"><h3>The nntp-repository block</h3>
The remainder of the NNTP service configuration is controlled by the nntp-repository configuration block.  This
section of configuration data relates to the server-side NNTP article repository.
<ul>
<li><strong>readOnly</strong> - This is a required boolean tag.  If the value is true, posting will not be 
permitted by the NNTP server.</li>
<li><strong>rootPath</strong> - This is a required string tag.  It must be in the form of a URL with a &quot;file:&quot; prefix.  This 
specifies the root directory for the NNTP repository.  Groups hosted on the NNTP server will be represented as 
folders under this root, and articles will be stored in the appropriate folders.</li>
<li><strong>tempPath</strong> - This is a required string tag.  It must be in the form of a URL with a &quot;file:&quot; prefix.  This 
specifies the directory where the NNTP server will store posted articles before they are added to the spool.</li>
<li><strong>articleIDPath</strong> - This is a required string tag.  It must be in the form of a URL with a &quot;file:&quot; prefix.  This 
specifies the directory where the NNTP server will store the mappings between article ID and the groups containing that article.</li>
<li><strong>articleIDDomainSuffix</strong> - This is a required string tag.  It is the suffix appended to all article IDs generated
by this NNTP server.</li>
<li><strong>newsgroups</strong> - This is a required container tag.  It has a single <strong>newsgroup</strong> child for each newsgroup 
hosted on the server.  The body of each of those <strong>newsgroup</strong> tags is the name of the newsgroup.</li>
</ul>
</div>
</div>


      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">&#169;  
          2002-2007
    
          The Apache Software Foundation
          
  

  
    
  
  
  </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
    </script>
    <script type="text/javascript">
      _uacct = "UA-1384591-1";
      urchinTracker();
    </script>
  </body>
</html>
