martin      98/01/26 10:24:40

  Modified:    .        STATUS
               htdocs/manual/mod core.html directives.html
               src/main http_core.c http_core.h http_protocol.c httpd.h
               src/modules/proxy proxy_ftp.c
               src/modules/standard mod_autoindex.c mod_info.c mod_status.c
  Log:
  Server-generated pages can be server-signed now (new directive)
  
  Revision  Changes    Path
  1.130     +3 -4      apachen/STATUS
  
  Index: STATUS
  ===================================================================
  RCS file: /home/cvs/apachen/STATUS,v
  retrieving revision 1.129
  retrieving revision 1.130
  diff -u -u -r1.129 -r1.130
  --- STATUS    1998/01/26 16:46:05     1.129
  +++ STATUS    1998/01/26 18:24:25     1.130
  @@ -1,3 +1,5 @@
  +
  +
   Apache 1.3 STATUS:
   
   Release:
  @@ -135,6 +137,7 @@
       * more mod_mime_magic cleanup
       * Add more compile time diagnosis to main's -V switch
       * [Port] Fix CGI-Execution for EBCDIC hosts.
  +    * Martin's [PATCH] "Signing" server generated pages
   
   Available Patches:
   
  @@ -142,10 +145,6 @@
       * M.D.Parker's [PATCH] mod_status/1448: Status Information have version
        <[EMAIL PROTECTED]>
        Status: Dean +1, Martin +1, Alexei -1 (shared lib concerns)
  -
  -    * Martin's [PATCH] "Signing" server generated pages
  -     <[EMAIL PROTECTED]>
  -     Status: Martin +1, Roy 0, 
   
   Concepts:
   
  
  
  
  1.93      +27 -0     apachen/htdocs/manual/mod/core.html
  
  Index: core.html
  ===================================================================
  RCS file: /home/cvs/apachen/htdocs/manual/mod/core.html,v
  retrieving revision 1.92
  retrieving revision 1.93
  diff -u -u -r1.92 -r1.93
  --- core.html 1998/01/26 16:54:02     1.92
  +++ core.html 1998/01/26 18:24:26     1.93
  @@ -74,6 +74,7 @@
   <LI><A HREF="#servername">ServerName</A>
   <LI><A HREF="#serverpath">ServerPath</A>
   <LI><A HREF="#serverroot">ServerRoot</A>
  +<LI><A HREF="#serversignature">ServerSignature</A>
   <LI><A HREF="#servertype">ServerType</A>
   <LI><A HREF="#startservers">StartServers</A>
   <LI><A HREF="#threadsperchild">ThreadsPerChild</A>
  @@ -1584,6 +1585,32 @@
   See also <A HREF="../invoking.html">the <CODE>-d</CODE> option to 
httpd</A>.<P>
   See also <A HREF="../misc/security_tips.html#serverroot">the security 
