Re: [PATCH 40026] ServerTokens Off

2006-08-20 Thread Rasmus Lerdorf

Sebastian Nohn wrote:

I fear that many users of Apache would actually turn off the
Server header for no or for the wrong reasons (which may harm our
market share), and therefore I'm -1 on including this patch.


It would not change apaches market share. If you are talking about
netcraft (and similar stats): I personally think, ego is a bad reason
for constricting people.


We have had a config option in PHP for years to completely hide the fact 
that a site is using PHP.  I don't think it has hurt us in any way. 
Sure, our Netcraft numbers would probably be higher without it and 
occasionally we see a dip due to some large site turning it off, but 
isn't this all about writing useful software and not about marketing 
gimmicks?


-Rasmus


Re: [VOTE] Apache HTTP Server 1.3.36 Candidate

2006-05-14 Thread Rasmus Lerdorf

Jim Jagielski wrote:

Please test and vote on releasing Apache httpd 1.3.36

Download from:
http://httpd.apache.org/dev/dist/

Changes:
http://httpd.apache.org/dev/dist/CHANGES_1.3


Works ok on Debian-unstable with the standard set of Debian patches 
applied.  It might be time to roll in this ndbm patch to fix 
mod_auth_dbm and mod_rewrite on Debian and Redhat.


diff -Naurd build-tree.ORIG/apache_1.3.34/src/helpers/find-dbm-lib 
build-tree/apache_1.3.34/src/helpers/find-dbm-lib
--- build-tree.ORIG/apache_1.3.34/src/helpers/find-dbm-lib 
2002-01-22 08:39:15.0 +0100
+++ build-tree/apache_1.3.34/src/helpers/find-dbm-lib   2003-06-29 
09:46:15.0 +0200

@@ -13,16 +13,19 @@
*-linux*)
# many systems don't have -ldbm
DBM_LIB=
-   if ./helpers/TestCompile lib ndbm dbm_open; then
+   if ./helpers/TestCompile lib db __db_ndbm_open; then
+   DBM_LIB=-ldb
+   CFLAGS=$CFLAGS -DDB_DBM_HSEARCH=1
+   elif ./helpers/TestCompile lib db1 dbm_open; then
+   # For Red Hat 7, if not handled by the ndbm case above
+   DBM_LIB=-ldb1
+   CFLAGS=$CFLAGS -I/usr/include/db1
+   elif ./helpers/TestCompile lib ndbm dbm_open; then
DBM_LIB=-lndbm
if ./helpers/TestCompile lib db1 dbm_open; then
# Red Hat needs this; ndbm.h lives in db1
CFLAGS=$CFLAGS -I/usr/include/db1
fi
-   elif ./helpers/TestCompile lib db1 dbm_open; then
-   # For Red Hat 7, if not handled by the ndbm case above
-   DBM_LIB=-ldb1
-   CFLAGS=$CFLAGS -I/usr/include/db1
 elif ./helpers/TestCompile lib gdbm dbm_open; then
 DBM_LIB=-lgdbm
 CFLAGS=$CFLAGS -I/usr/include/gdbm
diff -Naurd 
build-tree.ORIG/apache_1.3.34/src/modules/standard/mod_auth_dbm.c 
build-tree/apache_1.3.34/src/modules/standard/mod_auth_dbm.c
--- build-tree.ORIG/apache_1.3.34/src/modules/standard/mod_auth_dbm.c 
2002-03-13 22:05:33.0 +0100
+++ build-tree/apache_1.3.34/src/modules/standard/mod_auth_dbm.c 
2003-06-29 09:46:15.0 +0200

@@ -81,8 +81,15 @@
 #define dbm_fetch sdbm_fetch
 #define dbm_close sdbm_close
 #else
+#ifndef DB_DBM_HSEARCH
+#define DB_DBM_HSEARCH 0
+#endif
+#if DB_DBM_HSEARCH != 0
+#include db.h
+#else
 #include ndbm.h
 #endif
+#endif

 /*
  * Module definition information - the part between the -START and -END
diff -Naurd 
build-tree.ORIG/apache_1.3.34/src/modules/standard/mod_rewrite.h 
build-tree/apache_1.3.34/src/modules/standard/mod_rewrite.h
--- build-tree.ORIG/apache_1.3.34/src/modules/standard/mod_rewrite.h 
2002-03-13 22:05:34.0 +0100
+++ build-tree/apache_1.3.34/src/modules/standard/mod_rewrite.h 
2003-06-29 09:46:15.0 +0200

@@ -130,7 +130,14 @@
  * so we also need to know the file extension
  */
 #ifndef NO_DBM_REWRITEMAP
+#ifndef DB_DBM_HSEARCH
+#define DB_DBM_HSEARCH 0
+#endif
+#if DB_DBM_HSEARCH != 0
+#include db.h
+#else
 #include ndbm.h
+#endif
 #if defined(DBM_SUFFIX)
 #define NDBM_FILE_SUFFIX DBM_SUFFIX
 #elif defined(__FreeBSD__) || (defined(DB_LOCK)  defined(DB_SHMEM))
diff -Naurd 
build-tree.ORIG/apache-contrib-1.0.8a/mod_eaccess/mod_eaccess.c 
build-tree/apache-contrib-1.0.8a/mod_eaccess/mod_eaccess.c
--- build-tree.ORIG/apache-contrib-1.0.8a/mod_eaccess/mod_eaccess.c 
2001-03-05 13:30:48.0 +0100
+++ build-tree/apache-contrib-1.0.8a/mod_eaccess/mod_eaccess.c 
2003-06-29 09:49:04.0 +0200

@@ -263,11 +263,11 @@
 #include util_md5.h
 #include http_conf_globals.h
 #include utime.h
-#if defined (__GLIBC__) 
  \

-defined (__GLIBC_MINOR__)\
-__GLIBC__ = 2   \
-__GLIBC_MINOR__ = 1
-#include db1/ndbm.h
+#ifndef DB_DBM_HSEARCH
+#define DB_DBM_HSEARCH 0
+#endif
+#if DB_DBM_HSEARCH != 0
+#include db.h
 #else
 #include ndbm.h
 #endif

Would also be nice to get the Debian config.layout section in:

#   Debian GNU policy conforming path layout.
Layout Debian
prefix:/usr
exec_prefix:   $prefix
bindir:$prefix/bin
sbindir:   $prefix/lib+
libexecdir:$prefix/libexec
mandir:$prefix/share/man
sysconfdir:/etc+
datadir:   $prefix/lib
iconsdir:  $prefix/share/apache/icons
htdocsdir: $datadir/htdocs
cgidir:$datadir/cgi-bin
includedir:$prefix/include+
localstatedir: /var
runtimedir:$localstatedir/run
logfiledir:$localstatedir/log+
proxycachedir: $localstatedir/cache+
/Layout


Re: Laying undead myths to rest

2006-05-10 Thread Rasmus Lerdorf

William A. Rowe, Jr. wrote:

Joseph Dane wrote:

Joshua Slive [EMAIL PROTECTED] writes:


In very early versions of the Apache HTTP Server, the
directiveAddType/directive directive was also used to activate
special server-side processing (such as modulemod_include/module
or PHP) by assigning magic MIME types to files.  This  can create
problems in more recent versions and should be avoided in favor of
using the directiveAddHandler/directive directive./note


for the record (not necessarily for the docs) can you expand on the
sort of problems that might arise?


It actually avoids more problems than it creates, consider the 
example.php.txt
file, which if done with AddHandler will always run through the php 
handler,
while if done with mime types will devolve to text/plain through the 
standard

handler (which is what's implied by the filename ordering.)


Right, which is not what the average Joe expects.

Nick, these 's over here were actually around in 1996 when this was 
added and understand very well the difference between AddType and 
AddHandler.  The folks who understand the difference can of course use 
either, but for those who don't, AddType's behaviour is the one people 
understand.  If we asked people to go and change all their AddTypes to 
AddHandler it could actually cause a number of nasty security problems 
so we have no motivation to do that.


-Rasmus


Re: non-detaching httpd

2005-07-09 Thread Rasmus Lerdorf
Enrico Weigelt wrote:
 Hi folks,
 
 
 I'd like to stop httpd from detaching itself, so I can start
 it from init. 
 
 How can this be done ?

httpd -X  if you want a single non-forking non-detached process
httpd -F  if you just want the main process to be non-detached and still
  have it fork off children

-Rasmus


Re: Post-2.2 Thoughts

2005-05-07 Thread Rasmus Lerdorf
Paul Querna wrote:
 So, here is my short-list-made-up-this-afternoon of things I would like
 to look at doing after 2.2 is branched/released as GA.  I welcome
 additions too.
 
 1) Eliminate the HTTP in HTTPD.  I would like to be able to compile
 httpd with --disable-http.  Currently the 'http core' is half mangled
 with the 'core core'.
 
 2) Add a major Protocol Module.  I would like to add a major protocol
 module, besides http, into the mainline distribution.  I believe adding
 a FTP Server Module would be the best one to start with.  Many of the
 paradigms are the same, but it is different enough to help with Goal #1,
 eliminating the dependence on http.

Is there a demand for this, or are we doing this just because we can?
It seems like an odd way to force code cleanup to me.

-Rasmus



Re: Listen-Protocol Branch

2005-05-06 Thread Rasmus Lerdorf
Paul Querna wrote:
 The Problem:
 
 We do not know what protocol will be used to handle a connection until
 runtime.  We currently cannot determine this at startup.
 
 
 This results in:
 
 Primary: Accept Filters and TCP_DEFFER_ACCEPT are currently not used
 correctly.  The 'httpready' accept filter is currently applied to all
 sockets.  This means protocols like nntp, where the server must send
 data first, don't work at all. Rasmus said it has the potential to cause
 problems with SSL Servers, but I haven't personally observed this.

On further testing this turns out not to be the case.  The machines I
saw problems on were actually using a modified httpready filter that
fell back to waiting for a newline instead of triggering immediately.
The standard httpready filter triggers immediately when it doesn't
understand the request, so it should degrade nicely for SSL requests.

-Rasmus


Re: Timeout for requests

2005-05-03 Thread Rasmus Lerdorf
Turn on accept filtering and this problem goes away.  Or at least it 
moves to be a kernel-level issue instead of an Apache one.

-Rasmus
Ivan Barrera A. wrote:
Hi...
 I'm still fighting (probably for a lost cause.. but my boss ask me to
do this).
 In the socket activity there are some troubles dealing with timeouts.
It is pretty easy to Anyone DoS any apache webserver.
 I want to propose implementing a request timeout time, or at least a
check for incoming data.
 If you open many sockets to an apache server, you can keep it alive,
and make apache keep it open for a looong time, eating resources. If you
limit the numbers of conecctions per ip, you still can DoS apache using
2 or more other ips.
 All this was tedtes with Timeout set to 20, KeepAlive set to 5, and all
relevant options to their lowest value.
 (one of the common scrips used to kill apache, is apache-squ1rt, i use
this other to test)
 Use this perl script to test :
#!/usr/bin/perl
my $Child = 150;
my $Sleep = 10;
use IO::Socket;
use strict;
my($c);
my(@SOCKET);
my($t);
local $| = 1;
$c=0;
for(0..$Child) {
  @SOCKET[$c] = new IO::Socket::INET( Proto   = tcp,
PeerAddr= 127.0.0.1:80);
  $c++;
}
for(0..$Child) {
  if ( defined @SOCKET[$c]) {
$t = @SOCKET[$c];
print $t GET / HTTP/1.1;
  }
}
while(1){
  $c=0;
  # For each children
  for(0..$Child) {
if ( defined @SOCKET[$c]) {
  $t = @SOCKET[$c];
  print $t host: test.test;
}
$c++;
  }
  sleep ($Sleep);
}
$c=0;
for(0..$Child) {
  close(@SOCKET[$c++]);
}



Re: Timeout for requests

2005-05-03 Thread Rasmus Lerdorf
Ivan Barrera A. wrote:
It doesn't.
How so?  With accept filtering, simply opening up the socket doesn't 
trigger Apache in any way, so how is Apache DoS'ed in that case?  And 
under FreeBSD with the httpready filter you can trickle really slow 
requests over the socket and Apache still won't see anything until there 
is a full request ready to be handled.

-Rasmus


Re: Timeout for requests

2005-05-03 Thread Rasmus Lerdorf
Ivan Barrera A. wrote:
How about linux ? how about Windows ? how about (put your favorite OS
here) ?
Linux has SO_ACCEPTFILTER which doesn't trigger the accept until there 
is data, so accept filtering works on Linux too.  Windows?  No idea. 
But I bet an Apache DoS would be the least of your worries there.

Well.. First time i heard about httpready (which looks really nice).
I've been looking for something like this.. how come nobody mention it
before ?
It's in the docs.
And final, why can't apache itself have some decent DoS avoiding feature
? not always there will be 3rd party tools to help on that..
It's there in Apache for operating systems that provide mechanisms to 
help.  If you have suggestions for how to do it on other operating 
systems, please send a patch.

-Rasmus


Re: Timeout for requests

2005-05-03 Thread Rasmus Lerdorf
Nick Kew wrote:
Turn on accept filtering and this problem goes away.  Or at least it
moves to be a kernel-level issue instead of an Apache one.
How does that work with large requests?  Doesn't the whole principle
leave you the choice of just moving the DOS attack or breaking
pipelining?
You mean the httpready filter?  The accept will trigger once the buffer 
is full, so yes, large requests will defeat it eventually, but you still 
get the benefit of not tying up an Apache process until the buffer has 
been filled.  The question was regarding just opening up lots of 
connections and letting them sit there, so the request size didn't 
matter in the context of the question.

And yes, if you have KeepAlive enabled, there is no protection for 
subsequent slow or stalled requests, but there is a KeepAlive timeout 
there.  Most busy sites disable KeepAlive anyway since it is a DoS 
feature in the sense that you tend to get a lot of processes sitting 
around waiting on slow clients.

I did fix an issue last year where even with accept filtering enabled 
you could DoS any Apache server by simply opening MaxClients connections 
and trickling a carriage return to each connection very slowly.  So for 
people seeing DoS issues like this, I would suggest upgrading to the 
latest version, turning on accept filtering and turning off keepalive.

-Rasmus


Re: Timeout for requests

2005-05-03 Thread Rasmus Lerdorf
Ivan Barrera A. wrote:
I haven't been able to enable acceptfilters on linux. Where can i get a
howto or some info ?
Sorry, I led you slightly astray.  SO_ACCEPTFILTER is for FreeBSD.  In 
Linux the option is referred to as TCP_DEFER_ACCEPT and I don't actually 
think this is implemented in the public Apache code.  If I get around to 
it, I'll submit a patch.  But there should be patches floating around 
out there for it.

