Hej allesammen.
Jeg sidder og mosler med et simpelt apache-modul, som nu skal kunne
konfigureres fra httpd.conf.
Da jeg af en eller anden årsag ikke kan sende mails til
new-httpd@apache.org for tiden, tænkte jeg at jeg lige kunne lade jer
gnave på denne.
Mit problem består i at Apache kalder mine command handlere med en null
pointer til server-konfigurations struct'en.
Et minimalt, fjollet eksempel der illustrerer problemet:
#include "httpd.h"
#include "http_config.h"
module MODULE_VAR_EXPORT sheep_module;
typedef struct {
int enabled;
int color;
char *name;
} sheep_server_config;
static void *sheep_server_conf(pool *p, server_rec *r) {
sheep_server_config *cfg = (sheep_server_config *)
ap_pcalloc(p, sizeof(sheep_server_config));
cfg->enabled = 0;
cfg->color = 0xffffff;
cfg->name = "Dolly";
/* og vi afleverer pænt tilbage til apache */
return (void *) cfg;
}
static const char *sheep_toggle(cmd_parms *parms, void *mconfig,
const int toggled) {
sheep_server_config *cfg = (sheep_server_config *)mconfig;
if(mconfig == NULL) {
/* DET ER HER PROBLEMET LIGGER!! HVOR ER MIN PER-SERVER MODULE CONF
DATA STRUCT?? */
return "mconfig == NULL
. No sheep for you";
} else {
/* Ville give segfault hvis cfg pegede på noget forkert. */
cfg->enabled = toggled;
}
return NULL;
}
static const command_rec sheep_cmds[] =
{
{"Sheep", sheep_toggle, NULL, OR_ALL, FLAG, "Toggle sheep"},
{NULL}
};
module MODULE_VAR_EXPORT sheep_module =
{
STANDARD_MODULE_STUFF,
NULL, /* initializer */
NULL, /* create per-dir config */
NULL, /* merge per-dir config */
sheep_server_conf, /* server config */
NULL, /* merge server config */
sheep_cmds, /* command table */
NULL, /* handlers */
NULL, /* filename translation */
NULL, /* check_user_id */
NULL, /* check auth */
NULL, /* check access */
NULL, /* type_checker */
NULL, /* fixups */
NULL, /* logger */
NULL, /* header parser */
NULL, /* child_init */
NULL,
NULL /* post read-request */
};
Loader jeg modulet og tilføjer en Sheep on i httpd.conf og kører httpd
får jeg:
Syntax error on line 666 of /bla/bla/conf/httpd.conf:
mconfig == NULL
. No sheep for you
Nogen ideer?
--
Hroi Sigurdsson