tips</A>
   for information on how to properly set permissions on the ServerRoot.<P>
  +
  +<HR>
  +
  +<H2><A name="serversignature">ServerSignature directive</A></h2>
  +<!--%plaintext &lt;?INDEX {\tt ServerSignature} directive&gt; -->
  +<strong>Syntax:</strong> ServerSignature <em>Off | On | EMail</em><br>
  +<strong>Default:</strong> <code>ServerSignature Off</code><br>
  +<strong>Context:</strong> directory, .htaccess<br>
  +<strong>Status:</strong> core<p>
  +<strong>Compatibility:</strong> ServerSignature is only available in Apache
  +1.3 and later.<p>
  +
  +The ServerSignature directive allows the configuration of a trailing
  +footer line under server-generated documents (error messages,
  +mod_proxy ftp directory listings, mod_info output, ...). The reason
  +why you would want to enable such a footer line is that in a chain
  +of proxies, the user often has no possibility to tell which of the
  +chained servers actually produced a returned error message.<br>
  +The <samp>Off</samp> setting, which is the default, suppresses the
  +error line (and is therefore compatible with the behavior of
  +Apache-1.2 and below). The <samp>On</samp> setting simply adds a
  +line with the server version number and <A
  +HREF="#servername">ServerName</A> of the serving virtual host, and
  +the <samp>EMail</samp> setting additionally creates a "mailto:";
  +reference to the <A HREF="#serveradmin">ServerAdmin</A> of the
  +referenced document.
   
   <HR>
   
  
  
  
  1.37      +1 -0      apachen/htdocs/manual/mod/directives.html
  
  Index: directives.html
  ===================================================================
  RCS file: /home/cvs/apachen/htdocs/manual/mod/directives.html,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -u -r1.36 -r1.37
  --- directives.html   1998/01/26 16:54:02     1.36
  +++ directives.html   1998/01/26 18:24:27     1.37
  @@ -180,6 +180,7 @@
   <LI><A HREF="core.html#servername">ServerName</A>
   <LI><A HREF="core.html#serverpath">ServerPath</A>
   <LI><A HREF="core.html#serverroot">ServerRoot</A>
  +<LI><A HREF="core.html#serversignature">ServerSignature</A>
   <LI><A HREF="core.html#servertype">ServerType</A>
   <LI><A HREF="mod_env.html#setenv">SetEnv</A>
   <LI><A HREF="mod_setenvif.html#setenvif">SetEnvIf</A>
  
  
  
  1.149     +39 -0     apachen/src/main/http_core.c
  
  Index: http_core.c
  ===================================================================
  RCS file: /home/cvs/apachen/src/main/http_core.c,v
  retrieving revision 1.148
  retrieving revision 1.149
  diff -u -u -r1.148 -r1.149
  --- http_core.c       1998/01/26 16:46:09     1.148
  +++ http_core.c       1998/01/26 18:24:31     1.149
  @@ -1160,6 +1160,21 @@
       return NULL;
   }
   
  +const char *set_signature_flag (cmd_parms *cmd, core_dir_config *d, char 
*arg) {
  +    const char *err = check_cmd_context(cmd, NOT_IN_LIMIT);
  +    if (err != NULL) return err;
  +
  +    if (strcasecmp(arg, "On") == 0)
  +     d->server_signature = srv_sig_on;
  +    else if (strcasecmp(arg, "Off") == 0)
  +     d->server_signature = srv_sig_off;
  +    else if (strcasecmp(arg, "EMail") == 0)
  +     d->server_signature = srv_sig_withmail;
  +    else
  +     return "ServerSignature: use one of: off | on | email";
  +    return NULL;
  +}
  +
   const char *set_send_buffer_size (cmd_parms *cmd, void *dummy, char *arg) {
       int s = atoi (arg);
       const char *err = check_cmd_context(cmd, GLOBAL_ONLY);
  @@ -1616,6 +1631,28 @@
      return NULL;
   }
   
  +const char *psignature(const char *prefix, request_rec *r)
  +{
  +    char sport[20];
  +    core_dir_config *conf =
  +    (core_dir_config *) get_module_config(r->per_dir_config, &core_module);
  +
  +    if (conf->server_signature == srv_sig_off)
  +     return "";
  +
  +    ap_snprintf(sport, sizeof sport, "%u", (unsigned) r->server->port);
  +
  +    if (conf->server_signature == srv_sig_withmail) {
  +     return pstrcat(r->pool, prefix, "<ADDRESS>" SERVER_BASEVERSION
  +          " Server at <A HREF=\"mailto:";, r->server->server_admin, "\">",
  +                    r->server->server_hostname, "</A> Port ", sport,
  +                    "</ADDRESS>\n", NULL);
  +    }
  +    return pstrcat(r->pool, prefix, "<ADDRESS>" SERVER_BASEVERSION
  +          " Server at ", r->server->server_hostname, "</A> Port ", sport,
  +                "</ADDRESS>\n", NULL);
  +}
  +
   /*
    * Load an authorisation realm into our location configuration, applying the
    * usual rules that apply to realms.
  @@ -1686,6 +1723,8 @@
   { "ServerName", set_server_string_slot,
     (void *)XtOffsetOf (server_rec, server_hostname), RSRC_CONF, TAKE1,
     "The hostname of the server" },
  +{ "ServerSignature", set_signature_flag, NULL, ACCESS_CONF|RSRC_CONF, TAKE1,
  +  "En-/disable server signature (on|off|email)" },
   { "ServerRoot", set_server_root, NULL, RSRC_CONF, TAKE1, "Common directory 
of server-related files (logs, confs, etc)" },
   { "ErrorLog", set_server_string_slot,
     (void *)XtOffsetOf (server_rec, error_fname), RSRC_CONF, TAKE1,
  
  
  
  1.33      +1 -0      apachen/src/main/http_core.h
  
  Index: http_core.h
  ===================================================================
  RCS file: /home/cvs/apachen/src/main/http_core.h,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -u -r1.32 -r1.33
  --- http_core.h       1998/01/21 19:17:37     1.32
  +++ http_core.h       1998/01/26 18:24:32     1.33
  @@ -194,6 +194,7 @@
   #endif
   
       /* logging options */
  +    enum { srv_sig_off, srv_sig_on, srv_sig_withmail } server_signature;
       int loglevel;
       
       /* Access control */
  
  
  
  1.180     +1 -0      apachen/src/main/http_protocol.c
  
  Index: http_protocol.c
  ===================================================================
  RCS file: /home/cvs/apachen/src/main/http_protocol.c,v
  retrieving revision 1.179
  retrieving revision 1.180
  diff -u -u -r1.179 -r1.180
  --- http_protocol.c   1998/01/26 16:46:10     1.179
  +++ http_protocol.c   1998/01/26 18:24:33     1.180
  @@ -2181,6 +2181,7 @@
                      "\nerror was encountered while trying to use an "
                      "ErrorDocument to handle the request.\n", NULL);
           }
  +     bputs(psignature("<HR>\n", r), fd);
           bputs("</BODY></HTML>\n", fd);
       }
       kill_timeout(r);
  
  
  
  1.177     +2 -0      apachen/src/main/httpd.h
  
  Index: httpd.h
  ===================================================================
  RCS file: /home/cvs/apachen/src/main/httpd.h,v
  retrieving revision 1.176
  retrieving revision 1.177
  diff -u -u -r1.176 -r1.177
  --- httpd.h   1998/01/22 23:23:41     1.176
  +++ httpd.h   1998/01/26 18:24:34     1.177
  @@ -947,4 +947,6 @@
   #define RAISE_SIGSTOP(x)
   #endif
   
  +extern const char *psignature(const char *prefix, request_rec *r);
  +
   #endif       /* !APACHE_HTTPD_H */
  
  
  
  1.47      +18 -4     apachen/src/modules/proxy/proxy_ftp.c
  
  Index: proxy_ftp.c
  ===================================================================
  RCS file: /home/cvs/apachen/src/modules/proxy/proxy_ftp.c,v
  retrieving revision 1.46
  retrieving revision 1.47
  diff -u -u -r1.46 -r1.47
  --- proxy_ftp.c       1998/01/21 22:02:39     1.46
  +++ proxy_ftp.c       1998/01/26 18:24:36     1.47
  @@ -379,11 +379,23 @@
            o += w;
        }
       }
  -    strcpy (buf, "</PRE><HR></BODY></HTML>\n");
  -    bputs(buf, con->client);
  +    site = "</PRE><HR>\n";
  +    bputs(site, con->client);
       if (f2 != NULL)
  -     bputs(buf, f2);
  -    total_bytes_sent += strlen(buf);
  +     bputs(site, f2);
  +    total_bytes_sent += strlen(site);
  +
  +    site = psignature("", r);
  +    bputs(site, con->client);
  +    if (f2 != NULL)
  +     bputs(site, f2);
  +    total_bytes_sent += strlen(site);
  +
  +    site = "</BODY></HTML>\n";
  +    bputs(site, con->client);
  +    if (f2 != NULL)
  +     bputs(site, f2);
  +    total_bytes_sent += strlen(site);
       bflush(con->client);
   
       return total_bytes_sent;
  @@ -1033,6 +1045,8 @@
       if (pasvmode)
        bclose(data);
       bclose(f);
  +
  +    rflush(r);       /* flush before garbage collection */
   
       proxy_garbage_coll(r);
   
  
  
  
  1.63      +4 -2      apachen/src/modules/standard/mod_autoindex.c
  
  Index: mod_autoindex.c
  ===================================================================
  RCS file: /home/cvs/apachen/src/modules/standard/mod_autoindex.c,v
  retrieving revision 1.62
  retrieving revision 1.63
  diff -u -u -r1.62 -r1.63
  --- mod_autoindex.c   1998/01/20 18:48:42     1.62
  +++ mod_autoindex.c   1998/01/26 18:24:37     1.63
  @@ -1111,9 +1111,11 @@
       pclosedir(r->pool, d);
   
       if ((tmp = find_readme(autoindex_conf, r))) {
  -     insert_readme(name, tmp, "",
  +     if (!insert_readme(name, tmp, "",
                         ((autoindex_opts & FANCY_INDEXING) ? HRULE : NO_HRULE),
  -                      END_MATTER, r);
  +                      END_MATTER, r)) {
  +         rputs(psignature("<HR>\n", r), r);
  +     }
       }
       rputs("</BODY></HTML>\n", r);
   
  
  
  
  1.34      +3 -1      apachen/src/modules/standard/mod_info.c
  
  Index: mod_info.c
  ===================================================================
  RCS file: /home/cvs/apachen/src/modules/standard/mod_info.c,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -u -r1.33 -r1.34
  --- mod_info.c        1998/01/07 16:46:51     1.33
  +++ mod_info.c        1998/01/26 18:24:38     1.34
  @@ -627,7 +627,9 @@
               }
           }
       }
  -    rputs("</dl></body></html>\n", r);
  +    rputs("</dl>\n", r);
  +    rputs(psignature("",r), r);
  +    rputs("</body></html>\n", r);
       /* Done, turn off timeout, close file and return */
       kill_timeout(r);
       return 0;
  
  
  
  1.71      +3 -1      apachen/src/modules/standard/mod_status.c
  
  Index: mod_status.c
  ===================================================================
  RCS file: /home/cvs/apachen/src/modules/standard/mod_status.c,v
  retrieving revision 1.70
  retrieving revision 1.71
  diff -u -u -r1.70 -r1.71
  --- mod_status.c      1998/01/07 16:46:57     1.70
  +++ mod_status.c      1998/01/26 18:24:39     1.71
  @@ -637,8 +637,10 @@
   
   #endif /* STATUS */
   
  -    if (!short_report)
  +    if (!short_report) {
  +     rputs(psignature("<HR>\n",r), r);
        rputs("</BODY></HTML>\n", r);
  +    }
   
       kill_timeout(r);
       return 0;
  
  
  

Reply via email to