-Rasmus


Re: Timeout for requests

2005-05-03 Thread Rasmus Lerdorf
Nick Kew wrote:
I have some recollection of that problem, but not the solution.  It's
actually somewhat topical for my client right now.  You and Paul have
told us about FreeBSD and Linux; is there also a Solaris equivalent?
(probably not required as they're gradually upgrading it to Linux,
but would be good to have).
As far as I know Solaris doesn't have accept filtering of any sort.  But 
it has been a number of years since I cared about Solaris, so I could be 
wrong.  A quick search didn't turn up anything obvious.

-Rasmus


Re: Timeout for requests

2005-05-03 Thread Rasmus Lerdorf
Paul Querna wrote:
Rasmus Lerdorf wrote:
Ivan Barrera A. wrote:

I haven't been able to enable acceptfilters on linux. Where can i get a
howto or some info ?

Sorry, I led you slightly astray.  SO_ACCEPTFILTER is for FreeBSD.  In
Linux the option is referred to as TCP_DEFER_ACCEPT and I don't actually
think this is implemented in the public Apache code.  If I get around to
it, I'll submit a patch.  But there should be patches floating around
out there for it.

Ya, I got messed up in my other email too.
SO_ACCEPTFILTER is in 2.0.xx.
TCP_DEFER_ACCEPT is in 2.1.xx.
-Paul
By the way Paul, I have been meaning ask, are you falling back from 
httpready to dataready on SSL requests in 2.x?  I don't see it in 
server/listen.c, but I am not really up on the 2.x code.  We can't use 
httpready on an SSL request for obvious reasons.

-Rasmus


Re: Accept Filters, was Re: Timeout for requests

2005-05-03 Thread Rasmus Lerdorf
Paul Querna wrote:
In real life, I don't believe this is detrimental, since if the
accf_http filter sees data it doesn't understand, it acts just like
accf_data -- and mod_ssl reads the data just like normal.
Hrm..  I am not sure I am convinced of that based on what I have seen on 
some misconfigured Apache1 servers.

There was a thread discussing refactoring of how accept filters and
TCP_DEFER_ACCEPT should be applied, but the root problem is that we do
not know that a socket is SSL, until after we have accept()'ed that
socket.  
Ah, in Apache1 that isn't a problem.  I can see how that complicates 
things in Apache2.

-Rasmus


Re: Puzzling News

2005-03-16 Thread Rasmus Lerdorf
William A. Rowe, Jr. wrote:
For anyone who wants to argue that this is a PHP-caused anomaly, note also
http://www.securityspace.com/s_survey/data/man.200501/apachemods.html
-10% followed by +11% the following month:
http://www.securityspace.com/s_survey/data/man.200502/apachemods.html
Big swings like that are almost always artificial.  One or two big 
domain parkers switching versions or toggling the server header.  You 
can't deduce much from that.

-Rasmus


Re: UNIX MPMs

2005-02-10 Thread Rasmus Lerdorf
Paul A. Houle wrote:
On Linux I've done some benchmarking and found that worker isn't 
any  faster than prefork at serving static pages.  (Is it any different 
on  other platforms,  such as Solaris?)  In principle you might save RAM 
by  running prefork,  but in this day and age you can fit 16 GB in a 1U 
pretty  easily and it's cheaper than hiring a programmer who doesn't 
know how to  track down race conditions,  never mind one that does.
If you know of such a programmer that can quickly identify and fix race 
conditions, please send him my way.  I will give him a job in a second.

-Rasmus


Re: Warning from accept filters on startup

2005-01-13 Thread Rasmus Lerdorf
On Wed, 12 Jan 2005, Paul Querna wrote:
 - The entire AcceptFilter/TCP_DEFER_ACCEPT code needs to be refactored
 to properly work with different protocols.

Has anybody here had a look at implementing httpready for Linux or is the
'just use Tux' camp still winning this one?  I had a quick look, but it
seemed non-trivial to me.

-Rasmus


Re: Dumb APR_BUCKET_BUFF_SIZE question

2005-01-08 Thread Rasmus Lerdorf
Cliff Woolley wrote:
It might be.  We've considered having it be configurable before.  There
are just a lot of implications in changing the value; for example, it
affects the memory footprint of the server, it affects how much data gets
read in to memory per read() call on a file bucket (which might alter the
decision of whether read() or mmap() is preferable, for example), it
affects how well the data fits into memory pages, and it affects how much
data is buffered in one block for the scenarios you described.  There are
probably others I'm not thinking of right now, too.  Lots of different
axes that must be considered when trying to pick an optimal value.  But
still, if you want to make it configurable, go right ahead.  :)
Right, I saw all the things it affected which was precisely why I 
wondered why it wasn't made configurable.  I can see perhaps protecting 
users from themselves, but other parts of Apache2 doesn't really follow 
that.  The WindowSize config option in mod_deflate would be a very bad 
idea to change away from the default of 15, for example.  Anyway, I will 
go play a bit with the bucket size on 64-bit boxes.

-Rasmus


Dumb APR_BUCKET_BUFF_SIZE question

2005-01-07 Thread Rasmus Lerdorf
Why is it hardcoded to be 8000?  It would seem like you could easily be 
unlucky and just miss the cutoff and end up with a 6000 byte heap bucket 
followed by a 3000 byte transient bucket, for example, as a result of 3 
3000 byte ap_rwrites.  For that particular case it might be quite 
beneficial to increase APR_BUCKET_BUFF_SIZE to 9000 which would suggest 
that it might be something that should be configurable.

-Rasmus


Re: Dumb APR_BUCKET_BUFF_SIZE question

2005-01-07 Thread Rasmus Lerdorf
Cliff Woolley wrote:
On Fri, 7 Jan 2005, Rasmus Lerdorf wrote:

Why is it hardcoded to be 8000?  It would seem like you could easily be
unlucky and just miss the cutoff and end up with a 6000 byte heap bucket
followed by a 3000 byte transient bucket, for example, as a result of 3
3000 byte ap_rwrites.  For that particular case it might be quite
beneficial to increase APR_BUCKET_BUFF_SIZE to 9000 which would suggest
that it might be something that should be configurable.

In fact, it used to be 9000.  Then we realized that that was causing
cache/page alignment problems.  So we changed it to be just a fuzz less
than 8KB to allow it plus the bucket allocator structures to fit into one
8KB or two 4KB pages.
I still think it would be worthwhile to make it configurable.  Linux or 
FreeBSD5 on IA64 with 16k pages, for example, might show some decent 
gains by setting that to 15000.  Or do a getpagesize() call on startup 
to determine it dynamically.

-Rasmus


Re: How to change ap_document_root variable from a apache2 module ?

2004-12-30 Thread Rasmus Lerdorf
On Thu, 30 Dec 2004, Paul Querna wrote:
 It is impossible with the current way virtual hosts and document roots
 are handled.

I guess doing it per-conf Apache1-style, as in:

  conf = ap_get_module_config()
  conf-ap_document_root = ...;

Just sets the root server's docroot then now.  Not being able able to
manipulate the document_root is a rather severe limitation as far as I am
concerned.

-Rasmus


Re: How to change ap_document_root variable from a apache2 module ?

2004-12-30 Thread Rasmus Lerdorf
On Fri, 31 Dec 2004, Nick Kew wrote:
 On Thu, 30 Dec 2004, Paul Querna wrote:

   Just sets the root server's docroot then now.  Not being able able to
   manipulate the document_root is a rather severe limitation as far as I am
   concerned.
 
  I agree. But to fix it properly, we need a different system for doing
  configuration stuff. The current system is just no good for doing stuff
  on demand/on request.

 Huh?  Why is this a problem?  A module might just have a legitimate
 reason to change document_root at post_config.  But to do so anywhere
 within a request is nonsense: by all means set file paths (c.f. Alias,
 etc), but don't call it document root.

Nobody is saying anything about doing it anywhere within a request.
obviously you can't change the doc_root after the fact, but I see no
reason to not be able to do it prior to each request in the filename
translation hook so other hooks which use the doc_root will function
correctly.

-Rasmus


Re: How to change ap_document_root variable from a apache2 module ?

2004-12-30 Thread Rasmus Lerdorf
On Fri, 31 Dec 2004, Nick Kew wrote:
 On Thu, 30 Dec 2004, Rasmus Lerdorf wrote:

  Nobody is saying anything about doing it anywhere within a request.

 Huh?  What are you smoking?

  obviously you can't change the doc_root after the fact, but I see no
  reason to not be able to do it prior to each request in the filename
  translation hook

 Erm, where can I find a filename translation hook outside the request?

You can't, but the translation hook is not *anywhere* within the request,
it is at the beginning.

   so other hooks which use the doc_root will function
  correctly.

 Hint: document root is a configuration value used *by default* in
 filename translation.  Any module can implement its own translation
 hook, but trying to change a core configuration value is not only
 utterly pointless (your module can use its own variables), it's
 working against the apache design, even in a non-threaded MPM.

Whether it is against the design or not, it is a useful thing to be able
to do.  And I fully realize that my module can do whatever it wants, but
other modules won't know about it unless I modify them.

This can be done quite safely in Apache1, by the way.

-Rasmus


Re: How to change ap_document_root variable from a apache2 module ?

2004-12-30 Thread Rasmus Lerdorf
On Thu, 30 Dec 2004, Paul Querna wrote:
 Rasmus Lerdorf wrote:
 [snip]
 Hint: document root is a configuration value used *by default* in
 filename translation.  Any module can implement its own translation
 hook, but trying to change a core configuration value is not only
 utterly pointless (your module can use its own variables), it's
 working against the apache design, even in a non-threaded MPM.
 
 
  Whether it is against the design or not, it is a useful thing to be able
  to do.  And I fully realize that my module can do whatever it wants, but
  other modules won't know about it unless I modify them.

 I agree this could be a useful 'feature'.  I believe in a new API for
 configuration, this should be taken into consideration. However, the
 current hack of overwriting the values of a CORE config struct is
 completely bogus.

 
  This can be done quite safely in Apache1, by the way.

 I don't believe it can. Code?

Well, since you don't need to worry about thread safety as long as you set
it on every request, or reset it after each request you are fine.
Something like:

  foo-old = ap_document_root(r);
  conf = ap_get_module_config(s-module_config, core_module);
  conf-ap_document_root = new;
  ap_register_cleanup(r-pool, foo, my_cleanup, ap_null_cleanup);

Then set it back to foo-old in my_cleanup().

And yes, I agree it is a hack to change anything in the core_module on a
per-request basis, but there are a lot of things that are very useful
hacks in Apache1 that I am hoping to see the richer and more flexible
Apache2 API address.

-Rasmus


Re: Time for 1.3.32 ?

2004-09-08 Thread Rasmus Lerdorf
On Tue, 7 Sep 2004, [ISO-8859-15] André Malo wrote:
 * Jim Jagielski [EMAIL PROTECTED] wrote:

  I'd like to propose a 1.3.32 release with a TR either late this
  week or early next.

 Sounds good.
 Though I'd like to point to the 2.0 status file, where a bugfix (to 2.0
 and 1.3) is waiting for approval :)

Could you save us some hunting and post it then?

-Rasmus


Re: Time for 1.3.32 ?

2004-09-08 Thread Rasmus Lerdorf
On Wed, 8 Sep 2004, [ISO-8859-15] André Malo wrote:

 * Jim Jagielski [EMAIL PROTECTED] wrote:

  In general, people don't look for 1.3 patches in the 2.0 STATUS file
  and vice-versa :)

 As far as I can see, the current way to make changes is 2.1 - 2.0 - 1.3.
 So it makes sense for me to look into 2.0 for possible 1.3 changes, but not
 vice versa ;-)

 nd



Re: Time for 1.3.32 ?

2004-09-08 Thread Rasmus Lerdorf
On Wed, 8 Sep 2004, [ISO-8859-15] André Malo wrote:
 Actually I'm talking about the two proposals on the top. If you are
 interested in backport voting, you need to touch the STATUS file anyway and
 should follow the commits there.

I'd still suggest posting them here.  Until the lawyers here finish
chewing on the ASF CLA stuff I have no CVS access, so I can't actually
look at this stuff.  And no, I don't agree that the flow is 2.1-2.0-1.3.
The trees are way too different for that to make any sense.

-Rasmus


Re: [PATCH] backport static module checking in mod_so to 1.3

2004-09-07 Thread Rasmus Lerdorf
On Tue, 7 Sep 2004, Geoffrey Young wrote:
 the attached patch is a direct port of the logic from 2.0 to 1.3.  thoughts
 or insights on why this wouldn't be a good idea for 1.3 or other feedback
 appreciated.

Seems like a good idea to me.

-Rasmus


Re: [PATCH] better method of ap_set_keepalive being multicall safe

2004-08-28 Thread Rasmus Lerdorf
I had used the same approach but just had it external.  Putting it inside
is a better idea.  I still think it is dumb that this isn't called at a
much earlier stage, but changing that is more likely to break stuff than
this approach.

-Rasmus

On Sat, 28 Aug 2004, Jim Jagielski wrote:

 Here is, I think, a better patch. The assumption is that it's only
 in ap_set_keepalive that we set conn-keepalive to 1, so we
 can overload that flag to not only represent Yes, keepalive
 the connection but also as a we've called ap_set_keepalive
 for this request already flag.


Re: cvs commit: apache-1.3/src/main http_protocol.c http_request.c

2004-08-27 Thread Rasmus Lerdorf
Yeah, I am not keen on the notes table approach either.  My original patch
to fix this didn't do that.  Not that my patch was great either.

The problem with calling ap_set_keepalive() multiple times is that the
function doesn't just set the keepalive flag, it also increments the
connection's keepalive counter on the call.

And the reason we are even messing with this is because we need to check
if we are on a keepalive connection in ap_die() so we know whether to
bother reading the rest of a request.  Normally ap_set_keepalive() isn't
called until we send the response headers which is too late in the game
for the ap_die() case.

-Rasmus

On Fri, 27 Aug 2004, Roy T. Fielding wrote:

 This doesn't look right.  Checking the notes table is a serious
 performance hit, and why does it matter how many times keepalives
 is incremented on an error path? There must be a better way to do this.

 Roy


 On Friday, August 27, 2004, at 04:44  PM, [EMAIL PROTECTED] wrote:

  jim 2004/08/27 16:44:42
 
Modified:src  CHANGES
 src/main http_protocol.c http_request.c
Log:
Make ap_set_keepalive more statefully aware, allowing it
to be called multiple times (to correctly set keepalive)
but not increment keepalives when not needed. This allows
us to handle a special case where we need to discard
body content early
 
