Commit ad06c8ca authored by Marvin Scholz's avatar Marvin Scholz

Convert admin path in XSLT loader to URI

The xmlBuildURI function only deals with URIs, not paths, therefore
the admin path has to be converted to a URI first.
parent d0f04c25
......@@ -100,8 +100,8 @@ static mutex_t xsltlock;
/* Reference to the original xslt loader func */
static xsltDocLoaderFunc xslt_loader;
/* Admin path cache */
static xmlChar *admin_path = NULL;
/* Admin URI cache */
static xmlChar *admin_URI = NULL;
void xslt_initialize(void)
{
......@@ -121,8 +121,8 @@ void xslt_shutdown(void) {
thread_mutex_destroy (&xsltlock);
xmlCleanupParser();
xsltCleanupGlobals();
if (admin_path)
xmlFree(admin_path);
if (admin_URI)
xmlFree(admin_URI);
}
static void clear_cache_entry(size_t idx) {
......@@ -220,7 +220,7 @@ static xmlDocPtr custom_loader(const xmlChar *URI,
xsltLoadType type)
{
xmlDocPtr ret;
xmlChar *rel_path, *fn, *final_URI = NULL;
xmlChar *rel_URI, *fn, *final_URI = NULL;
char *path_URI = NULL;
xsltStylesheet *c;
ice_config_t *config;
......@@ -247,33 +247,41 @@ static xmlDocPtr custom_loader(const xmlChar *URI,
break;
/* Construct the right path */
rel_path = xmlBuildRelativeURI(URI, c->doc->URL);
if (rel_path != NULL && admin_path != NULL) {
fn = xmlBuildURI(rel_path, admin_path);
rel_URI = xmlBuildRelativeURI(URI, c->doc->URL);
if (rel_URI != NULL && admin_URI != NULL) {
fn = xmlBuildURI(rel_URI, admin_URI);
final_URI = fn;
xmlFree(rel_path);
xmlFree(rel_URI);
}
/* Fail if there was an error constructing the path */
if (final_URI == NULL) {
if (rel_path)
xmlFree(rel_path);
if (rel_URI)
xmlFree(rel_URI);
return NULL;
}
break;
/* In case a top stylesheet is loaded */
case XSLT_LOAD_START:
config = config_get_config();
/* Do we need to load the admin path? */
if (!admin_path) {
/* Check if we need to load the admin path */
if (!admin_URI) {
/* Append path separator to path */
size_t len = strlen(config->adminroot_dir);
xmlChar* admin_path = xmlMalloc(len+2);
xmlStrPrintf(admin_path, len+2, "%s/", XMLSTR(config->adminroot_dir));
admin_path = xmlMalloc(len+2);
if (!admin_path)
return NULL;
/* Convert admin path to URI */
admin_URI = xmlPathToURI(admin_path);
xmlFree(admin_path);
/* Copy over admin path and add a tailing slash. */
xmlStrPrintf(admin_path, len+2, XMLSTR("%s/"), XMLSTR(config->adminroot_dir));
if (!admin_URI) {
return NULL;
} else {
ICECAST_LOG_DEBUG("Loaded and cached admin_URI \"%s\"", admin_URI);
}
}
config_release_config();
break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment