Session.py bug?

2006-08-30 Thread Andy Pearce


Hi,

I think I might have spotted a slight bug in Session.py. When the 
'secret' parameter is supplied to use the SignedCookie class, it appears 
that __init__ of BaseSession doesn't check the return type of get_cookies().


If I understand the SignedCookie docs correctly, if the cookie value 
doesn't match its signature, it simply returns the contents as a Cookie 
rather than a SignedCookie (indicating that the user tampered with their 
cookie before sending it back).


However, there is no check in BaseSession's __init__ that the return of 
get_cookies() is a SignedCookie in the case that 'secret' is supplied.


Perhaps a minor point, but it would seem to make the option of using 
SignedCookies rather pointless, since the signature isn't being checked. 
Presumably if the cookie has been tampered with, your only safe option 
is to throw it away and generate a new one. I think this can be achieved 
by changing the lines:


if cookies.has_key(session_cookie_name):
self._sid = cookies[session_cookie_name].value

To something like:

if cookies.has_key(session_cookie_name):
if not secret or type(cookes[session_cookie_name]) \
   is Cookie.SignedCookie:
self._sid = cookies[session_cookie_name].value

I'm fairly new to mod_python, so if I'm mistaken then my apologies, and 
a quick explanation of why would be very much appreciated! ^_^


Thanks,

- Andy


Re: How to detect the mpm used via apxs?

2006-08-30 Thread Enrico Weigelt
* Mladen Turk [EMAIL PROTECTED] wrote:

Hi,

 Anyone knows how to detect the mpm used so that
 module can be build with/without threading code
 depending if the mpm is prefork or any other threaded
 one like worker by using apxs?

are you shure you really want to know the mpm name instead of
just a flag which tells you if threading is available ?

 The only way I can imagine is to parse the stdout from
 httpd, but IMHO something like
 apxs -q MPM should do the trick like it does for CFLAGS
 or INCLUDES.

Actually, I don't like the whole apxs script at all. Why not just
install an extra .pc file for each installed module, also for
the MPM's ?


cu
-- 
-
 Enrico Weigelt==   metux IT service

  phone: +49 36207 519931 www:   http://www.metux.de/
  fax:   +49 36207 519932 email: [EMAIL PROTECTED]
  cellphone: +49 174 7066481
-
 -- DSL ab 0 Euro. -- statische IP -- UUCP -- Hosting -- Webshops --
-


Re: How to detect the mpm used via apxs?

2006-08-30 Thread Enrico Weigelt
* Guy Hulbert [EMAIL PROTECTED] wrote:

snip

 or if you've already compiled it ...
 
 $ /usr/sbin/apache2 -V | grep MPM
  -D APACHE_MPM_DIR=server/mpm/worker

Bad, very bad. Breaks crosscompiling.

Ah, yeah, apache cannot be crosscompile'd w/o massive manual 
intervention at all ... ;-o