Revision  ChangesPath
1.1949+3 -2  apache-1.3/src/CHANGES
 
Index: CHANGES
===
RCS file: /home/cvs/apache-1.3/src/CHANGES,v
retrieving revision 1.1948
retrieving revision 1.1949
diff -u -r1.1948 -r1.1949
--- CHANGES   27 Aug 2004 19:29:57 -  1.1948
+++ CHANGES   27 Aug 2004 23:44:41 -  1.1949
@@ -24,9 +24,10 @@
  was not checked properly. This affects mod_usertrack and
  core. PR 28218.  [André Malo]
 
-  *) No longer breaks mod_dav, frontpage and others.  Backs out
- a patch which prevented discarding the request body for
  requests
+  *) No longer breaks mod_dav, frontpage and others.  Repair a patch
+ in 1.3.31 which prevented discarding the request body for
  requests
  that will be keptalive but are not currently keptalive. PR
  29237.
+ [Jim Jagielski]
 
   *) COMPATIBILITY: Added new compile-time flag:
  UCN_OFF_HONOR_PHYSICAL_PORT.
  It controls how UseCanonicalName Off determines the port value
  if
 
 
 
1.336 +12 -1 apache-1.3/src/main/http_protocol.c
 
Index: http_protocol.c
===
RCS file: /home/cvs/apache-1.3/src/main/http_protocol.c,v
retrieving revision 1.335
retrieving revision 1.336
diff -u -r1.335 -r1.336
--- http_protocol.c   15 Apr 2004 15:51:51 -  1.335
+++ http_protocol.c   27 Aug 2004 23:44:41 -  1.336
@@ -391,6 +391,7 @@
 int wimpy = ap_find_token(r-pool,
ap_table_get(r-headers_out,
  Connection), close);
 const char *conn = ap_table_get(r-headers_in, Connection);
+const char *herebefore = ap_table_get(r-notes,
  ap_set_keepalive-called);
 
 /* The following convoluted conditional determines whether or
  not
  * the current connection should remain persistent after this
  response
@@ -442,7 +443,17 @@
 int left = r-server-keep_alive_max -
  r-connection-keepalives;
 
 r-connection-keepalive = 1;
-r-connection-keepalives++;
+ /*
+  * ap_set_keepalive could be called multiple times (eg: in
+  * ap_die() followed by ap_send_http_header()) during this
+  * one single request. To ensure that we don't incorrectly
+  * increment the keepalives counter for each call, we
+  * use notes to store a state flag.
+  */
+ if (!herebefore) {
+r-connection-keepalives++;
+ap_table_setn(r-notes, ap_set_keepalive-called, 1);
+ }
 
 /* If they sent a Keep-Alive token, send one back */
 if (ka_sent) {
 
 
 
1.176 +7 -1  apache-1.3/src/main/http_request.c
 
Index: http_request.c
===
RCS file: /home/cvs/apache-1.3/src/main/http_request.c,v
retrieving revision 1.175
retrieving revision 1.176
diff -u -r1.175 -r1.176
--- http_request.c28 May 2004 12:07:02 -  1.175
+++ http_request.c27 Aug 2004 23:44:41 -  1.176
@@ -1051,12 +1051,18 @@
 }
 
 /*
+ * We need to ensure that r-connection-keepalive is valid in
+ * order to determine if we can discard the request body below.
+ */
+ap_set_keepalive(r);
+
+/*
  * If we want to keep the connection, be sure that the request
  body
  * (if any) has been read.
  

Re: cvs commit: apache-1.3/src/main http_protocol.c http_request.c

2004-08-27 Thread Rasmus Lerdorf
On Fri, 27 Aug 2004 [EMAIL PROTECTED] wrote:
/*
   + * We need to ensure that r-connection-keepalive is valid in
   + * order to determine if we can discard the request body below.
   + */
   +ap_set_keepalive(r);

I realize you probably just took my wording there, but it is a bit
misleading.  I would change it to:

   We need to ensure that r-connection-keepalive is set in order
   to determine if we need to call ap_discard_request_body() to read
   the rest of the request body for this request.  There is no point
   reading the body for this request if we are not in keepalive mode
   since we are in ap_die() and about to toss this request anyway.

-Rasmus


Re: Time for 1.3.32 ?

2004-07-08 Thread Rasmus Lerdorf
Ok, how about this.

Add a call to ap_set_keepalive(r) in ap_die() before the check to see
if we should be discarding the request body.  Then, since ap_set_keepalive
increments the keepalives counter on the connection if keepalive is
determined to be enabled, add a check to the calls in ap_send_http_header
and ap_send_error_response since these could be called after ap_die and
we don't want to increment the keepalives counter twice on this request.

   

Index: http_protocol.c
===
diff -u -r1.76 http_protocol.c
--- http_protocol.c 21 May 2004 11:43:31 -  1.76
+++ http_protocol.c 8 Jul 2004 16:49:03 -
@@ -2074,7 +2074,7 @@
 PUSH_EBCDIC_OUTPUTCONVERSION_STATE_r(r, 1);
 #endif /*CHARSET_EBCDIC*/
   

-ap_set_keepalive(r);
+if(r-connection-keepalive != 1) ap_set_keepalive(r);
   

 #ifdef YAHOO
 #ifdef GZIP
@@ -3063,7 +3063,7 @@
 ap_hard_timeout(send 304, r);
   

 ap_basic_http_header(r);
-ap_set_keepalive(r);
+if(r-connection-keepalive != 1) ap_set_keepalive(r);
   

 ap_table_do((int (*)(void *, const char *, const char *)) 
ap_send_header_field,
 (void *) r, r-headers_out,
Index: http_request.c
===
diff -u -r1.29 http_request.c
--- http_request.c  21 May 2004 11:43:31 -  1.29
+++ http_request.c  8 Jul 2004 16:49:03 -
@@ -1116,6 +1116,12 @@
 }
   

 /*
+ * We need r-connection-keepalive set correctly in order to determine if
+ * we can discard the request body in the next condition
+ */
+ap_set_keepalive(r);
+
+/*
  * If we want to keep the connection, be sure that the request body
  * (if any) has been read.
  */


On Tue, 6 Jul 2004, Jim Jagielski wrote:

 Yes, we do, and we're still waiting for a patch. However,
 I can't see us delaying 1.3.32 for an unreasonable
 amount of time.
 
 On Jul 5, 2004, at 10:54 AM, Rasmus Lerdorf wrote:
 
  We still have that outstanding issue of conn-keepalive being bogus in
  ap_die() because it hasn't been set yet and thus we can't discard the
  request body in situations where we really need to.  See my previous  
  long
  explanation of that problem.
 
  -Rasmus
 
  On Sat, 3 Jul 2004, Jim Jagielski wrote:
 
  Let's use STATUS :)
 
  =?ISO-8859-15?Q?Andr=E9?= Malo wrote:
 
  * Jeff Trawick [EMAIL PROTECTED] wrote:
 
  well, if you're going to be that way then consider my simple Win32  
  patch to
  fix reporting of proper error by spawnl(), which needs another +1 :)
 
  (see thread [1.3 PATCH] restore failing errno for Win32 spawn  
  errors on
  this list)
 
  +1 from me for that errno patch ;)
 
  nd
  --
  Umfassendes Werk (auch fuer Umsteiger vom Apache 1.3)
-- aus einer Rezension
 
  http://pub.perlig.de/books.html#apache2
 
 
 
  --
  == 
  =
 Jim Jagielski   [|]   [EMAIL PROTECTED]   [|]
  http://www.jaguNET.com/
A society that will trade a little liberty for a little order
   will lose both and deserve neither - T.Jefferson
 
 
 
 


Re: Time for 1.3.32 ?

2004-07-05 Thread Rasmus Lerdorf
We still have that outstanding issue of conn-keepalive being bogus in
ap_die() because it hasn't been set yet and thus we can't discard the
request body in situations where we really need to.  See my previous long
explanation of that problem.

-Rasmus

On Sat, 3 Jul 2004, Jim Jagielski wrote:

 Let's use STATUS :)

 =?ISO-8859-15?Q?Andr=E9?= Malo wrote:
 
  * Jeff Trawick [EMAIL PROTECTED] wrote:
 
   well, if you're going to be that way then consider my simple Win32 patch to
   fix reporting of proper error by spawnl(), which needs another +1 :)
  
   (see thread [1.3 PATCH] restore failing errno for Win32 spawn errors on
   this list)
 
  +1 from me for that errno patch ;)
 
  nd
  --
  Umfassendes Werk (auch fuer Umsteiger vom Apache 1.3)
-- aus einer Rezension
 
  http://pub.perlig.de/books.html#apache2
 


 --
 ===
Jim Jagielski   [|]   [EMAIL PROTECTED]   [|]   http://www.jaguNET.com/
   A society that will trade a little liberty for a little order
  will lose both and deserve neither - T.Jefferson



Re: 1.3.31 regression affecting Front Page?

2004-06-10 Thread Rasmus Lerdorf
On Wed, 9 Jun 2004, Jim Jagielski wrote:
 On Jun 9, 2004, at 3:24 PM, Rasmus Lerdorf wrote:
  I guess what we are agreeing on here is that the logic that sets 
  keepalive
  to 0 is faulty and that is probably where the real fix lies.
 yeah... it's pretty inconsistent. Looking at ap_set_keepalive
 even after we know the connection will be closed, we
 set keepalive to 0, for example.

Ok, I had a closer look at the flow.  There are 6 main cases I care about.  
Static, Dynamic and Error requests for configs KeepAlive=Off and 
KeepAlive=On.  Here is what happens:

With KeepAlive On
   
  
For both static and dynamic requests the flow is similar.
  
We start connection-keepalive starts at 0 at the beginning of the request
process_request_internal eventually leads to an ap_send_http_header call 
which calls ap_set_keepalive which determines that the config has 
KeepAlive on and sets connection-keepalive to 1

For an error, like a 404, it is different.  We start off with 
connection-keepalive being set to 0, process_internal_request calls 
ap_die on the error which calls ap_send_error_response which in turn calls  
ap_send_http_header which finally sets connection_keepalive to 1.  But 
this happens after ap_die checks conn-keepalive to determine whether to 
discard the request body or not.

With KeepAlive Off

The picture is as above, except ap_set_keepalive called from 
ap_send_http_header sets connection-keepalive to 0 instead of 1.  So for 
the duration of the request, before and after checking whether we are on a 
keepalive connection, connection-keepalive is 0.

The summary here is that checking connection-keepalive before 
ap_set_keepalive() has been called really doesn't make any sense.  And we 
can't just call ap_set_keepalive in ap_die before the check because it 
would end up getting called twice and there is no guard against that in 
it.  It would double-count the request in the keepalives counter.  We need 
to either call ap_set_keepalive earlier on, like in 
process_request_internal before we hit ap_die, or we need to add a 
double-call guard in it and just add a call in ap_die before the keepalive 
check.

Another alternative would be to clean up this mess which has our undecided
state indistinguishable from our disabled state.  Checking for 0 in ap_die
is only wrong because the check is before the ap_set_keepalive call.  The
meaning of that 0 changes on that call.

-Rasmus


Re: 1.3.31 regression affecting Front Page?

2004-06-09 Thread Rasmus Lerdorf
Don't see that anywhere.  Either eaten by spam filters or a gerbil.

Anyway, I don't understand why this would have broken mod_dav.  If mod_dav
wants a keepalive connection it should determine this prior to the ap_die
and set conn-keepalive to 1.  Or am I missing something with respect to
what mod_dav is doing here?  I suppose we could add an ugly exception for
a PROPFIND here, but I'd like to make sure that is actually needed.

Without this patch non-keepalive connections are not being dropped when we
know there is nothing more to do.  For example, on a server that doesn't
allow POST someone can POST to it and it will happily sit there and read
the entire POST request.  This defeats the purpose of adding a Limit POST
and introduces a DoS.  Same for a 404 or any other error handler.  I can
POST to a bogus URL and Apache will read the entire POST request even
though we know it is a 404 at this point and that we can safely discard
the request body.  I don't think releasing .32 without addressing this
issue is a good idea.

-Rasmus

On Wed, 9 Jun 2004, Jim Jagielski wrote:

 I had sent private Email to your @apache.org address
 (since that's the one you use to provide HTTPD related
 patches).

 On Jun 8, 2004, at 5:10 PM, Rasmus Lerdorf wrote:

  Uh, I never received anything on this.  Did you actually send me
  something?  I'll have a look at addressing this issue.  Releasing
  1.3.32
  without this fix would be a nasty backwards step.  The original problem
  this fixes is serious.
 
  -Rasmus
 
  On Fri, 28 May 2004, Jim Jagielski wrote:
 
  I've backed out that patch and asked Rasmus to send a replacemnet
  which addresses his specific problem but does not cause
  the below behavior.
 
  I'm tempted to release 1.3.32...
 
  Jeff Trawick wrote:
 
  This patch did it:
 
  http://cvs.apache.org/viewcvs.cgi/apache-1.3/src/main/
  http_request.c?r1=1.173r2=1.174
 
  See also
 
  http://issues.apache.org/bugzilla/show_bug.cgi?id=29257
  http://www.rtr.com/fp2002disc/_disc2/0a71.htm
 
 
 
  --
  ==
  =
 Jim Jagielski   [|]   [EMAIL PROTECTED]   [|]
  http://www.jaguNET.com/
A society that will trade a little liberty for a little order
   will lose both and deserve neither - T.Jefferson
 
 
 



Re: 1.3.31 regression affecting Front Page?

2004-06-09 Thread Rasmus Lerdorf
On Wed, 9 Jun 2004, Joe Orton wrote:

 On Wed, Jun 09, 2004 at 09:21:07AM -0700, Rasmus Lerdorf wrote:
  Don't see that anywhere.  Either eaten by spam filters or a gerbil.
  
  Anyway, I don't understand why this would have broken mod_dav.  If mod_dav
  wants a keepalive connection it should determine this prior to the ap_die
  and set conn-keepalive to 1.  Or am I missing something with respect to
  what mod_dav is doing here?  I suppose we could add an ugly exception for
  a PROPFIND here, but I'd like to make sure that is actually needed.
 
 From my debugging: mod_dav doesn't actually get involved at all, the
 check_user_id handler from the auth module returns AUTH_REQUIRED for the
 request, and ap_set_keepalive is not called before ap_die is invoked in
 that case. r-connection-keepalive has never been changed from 0 when
 the test in question is reached - it's called later by
 ap_send_error_response, but that's too late.

Just to save me some debugging time, are you saying that on a 401 we call 
ap_set_keepalive after calling ap_die or that we are not calling 
ap_set_keepalive at all?  The former should never happen as far as I am 
concerned, and the latter should be fine as the request simply won't be a 
keepalive request and nothing should expect it to be.

-Rasmus


Re: 1.3.31 regression affecting Front Page?

2004-06-09 Thread Rasmus Lerdorf
On Wed, 9 Jun 2004, Joe Orton wrote:
 When ap_die() is called, ap_set_keepalive() has not been called, and
 r-connection-keepalive is set to 0, as it was initialized so.
 
 The last thing ap_die does is call ap_send_error_response, which calls
 ap_send_http_header, which calls ap_set_keepalive, which sets
 r-connection-keepalive = 1.
 
 FWIW, r-connection-keeaplive == 0 is documented in the header to
 mean undecided, not specifically no keep alive, as you seem to want
 to use it.

Well, we have a bunch of cases where we leave it undecided when it is 
decidedly not undecided.  For example, when I configure a server to 
exlicitly not use keepalives and restrict Post requests with a Limit Post 
clause, I don't expect a POST request with a huge file upload to hit this 
ap_die code and suck in the entire POST request because something has 
decided that the keepalive state is undecided.  It's not undecided, I have 
told it that it is off and the 403 or 404 is the second big clue.

I guess what we are agreeing on here is that the logic that sets keepalive 
to 0 is faulty and that is probably where the real fix lies.

-Rasmus


Re: Time for 1.3.30?

2004-03-09 Thread Rasmus Lerdorf
On Tue, 9 Mar 2004, Jim Jagielski wrote:
   
  There are a few open patches floating about, 
but in general I think
 we're close to a point where we should seriously consider 1.3.30.
 I volunteer to be RM... I'd like to shoot for mid-late next
 week for a release.

 Comments?

I'd like to see this patch in 1.3.30:

+++ src/main/http_protocol.c   2004-02-27 20:54:48.0 -0800
@@ -1001,7 +976,7 @@
  */
 ap_bsetflag(conn-client, B_SAFEREAD, 1);
 while ((len = ap_getline(l, sizeof(l), conn-client, 0)) = 0) {
-if ((len  0) || ap_bgetflag(conn-client, B_EOF)) {
+if ((len  0) || ap_bgetflag(conn-client, B_EOF) || !conn-keepalives) {
 ap_bsetflag(conn-client, B_SAFEREAD, 0);
/* this is a hack to make sure that request time is set,
 * it's not perfect, but it's better than nothing

The logic here was only meant to be in effect for pipelined requests. This
patch makes sure it is only applied when we actually have a pipelined
request and it isn't the first request in a series.

-Rasmus


Re: Antw: RE: consider reopening 1.3

2003-11-17 Thread Rasmus Lerdorf
On Mon, 17 Nov 2003, Bill Stoddard wrote:
 Apache 1.4, an APR'ized version of Apache 1.3 (to pick up IPV6 and 64 bit support) 
 with all the Windows 
 specific code stripped out and source compatability (to the extent possible) with 
 Apache 1.3 modules would 
 probably see rapid uptake. I can't say that thrills me but it's probably true...

Not sure why providing useful software wouldn't thrill you.  I think the
point here is that someone is eventually going to do this.  Would be nicer
to have it under our control than have it leave the ASF.

-Rasmus


Re: Antw: RE: consider reopening 1.3

2003-11-17 Thread Rasmus Lerdorf
On Mon, 17 Nov 2003, Jim Jagielski wrote:

 Glenn wrote:
  
  On Mon, Nov 17, 2003 at 01:31:55PM -0500, Bill Stoddard wrote:
   Apache 1.4, an APR'ized version of Apache 1.3 (to pick up IPV6 and 64 bit 
   support) with all the Windows specific code stripped out and source 
   compatability (to the extent possible) with Apache 1.3 modules would 
   probably see rapid uptake. I can't say that thrills me but it's probably 
   true...
  
  +1
  
 
 Again, unless there is 100% binary compatibility, which I do NOT
 see with 1.4, then *what* is the driver for 1.4 over 2.x??

Why binary compatibility?  Recompiling a module is a hell of a lot easier 
than rewriting it.  

-Rasmus


Re: Antw: RE: consider reopening 1.3

2003-11-17 Thread Rasmus Lerdorf
On Mon, 17 Nov 2003, Jim Jagielski wrote:
 On Nov 17, 2003, at 2:22 PM, Bill Stoddard wrote:
 
  In this economic environment (and perhaps this will turn out to be 
  generally true from now on), companies are not making investments in 
  IT unless they can get a proven and almost immediate return on that 
  investment. Making the jump to Apache 2.0 -can- be a big investment 
  (depending on how many custom/third party modules you use)
 
 Most people with those big investments are using at least *some* 3rd 
 party
 modules. Having a 1.4 that is not binary compatible with 1.3
 means that those 3rd party modules will need to be (at least)
 re-compiled for 1.4. So they will need to worry about 1.3,
 1.4 and 2.0 (and potentially 2.2)... That's an *awful* lot
 to have people keep track of. I don't see companies out
 there wanting to do that... they will maintain their 1.3
 modules for awhile, and their 2.x ones, because it *is*
 the next gen, but I think they would avoid 1.4 almost
 totally.
 
 Having 1.4 not be binary compatible with 1.3 severely limits its
 usefulness to those exact people that it's supposed to be
 helping.

As someone working in a company like that, I can tell you definitively 
that this is not true.  At least not here at the biggest web company in 
the world.

-Rasmus


Re: consider reopening 1.3

2003-11-16 Thread Rasmus Lerdorf
On Sun, 16 Nov 2003, Jeff Trawick wrote:
  *** We need to get back many of the disenfranchised Apache 1.3 developers
 
 Who are these people?

/me raises a hand

People have suggested that we have fewer developers today because Apache 2 
is too complex.  That the crappy economy has reduced the time people have 
to work on it.  Or that Apache-1.3 is simply good enough for most people.

I don't think it is any of that.  Hackers love to hack, but hackers are 
also practical creatures.  They hack on things that they need and use.  
They need and use Apache1 but we have taken our ball away and gone off to 
play another game.

Just compare the list of contributors today to 4 years ago if you want a 
list.

 I don't expect any of the current Apache developers would be interested in 
 this.  But plenty of people join the development community over time (see 
 previous comments) and theoretically the opinions could change.

I think the key word there is current

I also work for a large company with plenty of talented developers and
thousands of production Apache-1.3 servers along with hundreds of custom
Apache-1.3 modules.  It will be years before I can even consider Apache2,
given the architecture and API differences between the two.  If something
could be done in an Apache-1.4 and 2.1/2.2 to help bridge the gap perhaps
one day Apache2 will be an option, but today it is simply too big a gap to
jump and I am pretty sure the bulk of the Apache community is in the same
boat.

-Rasmus


Re: consider reopening 1.3

2003-11-16 Thread Rasmus Lerdorf
On Sun, 16 Nov 2003, Jeff Trawick wrote:
 Too bad all these supposedly-disenfranchised people aren't around to review 1.3 
 fixes.  1.3 would be healthier if they were.

And it is the reason for why they are not around that is in question here.  
Why wouldn't there be plenty of hackers around for a piece of software
used to widely?  Blaming the hackers seems a bit shortsighted.  Have a
look at the environment we have given them to operate in and at some of
the responses over the years people have gotten when they suggested new
features for 1.3.

-Rasmus


Re: consider reopening 1.3

2003-11-16 Thread Rasmus Lerdorf
On Sun, 16 Nov 2003, Graham Leggett wrote:
 I think the key thing is bugfixes compared to features and 
 architecture changes.
 
 I am +1 on seeing bugfixes go into v1.3 - people are using it, and if it 
 can work better, so be it. But to actively encourage people to add 
 features or architecture changes to v1.3, that simply turns v1.3 into 
 something else no longer compatible with v1.3, which we already have: 
 v2.0.

We have two completely different pieces of software.  The fact that they 
are both called Apache is just marketing.  By saying bug fixes only in 1.3 
you are effectively telling people who want to work on it to get lost.  
There are plenty of evolutionary things that could be done in it short of 
the revolutionary jump to Apache2.  We know the jump is too big for a big 
chunk of the market but nobody seems to want to address that.  

-Rasmus


Re: consider reopening 1.3

2003-11-16 Thread Rasmus Lerdorf
On Sun, 16 Nov 2003, Jeff Trawick wrote:
 The point was not to blame anybody.  Instead, I don't believe there are so many 
 people as you imply.  Many of the people who are no longer developing have 
 moved on to other interests/work/etc. and have dropped out of httpd dev because 
 of that.
 
 If somebody is no longer working on [EMAIL PROTECTED] because they feel 
 disenfranchised, it is fair to point out that their skills are still very 
 useful even if they don't want to mess with 2.x.

But the message they have gotten is that they are useful as bug fixers and 
documenters only.  All the fun stuff is reserved for people working on 
Apache2.  If that is an incorrect impression then we need to shout this 
from the rooftops and put up a big sign inviting people to submit any 
outstanding cool patches for 1.3 along with ideas for things they would 
like to see added.  

Basically I see us back in the NCSA days right now.  The ASF has mostly 
abandoned Apache1 and we are in that transition phase where people are 
looking at each other waiting for someone to step up and continue 
development on the code that everyone is using.  That is how Apache was 
born to begin with.

-Rasmus


Re: 1.3 Wishlist: (Was: Re: consider reopening 1.3)

2003-11-16 Thread Rasmus Lerdorf
On Sun, 16 Nov 2003, Jim Jagielski wrote:
 So a useful topic is: What is *missing* in 1.3 that needs to be 
 addressed.
 What are the features/additions that the disenfranchised 1.3 developers
 want to add to 1.3...

How about support for chunked compressed responses right in 
src/main/buff.c where it belongs (given we don't have filters in Apache1)

That alone would probably warrant a bump to 1.4.  I think people are 
thinking 1.4 because adding any significant features between 1.3.29 and 
1.3.30 would seem pretty odd.

-Rasmus


RE: consider reopening 1.3

2003-11-16 Thread Rasmus Lerdorf
On Sun, 16 Nov 2003, Marc Slemko wrote:
 3. Threading issues.  This is a red herring; threading issues can be a
 reason why moving to 2.0 wouldn't give someone enough of a reason to make
 it worthwhile, but they do not block anyone moving to 2.0.  if they
 don't want to use threads, they don't have to use threads.

I have always had the feeling that Apache2+prefork was a bit of a 
second-class citizen.  I have tested it periodically over the past 2 years 
and it has never gotten anywhere close to Apache1 in performance.  I ran 
another test of 1.3.29 vs 2.0.48-prefork just now just to make sure I 
wasn't blowing pure smoke here and here is what I got:

Apache-1.3.29

Document Path:  /bench_main.php
Document Length:7832 bytes
 
Concurrency Level:  5
Time taken for tests:   2.038 seconds
Complete requests:  500
Failed requests:0
Broken pipe errors: 0
Total transferred:  4071500 bytes
HTML transferred:   3916000 bytes
Requests per second:245.34 [#/sec] (mean)
Time per request:   20.38 [ms] (mean)
Time per request:   4.08 [ms] (mean, across all concurrent requests)
Transfer rate:  1997.79 [Kbytes/sec] received
 
Apache-2.0.48

Concurrency Level:  5
Time taken for tests:   3.367 seconds
Complete requests:  500
Failed requests:0
Broken pipe errors: 0
Total transferred:  4028508 bytes
HTML transferred:   3931622 bytes
Requests per second:148.50 [#/sec] (mean)
Time per request:   33.67 [ms] (mean)
Time per request:   6.73 [ms] (mean, across all concurrent requests)
Transfer rate:  1196.47 [Kbytes/sec] received

I did try more requests, different concurrency levels and I tweaked the 
config of both to be as close as I could make them.

Looking at the total bytes tranferred, Apache2 is sending less mostly
because I forgot to remove the p3p module from my Apache1 setup which adds
a big long nasty p3p header to every response, but even with that Apache1
was way faster.

The benchmark itself is a standard little PHP thing I use to test stuff, 
so it may be that our Apache2Handler for PHP is crap and we aren't smart 
enough to write a decent Apache2 module.

-Rasmus


Re: consider reopening 1.3

2003-11-16 Thread Rasmus Lerdorf
On Mon, 17 Nov 2003, Ian Holsman wrote:
 I belive 2.0 beats 1.3 on these metrics, but like everyone here, Ihave 
 no more energy proving/disproving which is faster.. 2.0 works for me, 
 and thats all I really care about, not who else is using it.

Do you really believe this to be true for Apache2-prefork as well?

It may be, I just have never seen any evidence of that in my own tests.  
Obviously both servers can easily fill a 100M connection when just serving 
up static files at which point it comes down to what sort of cpu load 
doing so puts on the server.  I really don't see any compelling advantage 
of Apache2-prefork over Apache1 to justify the development costs involved 
in porting hundreds of modules.  And I am not speaking with my PHP hat on 
here, by the way.  And a threaded mpm is just not an option.  Most humans 
are simply not smart enough to write threadsafe code.

-Rasmus


Small optimization patch for 1.3

2003-03-28 Thread Rasmus Lerdorf
In doing a bit of performance tweaking on 1.3, I noticed that
ap_send_header_field() does an ap_rvputs() with each little piece of a
header which results in separate ap_bwrite() calls for Primitive, :,
Value, crlf for each header line sent.  Rather than having these 1 and
2 character ap_bwrite() calls wouldn't it make more sense to ap_pstrcat()  
these little bits together and do a single ap_bputs()?

Trivial patch follows:

Index: http_protocol.c
===
RCS file: /home/cvs/apache-1.3/src/main/http_protocol.c,v
retrieving revision 1.330
diff -u -r1.330 http_protocol.c
--- http_protocol.c 3 Feb 2003 17:13:22 -   1.330
+++ http_protocol.c 28 Mar 2003 18:27:38 -
@@ -1566,7 +1566,7 @@
 return 1;
 }
 }
-return (0  ap_rvputs(r, fieldname, : , fieldval, CRLF, NULL));
+return (0  ap_bputs(ap_pstrcat(r-pool, fieldname, : , fieldval, CRLF, NULL), 
r-connection-client));
 }

 API_EXPORT(void) ap_basic_http_header(request_rec *r)
@@ -1595,7 +1595,7 @@
 #endif /*CHARSET_EBCDIC*/

 /* output the HTTP/1.x Status-Line */
-ap_rvputs(r, protocol,  , r-status_line, CRLF, NULL);
+ap_bputs(ap_pstrcat(r-pool, protocol,  , r-status_line, CRLF, NULL), 
r-connection-client);

 /* output the date header */
 ap_send_header_field(r, Date, ap_gm_timestr_822(r-pool, r-request_time));



Re: story posted

2003-02-10 Thread Rasmus Lerdorf
Do you really think we don't know this?

The point is that at this point we would basically have to mutex every 
call to every 3rd-party library function since we simply don't know which 
ones are threadsafe and which ones aren't.  And if we lock everything, 
isn't it simpler to just go prefork and avoid the whole thing?

It boils down to where our time is best spent.  Yes, we can come up with 
all sorts of tricks to sorta-kinda-almost make this work.  But why?  What 
do we gain?  At this point most of us feel that we really don't gain 
anything.

-Rasmus

On Sun, 9 Feb 2003, Glenn wrote:

 At the risk of inflaming an already tense conversation (too late),
 I have to say that third party thread-safety issues are not a very
 good excuse.
 
 It's trivial to make a library thread safe by serializing access to the
 functions of the non-thread-safe library.  Although scripts that employ
 the non-thread-safe library would suffer a performance penalty, they
 would still work!
 
 If the core of PHP is thread safe, then this should not be a big deal.
 Also, as time goes on, third party library locks can be removed as
 thread-safe versions of the libraries become available.
 
 For a well-written and concise explanation, please refer to:
 
http://www.unet.univie.ac.at/aix/aixprggd/genprogc/writing_reentrant_thread_safe_code.htm
 
 Cheers,
 -Glenn
 
 On Fri, Feb 07, 2003 at 02:02:39AM +0100, Sascha Schumann wrote:
   Rather than fix the TS issues in all the 3rd party libraries
   that can be used with PHP's and its extension its more
   pragmatic to sort out thread/filter issues in PHP core.
  
  The PHP project has been working on thread-safety since 1999.
  All core components and most extensions can be compiled in
  thread-safe mode.
  
  The first SAPI module for a threaded UNIX web server was
  completed in the same year (for AOLserver).
  
  It's safe to assert that we need to primarily worry about 3rd
  party libraries.
  
   Also blaming on use of TLS seems a little strange since use of
   TLS is supposed to improve re-entrancy isn't it ?
  
  Let me just quickly define what these concepts refer to.
  
  Thread-safe means that you can run code in multiple threads
  concurrently (e.g. multiple worker threads).
  
  Reentrant means that you can run code in a single thread
  context in a nested way (e.g. Apache sub-requests).
  
  Thread local storage aids only the former one.
  
  From my point of view we should not worry about reentrancy
  right now, at least not until we a have firm grasp on the 3rd
  party TS issues.
  
  - Sascha
 




Re: story posted

2003-02-10 Thread Rasmus Lerdorf
 On to a).  The PHP developers have screamed quite loudly about the
 failings of Apache2, when, in fact, the largest reason why mod_php will
 not work with Apache2 is because it is not a priority for PHP developers.

Nobody is screaming.

 Personally, my servers run PHP as CGI.  Works well.  Thank you.
 Kudos for safe_mode and safe_mode_gid.

??  safe_mode and safe_mode_gid are rather useless when running PHP as a 
CGI.  All you are doing is burning syscalls aimlessly and slowing 
everything down.  If you are running PHP as a CGI anyway, run it under 
suExec.

As for the Apache2+PHP stuff, we are not deflecting blame.  We are simply
not acknowledging that it is somehow our duty to drop everything and
support Apache2 just because someone decided it was a good idea to release
a new web server.  And when attacked repeatedly on this issue we tend to
point out that thread safety issues in commonly used libraries pretty much
nullify any threading gains of the new architecture since we'd have to
mutex them, and also the fact that the filter api's complexity isn't
making life easy for us, nor does the architecture mesh well with how PHP
likes to do things.  As a handler under prefork it may work very well.  
Who knows.  Feel free to apply for a CVS account and write it, but please
stop trying to browbeat us into doing something.  I personally have a
working web server that does what I need.  Show me something irresistible
about this new server and I will be compelled to work on it myself.

-Rasmus




Re: story posted

2003-02-06 Thread Rasmus Lerdorf
 Is it really #1 module??  *sigh*

Yup, by far.

 From my experience and that of some of programmers I know, PHP people are
 very reluctant to admit that they have bugs or fix their bugs.  Usually
 they find it better to argue that you're the idiot and their code works
 (even when it does not).

Most reported bugs are actually user error, and there are volunteers who
are usually not actually hard core PHP developers who go through and clean
up the bug reports and ask for more info when needed.  They don't always
get it right, but they reduce the load on the developers who tackle the
tough problems.

-Rasmus



Re: story posted

2003-02-06 Thread Rasmus Lerdorf
 Perhaps it's best for someone to simply port php4apache to 2.0 and start
 moving a little momentum.  The thread-safety arguement is a little bogus,
 until folks have something to start finding thread-safety bugs.  How long
 have Win32 users been doing PHP within threaded servers?

We have gotten a number of TS bug reports, and what does Windows have to
do with it?  Most Windows libraries are threadsafe to begin with.  We are
not talking about TS issues in PHP here, we are talking about them in
libraries that we have no control over.  Sometimes these are even
binary-only libraries.  This is something that will eventually work itself
out as developers become more aware and threaded apps start becoming more
common on UNIX systems.  But that doesn't change the fact that it is a
real problem for us today.

I would love to have a list of the known TS issues in the various
3rd-party libraries out there, and I did try to push that a bit with this:

http://httpd.apache.org/docs-2.0/developer/thread_safety.html

a while ago now.  I was hoping for some more input here.  We should be
able to get to the point where we can tell people that Apache2+PHP+List
of safe extensions is production-quality as long as they don't stray into
any of the extensions/3rd party libs on the unsafe/unknown list.  Right
now that list unfortunately includes just about everything you can hook
into PHP.

-Rasmus



Re: story posted

2003-02-05 Thread Rasmus Lerdorf
 You can also see text in our bug database from a prominent PHP developer 
 saying that the filter API needs to be redone from scratch (my 
 paraphrase).  For the enthusiastic PHP users, such comments carry a lot 
 of weight and imply that PHP isn't production ready with 2.0 not because 
   nobody has made it a high priority to make PHP production ready but 
 instead because there is something flawed about Apache 2.0.

Well, I stand by that.  The filter API is a bloody mess.  Something which 
should be simple and elegant has turned into this amazingly complex tangle 
of code that is nearly impossible to figure out.

-Rasmus




Re: story posted

2003-02-05 Thread Rasmus Lerdorf
 What I think is useful information to people who want PHP+Apache-2.0 is:
 
 a) is PHP not production ready with Apache 2.0 because it was not high 
 enough priority for PHP to be tested?

That is a big part of it.  The fact that the thread-safety of many
third-party libraries that can be linked into a PHP (or mod_perl) setup is
questionable at best has not made us rush out to support Apache 2.  If
there was some compelling end-user feature that people clamoured for, it
would be a different story, but as it is, Apache2 is just a headache for
us.  People would have to run in prefork mode so neither the architecture
nor the performance are compelling arguments to switch for the end user.  
From our perspective, the additional effort required to field all these
bug reports about Apache2+PHP+Worker doing weird and wonderful things
makes it quite a PITA and we thus push people toward 1.3.  Thread-safety
issues are hard to debug and causes a lot of indecipherable and mostly
useless bug reports.  RedHat is currently my least favourite company due 
to the added support email load they have caused me.  And yes, I know, 
Just tell them to use prefork.  But with Apache-1.3 there is no Worker 
mpm and most of the time when you ask a user which mpm they are using, the 
response is a big fat, duh, mpm?.

 b) is PHP not production ready with Apache 2.0 because Apache 2.0 must 
 be fixed before such a thing is even possible?
 
 I see more comments implying b) than a).  As such, it seems that anybody 
 that wants to hack PHP to work better with 2.0 is wasting their time.

