diff --git a/admin/PageGeneral.py b/admin/PageGeneral.py index 8fd306016..426b5bc22 100644 --- a/admin/PageGeneral.py +++ b/admin/PageGeneral.py @@ -58,7 +58,7 @@ ("server!bind!.*!port", validations.is_tcp_port), ("server!bind!.*!interface", validations.is_ip), ("server!bind!.*!tls", validations.is_boolean), - ("server!chroot", validations.is_local_dir_exists), + ("server!chroot", validations.is_chroot_dir_exists), ("new_port", validations.is_new_tcp_port) ] diff --git a/admin/util.py b/admin/util.py index f585a6db5..b39b86cfd 100644 --- a/admin/util.py +++ b/admin/util.py @@ -255,10 +255,10 @@ def lists_differ (a, b): return False -def get_real_path (name): +def get_real_path (name, nochroot=False): """Get real path accounting for chrooted environments""" chroot = CTK.cfg.get_val('server!chroot') - if chroot: + if chroot and not nochroot: fullname = os.path.normpath (chroot + os.path.sep + name) else: fullname = name diff --git a/admin/validations.py b/admin/validations.py index 258241186..1c82cbf39 100644 --- a/admin/validations.py +++ b/admin/validations.py @@ -151,9 +151,12 @@ def is_ipv6 (value): raise ValueError, _('Malformed IPv6') return value +def is_chroot_dir_exists (value): + return is_local_dir_exists (value, nochroot=True) + def is_local_dir_exists (value, nochroot=False): value = is_path (value) - path = get_real_path (value) + path = get_real_path (value, nochroot) if not os.path.exists(path): raise ValueError, _('Path does not exist') @@ -165,7 +168,7 @@ def is_local_dir_exists (value, nochroot=False): def is_local_file_exists (value, nochroot=False): value = is_path (value) - path = get_real_path (value) + path = get_real_path (value, nochroot) if not os.path.exists(path): raise ValueError, _('Path does not exist')