(but I'm working on that ...)


cu
-- 
-
 Enrico Weigelt==   metux IT service

  phone: +49 36207 519931 www:   http://www.metux.de/
  fax:   +49 36207 519932 email: [EMAIL PROTECTED]
  cellphone: +49 174 7066481
-
 -- DSL ab 0 Euro. -- statische IP -- UUCP -- Hosting -- Webshops --
-


[jira] Commented: (MODPYTHON-187) Hang on subscripted access to request.subprocess_env.

2006-08-30 Thread Jim Gallacher (JIRA)
[ 
http://issues.apache.org/jira/browse/MODPYTHON-187?page=comments#action_12431530
 ] 

Jim Gallacher commented on MODPYTHON-187:
-

I've audited tableobject.c for other lines where NULL is being passed to 
PyString_FromString and found a few functions that may segfault if they are 
called in the post read request phase where SCRIPT_FILENAME is NULL.

Line numbers are for version 3.3.0-dev-20060827, r437300.

line 178 in table_repr()
PyString_ConcatAndDel(s, PyString_FromString(elts[i].val));


line 366 in function table_values()
PyObject *val = PyString_FromString(elts[i].val);

line 792 in function table_traverse()
PyObject *v = PyString_FromString(elts[i].val);

line 845 in function select_value()
return PyString_FromString(elts-val);

We should audit all our code to make sure we are not making the same mistake 
with PyString_FromString elsewhere.


 Hang on subscripted access to request.subprocess_env.
 -

 Key: MODPYTHON-187
 URL: http://issues.apache.org/jira/browse/MODPYTHON-187
 Project: mod_python
  Issue Type: Bug
  Components: core
Affects Versions: 3.2.10
 Environment: Apache: 2.0.59
 ModPython:  3.2.10
 Python: 2.4
 OS: Windows Server 2003
Reporter: Alan Kennedy
 Attachments: MP187-2006-08-28-jgallacher-1.diff


 When subscripted access is used to access variable 'SCRIPT_FILENAME' in the 
 request.subprocess_env table/mapping, the code hangs.
 The following snippet illustrates the problem.
 # -=-=-=-=-=-=
 def postreadrequesthandler(request):
   request.add_common_vars()
   value = request.subprocess_env['SCRIPT_FILENAME']# This hangs
 # value = request.subprocess_env.get('SCRIPT_FILENAME')# This works
   return apache.OK
 # -=-=-=-=-=-=
 The strange thing is that the .get() access works fine: only the subscript 
 hangs?
 If anyone is wondering about a use-case, I don't actually have one. I was 
 just iterating over the contents of the request.subprocess_env using a for 
 loop (code below), and found that the code hung when accessing 
 'SCRIPT_FILENAME', and not for any other variable.
 # -=-=-=
 request.add_common_vars()
 d = {}
 for sek in request.subprocess_env.keys():
   d[sek] = request.subprocess_env[sek]
 # -=-=-=

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira




[Announce] apache httpd listed in CSDB (comprehensive source database)

2006-08-30 Thread Enrico Weigelt

Hi folks,


I'd like to accounce that the apache httpd, apr + friends are 
listed in the Comprehensive Source Database at:

http://sourcefarm.metux.de

This database contains the tarball URLs of dozens of package 
releases and it's intended to be used by fully automated systems, 
so no more manual downloading or URLs maintenance is necessary.

You can help us greatly, if you regularily check the database 
records or even join our team and contribute crawlers.

Current package records for the apache httpd:

http://sourcefarm.metux.de/webfront/?show=packagepackage=apache-apr
http://sourcefarm.metux.de/webfront/?show=packagepackage=apache-apr-util
http://sourcefarm.metux.de/webfront/?show=packagepackage=apache-iconv
http://sourcefarm.metux.de/webfront/?show=packagepackage=apache-httpd2



Greets,
-- 
-
 Enrico Weigelt==   metux IT service

  phone: +49 36207 519931 www:   http://www.metux.de/
  fax:   +49 36207 519932 email: [EMAIL PROTECTED]
  cellphone: +49 174 7066481
-
 -- DSL ab 0 Euro. -- statische IP -- UUCP -- Hosting -- Webshops --
-


Re: perchild

2006-08-30 Thread Enrico Weigelt
* Guy Hulbert [EMAIL PROTECTED] wrote:

Hi,

 I'm looking at perchild with the aim of getting it working.

maybe you're looking for: http://www.metux.de/mpm

The project has been stalled for quite a while :(
But maybe it's time for revival ?

 In STATUS I see:
 
 Get perchild to work on platforms other than Linux. This will require a
 portable mechanism to pass data and file/socket descriptors between
 vhost child groups.

Perchild *never* worked. The idea isn't bad - we took much of it
into metuxmpm, but there were major design problems. For example:
each childs can accept clients. That's very bad, because it allows
some user to intercept another's requests with some probability.

The whole idea of passing *sockets* (instead of requests) between
processes only works on very few systems, ie. Linux, BSD and 
perhaps some others. So the whole portability issue is useless - 
those MPMs only work some Unix'es, and there evrythere the same.


cu
-- 
-
 Enrico Weigelt==   metux IT service

  phone: +49 36207 519931 www:   http://www.metux.de/
  fax:   +49 36207 519932 email: [EMAIL PROTECTED]
  cellphone: +49 174 7066481
-
 -- DSL ab 0 Euro. -- statische IP -- UUCP -- Hosting -- Webshops --
-


Re: perchild

2006-08-30 Thread Colm MacCarthaigh
On Wed, Aug 30, 2006 at 12:59:02PM +0200, Enrico Weigelt wrote:
 The whole idea of passing *sockets* (instead of requests) between
 processes only works on very few systems, ie. Linux, BSD and 
 perhaps some others. So the whole portability issue is useless - 
 those MPMs only work some Unix'es, and there evrythere the same.

None of our MPMs offers that kind of portability.

-- 
Colm MacCárthaighPublic Key: [EMAIL PROTECTED]


[PATCH] split ap_get_server_version() into two functions...

2006-08-30 Thread Jeff Trawick

... so that ServerTokens doesn't affect what gets logged to the error
log at startup (or any other place where we want the description of
the server instead of the banner to be written over the network).

This patch axes ap_get_server_version() so that third-party modules
will be forced to make a choice in post-2.2.x versions -- call
ap_get_server_banner() to retrieve the string suitable for sending
over the network (as controlled by ServerTokens) or call
ap_get_server_description() to retrieve the string that describes the
server version and certain plug-in modules.

I haven't actually changed the returned strings with this patch, but
instead would like to see any comments on the direction.  The two
functions are present and all httpd code has been modified to call the
proper function, which is also subject to a useful review.  What about
status pages?  Is the server version and module configuration somehow
more private than the status page itself, such that they should use
ap_get_server_banner() as in the current patch?
Index: server/mpm/winnt/service.c
===
--- server/mpm/winnt/service.c  (revision 438471)
+++ server/mpm/winnt/service.c  (working copy)
@@ -436,7 +436,7 @@
 
 /* Time to fix up the description, upon each successful restart
  */
-full_description = ap_get_server_version();
+full_description = ap_get_server_description();
 
 if ((osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
(osver.dwMajorVersion  4)
Index: server/mpm/winnt/mpm_winnt.c
===
--- server/mpm/winnt/mpm_winnt.c(revision 438471)
+++ server/mpm/winnt/mpm_winnt.c(working copy)
@@ -1705,7 +1705,7 @@
 /* A real-honest to goodness parent */
 ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
  %s configured -- resuming normal operations,
- ap_get_server_version());
+ ap_get_server_description());
 ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
  Server built: %s, ap_get_server_built());
 
Index: server/mpm/mpmt_os2/mpmt_os2.c
===
--- server/mpm/mpmt_os2/mpmt_os2.c  (revision 438471)
+++ server/mpm/mpmt_os2/mpmt_os2.c  (working copy)
@@ -207,7 +207,7 @@
 int listener_num, num_listeners, slot;
 ULONG rc;
 
-printf(%s \n, ap_get_server_version());
+printf(%s \n, ap_get_server_description());
 set_signals();
 
 if (ap_setup_listeners(ap_server_conf)  1) {
@@ -270,7 +270,7 @@
 ap_scoreboard_image-global-restart_time = apr_time_now();
 ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
 %s configured -- resuming normal operations,
-ap_get_server_version());
+ap_get_server_description());
 ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
 Server built: %s, ap_get_server_built());
 #ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
Index: server/mpm/netware/mpm_netware.c
===
--- server/mpm/netware/mpm_netware.c(revision 438471)
+++ server/mpm/netware/mpm_netware.c(working copy)
@@ -723,7 +723,7 @@
 request_count = 0;
 
 ClearScreen (getscreenhandle());
-printf(%s \n, ap_get_server_version());
+printf(%s \n, ap_get_server_description());
 
 for (i=0;iSERVER_NUM_STATUS;i++) {
 status_array[i] = 0;
@@ -793,7 +793,7 @@
 ap_listen_rec *lr;
 module **m;
 
-printf(%s\n, ap_get_server_version());
+printf(%s\n, ap_get_server_description());
 if (ap_my_addrspace  (ap_my_addrspace[0] != 'O')  (ap_my_addrspace[1] 
!= 'S'))
 printf(   Running in address space %s\n, ap_my_addrspace);
 
@@ -899,7 +899,7 @@
 
 ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
 %s configured -- resuming normal operations,
-ap_get_server_version());
+ap_get_server_description());
 ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf,
 Server built: %s, ap_get_server_built());
 #ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
@@ -1204,7 +1204,7 @@
 restart();
 }
 else if (!strnicmp(VERSION,szcommandLine[iCommandLen],3)) {
-printf(Server version: %s\n, ap_get_server_version());
+printf(Server version: %s\n, ap_get_server_description());
 printf(Server built:   %s\n, ap_get_server_built());
 }
 else if (!strnicmp(MODULES,szcommandLine[iCommandLen],3)) {
Index: server/mpm/beos/beos.c
===
--- server/mpm/beos/beos.c  (revision 438471)
+++ server/mpm/beos/beos.c  (working copy)
@@ -935,7 +935,7 @@
  */
 ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
 %s 

porstfs bug t2000 and 2.2

2006-08-30 Thread Brian Akins
We tested a Sun t2000 with httpd 2.2.  It did okay. Now, Sun says 
there is an issue with 2.2 and portfs on Solaris 10 on the t2000.  Not 
real sure what this means.  Anyone else heard this?



--
Brian Akins
Chief Operations Engineer
Turner Digital Media Technologies


Re: porstfs bug t2000 and 2.2

2006-08-30 Thread Colm MacCarthaigh
On Wed, Aug 30, 2006 at 09:20:52AM -0400, Brian Akins wrote:
 We tested a Sun t2000 with httpd 2.2.  It did okay. Now, Sun says 
 there is an issue with 2.2 and portfs on Solaris 10 on the t2000.  

It didn't do very well for me with Solaris 10 either.

 Not real sure what this means.  Anyone else heard this?

Yep, it's event ports, which we support. How their implementation
handles it, who knows :-)

-- 
Colm MacCárthaighPublic Key: [EMAIL PROTECTED]


Re: porstfs bug t2000 and 2.2

2006-08-30 Thread Rainer Jung
Look at Sun Alert 102485:

http://sunsolve.sun.com/search/document.do?assetkey=1-26-102485-1

The bug should have been fixed with 118833-12 several months ago. Most
early evaluaters of Niagara with Apache 2.2 ran into kernel panics
because of the bug.

The most recent kernel update patch is 118833-20 (SPARC versions, X86
should be analogous).

Regards,

Rainer

Colm MacCarthaigh schrieb:
 On Wed, Aug 30, 2006 at 09:20:52AM -0400, Brian Akins wrote:
 We tested a Sun t2000 with httpd 2.2.  It did okay. Now, Sun says 
 there is an issue with 2.2 and portfs on Solaris 10 on the t2000.  
 
 It didn't do very well for me with Solaris 10 either.
 
 Not real sure what this means.  Anyone else heard this?
 
 Yep, it's event ports, which we support. How their implementation
 handles it, who knows :-)
 


mod_slotmem

2006-08-30 Thread Brian Akins
With all the talk of a generic scoreboard, here's something I whipped 
up that allows any other module to have some amount of memory per 
worker slot.  We have a different module in-house at CNN which does 
something similar. This one is a little rough around the edges, but 
gives an idea of what I was thinking about doing.



--
Brian Akins
Chief Operations Engineer
Turner Digital Media Technologies
#ifndef __MOD_slotmem__
#define __MOD_slotmem__