I don't think b) outweighs a) here.  The issues in a) is the demotivator 
and b) is just the final nail in the coffin.  If we were motivated enough 
we would work through the API stuff and figure out how to better get PHP 
aligned to the current filter approach.  It's not like the Apache 1.3 API 
is super clean either.  We just know it pretty well and PHP was built up 
around it almost from the beginning.

I guess the real issue here is not even the end users as much as the
developers themselves.  Apache 1.3 was historically written by webmasters
for webmasters running realworld servers.  When/if Apache2 reaches a point
where we, as developers, switch to using it for ourselves, PHP support
will arrive in full force.  As it is, it is just one server on the long
list of servers somewhat supported by PHP.

-Rasmus




Re: story posted

2003-02-05 Thread Rasmus Lerdorf
On Wed, 5 Feb 2003, Joshua Slive wrote:
 On Wed, 5 Feb 2003, Sascha Schumann wrote:
  Now, we could solve both problems by using a handler and
  the prefork MPM.  But then, Apache 2.0+PHP is basically
  Apache 1.3+PHP with a few extra modules thrown in.  That's
  how it appears to the end-user at least.
 
 I don't buy that argument.  Are you saying that if Apache 1.4 had been
 released with a couple extra modules but no threading or filters, then PHP
 would have stuck with 1.3 because it works well enough?  No, I hope PHP
 would have updated to 1.4 to take advantage of the current development
 efforts.  Those development efforts include not just a couple new modules
 (major ones like mod_ssl, mod_dav, mod_deflate, mod_auth_ldap, etc), but
 lots and lots of other enhancements (IPv6, PCRE, improved negotiation,
 better documentation, better non-unix support, many bug fixes, etc).

The reality is that people can do SSL, DAV, Gzip, auth_ldap and everything 
else with 1.3.  Things are a bit more coherent in 2.0 and from a design 
perspective it all fits together in a nicer way, but an end user just 
installs the appropriate package for 1.3 and it just works.  The fact that 
the guy who rolled the package had a nightmare job to make it seamless is 
of no real concern to the end user.  

Our bread and butter here are the Linux and FreeBSD web servers out there.  
They do not run ipv6, they don't care about Windows and they certainly 
don't read documentation.  What are we offering them?

 So why not just do a handler-based PHP for 2.0, and work on other problems
 in the future.  This is a silly family quarel that is making everyone look
 bad.

Go for it.  You sound motivated.  http://www.php.net/cvs-php.php is where 
you sign up for a CVS account.  I will make sure you, or anyone else here 
interested in helping out gets a CVS account promptly.

-Rasmus




Re: mod_usertrack patch

2002-11-27 Thread Rasmus Lerdorf
In cvs?  But no, it has not.  Everyone seems to be ignoring 1.3 these
days.

-Rasmus

On Wed, 27 Nov 2002, Andrei Zmievski wrote:

 Where can I check if it's been committed or not?

 On Fri, 22 Nov 2002, Rasmus Lerdorf wrote:
  +1 on committing this.  I finally got around to testing it.
 
  -Rasmus
 
  On Thu, 7 Nov 2002, Andrei Zmievski wrote:
 
   Hello,
  
   I am submitting a patch to mod_usertrack for your consideration.
   This patch was developed here at Fast Search  Transfer for
   alltheweb.com and provides the following changes:
  
 - ability to have a verbose and a compact version of the cookie
 - ability to set a prefix string for the cookie
  
   This patch is meant for 1.3.x versions.
  
   Please copy me on the replies.
  
   Regards,
  
   -Andrei
  



 -Andrei   http://www.gravitonic.com/
 * Black holes are where God divided by zero. *





Re: mod_usertrack patch

2002-11-22 Thread Rasmus Lerdorf
+1 on committing this.  I finally got around to testing it.

-Rasmus

On Thu, 7 Nov 2002, Andrei Zmievski wrote:

 Hello,

 I am submitting a patch to mod_usertrack for your consideration.
 This patch was developed here at Fast Search  Transfer for
 alltheweb.com and provides the following changes:

   - ability to have a verbose and a compact version of the cookie
   - ability to set a prefix string for the cookie

 This patch is meant for 1.3.x versions.

 Please copy me on the replies.

 Regards,

 -Andrei





Re: Apache 1.3 and invalid headers

2002-11-20 Thread Rasmus Lerdorf
You mean when you send a request header that looks something like this?

~ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1
Host: localhost
Connection: foo

HTTP/1.1 200 OK
Date: Wed, 20 Nov 2002 22:52:24 GMT
Server: Apache/1.3.28-dev (Unix) PHP/4.3.0RC1
X-Powered-By: PHP/4.3.0RC1
Last-Modified: Wed, 02 Oct 2002 13:34:42 GMT
Transfer-Encoding: chunked
Content-Type: text/html

99d
!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.0 Transitional//EN
html
head
...

I don't get a closed connection right away.  I get all my output (chunked
in this case) and then my connection is closed.

-Rasmus

On Tue, 19 Nov 2002, Andy Yang wrote:

 Hello all,

 Does anyone know what the behaviour of Apache 1.3 is
 under the circumstances where the HTTP request or
 response contains an invalid request header?

 Specifically, when the Connection header contains
 something other than 'close'?

 It appears to immediately close the connection - can
 anyone confirm or deny that this is Apache's behaviour
 for both requests and responses?

 Thanks,
 Andy


 __
 Do you Yahoo!?
 Yahoo! Web Hosting - Let the expert host your site
 http://webhosting.yahoo.com





Re: PHP POST handling

2002-10-01 Thread Rasmus Lerdorf

 On Tue, Oct 01, 2002 at 04:27:15PM -0400, Ryan Bloom wrote:
  On Tue, 1 Oct 2002, William A. Rowe, Jr. wrote:
 
   At 01:12 PM 10/1/2002, Greg Stein wrote:
   For PHP, we said make it a filter [so the source can come from anywhere].
   I think we really should have said for GET requests, allow it to be
   processed by PHP. The POST, PROPFIND, COPY, etc should all be possible to 
handle by PHP, which means that PHP also needs a handler.
  
   Agreed, if you write a PHP script we better allow you to PROPFIND
   or COPY the puppy, in addition to POST.
 
  These are two different statements, if I am reading both
  correctly.  Please correct me if I am not.  Will, you are saying that if
  we have a PHP script, then we need to be able to do all DAV operations on
  the script.  Greg, you are saying that a PHP script needs to be able to
  satisfy a DAV request (meaning that the PHP code actually copies the
  resource, or generates the PROPFIND data).
 
  Assuming I am reading the two statements correctly, I agree with
  Will, but not with Greg.

 Why couldn't mod_dav be implemented in PHP? I see no particular reason why
 not... Currently, PHP cannot because it is a filter, not a handler.

We have a switch in PHP now to handle mod_dav requests actually (under
1.3.x)  There is no specific DAV support in there, it's just a switch that
allows PHP to be a handler for things other than GET, HEAD and POST so
people can implement whatever DAV stuff they want in userspace.

-Rasmus




Re: PHP and Apache 1.3 issue ...

