[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: default ungziped /usr/doc/*/* ?



>I am wondering about way to grep or to view with editor /usr/doc/*/* files.
>Of course, these files are gziped, according to debian policy.
>Is there any way to choose to install these docs in ungziped as default?
>I can ungzip these, but also want to leave these under control of package 
>manager.

I am uploading here a small, hackish perl script that, along with some
apache configuration changes, will allow you to view the compressed
files in http://your-machine/doc as if they were not comrpessed.

This issue was a real annoyance to me, which is why I had written this.

Note that you HAVE to use the webserver for my hack to work - you cannot
cd to the directory and run lynx on the inidividual file.

There are two issues that this resolves:

  1) when you attempt to fetch a compressed html or
     text file, this will uncompress the file, drunkenly guess the
     content-type, and send it to your browser.

  2) When you click on a link, the browser requests a .html file
     which doesn't exist.  So you configure apache to send such
     errors to this script, which attempts to correct for them.

    I am able to browse several compresses files, and click on links to
    move between them, on my local machine, with the browser
    unaware that the files are compressed.

    This is all a small hack, don't take it too seriously or expect it
    to work all the time.  Use at your own risk.

  Steps:

  1) as root, edit /etc/apache/httpd.conf and uncomment the following line:

  LoadModule action_module /usr/lib/apache/1.3/mod_actions.so 

  2) as root, edit /etc/apache/access.conf, and make your 
     <Directory /usr/doc> look like this:

 
  <Directory /usr/doc>
  Options Indexes FollowSymLinks
  AllowOverride None
  order allow,deny
  allow from all
  Action doc /cgi-bin/doc
  AddHandler doc .gz
  AddHandler doc .Z
  ErrorDocument 404 /cgi-bin/doc
  </Directory>  

  3) now, put the following script into /usr/lib/cgi-bin/doc
     and chmod it to 755.

   NOTE: While I hope that this script is reasonably secure, 
   I can't make any promises.  Use it at your own risk, or  
   better yet have someone knowledgable read over it and give 
   you their opinion.  

--begin /usr/lib/cgi-bin/doc

#!/usr/bin/perl
# A small hack by Carl Mummert <mummert@cs.wcu.edu> to
# auto-gunzip compressed html files in /usr/doc
#
# I release this to the public domain; 
# do whatever you want with it.

#damn buffering
select STDOUT;
$| = 1;

# the filename comes in different vars
# depending on whether this is a 
# 404 or not

if ( ! defined $ENV{'PATH_TRANSLATED'} )
{
  if ( defined $ENV{'REDIRECT_URL'} )
  {
    $path = $ENV{'REDIRECT_URL'};
  } else {
    print "content-type: text/plain\n\n\n";
    print "internal error, sorry.\n";
    exit 0;
  }
} else {
  $path = $ENV{'PATH_TRANSLATED'};
}

# silly attempt to remove '..' from path
$path =~ s/\.\.//g;

# kill tag names from filenames
($path, $rest) = split /#/, $path, 2;

#ensure that we aren't trying to go somewhere else...
if ( $path !~ m!^/usr/doc! )  #uncompress looks like this
{
  if ( $path =~ m!^/doc! ) # 404 looks like this
  {
    $path = "/usr$path";
  } else {
    print "content-type: text/plain\n\n";
    print "Error: invalid location $path\n";
    exit 0;
  }
}

# is this a compressed file being fetched as if it's uncompressed?
if ( (! -r $path) && ( -r "$path.gz") )
{
  $path = "$path.gz";
}

if (! -r $path )
{
  print "content-type: text/plain\n\n\n";
  print "Error: cannot read $path\n";
}


#drunkenly guess content-type
if ( $path =~ /html?\.((gz)|z)$/i )
{
  print "content-type: text/html\n\n\n";
} else {
  print "content-type: text/plain\n\n\n";
}

print "<!-- Uncompressed from $path --> \n";

#hopefully gzip is secure...
exec "/bin/gzip", "-dc", "$path";

--end /usr/lib/cgi-bin.doc


Reply to: