Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Global variables in Apache Server

I'm writing some apache (2.2) modules in C and I'm pretty new at it, so I was wondering:

I need to know if it's possible to create a global variable that will be initiated whenever the apache server starts to run.

See, I need to have a list of host names (that will be "privileged"), so that every request I get, I need to check if the host name appears in the list (to check if it's "previleged").

So the list should be global (so that every server instance will have the same instance of the list), and I need to initialize it at the beginning.

How do I do that, if it's at all possible?

Thanks!

like image 831
user795810 Avatar asked Jun 13 '11 11:06

user795810


1 Answers

Although not a complete answer, I did manage to find a way to have global variables.

I used the apr_pool_userdata_get and apr_pool_userdata_set methods with the process's global pools (pconf and pool).

For further reference:
http://apr.apache.org/docs/apr/0.9/group_apr_pools.html

Examples:

attach static global data to server process pool

char *data = "this is some data";
apr_pool_userdata_setn ((void*) data, "myglobaldata_key", NULL, request->server->process->pool);

attach malloced heap data to server process pool

char *data = strdup("this is some data");
apr_pool_userdata_setn ((void*) data, "myglobaldata_key", (apr_status_t(*)(void *))free, request->server->process->pool);

Now retrieve the global data:

char *data;
apr_pool_userdata_get ((void**)&data, "myglobaldata_key", request->server->process->pool);
if (data == NULL) {
    // data not set...
}
like image 74
user795810 Avatar answered Sep 22 '22 16:09

user795810