2002-09-28 Thread Rasmus Lerdorf

See his domain name.  Novell.com

On Sat, 28 Sep 2002, Jim Jagielski wrote:

 Ramesh Shankar wrote:
 

 Threads? Is this under Win32?
 --
 ===
Jim Jagielski   [|]   [EMAIL PROTECTED]   [|]   http://www.jaguNET.com/
   A society that will trade a little liberty for a little order
  will lose both and deserve neither - T.Jefferson





Re: E-Kabong resolution: Re: acceptance of El-Kabong into APR

2002-09-11 Thread Rasmus Lerdorf

  While we believe that the El-Kabong codebase is a valuable contribution
  that we would like to pick up, we also recognize the possibility that
  you may have a decreased incentive to work on it further if you are
  initially denied commit access to the repository when it moves to the
  ASF.  If this is the case, we understand that it may be best for the
  codebase to live elsewhere if it would be harmed by a lack of
  contributions from its original author, and we look to you for further
  guidance on this issue.

I find this rather shitty.  Obviously someone who donates code is going to
want to be able to work on it so this is the same as telling Jon to take a
hike.  It would have been much more forthright and honest to just tell him
to take a hike.

-Rasmus




Re: El-Kabong -- HTML Parser

2002-09-10 Thread Rasmus Lerdorf

 The ASF is apparently not about working together, since I (and
 everyone else who is not on the PMC list) have been entirely left
 out of all this conversation which is going on behind closed doors.

Which closed doors are those?  There has been discussion on the dev list
and on the board list.  Both of which are public lists that you can
subscribe to.

 It seems as though that is exactly what you've done -- ignored it.
 I am constantly probing for information as to where this stands, both
 via these lists and asking on the #apr IRC channel.  You're interpretation
 if holding this over your head is fairly outrageous, since Apache
 exists perfectly fine without this contribution.

I agree with you that Greg may have misinterpreted your message somewhat
and come on a little strong, but everything I have seen has pointed at
putting it somewhere, just nobody is sure where.  I have yet to see you
suggest something to help place it properly, but I could easily have
missed that message in my flood of email.

-Rasmus




Re: El-Kabong -- HTML Parser

2002-09-10 Thread Rasmus Lerdorf

  Which closed doors are those?  There has been discussion on the dev list
  and on the board list.  Both of which are public lists that you can
  subscribe to.

 All I know of is the PMC list (which is private), but discussion on
 board (which is also private) is news to me.

Well, I had assumed you were already an ASF member.  I guess I was wrong.
Yes, the board list is private in the sense that non-ASF members can not
subscribe.  Any ASF member can though.

-Rasmus




Re: Thread safety issues

2002-09-10 Thread Rasmus Lerdorf

Contributions are more than welcome.

On Tue, 10 Sep 2002, Cyrille Artho wrote:

 Hi,
 as someone who works on multi-threaded problems, but not Apache, I ran
 into your page at
 http://httpd.apache.org/docs-2.0/developer/thread_safety.html

 I strongly suggest to revise it, because it lacks depth. First of all,
 you probably should start explaining the basic problem in case a
 developer has never used threads: what is a race condition (and what is
 a deadlock), why is it hard to test (because it is scheduling-dependent,
 the scheduling cannot be controlled).

 What can be done about it (manual analysis, VisualThreads under Alpha).
 Basically the programmer has to ensure that each access to shared data
 is protected by at least one common lock (the word common is important).

 When to use apr_atomic_* and apr_thread_mutex_*. How to use them.

 Perhaps make a small shell script that parses the ldd output and
 compares each line to a database of libraries in it, printing
 problematic libraries.

 Maybe you can cover some of these issues by linking to other pages. It
 is important that they are well documented, otherwise people will never
 dare using 2.0 or writing modules for it.

 I personally hope 2.0 will be adapted fast, but I know such things take
 time. Good luck, and keep up the good work!
 --
 Regards,
 Cyrille Artho





Re: [VOTE] Location of aaa rewrite

2002-09-03 Thread Rasmus Lerdorf

 On Tue, 3 Sep 2002, Chris Taylor wrote:

  -BEGIN PGP SIGNED MESSAGE-
  Hash: SHA1
 
   [ ] Check in aaa rewrite to 2.0.
   [X] Check in aaa rewrite to 2.1.
 
  My view is that it's important to keep 2.0 stable to attract new
  users, and breaking things all the time won't help :)

 Can I ask a stupid question?  What have we actually broken since Apache
 2.0 went GA?  Binary compatibility?  How many functions?  How many of
 those were APR and not Apache?

Sure, both source and binary compatibility were broken numerous times.
Check the PHP bug database for umpteen reports on each breakage.

-Rasmus




Re: [VOTE] Location of aaa rewrite

2002-09-03 Thread Rasmus Lerdorf

 On Tue, 3 Sep 2002, Rasmus Lerdorf wrote:

   On Tue, 3 Sep 2002, Chris Taylor wrote:
  
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1
   
 [ ] Check in aaa rewrite to 2.0.
 [X] Check in aaa rewrite to 2.1.
   
My view is that it's important to keep 2.0 stable to attract new
users, and breaking things all the time won't help :)
  
   Can I ask a stupid question?  What have we actually broken since Apache
   2.0 went GA?  Binary compatibility?  How many functions?  How many of
   those were APR and not Apache?
 
  Sure, both source and binary compatibility were broken numerous times.
  Check the PHP bug database for umpteen reports on each breakage.

 Okay, but how is that different from early releases of 1.3?

I don't know, but you asked the question which sort of implied that
nothing had been broken.

-Rasmus




Re: Is anybody getting CVS commit messages?

2002-08-27 Thread Rasmus Lerdorf

I see them

On Tue, 27 Aug 2002 [EMAIL PROTECTED] wrote:


 I realized earlier today that I haven't been seeing commit messages.

 Is anybody getting these messages?

 Ryan

 --

 ___
 Ryan Bloom[EMAIL PROTECTED]
 550 Jean St
 Oakland CA 94610
 ---





Re: Thread-unsafe libraries in httpd-2.0

2002-08-15 Thread Rasmus Lerdorf

On Thu, 15 Aug 2002, Justin Erenkrantz wrote:

 [ Moving to dev@httpd where this belongs ]

 On Thu, Aug 15, 2002 at 07:10:02AM -0700, Rasmus Lerdorf wrote:
  Correct.  From the feedback I am getting, users do not adequately
  understand the implications of choosing a threaded MPM.  We need to do a
  better job educating them to the fact that we simple cannot guarantee
  which libraries are threadsafe and which are not.

 Precisely which libraries are the core of httpd-2.0 using in a
 thread-unsafe manner?  At least in the core distribution, we
 should have knowledge of which libraries are thread-unsafe and
 prevent this.  To my knowledge, I haven't seen a single problem
 related to this.  If you have actual cases where httpd-2.0 is
 doing something unsafe, please let us know!

 I think perhaps your concern is simply to PHP which may bring
 in thread-unsafe libraries not httpd-2.0.  -- justin

As I have stated a dozen times now.  Yes, I am talking about PHP and any
other add-on module people may use.  I think the attitude of most people
here sucks.  Apache doesn't have a problem, why should we do anything?

The reality is that a big chunk of our Apache community uses Apache to
serve up complex dynamic content using PHP, mod_perl, other 3rd-party
modules and homegrown modules as well. PHP and mod_perl alone are on well
over 50% of all Apache servers. People don't look to Apache for simply
serving up static content. A lot of sites replaced Apache long ago with
thttpd/Zeus/boa/Tux/khttpd for that.  All I am after is a simple very
visible addition to the Apache 2 distribution which explains that the
threaded mpms may not be suitable for serving up dynamic content due to
the unknown thread safety of the libraries these dynamic solutions rely
on.

-Rasmus




Re: Thread-unsafe libraries in httpd-2.0

2002-08-15 Thread Rasmus Lerdorf

That's just crap.  I can say the same thing.  PHP is threadsafe, it's not
my responsibility that libxyz is not.  Any Apache 2.0 module running under
a threaded mpm linked against libxyz that contains non-threadsafe code is
going to have exactly the same problem unless the module sticks in
mutexes.

Right now in the PHP world we simply tell people that they should not
upgrade to Apache 2.0.  If everyone ends up doing that, then I am sorry to
say, but Apache 2.0 is dead and the current Netcraft statement is going to
be a recurring thing.

As a platform there are some cool possibilities with Apache 2.0 and I'd
like to see it do well, but as a module author, being told to piss off and
deal with the problem myself is not any way to encourage 3rd-party module
support for Apache 2.0.  In the end the users out there don't really give
a crap about which web server they use.  They just want something that
works.  Apache was always the web server that just worked.  I strongly
feel it is our job to help make sure that Apache remain the web server
that just works.  Like it or not, but the web server is the foundation for
all the projects under the ASF umbrella and if we fuck up Apache, every
sub-project will be hurt in the process.

-Rasmus


On Thu, 15 Aug 2002, Greg Stein wrote:

 EXACTLY.

 Thanks, Justin.

 We are not trying to shirk our responsibilities or be lazy about this. But
 you can't say my module is so popular that you must account for problems
 that I introduce into your environment.

 I'm fine with adding something to our document that says something along the
 lines of, if you choose a threaded MPM such as FOO, BAR, or BAZ, then you
 need to ensure that the third-party modules you choose to use with the web
 server are thread-safe. Please contact your third-party modules' vendors for
 more information on their thread-safety.

 -g

 On Thu, Aug 15, 2002 at 10:09:27AM -0700, Justin Erenkrantz wrote:
  On Thu, Aug 15, 2002 at 09:40:06AM -0700, Rasmus Lerdorf wrote:
   thttpd/Zeus/boa/Tux/khttpd for that.  All I am after is a simple very
   visible addition to the Apache 2 distribution which explains that the
   threaded mpms may not be suitable for serving up dynamic content due to
   the unknown thread safety of the libraries these dynamic solutions rely
   on.
 
  And, my point back to you is that should be part of the documentation
  of the module NOT of httpd-2.0.  Making broad statements that will
  confuse our users like threaded MPMs may not be suitable for serving
  up dynamic content is a ridiculously overbroad and inaccurate
  statement.
 
  A better statement may be: Some PHP or Perl modules may not
  interact well with a threaded MPM in httpd-2.0.  Caution is urged
  when using a threaded MPM.  To me, that totally belongs in the
  PHP or Perl documentation.  That is a limitation of PHP and mod_perl
  not of httpd-2.0.
 
  That statement doesn't hold for a mod_jk2 (or whatever the latest
  httpd-2.0 Tomcat module is).  It totally depends on how the 3rd
  party module is architected not on the architecture of the web
  server itself.  -- justin

 --
 Greg Stein, http://www.lyra.org/





Re: Thread-unsafe libraries in httpd-2.0

2002-08-15 Thread Rasmus Lerdorf

 FWIW, I'm +1 on what Rasmus says - at least for widely used libraries.
 Obviously anything internal to PHP is PHP's problem. But anything
 everyone uses is our problem.

 However, I would advocate fixing the libraries rather than wrapping them
 where possible.

Yup, definitely.  They aren't always open source or sometimes they are
just architecturally not fixabled.  Step 1 is to gather information.  I
have committed an initial short list to

httpd-2.0/docs/manual/developer/thread_safety.html

where I plan on keeping track of stuff as the PHP bug reports flow in or I
dive into each library to check out the code.

-Rasmus




Re: perchild on FreeBSD 5?

2002-08-13 Thread Rasmus Lerdorf

 Hello,
 I've more or less accepted that perchild on FreeBSD 4.X isn't going to
 happen (as sad as it is, I always considered it to be THE feature [1] in
 2.0 that would warrant an upgrade for us) but what I'd like to know is
 if there is any chance to see perchild on FreeBSD 5 which gets wholly
 new threading and SMP libs?

I agree, and I have been preaching the same thing for a while.  Almost no
point in releasing Apache2 without a working perchild.  Unfortunately
there are other issues as well.  A lot of the 3rd party libs that
something like PHP or mod_perl depends on are not necessarily threadsafe.
As witnessed by FreeBSD's incredibly buggy threading code there aren't a
lot of things using threads heavily on UNIX.  With some notable
exceptions, of course, but very few try to pull in 30 or 40 3rd-party
libraries as well.  We are going to have to fix a bunch of them and mutex
some others before Apache2 with a threaded MPM will be of any use with PHP
or mod_perl.  And I am not sure how to go about identifying the libraries
that aren't qiute threadsafe.  Problems generally only show up under load
and only in certain circumstances.  Especially for the libraries that
claim to be threadsafe but aren't quite for whatever reason.

-Rasmus




RE: perchild on FreeBSD 5?

2002-08-13 Thread Rasmus Lerdorf

 I agree with Pier, the threaded MPM has been a real lifesaver. Supporting
 10,000+ concurrent clients with Apache 1.3 (including some complex modules)
 on AIX and Solaris is practically impossible.  Quite doable with Apache 2.0
 and the worker MPM.

I am sure it does, but you also need to recognize that around 40% of all
Apache installations have PHP on them.  And 30% or so have mod_perl.  Many
actually have both, so there is some overlap, but I would say that over
half of all Apache installs have one or both of PHP or mod_perl.

Apache 2 is being pitched as a production-quality web server without any
mention of the fact that over half of the current Apache sites probably
should not upgrade at this point.

-Rasmus




RE: perchild on FreeBSD 5?

2002-08-13 Thread Rasmus Lerdorf

  I am sure it does, but you also need to recognize that around 40% of all
  Apache installations have PHP on them.  And 30% or so have mod_perl.  Many
  actually have both, so there is some overlap, but I would say that over
  half of all Apache installs have one or both of PHP or mod_perl.
 
  Apache 2 is being pitched as a production-quality web server without any
  mention of the fact that over half of the current Apache sites probably
  should not upgrade at this point.

 This is definitely worth mentioning in the 2.0 Announcements. Have the
 problems in mod_perl and mod_php been identified, so folks can at least make
 an educated guess whether their site will tickle the known bugs?

Nope, we really have no idea which libraries are threadsafe and which ones
aren't.

-Rasmus




PATH_INFO in A2?

2002-07-06 Thread Rasmus Lerdorf

With this config:

LoadModule php4_modulemodules/libphp4.so
AddType application/x-httpd-php .php

http://localhost/index.php

