I'm trying out running a copy of ikiwiki-hosting myself, in a subdomain of
pseudorandom.co.uk
(non-commercially - I'm not trying to compete with
Branchable!). However, ikisite refuses to create subdomains, because it
assumes that entries in domains
contain exactly one dot (so example.com
would be fine, but example.co.uk
wouldn't work). This patch lets it
create domains.
Patch (which can also be cherry-picked from
git://git.pseudorandom.co.uk/git/smcv/ikiwiki-hosting.git
):
This is not entirely safe to apply. The problem is that
source.$foo.branchable.com
is a reserved domain name. If a user can create that site for someone else's $foo, they can at a mimimum make apache unhappy with conflicting vhosts, and at the worse, engage in evil.To do this securely, it needs to look at the
prefix_?
keys in%config
and only allow one-level subdomains of domains configured there. --JoeyThe next thing ikisite does is to split into hostname and domain parts, using
prefix_?
as you advised: the check I'm patching here seems to just be a quick way to refuse completely invalid hostnames? The user can only createsource.foo.branchable.com
if aprefix
points tofoo.branchable.com
(i.e. admin error). I've tried outsource.foo
for an existing and nonexistentfoo
, and I just get the errorunknown prefix for foo.wiki.pseudorandom.co.uk
. --smcvAh, good, so it does. Cherry-picked this (and most of your general changesets). done --Joey
From 75db93d2dca5c95f0244c073c764915ee92154e3 Mon Sep 17 00:00:00 2001
From: Simon McVittie <smcv@debian.org>
Date: Fri, 24 Sep 2010 21:39:56 +0100
Subject: [PATCH] ikisite: allow base hostnames with more than one dot (like example.co.uk)
---
ikisite | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/ikisite b/ikisite
index b1e9cb5..dcac43f 100755
--- a/ikisite
+++ b/ikisite
@@ -747,7 +747,7 @@ sub username {
my $hostname=lc(shift);
# paranoia: make sure the hostname looks like a FQDN
- if ($hostname !~ /^([a-z0-9][-a-z0-9]*)\.\w+\.\w+$/) {
+ if ($hostname !~ /^([a-z0-9][-a-z0-9]*)\.\w+(\.\w+)+$/) {
error "illegal hostname \"$hostname\"";
}
if (length $hostname > 252) { # why not 253? Trailing dot..
--
1.7.1