typedef struct ap_slotmem_t ap_slotmem_t;

typedef apr_status_t ap_slotmem_callback_fn_t(void* mem, void *data, apr_pool_t 
*pool);

AP_DECLARE(apr_status_t)ap_slotmem_do(ap_slotmem_t *s, ap_slotmem_callback_fn_t 
*func, void *data, apr_pool_t *pool);

AP_DECLARE(apr_status_t) ap_slotmem_create(ap_slotmem_t **new, const char 
*name, apr_size_t item_size, apr_pool_t *pool);

AP_DECLARE(apr_status_t) ap_slotmem_mem(ap_slotmem_t *s, conn_rec *c, 
void**mem);

#endif
#include httpd.h
#include http_config.h
#include http_protocol.h
#include http_connection.h
#include ap_config.h
#include http_log.h
#include scoreboard.h
#include apr_strings.h
#include apr_shm.h
#include ap_mpm.h 

#include sys/types.h
#include unistd.h

#include mod_status.h
#include mod_slotmem.h

module AP_MODULE_DECLARE_DATA slotmem_module;

static int server_limit = 0;
static int thread_limit = 0;
static int total_limit = 0;

static apr_array_header_t *slotmem_array = NULL;

struct ap_slotmem_t {
apr_pool_t *pool;
const char *name;
apr_shm_t *shm;
void *mem;
apr_size_t item_size; /*size of each item*/
apr_size_t total_size;
};


AP_DECLARE(apr_status_t)ap_slotmem_do(ap_slotmem_t *s, ap_slotmem_callback_fn_t 
*func, void *data, apr_pool_t *pool) {
apr_status_t rv = APR_SUCCESS;
int i;
void *mem;

for(i = 0; i  total_limit; i++) {
mem = s-mem + (i * s-item_size);
if((rv = func(mem, data, pool)) != APR_SUCCESS) {
return rv;
}
}
return rv;
}

AP_DECLARE(apr_status_t) ap_slotmem_create(ap_slotmem_t **n, const char *name, 
apr_size_t item_size, apr_pool_t *pool) {
ap_slotmem_t *s, **new;

s = apr_pcalloc(pool, sizeof(ap_slotmem_t));
 
s-pool = pool;
s-name = apr_pstrdup(pool, name);
s-item_size = item_size;

new = (ap_slotmem_t **) apr_array_push(slotmem_array);
(*new) = (ap_slotmem_t *) s;

*n = s;

return APR_SUCCESS;
}

AP_DECLARE(apr_status_t) ap_slotmem_mem(ap_slotmem_t *s, conn_rec *c, void 
**mem) {
/*this should work for all mpm's*/
void *d = s-mem + (c-id * s-item_size);

*mem = d;
if(!d) {
ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c,
  ap_slotmem_mem: d is NULL, %ld, %p,
  c-id, s-mem
  );
return APR_EGENERAL;
}
return APR_SUCCESS;
}

static int slotmem_status(request_rec *r, int flags)
{
int i;
ap_slotmem_t *sb, **list;

if (!(flags  AP_STATUS_SHORT)) {
ap_rputs(hr /bslotmems/b\n, r);
ap_rputs(table border=1trtdbName/b/tdtdbItem 
Size/b/tdtdbTotal Size/b/td/tr\n, r); 
}
list = (ap_slotmem_t **)slotmem_array-elts;
for(i = 0; i  slotmem_array-nelts; i++) {
sb = list[i]; 
if (!(flags  AP_STATUS_SHORT)) {
ap_rprintf(r, 
trtd%s/tdtd%APR_SIZE_T_FMT/tdtd%APR_SIZE_T_FMT/td/tr\n,
   sb-name, sb-item_size, sb-total_size);
} else {
ap_rprintf(r, slotmem: %s %APR_SIZE_T_FMT%APR_SIZE_T_FMT\n,
   sb-name, sb-item_size, sb-total_size);
}
}

if (!(flags  AP_STATUS_SHORT)) {
 ap_rputs(/table\n, r); 
}
return OK;
}

static int post_config(apr_pool_t *p, apr_pool_t * plog, apr_pool_t * ptemp,
   server_rec *s)
{

apr_size_t amt;
apr_time_t now;
pid_t pid;
char *file;
ap_slotmem_t *sb, **list;
int i;
apr_status_t rv;
const char *temp_dir; 
char *data = NULL;

/*have we been here before? */
apr_pool_userdata_get((void *) data, __FILE__,
  s-process-pool);

if (!data) {
apr_pool_userdata_set((const void *) 1, __FILE__,
  apr_pool_cleanup_null, s-process-pool);
return OK;
}

ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, thread_limit);
ap_mpm_query(AP_MPMQ_HARD_LIMIT_DAEMONS, server_limit);
total_limit = thread_limit * server_limit;

now = apr_time_now();
pid = getpid();
if ((rv = apr_temp_dir_get(temp_dir, p)) != APR_SUCCESS) {
ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, s,
 apr_temp_dir_get failed);
return rv;
}

/*XXX: currently, this uses one shm per slotmem.  We could try to pack them
all into a few larger shm's*/
list = (ap_slotmem_t **)slotmem_array-elts;
for(i = 0; i  slotmem_array-nelts; i++) {
sb = list[i];
sb-total_size = amt = sb-item_size * 

Re: mod_slotmem

2006-08-30 Thread Jean-frederic Clere
On Wed, 2006-08-30 at 10:37 -0400, Brian Akins wrote:
 With all the talk of a generic scoreboard, here's something I whipped 
 up that allows any other module to have some amount of memory per 
 worker slot.  We have a different module in-house at CNN which does 
 something similar. This one is a little rough around the edges, but 
 gives an idea of what I was thinking about doing.

Nice stuff but I am not sure that having shared memory per slot scales
when having a lot of entries, but that makes sure that one
process/thread won't overwrite another one slot.

I will try to use memory providers of httpd-scoreboard to provide the
memory to your module.

Cheers

Jean-Frederic

 
 
 plain text document attachment (mod_slotmem.h)
 #ifndef __MOD_slotmem__
 #define __MOD_slotmem__
 
 typedef struct ap_slotmem_t ap_slotmem_t;
 
 typedef apr_status_t ap_slotmem_callback_fn_t(void* mem, void *data, 
 apr_pool_t *pool);
 
 AP_DECLARE(apr_status_t)ap_slotmem_do(ap_slotmem_t *s, 
 ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool);
 
 AP_DECLARE(apr_status_t) ap_slotmem_create(ap_slotmem_t **new, const char 
 *name, apr_size_t item_size, apr_pool_t *pool);
 
 AP_DECLARE(apr_status_t) ap_slotmem_mem(ap_slotmem_t *s, conn_rec *c, 
 void**mem);
 
 #endif
 plain text document attachment (mod_slotmem.c)
 #include httpd.h
 #include http_config.h
 #include http_protocol.h
 #include http_connection.h
 #include ap_config.h
 #include http_log.h
 #include scoreboard.h
 #include apr_strings.h
 #include apr_shm.h
 #include ap_mpm.h 
 
 #include sys/types.h
 #include unistd.h
 
 #include mod_status.h
 #include mod_slotmem.h
 
 module AP_MODULE_DECLARE_DATA slotmem_module;
 
 static int server_limit = 0;
 static int thread_limit = 0;
 static int total_limit = 0;
 
 static apr_array_header_t *slotmem_array = NULL;
 
 struct ap_slotmem_t {
 apr_pool_t *pool;
 const char *name;
 apr_shm_t *shm;
 void *mem;
 apr_size_t item_size; /*size of each item*/
 apr_size_t total_size;
 };
 
 
 AP_DECLARE(apr_status_t)ap_slotmem_do(ap_slotmem_t *s, 
 ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool) {
 apr_status_t rv = APR_SUCCESS;
 int i;
 void *mem;
 
 for(i = 0; i  total_limit; i++) {
 mem = s-mem + (i * s-item_size);
 if((rv = func(mem, data, pool)) != APR_SUCCESS) {
 return rv;
 }
 }
 return rv;
 }
 
 AP_DECLARE(apr_status_t) ap_slotmem_create(ap_slotmem_t **n, const char 
 *name, apr_size_t item_size, apr_pool_t *pool) {
 ap_slotmem_t *s, **new;
 
 s = apr_pcalloc(pool, sizeof(ap_slotmem_t));
  
 s-pool = pool;
 s-name = apr_pstrdup(pool, name);
 s-item_size = item_size;
 
 new = (ap_slotmem_t **) apr_array_push(slotmem_array);
 (*new) = (ap_slotmem_t *) s;
 
 *n = s;
 
 return APR_SUCCESS;
 }
 
 AP_DECLARE(apr_status_t) ap_slotmem_mem(ap_slotmem_t *s, conn_rec *c, void 
 **mem) {
 /*this should work for all mpm's*/
 void *d = s-mem + (c-id * s-item_size);
 
 *mem = d;
 if(!d) {
 ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c,
   ap_slotmem_mem: d is NULL, %ld, %p,
   c-id, s-mem
   );
 return APR_EGENERAL;
 }
 return APR_SUCCESS;
 }
 
 static int slotmem_status(request_rec *r, int flags)
 {
 int i;
 ap_slotmem_t *sb, **list;
 
 if (!(flags  AP_STATUS_SHORT)) {
 ap_rputs(hr /bslotmems/b\n, r);
 ap_rputs(table border=1trtdbName/b/tdtdbItem 
 Size/b/tdtdbTotal Size/b/td/tr\n, r); 
 }
 list = (ap_slotmem_t **)slotmem_array-elts;
 for(i = 0; i  slotmem_array-nelts; i++) {
 sb = list[i]; 
 if (!(flags  AP_STATUS_SHORT)) {
 ap_rprintf(r, 
 trtd%s/tdtd%APR_SIZE_T_FMT/tdtd%APR_SIZE_T_FMT/td/tr\n,
sb-name, sb-item_size, sb-total_size);
 } else {
 ap_rprintf(r, slotmem: %s %APR_SIZE_T_FMT%APR_SIZE_T_FMT\n,
sb-name, sb-item_size, sb-total_size);
 }
 }
 
 if (!(flags  AP_STATUS_SHORT)) {
  ap_rputs(/table\n, r); 
 }
 return OK;
 }
 
 static int post_config(apr_pool_t *p, apr_pool_t * plog, apr_pool_t * ptemp,
server_rec *s)
 {
 
 apr_size_t amt;
 apr_time_t now;
 pid_t pid;
 char *file;
 ap_slotmem_t *sb, **list;
 int i;
 apr_status_t rv;
 const char *temp_dir; 
 char *data = NULL;
 
 /*have we been here before? */
 apr_pool_userdata_get((void *) data, __FILE__,
   s-process-pool);
 
 if (!data) {
 apr_pool_userdata_set((const void *) 1, __FILE__,
   apr_pool_cleanup_null, s-process-pool);
 return OK;
 }
 
 ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, thread_limit);
 ap_mpm_query(AP_MPMQ_HARD_LIMIT_DAEMONS, server_limit);
 total_limit = thread_limit * 