works fine and parser PHP pages without problems.  (using prefork - but it
shouldn't matter)

However: http://localhost/index.php/foo

Gives a 404 and says:

The requested URL /index.php/foo was not found on this server.

In Apache1 /index.php would still get passed to PHP and /foo would end up
in the PATH_INFO server var.

-Rasmus




Re: PATH_INFO in A2?

2002-07-06 Thread Rasmus Lerdorf

On Sat, 6 Jul 2002, Dale Ghent wrote:

 On Sat, 6 Jul 2002, Rasmus Lerdorf wrote:

 | 2.0.40-dev built on June 23rd

 Make sure you have AcceptPathInfo On

Argh!  Why the heck is that off by default?

-Rasmus




RE: PATH_INFO in A2?

2002-07-06 Thread Rasmus Lerdorf

   Make sure you have AcceptPathInfo On
 
  Argh!  Why the heck is that off by default?

 It's on by default for dynamic pages, but there is no way that Apache
 can tell that a page is going to be served by PHP, so it is off for what
 Apache thinks are static pages.

What is a dynamic page if not a PHP page?

-Rasmus




RE: PATH_INFO in A2?

2002-07-06 Thread Rasmus Lerdorf

  What is a dynamic page if not a PHP page?

 Like I said, Apache doesn't know if a file on disk is meant for PHP or
 not.  The best way to fix this would be for mod_php to set the value if
 the filter is added for the request.

 I agree, it would be cool if Apache could set this correctly based on
 the filters that have been added for the request.

Seems like there should be an API call where a filter can specify whether
it is a dynamic one or not as opposed to specifically flipping the
acceptpathinfo bit.

-Rasmus




Re: PATH_INFO in A2?

2002-07-06 Thread Rasmus Lerdorf

 On Sat, Jul 06, 2002 at 03:11:20PM -0400, [EMAIL PROTECTED] wrote:
  We just added a new function for all input filters to allow this to be
  done (Justin referenced it in his reply).  However, that function doesn't
  solve the problem, because there should be an ap_filter_is_dynamic(r) that
  hides the implementation details for all filters.

 I don't believe that mod_include would want AcceptPathInfo on.
 Only PHP would.  So, I don't know what ap_filter_is_dynamic() would
 buy here (other than setting r-no_local_copy to 1).  -- justin

Why wouldn't mod_include want AcceptPathInfo to be on?  I am sure there
are .shtml files out there that are written with the assumption that
PATH_INFO is set correctly.

-Rasmus




Re: Christopher Williamson: URGENT: Bug/compatability issue in Apache 1.3.26

2002-07-03 Thread Rasmus Lerdorf

http://www.apache.org/dist/httpd/patches/ has patches for every released
version of Apache 1.2.x and 1.3.x

On Wed, 3 Jul 2002, Andrew Ho wrote:

 Hello,

 Is there a patch for earlier versions of Apache that fix the chunked
 Transfer-Encoding security hole, but nothing else? I know OpenBSD, for
 example, has an Apache 1.3.24 in ports that has the chunked
 Transfer-Encoding fixed. That would certainly be a good short term
 solution for this guy--it doesn't sound like it's a good idea for him to
 wait for 1.3.27!

 Humbly,

 Andrew

 --
 Andrew Ho   http://www.tellme.com/   [EMAIL PROTECTED]
 Engineer   [EMAIL PROTECTED]  Voice 650-930-9062
 Tellme Networks, Inc.   1-800-555-TELLFax 650-930-9101
 --





RE: Apache 2.0 Numbers

2002-06-24 Thread Rasmus Lerdorf

   It would be nice
   if there was an apxs flag that would return the MPM type.
 
  +1

 There is.  -q will query for any value in config_vars.mk, and MPM_NAME
 is in that file.  So `apxs -q MPM_NAME` will return the configured MPM
 type.

Ah right.  Is there a way to check at runtime as well?  I've added a PHP
configure check now to the apache2filter sapi module so it will come up
non-threaded by default if it sees Apache2-prefork.  Just a bit worried
about someone changing their MPM after the fact, so perhaps a runtime
check is needed as well.

-Rasmus




RE: Apache 2.0 Numbers

2002-06-24 Thread Rasmus Lerdorf

 Runtime is harder, but you can just use ap_mpm_query to get the MPMs
 characteristics.  This won't give you the MPM name, but it will let you
 know if the MPM is threaded or not.

What is the correct way to fail in a filter post_config?  Do I return -1
from it if my filter finds a fatal error?  I can't use ap_log_rerror() at
this point, right?  How would I log the reason for the failure?

-Rasmus




RE: Apache 2.0 Numbers

2002-06-24 Thread Rasmus Lerdorf

  What is the correct way to fail in a filter post_config?  Do I return
 -1
  from it if my filter finds a fatal error?  I can't use ap_log_rerror()
 at
  this point, right?  How would I log the reason for the failure?

 I'm confused by the question, but I'll try to answer.  If you mean the
 post_config phase, then you can use ap_log_error or ap_log_perror.  If
 you want to stop the server from starting, just return DECLINED.

Right, I found ap_log_error.  It was the return value I was looking for.
None of the example filter modules had a fatal error check at the config
phase.  So returning a -1 is the correct way to stop the server from
starting.  Thanks.

-Rasmus




RE: Apache 2.0 Numbers

2002-06-24 Thread Rasmus Lerdorf



On Mon, 24 Jun 2002, Rasmus Lerdorf wrote:

   What is the correct way to fail in a filter post_config?  Do I return
  -1
   from it if my filter finds a fatal error?  I can't use ap_log_rerror()
  at
   this point, right?  How would I log the reason for the failure?
 
  I'm confused by the question, but I'll try to answer.  If you mean the
  post_config phase, then you can use ap_log_error or ap_log_perror.  If
  you want to stop the server from starting, just return DECLINED.

 Right, I found ap_log_error.  It was the return value I was looking for.
 None of the example filter modules had a fatal error check at the config
 phase.  So returning a -1 is the correct way to stop the server from
 starting.  Thanks.

Hrm..  Nope.  doing 'return DECLINED' from the post_config phase does not
stop the server from starting.  I have this:

static int
php_apache_server_startup(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, 
server_rec *s)
{
void *data = NULL;
const char *userdata_key = apache2filter_post_config;
#ifndef ZTS
int threaded_mpm;

ap_mpm_query(AP_MPMQ_IS_THREADED, threaded_mpm);
if(threaded_mpm) {
ap_log_error(APLOG_MARK, APLOG_CRIT, 0, s, Apache is running a threaded MPM, 
but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.);
return DECLINED;
}
#endif
...
}

...

ap_hook_pre_config(php_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_post_config(php_apache_server_startup, NULL, NULL, APR_HOOK_MIDDLE);

And in my log I get:

[Mon Jun 24 08:27:23 2002] [crit] Apache is running a threaded MPM, but your PHP 
Module is not compiled to be threadsafe.  You need to recompile PHP.
[Mon Jun 24 08:27:23 2002] [crit] Apache is running a threaded MPM, but your PHP 
Module is not compiled to be threadsafe.  You need to recompile PHP.
[Mon Jun 24 08:27:23 2002] [notice] Apache/2.0.40-dev (Unix) configured -- resuming 
normal operations




RE: Apache 2.0 Numbers

2002-06-24 Thread Rasmus Lerdorf

On Mon, 24 Jun 2002, Cliff Woolley wrote:
 On Mon, 24 Jun 2002, Rasmus Lerdorf wrote:

  Hrm..  Nope.  doing 'return DECLINED' from the post_config phase does not
  stop the server from starting.  I have this:

 I thought you were supposed to return HTTP_INTERNAL_SERVER_ERROR.

In include/http_config.h it says:

/**
 * Run the post_config function for each module
 * param pconf The config pool
 * param plog The logging streams pool
 * param ptemp The temporary pool
 * param s The list of server_recs
 * return OK or DECLINED on success anything else is a error
 */

So I guess I need to return 'anything else'

Trying this, ie. returning -2 it does the job.  But this seems a little
vague.  Should we perhaps have a #define FATAL -2 or something similar so
I don't get stepped on later on if someone decides to use -2 for something
else?

And no, I don't think it makes sense to overload INTERNAL_SERVER_ERROR for
this.  To me that is a 500 error which is very much tied to a
request-level error.

-Rasmus




RE: Apache 2.0 Numbers

2002-06-24 Thread Rasmus Lerdorf

 As it happens, DONE is defined to be -2.   :-)

Ok, I will use that, but 'DONE' doesn't really give the impression of
being a fatal error return value.

-Rasmus




Re: Apache 2.0 Numbers

2002-06-24 Thread Rasmus Lerdorf

 * Saying turn on buffering is, IMHO, a reasonable solution if you
   can make buffering the default in PHP under httpd-2.0.  Otherwise,
   you'll surprise a lot of users who have been running with the default
   non-buffered output using 1.3 and find that all their applications
   are far slower with 2.0.

We could turn on buffering for 2.0.  I just verified that this does indeed
create a single 1024-byte bucket for my 1024-byte file test case.  And
combined with compiling PHP non-threaded for the prefork mpm the result
is:

Concurrency Level:  5
Time taken for tests:   115.406395 seconds
Complete requests:  5
Failed requests:0
Write errors:   0
Keep-Alive requests:0
Total transferred:  6325 bytes
HTML transferred:   5120 bytes
Requests per second:433.25 [#/sec] (mean)
Time per request:   11.541 [ms] (mean)
Time per request:   2.308 [ms] (mean, across all concurrent requests)
Transfer rate:  535.21 [Kbytes/sec] received

Up from 397 requests/second but still nowhere near the 615 requests/second
for Apache 1.3.  But, doing this buffering internally in PHP and then
again in Apache doesn't seem efficient to me, and the numbers would seem
to reflect this inefficiency.

 * A better solution, though, would be to have the PHP filter generate
   flush buckets (in nonbuffered mode) only when it reaches a % or
   %.  I.e., if the input file has 20KB of static text before the
   first embedded script, send that entire 20KB in a bucket, and don't
   try to split it into 400-byte segments.  If mod_php is in nonbuffered
   mode, send an apr_bucket_flush right after it.  (There's a precedent
   for this approach: one of the ways in  which we managed to get good
   performance from mod_include in 2.0 was to stop trying to split large
   static blocks into small chunks.  We were originally concerned about
   the amount of time it would take for the mod_include lexer to run
   through large blocks of static content, but it hasn't been a problem
   in practice.)

 From a mod_php perspective, would either of those be a viable solution?

I think Andi is working on this.  But, just to test the theory, I modified
the PHP lexer to use larger chunks.  1024 in this case.  So, the 1k.php
test case which looks like this:

html
headtitleTest Document./title
body
h1Test Document./h1
p
?='This is a 1024 byte HTML file.'?br /
aabr /
bbbr /
ccbr /
ddbr /
eebr /
ffbr /
ggbr /
hhbr /
iibr /
jjbr /
kkbr /
llbr /
mmbr /
nnbr /
oobr /
ppbr /
qqbr /
rrbr /
ssbr /
ttbr /
uubr /
vvbr /
wwbr /
xxbr /
/p
/body
/html

Was split up into 3 buckets.

1. 78 bytes containing:

html
headtitleTest Document./title
body
h1Test Document./h1
p

2. 30 bytes containing (because this was dynamically generated)
This is a 1024 byte HTML file.

3. A 916 byte bucket containing the rest of the static text.

Result:

Concurrency Level:  5
Time taken for tests:   124.456357 seconds
Complete requests:  5
Failed requests:0
Write errors:   0
Keep-Alive requests:0
Total transferred:  6325 bytes
HTML transferred:   5120 bytes
Requests per second:401.75 [#/sec] (mean)
Time per request:   12.446 [ms] (mean)
Time per request:   2.489 [ms] (mean, across all concurrent requests)
Transfer rate:  496.29 [Kbytes/sec] received


So slower than the single 1024 byte bucket and actually also slower than
the 400-byte case, so an invalid test.  There are probably some other
memory-allocation changes I would need to make to make this a valid test.

-Rasmus




Keepalives in A2?

2002-06-24 Thread Rasmus Lerdorf

With Apache 1.3 all you had to do to get a keep-alive was set your
content-length correctly:

HTTP/1.1 200 OK
Date: Mon, 24 Jun 2002 17:05:04 GMT
Server: Apache/1.3.22 (Unix) PHP/4.3.0-dev
X-Powered-By: PHP/4.3.0-dev
Content-length: 1024
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html

One of the benefits with Apache 2's architecture is that it knows the
content length and sets it.  But I never seem to get a keep-alive from it.
Identical request and identical PHP script with Apache 2:

HTTP/1.1 200 OK
Date: Mon, 24 Jun 2002 17:01:17 GMT
Server: Apache/2.0.40-dev (Unix) PHP/4.3.0-dev
Accept-Ranges: bytes
X-Powered-By: PHP/4.3.0-dev
Content-Length: 1024
Connection: close
Content-Type: text/html; charset=ISO-8859-1

Is there something else I need to do in Apache2 to get a keep-alive
response?

-Rasmus





Karma please

2002-06-23 Thread Rasmus Lerdorf

Could someone karma me for apache-2.0 please?

-Rasmus




Apache 2.0 Numbers

2002-06-23 Thread Rasmus Lerdorf

Someone asked me for numbers when I mentioned the other day that Apache
2-prefork was really not a viable drop-in replacement for Apache 1.3 when
it comes to running a PHP-enabled server.

Apache 1.3 is still significantly faster than Apache2-prefork for both
static and dynamic content.  Now, part of the blame goes to PHP here for
the dynamic case. We are compiling PHP in threadsafe mode when building
the PHP DSO for Apache2-prefork which is not necessary. It would be nice
if there was an apxs flag that would return the MPM type. Right now we
would need to parse the output of httpd -l or -V to figure out which MPM
is being used. Being able to go non-threadsafe in PHP does speed us up a
bit. But none of this has anything to do with the fact that Apache 1.3 is
faster for static files.  It's going to be very hard to convince people to
switch to Apache2-prefork if we can't get it to go at least as fast as 1.3
for simple static files.

Platform: Linux 2.4.19-pre8, glibc 2.2.5, gcc-2.96, P3-800, 128M
Tested using ab from the httpd-2.0 tree with these flags: -c 5 -n 5 -k

1024-byte file which looked like this:

html
headtitleTest Document./title
body
h1Test Document./h1
p
This is a 1024 byte HTML file.br /
aabr /
bbbr /
ccbr /
ddbr /
eebr /
ffbr /
ggbr /
hhbr /
iibr /
jjbr /
kkbr /
llbr /
mmbr /
nnbr /
oobr /
ppbr /
qqbr /
rrbr /
ssbr /
ttbr /
uubr /
vvbr /
wwbr /
xxbr /
/p
/body
/html

The PHP version was:

html
headtitleTest Document./title
body
h1Test Document./h1
p
?='This is a 1024 byte HTML file.'?br /
aabr /
bbbr /
ccbr /
ddbr /
eebr /
ffbr /
ggbr /
hhbr /
iibr /
jjbr /
kkbr /
llbr /
mmbr /
nnbr /
oobr /
ppbr /
qqbr /
rrbr /
ssbr /
ttbr /
uubr /
vvbr /
wwbr /
xxbr /
/p
/body
/html

Note the fact that the Apache2 static test produced the wrong number of
total bytes.  3072 bytes too many???  Where in the world did they come
from?  The PHP test on Apache2 produced the correct number as did both
static and PHP on Apache1.


Apache 2 PreFork

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout15
StartServers 5
MinSpareServers  5
MaxSpareServers 10
MaxClients  15
MaxRequestsPerChild  0

STATIC

Concurrency Level:  5
Time taken for tests:   23.793270 seconds
Complete requests:  5
Failed requests:0
Write errors:   0
Keep-Alive requests:49511
Total transferred:  66681859 bytes
HTML transferred:   51203072 bytes === Uh?
Requests per second:2101.43 [#/sec] (mean)
Time per request:   2.379 [ms] (mean)
Time per request:   0.476 [ms] (mean, across all concurrent requests)
Transfer rate:  2736.87 [Kbytes/sec] received

PHP

Concurrency Level:  5
Time taken for tests:   125.831896 seconds
Complete requests:  5
Failed requests:0
Write errors:   0
Keep-Alive requests:0
Total transferred:  6325 bytes
HTML transferred:   5120 bytes
Requests per second:397.36 [#/sec] (mean)
Time per request:   12.583 [ms] (mean)
Time per request:   2.517 [ms] (mean, across all concurrent requests)
Transfer rate:  490.87 [Kbytes/sec] received


Apache 1.3
--
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout   15
MinSpareServers 5
MaxSpareServers10
StartServers5
MaxClients 15
MaxRequestsPerChild 0
---
STATIC
---
Concurrency Level:  5
Time taken for tests:   19.735772 seconds
Complete requests:  5
Failed requests:0
Write errors:   0
Keep-Alive requests:49507
Total transferred:  

Re: Need a new feature: Listing of CGI-enabled directories.

2002-05-31 Thread Rasmus Lerdorf

mod_info will tell you some of this.  ie. Look for ScriptAlias lines under
mod_alias.c and AddHandler cgi-script lines under mod_mime.c.

But you are fighting a bit of a lost cause here.  If you allow users to
upload arbitrary cgi scripts there really isn't much you can do at the
Apache level.  It becomes a system security issue.  ie. blocking outbound
port 25 connections, for example.

-Rasmus

On Thu, 30 May 2002, Ronald F. Guilmette wrote:


 In message [EMAIL PROTECTED],
 Zac Stevens [EMAIL PROTECTED] wrote:

 Let me preface this by noting that I agree with your goals, however I
 believe that you may not have considered the nature of the problem in
 sufficient depth.

 I'll buy that.  I mean it would be arrogant of me... and possibly also
 just plain wrong... not to admit the possibility that I have misjudged
 the true nature of the problem.

 On Thu, May 30, 2002 at 07:45:42PM -0700, Ronald F. Guilmette wrote:
  The first step in finding all such scripts however may often be the most
  difficult one.  That first step consists of simply gathering into one
  big list a list of all of the CGI-enabled directories on the local web
  server.  Once such a list has been compiled, other standard UNIX tools
  such as `find' and `file' and `grep' and be set to work, plowing through
  all of the files in those (CGI) directories and finding all of the bad
  FormMail scripts.
 
 How are you defining bad FormMail scripts here?

 Spammer exploitable.

 A more detailed elaboration of that term, as I use it, may be found here:

 http://www.monkeys.com/anti-spam/formmail-advisory.pdf

 In the simplest case,
 you could just run 'find' across the filesystem containing the web content
 looking for formmail.cgi or formmail.pl...

 Hold on there a moment!

 The object here is to do the search _efficiently_, i.e. such that it can
 be done even by very large virtual web hosting companies, on all web
 servers, and every night.

 Searching the entire filesystem is out of the question.

  and checking those found
 against a list of known good/bad versions.  This doesn't require any
 specific knowledge of the Apache configuration in use, and is an entirely
 viable approach even on filesystems of several hundred gigabytes.

 I believe that I disagree.

 There are two separate problems with what you proposed.  First is the
 fact that just searching for _filenames_ with the word formmail or
 FormMail in them is not sufficient to find all of the bad Matt Wright
 FormMail scripts that are installed on a given server.  End-lusers
 often install the scripts using differet names, e.g. form.pl or
 mail.pl or just fm.pl.  The second problem is the notion of searching
 several hunderd gigabytes of filesystem.  That just isn't a viable approach,
 especially given that some of the parties I'm dealing with on this issue
 are already balking, even at the notion of merely scanning _just_ their
 CGI-enabled directories.

 A more thorough check would involve testing all executable ascii files,
 perhaps excluding .html/.php and variants thereof.

 Yes, and that is what is needed.

 Every plain file that has the execute bit set and that resides in any
 directory for which ExecCGI is enabled must be checked (a) to see if
 it is a Perl script and then (b) to see if it is a Matt Wright Perl
 script.

  But seriously, is there already a way to do what I need to do with the
  Apache server?  Looking at the command line options on the man page for
  httpd, there doesn't seem to be an option to request httpd to just parse
  the config file, list the CGI directories, and then exit.  But that's
  exactly what I need.
 
 It isn't possible in the generic case.  Apache allows many aspects of the
 configuration to be modified by the inclusion of .htaccess files beneath
 the DocumentRoot of the web server.  Unless Apache has been configured not
 to allow the ExecCGI option to be overridden, you would need to parse both
 httpd.conf AND every .htaccess file on the filesystem.  Apache itself does
 not do this at startup - it is done only as required.

 Assume the simplifying assumption that enabling ExecCGI via .htaccess files
 has been disallowed within the http.conf file.

 _Now_ tell me how to get a list of top-level CGI-enabled directories out
 of httpd... please.

 You also can't assume that only files in designated CGI directories are
 going to be problematic.

 Actually, I believe that I can, under a certain set of conditions.

 If you would like to help me flesh out what that exact set of conditions
 is, then pby all means, please do.  I will appreciate it.

 Understand that I am _not_ trying to build a solution to this searching
 problem that will cover every possible contingency.  I will be satisfied
 to build a solution that I can offer to web hosting companies and then
 tell them ``This will work if you carefully restrict ExecCGI capability
 by doing thus-and-such.''

 That will be adequate for my purposes.

 There's a long history of people using 

Re: Odd URL (mis)behavior in 2.0

2002-05-17 Thread Rasmus Lerdorf

 Right now PATH_INFO is not automatically passed to PHP scripts in the
 Apache 2.0 module for PHP. I have a patch on my plate that enables it
 by default, but for now you can add AcceptPathInfo On to the directory
 or location sections where you want it to work.

That should go in.  Why would you not want $PATH_INFO?  I don't think it
should be configurable at all.  It should always be there.

-Rasmus




RE: is httpd a valid way to start Apache?

2002-05-16 Thread Rasmus Lerdorf

  My own opinion is that we leave things exactly as they are today.  If
  you are running the binary by hand, you are taking some responsibility
  for knowing what you are doing.  That means having the environment
  variables setup correctly before you start.
 
  If you don't want that responsibility, use apachectl to run the server.
  Trying to solve this problem any other way just seems like we are asking
  for trouble.

 I think that is exactly what this proposal is saying.  But at the same
 time it is cleaning up apachectl and adding some useful functionality to
 httpd.  As I've said, the current apachectl is over-complicated and the
 split between apachectl and httpd is confusing to some people.  This
 change would clear that up.

Various distros out there are also choosing to not even include apachectl
and instead include their own init.d start/stop script which invariably is
less powerful and sometimes plain wrong.  It would be nice to include some
of that logic in the binary itself to give the package maintainers less
bullets for their feet.

-Rasmus




Re: [Patch] Concept: have MPM identify itself in Server header

2002-05-03 Thread Rasmus Lerdorf

Ok, but as far as I am concerned something like PHP, mod_dav, mod_perl,
etc. are also server implementation details that do not belong in this
header.  Unless I misunderstood Roy's message.  I don't see much of a
difference between announcing PHP there and an MPM.

-Rasmus

On Fri, 3 May 2002, Cliff Woolley wrote:

 On Fri, 3 May 2002, Rasmus Lerdorf wrote:

  Ok, but where should this information go then?  Apache has definitely
  benefitted by having this information available.  Some sort of
  X-SERVER-INFO: header then?

 What I meant was I don't think the MPM should be announced to the client.
 What possible benefit could there be to doing that?

 --Cliff

 --
Cliff Woolley
[EMAIL PROTECTED]
Charlottesville, VA






RE: what replaced --activate-module?

2002-04-10 Thread Rasmus Lerdorf

There is no static library support for PHP with Apache 2 at this point.
ie. you can only build using --with-apxs2 (if you are lucky)

Sometime down the road we will probably add this, but it definitely will
not be in 4.2.  Perhaps 4.3.

-Rasmus

On 9 Apr 2002, Austin Gonyou wrote:

 so for say php 4.1.2, when I do --with-apache2(instead of apxs2) I
 shouldn't have to activate the module in apache2 ./configure anymore?

 Is that correct?

 On Tue, 2002-04-09 at 13:48, Ryan Bloom wrote:
  To the best of my knowledge, that option has been removed and not
  replaced.  It doesn't really make sense anymore.
 
  Ryan
 
  --
  Ryan Bloom  [EMAIL PROTECTED]
  645 Howard St.  [EMAIL PROTECTED]
  San Francisco, CA
 
   -Original Message-
   From: Austin Gonyou [mailto:[EMAIL PROTECTED]]
   Sent: Tuesday, April 09, 2002 11:45 AM
   To: [EMAIL PROTECTED]
   Subject: what replaced --activate-module?
  
   Is there something that replaced this configure option, or does it
  still
   exist? I don't see it.
   --
   Austin Gonyou
   Systems Architect, CCNA
   Coremetrics, Inc.
   Phone: 512-698-7250
   email: [EMAIL PROTECTED]
  
   It is the part of a good shepherd to shear his flock, not to skin
  it.
   Latin Proverb
 --
 Austin Gonyou
 Systems Architect, CCNA
 Coremetrics, Inc.
 Phone: 512-698-7250
 email: [EMAIL PROTECTED]

 It is the part of a good shepherd to shear his flock, not to skin it.
 Latin Proverb





Drop md5 from htpasswd docs please

2002-04-01 Thread Rasmus Lerdorf

I am getting rather tired of answering questions on this one.  Could we
please drop this crap about htpasswd using md5.  A modified md5 is no
longer md5, so let's not call it md5 at all.  Over and over again people
ask me why md5($string) doesn't match what is in htpasswd-generated
password files.

-Rasmus




Re: Drop md5 from htpasswd docs please

2002-04-01 Thread Rasmus Lerdorf

Well, we don't need a whole lot of help to implment apache_md5 in PHP.  I
don't think I'd call it that though.  As far as I am concerned there is no
such thing as modified md5.  It is either md5 or it isn't.

-Rasmus

On Mon, 1 Apr 2002, David Ford wrote:

 Is it possible for whomever knows best to provide code or help to the
 PHP group and make a PHP bsd|apache_md5() function?  Or adapt the
 current PHP function w/ an additional attribute to select which type of
 hash to use?  md5($string, ..., HASH_NORM|HASH_BSD), it'd be very nice
 if the latter was accepted, I'm sure in the future there will be at
 least one more implementation of md5 to cope with.

 Thanks for listening,
 David

 Rasmus Lerdorf wrote:

 I am getting rather tired of answering questions on this one.  Could we
 please drop this crap about htpasswd using md5.  A modified md5 is no
 longer md5, so let's not call it md5 at all.  Over and over again people
 ask me why md5($string) doesn't match what is in htpasswd-generated
 password files.
 
 -Rasmus
 






Re: sub requests are all GETs

2001-09-05 Thread Rasmus Lerdorf

Whoa, deja vu...  I could have sworn I fixed something very similar to
this more than 5 years ago now.  In fact, here is the patch for Apache
1.2.x:

Fri Mar 1 03:01:06 1996 UTC (66 months, 1 week ago)
http://cvs.apache.org/viewcvs.cgi/apache-1.2/src/http_request.c.diff?r1=1.2r2=1.3

Not exactly the same issue, I know, but very close.

-Rasmus


On Wed, 5 Sep 2001, Eric Prud'hommeaux wrote:

 Can anybody explain why ap_set_sub_req_protocol does
 rnew-method  = GET;
 rnew-method_number   = M_GET;
 instead of
 rnew-method  = r-method;
 rnew-method_number   = r-method_number;
 ? The consequence is that functions like negotiation
 sub_req = ap_sub_req_lookup_file(dirent.name, r, NULL);
 check auth on the wrong method. You can check this by POSTing to
 foo and having a limit on POST for foo.php3 (as opposed to the
 whole directory). A quick way to check is to set a breakpoint in
 ap_set_sub_req_protocol and
   telnet localhost 80
   POST /Overview HTTP/1.0
   Content-Length: 5

   abcd
 Any calls to the auth modules will have a method of GET despite
 the POST action they will eventually execute.

 All auth modules and the like could check for this:
   int method = r-main ? r-main-method_number : r-method_number;
 but it seems better to have the sub request default to the method
 of the request that inspired it. There may be some modules that
 may count on the default behavior, like mod_include, but I think
 they should specifically make the new method be a GET as they are
 not duplicating the parent request's behaviour.






Re: per-dir config

2001-09-04 Thread Rasmus Lerdorf

 It shouldn't.  You potentially need to protect yourself from NULL r-filename
 (we haven't decided what to do yet with *this*is*not*a*file* requests.)  Since
 PHP generally serves -files-, this won't be a huge change for you.  For serving
 from an SQL database, or proxied requests, or internal handlers (even php-status)
 you can speed things up/protect the right resources with the map_to_storage hook.

Well, I am actually writing the code that will let people supply PHP
scripts that get called by any of the hooks which means that in this case
the request will not necessarily result in a file being served.

 I'll try to document this complete on my way into the office tommorow ;)

That would be appreciated.  Especially if it references the 1.3 API as
well and highlights the differences.

-Rasmus




per-dir config

2001-09-03 Thread Rasmus Lerdorf

Are per-dir configs available before the uri-filename translation handler
in 1.3.x, or do they apply to the translated filenames and thus any config
directives accessed by the filename translation hook can only be
server-wide?

And is this the same in 2.0.x?

It would make sense to me for this to be the case, but I am just looking
for a sanity check here to verify what I am seeing in my code.

-Rasmus




  1   2   >