Peter Rothermel wrote:
> Stas Bekman wrote:
> 
> 
>>Peter Rothermel wrote:
>>
>>
>>>PerlChildInitHandler Apache::foo->loadkey
>>>
>>>Will the genkey method get execute at the
>>>initialization of each thread?
>>
>>Apache doesn't provide such a hook yet. May be in the future.
>>
>>child_init is for child process init, not threads.
>>http://perl.apache.org/release/docs/2.0/user/handlers/handlers.html#PerlChildInitHandler
>>
>>what are you trying to do?
> 
> 
> I'm encrypting/decrypting data within cookies that are holding session keys
> for authentication purposes.  I decrypt the session key within the cookie data,
> whenever I get an http request that has a cookie in the header.
> 
> The RSA keys that I use for encrytion/decryption are regenerated when the Apache
> server is started.  My module has a load_key subroutine that I call before I do any
> encryption or decryption.  This returns a RSA object that is initialized with a 
>global
> var that hold a 2048 bit RSA key.  If the global var is empty I generate a new key.
> 
> The code works OK but I seem to be generating a 2048 bit key the first time
> that a user logs into my site. This key generation takes awhile. I would prefer
> generating the key when server/thread/interupter is started. I was hoping that
> a PerlClhildInitHandler could be used to call the gen_key subroutine to load
> the data into global var $private_key_string.

There are a few possible approaches to this:

1. for mod_perl to provide hooks for the following events:
    interp_init       (INIT)
    interp_destroy    (DESTROY)
so these can be run when a new interpreter is initialized after it has 
been cloned and when it's going to be destroyed.

2. Using the thread interpreter pool mechanism for managing other items. 
But it's not clear whether this interface will ever have a Perl API, 
because threads::shared already does that.

3. Build a pool based on threads::shared. Similar to what Doug has 
described in his overview: 
http://perl.apache.org/release/docs/2.0/user/overview/overview.html#Thread_Item_Pool_API
and which is now doable in pure Perl based on threads::shared. This is 
an interesting vacant module, but really you can just duplicate the 
concepts that Doug has described in the URL above. You want to be able 
to add new items, remove them, pop and push from the pool.

should it be called Threads::TIPool as coined by Doug? (Thread Items Pool)

Using this (currently not-existing) module you can create a pool of keys 
at the server startup and then use them whenever you need a key at run time.

This is the same concept that the threaded version of Apache::DBI is 
going to use, and AFAIK is vacant as well. The challenge is to make it 
possible to have modules like Apache::DBI work transparently under 
various mpms, including the preforked and perchild mpms.

__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com

Reply via email to