Re: mod_slotmem

2006-08-30 Thread Brian Akins

Jean-frederic Clere wrote:

Nice stuff but I am not sure that having shared memory per slot scales
when having a lot of entries, but that makes sure that one
process/thread won't overwrite another one slot.


It scales very nicely.  We run with max clients set between 16k-32k with 
no issues.  Our item sizes range from 64-264 bytes.  at 264 bytes and 
24k max clients, it requires about 6.5 MB of shared memory and we 
usually have 8-12 slotmems of varying sizes, so we use about 32-64 MB 
of shared memory for all the slotmems.


It is very fast as there is no locking necessary as each slot is only 
every written to by a single writer (it's tied to a connection id).




--
Brian Akins
Chief Operations Engineer
Turner Digital Media Technologies


Re: porstfs bug t2000 and 2.2

2006-08-30 Thread Justin Erenkrantz

On 8/30/06, Rainer Jung [EMAIL PROTECTED] wrote:

The most recent kernel update patch is 118833-20 (SPARC versions, X86
should be analogous).


Yah, that bug has been fixed.  (Paul reported the bug early on, I think.)

We have also heard reports that the SSL crypto engine on the T2000's
is horked.  We've been told that upcoming firmware should resolve that
issue.

FWIW, we're going to be deploying httpd on one of the ASF's T2000 soon
(it's going to eventually take over for our Itanium box).  So, if it's
unstable, we'll be finding out real soon now.  -- justin


Re: mod_slotmem

2006-08-30 Thread Jean-frederic Clere

Brian Akins wrote:


Jean-frederic Clere wrote:


Nice stuff but I am not sure that having shared memory per slot scales
when having a lot of entries, but that makes sure that one
process/thread won't overwrite another one slot.



It scales very nicely.  We run with max clients set between 16k-32k 
with no issues.  Our item sizes range from 64-264 bytes.  at 264 bytes 
and 24k max clients, it requires about 6.5 MB of shared memory and we 
usually have 8-12 slotmems of varying sizes, so we use about 32-64 
MB of shared memory for all the slotmems.


That  is no nicely, that is greatly ;-)

Cheers

Jean-Frederic



It is very fast as there is no locking necessary as each slot is only 
every written to by a single writer (it's tied to a connection id).








Re: porstfs bug t2000 and 2.2

2006-08-30 Thread Shanti Subramanyam


Yes - there are issues with Apache on Solaris 10 when using SSL (nothing 
to do with the T2000). We currently have two bugs outstanding :

   http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6375348
   http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6374503

In our testing, this causes about a 10-12% performance degradation, but 
is not specific to Apache 2.2.If you run apache as root, there is no 
degradation at all and should see improved performance with the T2000 
crypto hardware.


As you correctly point out, the event port bug has been fixed so make 
sure that your T2000 box has this patch.


We have just released 'Cool Stack' - optimized versions of apache and 
other common OSS apps for SPARC (x86 coming soon). Please see 
http://cooltools.sunsource.net/coolstack to download.


Shanti
PAE, Sun Microsystems


Justin Erenkrantz wrote:

On 8/30/06, Rainer Jung [EMAIL PROTECTED] wrote:


The most recent kernel update patch is 118833-20 (SPARC versions, X86
should be analogous).



Yah, that bug has been fixed.  (Paul reported the bug early on, I think.)

We have also heard reports that the SSL crypto engine on the T2000's
is horked.  We've been told that upcoming firmware should resolve that
issue.

FWIW, we're going to be deploying httpd on one of the ASF's T2000 soon
(it's going to eventually take over for our Itanium box).  So, if it's
unstable, we'll be finding out real soon now.  -- justin


Re: perchild

2006-08-30 Thread Guy Hulbert
On Wed, 2006-30-08 at 23:02 +0200, Enrico Weigelt wrote:
 * Guy Hulbert [EMAIL PROTECTED] wrote:
  On Wed, 2006-30-08 at 12:59 +0200, Enrico Weigelt wrote:
   * Guy Hulbert [EMAIL PROTECTED] wrote:
   
   Hi,
   
I'm looking at perchild with the aim of getting it working.
   
   maybe you're looking for: http://www.metux.de/mpm
  
  I found that.  The links don't work.
 
 ah, bug in the php script (was too old for my server - still relied 
 on register_globals ;-o)
 
snip

Ok.  I have the patch against 2.0.48 ... I will see what I can do with
it.

--gh




[STATUS] (httpd-2.0) Wed Aug 30 23:49:53 2006

2006-08-30 Thread Rodent of Unusual Size
APACHE 2.0 STATUS:  -*-text-*-
Last modified at [$Date: 2006-07-27 13:26:10 -0400 (Thu, 27 Jul 2006) $]

The current version of this file can be found at:

  * http://svn.apache.org/repos/asf/httpd/httpd/branches/2.0.x/STATUS

Documentation status is maintained seperately and can be found at:

  * docs/STATUS in this source tree, or
  * http://svn.apache.org/repos/asf/httpd/httpd/branches/2.0.x/docs/STATUS

Consult the following STATUS files for information on related projects:

  * http://svn.apache.org/repos/asf/apr/apr/branches/0.9.x/STATUS
  * http://svn.apache.org/repos/asf/apr/apr-util/branches/0.9.x/STATUS

Consult the trunk/ for all new development and documentation efforts:

  * http://svn.apache.org/repos/asf/httpd/httpd/trunk/STATUS
  * http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/STATUS


Release history:

2.0.60  : in maintenance
2.0.59  : tagged July 27, 2006
2.0.58  : released May 1, 2006 as GA. 
2.0.57  : tagged April 19, 2006, not released.
2.0.56  : tagged April 16, 2006, not released.
2.0.55  : released October 16, 2005 as GA.
2.0.54  : released April 17, 2005 as GA.
2.0.53  : released February 7, 2005 as GA.
2.0.52  : released September 28, 2004 as GA.
2.0.51  : released September 15, 2004 as GA.
2.0.50  : released June 30, 2004 as GA.
2.0.49  : released March 19, 2004 as GA.
2.0.48  : released October 29, 2003 as GA.
2.0.47  : released July 09, 2003 as GA.
2.0.46  : released May 28, 2003 as GA.
2.0.45  : released April 1, 2003 as GA.
2.0.44  : released January 20, 2003 as GA.
2.0.43  : released October 3, 2002 as GA.
2.0.42  : released September 24, 2002 as GA.
2.0.41  : rolled September 16, 2002.  not released.
2.0.40  : released August 9, 2002 as GA.
2.0.39  : released June 17, 2002 as GA.
2.0.38  : rolled June 16, 2002.  not released.
2.0.37  : rolled June 11, 2002.  not released.
2.0.36  : released May 6, 2002 as GA.
2.0.35  : released April 5, 2002 as GA.
2.0.34  : tagged March 26, 2002.
2.0.33  : tagged March 6, 2002.  not released.
2.0.32  : released Feburary 16, 2002 as beta.
2.0.31  : rolled Feburary 1, 2002.  not released.
2.0.30  : tagged January 8, 2002.  not rolled.
2.0.29  : tagged November 27, 2001.  not rolled.
2.0.28  : released November 13, 2001 as beta.
2.0.27  : rolled November 6, 2001
2.0.26  : tagged October 16, 2001.  not rolled.
2.0.25  : rolled August 29, 2001
2.0.24  : rolled August 18, 2001
2.0.23  : rolled August 9, 2001
2.0.22  : rolled July 29, 2001
2.0.21  : rolled July 20, 2001
2.0.20  : rolled July 8, 2001
2.0.19  : rolled June 27, 2001
2.0.18  : rolled May 18, 2001
2.0.17  : rolled April 17, 2001
2.0.16  : rolled April 4, 2001
2.0.15  : rolled March 21, 2001
2.0.14  : rolled March 7, 2001
2.0a9   : released December 12, 2000
2.0a8   : released November 20, 2000
2.0a7   : released October 8, 2000
2.0a6   : released August 18, 2000
2.0a5   : released August 4, 2000
2.0a4   : released June 7, 2000
2.0a3   : released April 28, 2000
2.0a2   : released March 31, 2000
2.0a1   : released March 10, 2000


Contributors looking for a mission:

* Just do an egrep on TODO or XXX in the source.

* Review the bug database at: http://issues.apache.org/bugzilla/

* Review the PatchAvailable bugs in the bug database:

  
http://issues.apache.org/bugzilla/buglist.cgi?bug_status=NEWbug_status=ASSIGNEDbug_status=REOPENEDproduct=Apache+httpd-2.0keywords=PatchAvailable

  After testing, you can append a comment saying Reviewed and tested.

* Open bugs in the bug database.


CURRENT RELEASE NOTES:

* Forward binary compatibility is expected of Apache 2.0.x releases, such
  that no MMN major number changes will occur.  Such changes can only be
  made in the trunk.

* All commits to branches/2.0.x must be reflected in SVN trunk,
  as well, if they apply.  Logical progression is commit to trunk,
  get feedback and votes on list or in STATUS, then merge into 
  branches/2.2.x, and finally merge into branches/2.0.x, as applicable.


RELEASE SHOWSTOPPERS:


PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
  [ start all new proposals below, under PATCHES PROPOSED. ]

PATCHES PROPOSED TO BACKPORT FROM TRUNK:
  [ please place SVN revisions from trunk here, so it is easy to
identify exactly what the proposed changes are!  Add all new
proposals to the end of this list. ]

*) Reverse Proxy fixes: Location bug and Cookie support
Patch is at
http://people.apache.org/~colm/httpd-2.0-reverse-proxy-cookie.patch
and is in production with Clients.
   +1: niq, wrowe
 wrowe adds; looks good, no way to apply this without a minor bump

*) Backport 102870; PR 17217; stop linking OpenSSL .so's to support/*
   binaries 

[STATUS] (httpd-trunk) Wed Aug 30 23:48:30 2006

2006-08-30 Thread Rodent of Unusual Size
APACHE 2.3 STATUS:  -*-text-*-
Last modified at [$Date: 2006-08-22 16:41:03 -0400 (Tue, 22 Aug 2006) $]

The current version of this file can be found at:

  * http://svn.apache.org/repos/asf/httpd/httpd/trunk/STATUS

Documentation status is maintained seperately and can be found at:

  * docs/STATUS in this source tree, or
  * http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/STATUS

Consult the following STATUS files for information on related projects:

  * http://svn.apache.org/repos/asf/apr/apr/trunk/STATUS
  * http://svn.apache.org/repos/asf/apr/apr-util/trunk/STATUS

Patches considered for backport are noted in their branches' STATUS:

  * http://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/STATUS
  * http://svn.apache.org/repos/asf/httpd/httpd/branches/2.0.x/STATUS
  * http://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x/STATUS


Release history:
[NOTE that x.{odd}.z versions are strictly Alpha/Beta releases,
  while x.{even}.z versions are Stable/GA releases.]

2.3.0   : in development


Contributors looking for a mission:

* Just do an egrep on TODO or XXX in the source.

* Review the bug database at: http://issues.apache.org/bugzilla/

* Review the PatchAvailable bugs in the bug database:

  
https://issues.apache.org/bugzilla/buglist.cgi?bug_status=NEWbug_status=ASSIGNEDbug_status=REOPENEDproduct=Apache+httpd-2keywords=PatchAvailable

  After testing, you can append a comment saying Reviewed and tested.

* Open bugs in the bug database.


CURRENT RELEASE NOTES:


RELEASE SHOWSTOPPERS:

* Handling of non-trailing / config by non-default handler is broken
  http://marc.theaimsgroup.com/?l=apache-httpd-devm=105451701628081w=2
  jerenkrantz asks: Why should this block a release?
  wsanchez agrees: this may be a change in behavior, but isn't
clearly wrong, and even if so, it doesn't seem like a
showstopper.

* the edge connection filter cannot be removed 
  http://marc.theaimsgroup.com/?l=apache-httpd-devm=105366252619530w=2

  jerenkrantz asks: Why should this block a release?

  stas replies: because it requires a rewrite of the filters stack
implementation (you have suggested that) and once 2.2 is
released you can't do that anymore. 


CURRENT VOTES:

* If the parent process dies, should the remaining child processes
  gracefully self-terminate. Or maybe we should make it a runtime
  option, or have a concept of 2 parent processes (one being a 
  hot spare).
  See: Message-ID: [EMAIL PROTECTED]

  Self-destruct: Ken, Martin, Lars
  Not self-destruct: BrianP, Ian, Cliff, BillS
  Make it runtime configurable: Aaron, jim, Justin, wrowe, rederpj, nd

  /* The below was a concept on *how* to handle the problem */
  Have 2 parents: +1: jim
  -1: Justin, wrowe, rederpj, nd
  +0: Lars, Martin (while standing by, could it do
something useful?)

* Make the worker MPM the default MPM for threaded Unix boxes.
  +1:   Justin, Ian, Cliff, BillS, striker, wrowe, nd
  +0:   BrianP, Aaron (mutex contention is looking better with the
latest code, let's continue tuning and testing), rederpj, jim
  -0:   Lars

  pquerna: Do we want to change this for 2.2?


RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP:

* Patches submitted to the bug database:
  
http://issues.apache.org/bugzilla/buglist.cgi?bug_status=NEWbug_status=ASSIGNEDbug_status=REOPENEDproduct=Apache+httpd-2keywords=PatchAvailable

* Filter stacks and subrequests, redirects and fast redirects.
  There's at least one PR that suffers from the current unclean behaviour
  (which lets the server send garbage): PR 17629
  nd says: Every subrequest should get its own filter stack with the
   subreq_core filter as bottom-most. That filter does two things:
 - swallow EOS buckets
 - redirect the data stream to the upper request's (rr-main)
   filter chain directly after the subrequest's starting
   point.
   Once we have a clean solution, we can try to optimize
   it, so that the server won't be slow down too much.

* RFC 2616 violations.
  Closed PRs: 15857.
  Open PRs: 15852, 15859, 15861, 15864, 15865, 15866, 15868, 15869,
15870, 16120, 16125, 16126, 16133, 16135, 16136, 16137,
16138, 16139, 16140, 16142, 16518, 16520, 16521, 
  jerenkrantz says: need to decide how many we need to backport and/or
if these rise to showstopper status.
  wrowe suggests: it would be nice to see MUST v.s. SHOULD v.s. MAY
  out of this list, without reviewing them individually.

* There is a bug in how we sort some hooks, at