From 983efebd4643e41b3dea32f3ff89ec7d64ce5d2d Mon Sep 17 00:00:00 2001
From: Sophie Herold <sophie@hemio.de>
Date: Tue, 8 Oct 2019 17:07:08 +0200
Subject: [PATCH] Releases v0.13.0

---
 CHANGELOG                                    |  10 +
 docs/schemas/dns.rst                         | 292 +++++++------------
 docs/schemas/domain_reseller.rst             |  82 ++----
 docs/schemas/email.rst                       | 180 +++---------
 docs/schemas/jabber.rst                      |  36 +--
 docs/schemas/server_access.rst               |  39 +--
 docs/schemas/web.rst                         | 186 ++++--------
 docs/{schemas => schemas_system}/backend.rst | 118 +++++---
 docs/{schemas => schemas_system}/commons.rst |  15 +-
 docs/{schemas => schemas_system}/system.rst  | 160 +++++-----
 docs/{schemas => schemas_system}/user.rst    |  99 +++++--
 11 files changed, 497 insertions(+), 720 deletions(-)
 rename docs/{schemas => schemas_system}/backend.rst (80%)
 rename docs/{schemas => schemas_system}/commons.rst (96%)
 rename docs/{schemas => schemas_system}/system.rst (91%)
 rename docs/{schemas => schemas_system}/user.rst (86%)

diff --git a/CHANGELOG b/CHANGELOG
index 13ed4ae..ef30c18 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,13 @@
+v0.13.0
+  - [dns] Adds differentiation between domains and hostnames, allowing to use
+    additional valid custom dns entries.
+  - Adds option field to several more tables
+  - Adds some basic tests for development
+  - Changes to only allow a more limited set of login names
+  - Changes to a better structure in docs
+  - Fixes performance issue
+  - Fixes many static code anlaysis warnings
+  - Fixes missing consitency checks
 v0.12.0
   - Changes uids to centralized sequence
   - Fixes srv_record cannot serve if "domain_prefix" contains underscore (#21)
diff --git a/docs/schemas/dns.rst b/docs/schemas/dns.rst
index 3b5d89b..f921d7f 100644
--- a/docs/schemas/dns.rst
+++ b/docs/schemas/dns.rst
@@ -87,12 +87,13 @@ Columns
 
  - .. _COLUMN-dns.custom.registered:
    
-   ``registered`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``registered`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Registered domain of which domain is a sub domain
 
 
    References :ref:`dns.registered.domain <COLUMN-dns.registered.domain>`
 
+   On Delete: CASCADE
 
 
  - .. _COLUMN-dns.custom.domain:
@@ -189,7 +190,7 @@ Columns
 
  - .. _COLUMN-dns.registered.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Service entity name
 
 
@@ -216,7 +217,7 @@ Columns
 
  - .. _COLUMN-dns.registered.domain:
    
-   ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Domain
 
 
@@ -266,7 +267,7 @@ Foreign keys
 Columns
  - .. _COLUMN-dns.service.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Service entity name
 
 
@@ -300,7 +301,7 @@ Columns
 
  - .. _COLUMN-dns.service.registered:
    
-   ``registered`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``registered`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Registered domain of which domain is a sub domain
 
 
@@ -310,7 +311,7 @@ Columns
 
  - .. _COLUMN-dns.service.domain:
    
-   ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      domain for which the entries should be created
 
 
@@ -356,6 +357,36 @@ Execute privilege
 
 
 
+.. _FUNCTION-dns._is_subdomain_of:
+
+``dns._is_subdomain_of``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Checks if `p_subdomain` is a subdomain of `p_domain`
+
+Parameters
+ - ``p_subdomain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   
+    
+ - ``p_domain`` :ref:`varchar <DOMAIN-varchar>`
+   
+    
+
+
+
+Returns
+ bool
+
+
+
+.. code-block:: plpgsql
+
+   
+   RETURN p_domain = p_subdomain OR
+    '.' || p_domain = right(p_subdomain, char_length(p_domain) + 1);
+
+
+
 .. _FUNCTION-dns._rdata_txtdata_valid:
 
 ``dns._rdata_txtdata_valid``
@@ -400,7 +431,7 @@ Parameters
 
 
 Variables defined for body
- - ``v_nameserver`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``v_nameserver`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
    
  - ``v_managed`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
@@ -409,9 +440,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -423,7 +451,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -454,13 +481,13 @@ Execute privilege
 Delete registered domain
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
 
 
 Variables defined for body
- - ``v_nameserver`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``v_nameserver`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
    
  - ``v_managed`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
@@ -469,9 +496,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -483,7 +507,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -509,7 +532,7 @@ Execute privilege
 deletes all service entries of a specific domain
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_service`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
@@ -518,7 +541,7 @@ Parameters
 
 
 Variables defined for body
- - ``v_nameserver`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``v_nameserver`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
    
  - ``v_managed`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
@@ -527,9 +550,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -541,7 +561,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -589,7 +608,7 @@ Execute privilege
 Update status
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_backend_status`` :ref:`backend.t_status <DOMAIN-backend.t_status>`
@@ -600,10 +619,6 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  void
@@ -614,7 +629,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    UPDATE dns.registered
@@ -632,7 +647,7 @@ Execute privilege
 Ins Custom
 
 Parameters
- - ``p_registered`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_registered`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
@@ -650,7 +665,7 @@ Parameters
 
 
 Variables defined for body
- - ``v_nameserver`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``v_nameserver`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
    
  - ``v_managed`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
@@ -659,9 +674,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -673,7 +685,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -708,13 +719,13 @@ Execute privilege
 registeres new domain
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_subservice`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
    
     
- - ``p_service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_public_suffix`` :ref:`varchar <DOMAIN-varchar>`
@@ -726,9 +737,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -740,7 +748,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -762,13 +769,13 @@ Execute privilege
 Creates service dns entry
 
 Parameters
- - ``p_registered`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_registered`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
- - ``p_service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_service`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
@@ -777,7 +784,7 @@ Parameters
 
 
 Variables defined for body
- - ``v_nameserver`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``v_nameserver`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
    
  - ``v_managed`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
@@ -786,9 +793,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -800,7 +804,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -836,9 +839,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
@@ -846,7 +846,7 @@ Returns
 Returned columns
  - ``service`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
     
- - ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
 
 Execute privilege
@@ -855,7 +855,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -876,73 +875,6 @@ Execute privilege
 
 
 
-.. _FUNCTION-dns.sel_available_service:
-
-``dns.sel_available_service``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-List all domains that have a service entry in dns with their service.
-This is particularly usefull since these domains are ready for use with
-this service. Usually this means that accounts etc. can be created for this
-domain.
-
-Parameters
- *None*
-
-
-Variables defined for body
- - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
-
-Returns
- TABLE
-
-Returned columns
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-    
- - ``service`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
-    
-
-Execute privilege
- - :ref:`userlogin <ROLE-userlogin>`
-
-.. code-block:: plpgsql
-
-   -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
-   v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
-   -- end userlogin prelude
-   
-   
-   RETURN QUERY
-       SELECT t.domain, t.service FROM dns.service AS t
-       JOIN dns.registered AS s
-           ON s.domain = t.registered
-       WHERE
-           (
-               s.owner = v_owner AND
-   
-                   system._contingent_total(
-                       p_owner := s.owner,
-                       p_service := t.service,
-                       p_service_entity_name := t.service_entity_name
-               ) IS NOT NULL
-           ) OR
-           system._contingent_domain(
-                       p_owner := s.owner,
-                       p_service := t.service,
-                       p_service_entity_name := t.service_entity_name,
-                       p_domain := t.domain
-               ) IS NOT NULL
-       ORDER BY t.service
-   ;
-
-
-
 .. _FUNCTION-dns.sel_custom:
 
 ``dns.sel_custom``
@@ -958,9 +890,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
@@ -968,7 +897,7 @@ Returns
 Returned columns
  - ``id`` :ref:`uuid <DOMAIN-uuid>`
     
- - ``registered`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``registered`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
     
@@ -987,7 +916,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1025,9 +953,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
@@ -1035,7 +960,7 @@ Returns
 Returned columns
  - ``subservice`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
     
- - ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
 
 Execute privilege
@@ -1044,7 +969,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1082,15 +1006,12 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
 
 Returned columns
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``public_suffix`` :ref:`varchar <DOMAIN-varchar>`
     
@@ -1098,7 +1019,7 @@ Returned columns
     
  - ``subservice`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
     
- - ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
 
 Execute privilege
@@ -1107,7 +1028,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1136,21 +1056,18 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
 
 Returned columns
- - ``registered`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``registered`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``service`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
     
- - ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``backend_status`` :ref:`backend.t_status <DOMAIN-backend.t_status>`
     
@@ -1161,7 +1078,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1202,17 +1118,14 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
 
 Returned columns
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
- - ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
 
 Execute privilege
@@ -1221,7 +1134,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1268,18 +1180,14 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  TABLE
 
 Returned columns
- - ``registered`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``registered`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
- - ``domain`` :ref:`varchar <DOMAIN-varchar>`
+ - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
     
  - ``type`` :ref:`dns.t_type <DOMAIN-dns.t_type>`
     
@@ -1295,7 +1203,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    RETURN QUERY
@@ -1398,7 +1306,7 @@ Parameters
 
 
 Variables defined for body
- - ``v_nameserver`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``v_nameserver`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
    
  - ``v_managed`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
@@ -1407,9 +1315,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -1421,13 +1326,15 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
    
    UPDATE dns.custom AS t
-       SET rdata = p_rdata, ttl = p_ttl
+       SET
+           rdata = p_rdata,
+           ttl = p_ttl,
+           backend_status = 'upd'
    FROM dns.registered AS s
    
    WHERE
@@ -1453,15 +1360,15 @@ Domains
 ``dns.t_domain``
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Fully qualified domain name (without trailing dot)
+Fully qualified hostname (without trailing dot)
 
 Checks
- - ``domain valid regex``
-    check domain validity
+ - ``hostname valid regex``
+    Hostname
 
    .. code-block:: sql
 
-    VALUE ~ '^[a-z\d][a-z\d-]{0,62}(\.[a-z\d][a-z\d-]{0,62})+$' AND
+    VALUE ~ '^[a-z\d_-]{1,63}(\.[a-z\d_-]{1,63})+$' AND
     octet_length(VALUE) <= 253
 
 
@@ -1474,6 +1381,8 @@ Checks
 
 Fully qualified or relative domain name. Trailing dot marks a FQDN.
 
+.. todo :: checks might be off
+
 Checks
  - ``invalid rdata domain``
     check
@@ -1487,29 +1396,21 @@ Checks
 
 
 
-.. _DOMAIN-dns.t_type:
+.. _DOMAIN-dns.t_hostname:
 
-``dns.t_type``
+``dns.t_hostname``
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Resource record type
+Fully qualified hostname (without trailing dot)
 
 Checks
- - ``Invalid or unsupported resource type``
-    Resource type (A, AAAA, CNAME, MX, SRV, TXT, ...)
+ - ``hostname valid regex``
+    Hostname
 
    .. code-block:: sql
 
-    VALUE IN (
-     'A',
-     'AAAA',
-     'CNAME',
-     'MX',
-     'NS',
-     'SRV',
-     'SSHFP',
-     'TXT'
-    )
+    VALUE ~ '^([a-z\d]|[a-z\d][a-z\d-]{0,61}[a-z\d])(\.([a-z\d]|[a-z\d][a-z\d-]{0,61}[a-z\d]))+$' AND
+    octet_length(VALUE) <= 253
 
 
 
@@ -1542,6 +1443,33 @@ Checks
 
 
 
+.. _DOMAIN-dns.t_type:
+
+``dns.t_type``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Resource record type
+
+Checks
+ - ``Invalid or unsupported resource type``
+    Resource type (A, AAAA, CNAME, MX, SRV, TXT, ...)
+
+   .. code-block:: sql
+
+    VALUE IN (
+     'A',
+     'AAAA',
+     'CNAME',
+     'MX',
+     'NS',
+     'SRV',
+     'SSHFP',
+     'TXT'
+    )
+
+
+
+
 
 
 
diff --git a/docs/schemas/domain_reseller.rst b/docs/schemas/domain_reseller.rst
index 3011d3a..a9b7277 100644
--- a/docs/schemas/domain_reseller.rst
+++ b/docs/schemas/domain_reseller.rst
@@ -66,7 +66,7 @@ Foreign keys
 Columns
  - .. _COLUMN-domain_reseller.handle.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Service entity name
 
 
@@ -266,7 +266,7 @@ Primary key
 Columns
  - .. _COLUMN-domain_reseller.registered.domain:
    
-   ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Domain
 
 
@@ -384,15 +384,12 @@ Parameters
 
 
 Variables defined for body
- - ``v_service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``v_service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
    
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -404,7 +401,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -453,10 +449,6 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  void
@@ -467,7 +459,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    UPDATE domain_reseller.handle
@@ -484,7 +476,7 @@ Execute privilege
 Update status
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_payable`` :ref:`timestamp <DOMAIN-timestamp>`
@@ -507,10 +499,6 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  void
@@ -521,7 +509,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    UPDATE domain_reseller.registered
@@ -546,7 +534,7 @@ Parameters
  - ``p_alias`` :ref:`varchar <DOMAIN-varchar>`
    
     
- - ``p_service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_fname`` :ref:`varchar <DOMAIN-varchar>`
@@ -591,9 +579,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -605,7 +590,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -663,7 +647,7 @@ Execute privilege
 Inserts details for registered domain
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_registrant`` :ref:`varchar <DOMAIN-varchar>`
@@ -678,9 +662,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -692,7 +673,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -721,9 +701,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  SETOF domain_reseller."handle"
@@ -735,7 +712,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -743,7 +719,7 @@ Execute privilege
    RETURN QUERY
        SELECT * FROM domain_reseller.handle
    WHERE
-       owner=v_owner OR (owner=v_login AND NOT p_hide_foreign)
+       owner=v_owner OR (owner="user"._login_user() AND NOT p_hide_foreign)
    ORDER BY backend_status, fname, lname, alias;
 
 
@@ -763,15 +739,12 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
 
 Returned columns
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``registrant`` :ref:`varchar <DOMAIN-varchar>`
     
@@ -800,7 +773,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -843,9 +815,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
@@ -853,7 +822,7 @@ Returns
 Returned columns
  - ``subservice`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
     
- - ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
 
 Execute privilege
@@ -862,7 +831,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -896,10 +864,6 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  SETOF domain_reseller."handle"
@@ -910,7 +874,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    RETURN QUERY
@@ -953,16 +917,12 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  TABLE
 
 Returned columns
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``registrant`` :ref:`varchar <DOMAIN-varchar>`
     
@@ -988,7 +948,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    RETURN QUERY
@@ -1055,15 +1015,12 @@ Parameters
 
 
 Variables defined for body
- - ``v_service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``v_service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
    
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -1075,7 +1032,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1113,7 +1069,7 @@ Execute privilege
 Updates details for registered domain
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_admin_c`` :ref:`varchar <DOMAIN-varchar>`
@@ -1122,7 +1078,7 @@ Parameters
 
 
 Variables defined for body
- - ``v_nameserver`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``v_nameserver`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
    
  - ``v_managed`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
@@ -1131,9 +1087,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -1145,7 +1098,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
diff --git a/docs/schemas/email.rst b/docs/schemas/email.rst
index 23dbdaf..60f08f6 100644
--- a/docs/schemas/email.rst
+++ b/docs/schemas/email.rst
@@ -65,7 +65,7 @@ Foreign keys
 Columns
  - .. _COLUMN-email.address.domain:
    
-   ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Domain name
 
 
@@ -83,7 +83,7 @@ Columns
 
  - .. _COLUMN-email.address.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      ent. name
 
 
@@ -166,7 +166,7 @@ Foreign keys
 Columns
  - .. _COLUMN-email.alias.domain:
    
-   ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Domain name
 
 
@@ -184,7 +184,7 @@ Columns
 
  - .. _COLUMN-email.alias.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      ent. name
 
 
@@ -236,7 +236,7 @@ Columns
 
  - .. _COLUMN-email.alias.mailbox_domain:
    
-   ``mailbox_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``mailbox_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Mailbox to which the mails will be delivered
 
 
@@ -291,7 +291,7 @@ Foreign keys
 Columns
  - .. _COLUMN-email.list.domain:
    
-   ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Domain name
 
 
@@ -309,7 +309,7 @@ Columns
 
  - .. _COLUMN-email.list.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      ent. name
 
 
@@ -474,7 +474,7 @@ Columns
 
  - .. _COLUMN-email.list_subscriber.list_domain:
    
-   ``list_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``list_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      List
 
 
@@ -531,7 +531,7 @@ Foreign keys
 Columns
  - .. _COLUMN-email.mailbox.domain:
    
-   ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Domain name
 
 
@@ -549,7 +549,7 @@ Columns
 
  - .. _COLUMN-email.mailbox.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      ent. name
 
 
@@ -693,7 +693,7 @@ Foreign keys
 Columns
  - .. _COLUMN-email.redirection.domain:
    
-   ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Domain name
 
 
@@ -711,7 +711,7 @@ Columns
 
  - .. _COLUMN-email.redirection.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      ent. name
 
 
@@ -800,7 +800,7 @@ Returns
 Returned columns
  - ``localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
     
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
     
@@ -838,7 +838,7 @@ Parameters
  - ``p_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
 
@@ -875,13 +875,13 @@ Parameters
  - ``p_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_mailbox_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_mailbox_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_mailbox_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
 
@@ -890,9 +890,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -904,7 +901,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -936,7 +932,7 @@ Execute privilege
 Delete mailing list
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
@@ -948,9 +944,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -962,7 +955,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -988,7 +980,7 @@ Parameters
  - ``p_list_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_list_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_list_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_address`` :ref:`email.t_address <DOMAIN-email.t_address>`
@@ -1000,9 +992,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -1014,7 +1003,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1047,7 +1035,7 @@ Parameters
  - ``p_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
 
@@ -1056,9 +1044,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -1070,7 +1055,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1097,7 +1081,7 @@ Parameters
  - ``p_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
 
@@ -1106,9 +1090,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -1120,7 +1101,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1147,13 +1127,13 @@ Parameters
  - ``p_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_mailbox_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_mailbox_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_mailbox_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
 
@@ -1171,9 +1151,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -1185,7 +1162,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1237,7 +1213,7 @@ Parameters
  - ``p_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_admin`` :ref:`email.t_address <DOMAIN-email.t_address>`
@@ -1258,9 +1234,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -1272,7 +1245,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1313,7 +1285,7 @@ Parameters
  - ``p_list_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_list_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_list_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
 
@@ -1322,9 +1294,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -1336,7 +1305,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1371,7 +1339,7 @@ Parameters
  - ``p_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_password`` :ref:`commons.t_password_plaintext <DOMAIN-commons.t_password_plaintext>`
@@ -1392,9 +1360,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -1406,7 +1371,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1447,7 +1411,7 @@ Parameters
  - ``p_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_destination`` :ref:`email.t_address <DOMAIN-email.t_address>`
@@ -1468,9 +1432,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -1482,7 +1443,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1526,9 +1486,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
@@ -1536,11 +1493,11 @@ Returns
 Returned columns
  - ``localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
     
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``mailbox_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
     
- - ``mailbox_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``mailbox_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``backend_status`` :ref:`backend.t_status <DOMAIN-backend.t_status>`
     
@@ -1551,7 +1508,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1590,15 +1546,12 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
 
 Returned columns
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
     
@@ -1619,7 +1572,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1658,9 +1610,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
@@ -1670,7 +1619,7 @@ Returned columns
     
  - ``list_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
     
- - ``list_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``list_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``backend_status`` :ref:`backend.t_status <DOMAIN-backend.t_status>`
     
@@ -1681,7 +1630,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1719,15 +1667,12 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
 
 Returned columns
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
     
@@ -1744,7 +1689,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1780,15 +1724,12 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
 
 Returned columns
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
     
@@ -1803,7 +1744,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1835,10 +1775,6 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  TABLE
@@ -1846,11 +1782,11 @@ Returns
 Returned columns
  - ``localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
     
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``mailbox_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
     
- - ``mailbox_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``mailbox_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``backend_status`` :ref:`backend.t_status <DOMAIN-backend.t_status>`
     
@@ -1860,7 +1796,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    RETURN QUERY
@@ -1911,10 +1847,6 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  TABLE
@@ -1922,7 +1854,7 @@ Returns
 Returned columns
  - ``localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
     
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``admin`` :ref:`email.t_address <DOMAIN-email.t_address>`
     
@@ -1936,7 +1868,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    RETURN QUERY
@@ -1987,10 +1919,6 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  TABLE
@@ -1998,7 +1926,7 @@ Returns
 Returned columns
  - ``localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
     
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``address`` :ref:`email.t_address <DOMAIN-email.t_address>`
     
@@ -2010,7 +1938,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    RETURN QUERY
@@ -2072,10 +2000,6 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  TABLE
@@ -2083,7 +2007,7 @@ Returns
 Returned columns
  - ``localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
     
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``password`` :ref:`commons.t_password <DOMAIN-commons.t_password>`
     
@@ -2101,7 +2025,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    RETURN QUERY
@@ -2154,10 +2078,6 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  TABLE
@@ -2165,7 +2085,7 @@ Returns
 Returned columns
  - ``localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
     
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``destination`` :ref:`email.t_address <DOMAIN-email.t_address>`
     
@@ -2177,7 +2097,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    RETURN QUERY
@@ -2225,7 +2145,7 @@ Parameters
  - ``p_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_admin`` :ref:`email.t_address <DOMAIN-email.t_address>`
@@ -2237,9 +2157,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -2251,7 +2168,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -2281,7 +2197,7 @@ Parameters
  - ``p_localpart`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_password`` :ref:`commons.t_password_plaintext <DOMAIN-commons.t_password_plaintext>`
@@ -2293,9 +2209,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -2307,7 +2220,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -2346,7 +2258,7 @@ Checks
 
    .. code-block:: sql
 
-    VALUE ~ '^[a-z0-9.-]+$'
+    VALUE ~ '^[a-z0-9.\-]+$'
 
  - ``no_starting_dot``
     b
diff --git a/docs/schemas/jabber.rst b/docs/schemas/jabber.rst
index 7029dbc..9f34b6a 100644
--- a/docs/schemas/jabber.rst
+++ b/docs/schemas/jabber.rst
@@ -62,7 +62,7 @@ Foreign keys
 Columns
  - .. _COLUMN-jabber.account.domain:
    
-   ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Domain name
 
 
@@ -80,7 +80,7 @@ Columns
 
  - .. _COLUMN-jabber.account.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      ent. name
 
 
@@ -162,7 +162,7 @@ Parameters
  - ``p_node`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
 
@@ -171,9 +171,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -185,7 +182,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -212,7 +208,7 @@ Parameters
  - ``p_node`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_password`` :ref:`commons.t_password_plaintext <DOMAIN-commons.t_password_plaintext>`
@@ -230,9 +226,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -244,7 +237,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -284,9 +276,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
@@ -294,7 +283,7 @@ Returns
 Returned columns
  - ``node`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
     
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``backend_status`` :ref:`backend.t_status <DOMAIN-backend.t_status>`
     
@@ -305,7 +294,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -335,10 +323,6 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  TABLE
@@ -346,7 +330,7 @@ Returns
 Returned columns
  - ``node`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
     
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``password`` :ref:`commons.t_password <DOMAIN-commons.t_password>`
     
@@ -358,7 +342,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    RETURN QUERY
@@ -406,7 +390,7 @@ Parameters
  - ``p_node`` :ref:`email.t_localpart <DOMAIN-email.t_localpart>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_password`` :ref:`commons.t_password_plaintext <DOMAIN-commons.t_password_plaintext>`
@@ -418,9 +402,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -432,7 +413,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
diff --git a/docs/schemas/server_access.rst b/docs/schemas/server_access.rst
index e807a69..780aa53 100644
--- a/docs/schemas/server_access.rst
+++ b/docs/schemas/server_access.rst
@@ -62,7 +62,7 @@ Foreign keys
 Columns
  - .. _COLUMN-server_access.user.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Service entity name
 
 
@@ -166,7 +166,7 @@ Parameters
  - ``p_user`` :ref:`server_access.t_user <DOMAIN-server_access.t_user>`
    
     
- - ``p_service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
 
@@ -178,9 +178,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -192,7 +189,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -235,7 +231,7 @@ Parameters
  - ``p_user`` :ref:`server_access.t_user <DOMAIN-server_access.t_user>`
    
     
- - ``p_service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_subservice`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
@@ -253,9 +249,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -267,7 +260,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -302,9 +294,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
@@ -318,7 +307,7 @@ Returned columns
     
  - ``subservice`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
     
- - ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``backend_status`` :ref:`backend.t_status <DOMAIN-backend.t_status>`
     
@@ -329,7 +318,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -364,10 +352,6 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  TABLE
@@ -381,7 +365,7 @@ Returned columns
     
  - ``subservice`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
     
- - ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``backend_status`` :ref:`backend.t_status <DOMAIN-backend.t_status>`
     
@@ -393,7 +377,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    RETURN QUERY
@@ -444,7 +428,7 @@ Parameters
  - ``p_user`` :ref:`server_access.t_user <DOMAIN-server_access.t_user>`
    
     
- - ``p_service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_password`` :ref:`commons.t_password_plaintext <DOMAIN-commons.t_password_plaintext>`
@@ -462,9 +446,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -476,7 +457,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -491,7 +471,8 @@ Execute privilege
        backend_status = 'upd'
    WHERE
        "user" = p_user AND
-       service_entity_name = p_service_entity_name
+       service_entity_name = p_service_entity_name AND
+       owner = v_owner
    RETURNING subservice INTO v_subservice;
    
    PERFORM backend._conditional_notify_service_entity_name(
@@ -520,7 +501,7 @@ Checks
 
    .. code-block:: sql
 
-    VALUE ~ '^[a-z0-9_-]+$'
+    VALUE ~ '^[a-z0-9\-_]+$'
 
  - ``no_repeated_hyphens``
     Reserve double hyphens as a seperator for system generated users.
diff --git a/docs/schemas/web.rst b/docs/schemas/web.rst
index 72f2a5d..efeb5c2 100644
--- a/docs/schemas/web.rst
+++ b/docs/schemas/web.rst
@@ -87,7 +87,7 @@ Foreign keys
 Columns
  - .. _COLUMN-web.alias.domain:
    
-   ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Domain name
 
 
@@ -105,7 +105,7 @@ Columns
 
  - .. _COLUMN-web.alias.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      ent. name
 
 
@@ -139,7 +139,7 @@ Columns
 
  - .. _COLUMN-web.alias.site:
    
-   ``site`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``site`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Site
 
 
@@ -219,7 +219,7 @@ Columns
 
  - .. _COLUMN-web.https.domain:
    
-   ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Domain
 
 
@@ -355,7 +355,7 @@ Foreign keys
 Columns
  - .. _COLUMN-web.intermediate_chain.domain:
    
-   ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Domain
 
 
@@ -457,10 +457,12 @@ Foreign keys
    Local Columns
     - user
     - service_entity_name
+    - owner
 
    Referenced Columns
     - :ref:`server_access.user.user <COLUMN-server_access.user.user>`
     - :ref:`server_access.user.service_entity_name <COLUMN-server_access.user.service_entity_name>`
+    - :ref:`server_access.user.owner <COLUMN-server_access.user.owner>`
 
 
 .. END FKs
@@ -469,7 +471,7 @@ Foreign keys
 Columns
  - .. _COLUMN-web.site.domain:
    
-   ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Domain name
 
 
@@ -487,7 +489,7 @@ Columns
 
  - .. _COLUMN-web.site.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      ent. name
 
 
@@ -532,6 +534,17 @@ Columns
 
 
 
+ - .. _COLUMN-web.site.owner:
+   
+   ``owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
+     Owner
+
+
+   References :ref:`user.user.owner <COLUMN-user.user.owner>`
+
+
+   On Update: CASCADE
+
  - .. _COLUMN-web.site.port:
    
    ``port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
@@ -577,7 +590,7 @@ Functions
 del
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_site_port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
@@ -589,9 +602,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -603,7 +613,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -635,7 +644,7 @@ Execute privilege
 sdf
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
@@ -650,9 +659,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -664,7 +670,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -685,7 +690,7 @@ Execute privilege
 del
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
@@ -697,9 +702,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -711,7 +713,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -740,7 +741,7 @@ Execute privilege
 x509 request
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
@@ -757,10 +758,6 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  void
@@ -771,7 +768,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    UPDATE web.https
@@ -791,10 +788,10 @@ Execute privilege
 Insert alias
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
- - ``p_site`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_site`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_site_port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
@@ -806,9 +803,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -820,7 +814,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -864,7 +857,7 @@ Create new HTTPS certificate
  Fix missing owner verification (not critical)
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
@@ -879,9 +872,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -893,7 +883,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -930,9 +919,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -944,7 +930,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -964,7 +949,7 @@ Execute privilege
 sdf
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
@@ -985,9 +970,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -999,7 +981,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1021,7 +1002,7 @@ Insert site
 .. todo:: check owner and contingent
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
@@ -1030,7 +1011,7 @@ Parameters
  - ``p_user`` :ref:`server_access.t_user <DOMAIN-server_access.t_user>`
    
     
- - ``p_service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
 
@@ -1039,9 +1020,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -1053,15 +1031,25 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
    
+   PERFORM system._contingent_ensure(
+       p_owner:=v_owner,
+       p_domain:=p_domain,
+       p_service:='web',
+       p_subservice:='site',
+       p_current_quantity_total:=
+           (SELECT COUNT(*) FROM web.site WHERE owner=v_owner)::int,
+       p_current_quantity_domain:=
+           (SELECT COUNT(*) FROM web.site WHERE owner=v_owner AND domain = p_domain)::int
+       );
+   
    INSERT INTO web.site
-       (domain, service, subservice, port, "user", service_entity_name)
+       (domain, service, subservice, port, "user", service_entity_name, owner)
        VALUES
-       (p_domain, 'web', 'site', p_port, p_user, p_service_entity_name);
+       (p_domain, 'web', 'site', p_port, p_user, p_service_entity_name, v_owner);
    
        PERFORM backend._notify_domain('web', 'site', p_domain);
 
@@ -1082,17 +1070,14 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
 
 Returned columns
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
- - ``site`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``site`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``site_port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
     
@@ -1105,7 +1090,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1148,9 +1132,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
@@ -1158,7 +1139,7 @@ Returns
 Returned columns
  - ``identifier`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
     
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
     
@@ -1177,7 +1158,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1213,9 +1193,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
@@ -1234,7 +1211,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1265,15 +1241,12 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
 
 Returned columns
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
     
@@ -1292,7 +1265,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1327,9 +1299,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
@@ -1339,13 +1308,13 @@ Returned columns
     
  - ``subservice`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
     
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
     
  - ``user`` :ref:`server_access.t_user <DOMAIN-server_access.t_user>`
     
- - ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``https`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
     
@@ -1360,7 +1329,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1398,18 +1366,14 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  TABLE
 
 Returned columns
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
- - ``site`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``site`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``site_port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
     
@@ -1421,7 +1385,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    RETURN QUERY
@@ -1471,10 +1435,6 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  TABLE
@@ -1482,7 +1442,7 @@ Returns
 Returned columns
  - ``identifier`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
     
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
     
@@ -1500,7 +1460,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    RETURN QUERY
@@ -1557,22 +1517,18 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  TABLE
 
 Returned columns
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
     
  - ``user`` :ref:`server_access.t_user <DOMAIN-server_access.t_user>`
     
- - ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``https`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
     
@@ -1588,7 +1544,7 @@ Execute privilege
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
+   PERFORM backend._get_login();
    
    
    RETURN QUERY
@@ -1637,7 +1593,7 @@ Execute privilege
 upd https
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
@@ -1658,9 +1614,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -1672,7 +1625,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1698,7 +1650,7 @@ Execute privilege
 set https identif.
 
 Parameters
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_port`` :ref:`commons.t_port <DOMAIN-commons.t_port>`
@@ -1713,9 +1665,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -1727,25 +1676,16 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
    
-   UPDATE web.site AS t
+   UPDATE web.site AS s
        SET https = p_identifier
-   FROM server_access.user AS s, dns.service AS u
    WHERE
-       s.user = t.user AND
-       s.service_entity_name = u.service_entity_name AND
-   
-       -- dns.service JOIN
-       t.domain = u.domain AND
-       t.service = u.service AND
-   
        s.owner = v_owner AND
-       t.domain = p_domain AND
-       t.port = p_port;
+       s.domain = p_domain AND
+       s.port = p_port;
    
    PERFORM backend._conditional_notify(FOUND, 'web', 'site', p_domain);
 
diff --git a/docs/schemas/backend.rst b/docs/schemas_system/backend.rst
similarity index 80%
rename from docs/schemas/backend.rst
rename to docs/schemas_system/backend.rst
index f92b0f2..413c8e9 100644
--- a/docs/schemas/backend.rst
+++ b/docs/schemas_system/backend.rst
@@ -35,6 +35,19 @@ Primary key
 
 
 Columns
+ - .. _COLUMN-backend.auth.option:
+   
+   ``option`` :ref:`jsonb <DOMAIN-jsonb>`
+     Free options in JSON format
+
+   Default
+    .. code-block:: sql
+
+     '{}'
+
+
+
+
  - .. _COLUMN-backend.auth.role:
    
    ``role`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
@@ -47,7 +60,7 @@ Columns
 
  - .. _COLUMN-backend.auth.machine:
    
-   ``machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``machine`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Machine for which the rights are granted.
 
 
@@ -76,9 +89,22 @@ Primary key
 
 
 Columns
+ - .. _COLUMN-backend.machine.option:
+   
+   ``option`` :ref:`jsonb <DOMAIN-jsonb>`
+     Free options in JSON format
+
+   Default
+    .. code-block:: sql
+
+     '{}'
+
+
+
+
  - .. _COLUMN-backend.machine.name:
    
-   ``name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Machine name
 
 
@@ -138,7 +164,7 @@ Parameters
  - ``p_subservice`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
 
@@ -171,7 +197,7 @@ Parameters
  - ``p_condition`` :ref:`boolean <DOMAIN-boolean>`
    
     
- - ``p_service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_service`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
@@ -243,7 +269,7 @@ Returns
  TABLE
 
 Returned columns
- - ``machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``machine`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
 
 
@@ -261,6 +287,30 @@ Returned columns
 
 
 
+.. _FUNCTION-backend._login_machine:
+
+``backend._login_machine``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Shows machine for the current backend login.
+
+Parameters
+ *None*
+
+
+
+Returns
+ dns.t_hostname
+
+
+
+.. code-block:: plpgsql
+
+   
+   RETURN (SELECT machine FROM backend._get_login());
+
+
+
 .. _FUNCTION-backend._machine_priviledged:
 
 ``backend._machine_priviledged``
@@ -270,37 +320,27 @@ Checks if a currently connected machine is priviledged to obtain data for
 a certain service for a certain domain name.
 
 .. warning::
-   The parameter p_domain must be a domain, which means an entry in
-   the column dns.service.domain. It must not be confused with a service_entity_name.
+   The parameter ``p_domain`` must be a domain, which means an entry in
+   the column dns.service.domain. It must not be confused with a
+   ``service_entity_name``.
 
 Parameters
  - ``p_service`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-    
- - ``p_include_inactive`` :ref:`boolean <DOMAIN-boolean>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  boolean
 
 
-Execute privilege
- - :ref:`backend <ROLE-backend>`
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
-   
    
    RETURN COALESCE(
        (
@@ -313,7 +353,7 @@ Execute privilege
            WHERE
                t.service = p_service AND
                t.service_entity_name = s.service_entity_name AND
-               t.machine_name = v_machine
+               t.machine_name = backend._login_machine()
        )
    , FALSE);
 
@@ -328,37 +368,26 @@ Checks if a currently connected machine is priviledged to obtain data for
 a certain service for a certain servicee name.
 
 .. warning:: 
- The parameter p_server_name must be a service name. It must not be
- confused with a domain.
+ The parameter ``p_service_entity_name`` must be the name of a service entity. 
+ It must not be confused with a domain.
 
 Parameters
  - ``p_service`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
    
     
- - ``p_service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-    
- - ``p_include_inactive`` :ref:`boolean <DOMAIN-boolean>`
+ - ``p_service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
 
 
-Variables defined for body
- - ``v_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-   
 
 Returns
  boolean
 
 
-Execute privilege
- - :ref:`backend <ROLE-backend>`
 
 .. code-block:: plpgsql
 
-   v_machine := (SELECT "machine" FROM "backend"._get_login());
-   
    
    RETURN COALESCE(
        (
@@ -366,7 +395,7 @@ Execute privilege
            WHERE
                t.service = p_service AND
                t.service_entity_name = p_service_entity_name AND
-               t.machine_name = v_machine
+               t.machine_name = backend._login_machine()
        )
    , FALSE);
 
@@ -377,16 +406,21 @@ Execute privilege
 ``backend._notify``
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Informs all machines about changes.
+Informs a machine about changes. To listen to signals use
+
+.. code-block :: sql
+ 
+ LISTEN "carnivora/machine.name.example"
 
-To listen to signals use LISTEN "carnivora/machine.name.example".
-The payload has the form 'mail.domain.example/email/list'.
+on the machine. The payload has the form
+``<service_entity_name>/<service>/<subservice>``. For example
+``mail.domain.example/email/mailbox`` for a mailbox related update.
 
 Parameters
- - ``p_machine`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_machine`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
- - ``p_service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_service`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
@@ -432,7 +466,7 @@ Parameters
  - ``p_subservice`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
 
@@ -474,7 +508,7 @@ Informs all machines about changes.
  confused with a domain.
 
 Parameters
- - ``p_service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_service`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
diff --git a/docs/schemas/commons.rst b/docs/schemas_system/commons.rst
similarity index 96%
rename from docs/schemas/commons.rst
rename to docs/schemas_system/commons.rst
index 1961d63..993bdf4 100644
--- a/docs/schemas/commons.rst
+++ b/docs/schemas_system/commons.rst
@@ -194,6 +194,8 @@ Parameters
    
     
 
+Language
+ sql
 
 
 Returns
@@ -204,16 +206,13 @@ Execute privilege
  - :ref:`userlogin <ROLE-userlogin>`
  - :ref:`backend <ROLE-backend>`
 
-.. code-block:: plpgsql
+.. code-block:: guess
 
    
-   RETURN
+   SELECT
        ARRAY(
-           SELECT p_array[i]
-           FROM generate_series(
-               array_lower(p_array,1),
-               array_upper(p_array,1)
-           ) AS s(i)
+           SELECT $1[i]
+           FROM generate_subscripts($1,1) AS s(i)
            ORDER BY i DESC
        );
 
@@ -239,7 +238,7 @@ Returns
 .. code-block:: plpgsql
 
    
-   RETURN uuid_generate_v4();
+   RETURN public.uuid_generate_v4();
 
 
 
diff --git a/docs/schemas/system.rst b/docs/schemas_system/system.rst
similarity index 91%
rename from docs/schemas/system.rst
rename to docs/schemas_system/system.rst
index 6a8a0b4..59e85ad 100644
--- a/docs/schemas/system.rst
+++ b/docs/schemas_system/system.rst
@@ -93,6 +93,19 @@ Primary key
 
 
 Columns
+ - .. _COLUMN-system.service.option:
+   
+   ``option`` :ref:`jsonb <DOMAIN-jsonb>`
+     Free options in JSON format
+
+   Default
+    .. code-block:: sql
+
+     '{}'
+
+
+
+
  - .. _COLUMN-system.service.service:
    
    ``service`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
@@ -146,9 +159,22 @@ Primary key
 
 
 Columns
+ - .. _COLUMN-system.service_entity.option:
+   
+   ``option`` :ref:`jsonb <DOMAIN-jsonb>`
+     Free options in JSON format
+
+   Default
+    .. code-block:: sql
+
+     '{}'
+
+
+
+
  - .. _COLUMN-system.service_entity.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Host name
 
 
@@ -205,7 +231,7 @@ Foreign keys
 Columns
  - .. _COLUMN-system.service_entity_dns.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Service entity name
 
 
@@ -248,6 +274,19 @@ Columns
 
 
 
+ - .. _COLUMN-system.service_entity_dns.option:
+   
+   ``option`` :ref:`jsonb <DOMAIN-jsonb>`
+     Free options in JSON format
+
+   Default
+    .. code-block:: sql
+
+     '{}'
+
+
+
+
  - .. _COLUMN-system.service_entity_dns.id:
    
    ``id`` :ref:`uuid <DOMAIN-uuid>`
@@ -309,7 +348,7 @@ Foreign keys
 Columns
  - .. _COLUMN-system.service_entity_machine.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Service entity name
 
 
@@ -325,9 +364,22 @@ Columns
 
 
 
+ - .. _COLUMN-system.service_entity_machine.option:
+   
+   ``option`` :ref:`jsonb <DOMAIN-jsonb>`
+     Free options in JSON format
+
+   Default
+    .. code-block:: sql
+
+     '{}'
+
+
+
+
  - .. _COLUMN-system.service_entity_machine.machine_name:
    
-   ``machine_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``machine_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Assigns machine
 
 
@@ -422,9 +474,22 @@ Foreign keys
 
 
 Columns
+ - .. _COLUMN-system.subservice_entity.option:
+   
+   ``option`` :ref:`jsonb <DOMAIN-jsonb>`
+     Free options in JSON format
+
+   Default
+    .. code-block:: sql
+
+     '{}'
+
+
+
+
  - .. _COLUMN-system.subservice_entity.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Service entity name
 
 
@@ -497,7 +562,7 @@ Foreign keys
 Columns
  - .. _COLUMN-system.subservice_entity_contingent.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Service entity name
 
 
@@ -601,7 +666,7 @@ Foreign keys
 Columns
  - .. _COLUMN-system.subservice_entity_domain_contingent.service_entity_name:
    
-   ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Service entity name
 
 
@@ -640,7 +705,7 @@ Columns
 
  - .. _COLUMN-system.subservice_entity_domain_contingent.domain:
    
-   ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+   ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
      Specific domain for which the access is granted
 
 
@@ -683,7 +748,7 @@ Parameters
  - ``p_subservice`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
    
     
- - ``p_domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``p_domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
     
  - ``p_current_quantity_total`` :ref:`integer <DOMAIN-integer>`
@@ -695,9 +760,6 @@ Parameters
 
 
 Variables defined for body
- - ``v_remaining`` :ref:`integer <DOMAIN-integer>`
-   
-   
  - ``v_total_contingent`` :ref:`integer <DOMAIN-integer>`
    
    
@@ -710,7 +772,7 @@ Variables defined for body
  - ``v_domain_contingent_specific`` :ref:`integer <DOMAIN-integer>`
    
    
- - ``v_service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``v_service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
    
    
  - ``v_domain_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
@@ -812,62 +874,6 @@ Returns
 
 
 
-.. _FUNCTION-system._contingent_total:
-
-``system._contingent_total``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Contingent
-
-Parameters
- - ``p_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-    
- - ``p_service`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
-   
-    
- - ``p_service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
-   
-    
-
-
-Variables defined for body
- - ``v_user`` :ref:`integer <DOMAIN-integer>`
-   
-   
- - ``v_default`` :ref:`integer <DOMAIN-integer>`
-   
-   
-
-Returns
- integer
-
-
-
-.. code-block:: plpgsql
-
-   
-   v_user := (
-       SELECT t.quantity
-       FROM system.contingent_total AS t
-       WHERE
-           t.owner = p_owner AND
-           t.service = p_service AND
-           t.service_entity_name = p_service_entity_name
-   );
-   
-   v_default := (
-       SELECT t.quantity
-       FROM system.contingent_default_total AS t
-       WHERE
-           t.service = p_service AND
-           t.service_entity_name = p_service_entity_name
-   );
-   
-   RETURN COALESCE(v_user, v_default);
-
-
-
 .. _FUNCTION-system._effective_contingent:
 
 ``system._effective_contingent``
@@ -888,7 +894,7 @@ Returned columns
     
  - ``subservice`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
     
- - ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
     
@@ -947,9 +953,9 @@ Returned columns
     
  - ``subservice`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
     
- - ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
- - ``domain`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``domain`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
  - ``owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
     
@@ -1130,9 +1136,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
@@ -1151,7 +1154,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -1180,9 +1182,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
@@ -1190,7 +1189,7 @@ Returns
 Returned columns
  - ``subservice`` :ref:`commons.t_key <DOMAIN-commons.t_key>`
     
- - ``service_entity_name`` :ref:`dns.t_domain <DOMAIN-dns.t_domain>`
+ - ``service_entity_name`` :ref:`dns.t_hostname <DOMAIN-dns.t_hostname>`
     
 
 Execute privilege
@@ -1199,7 +1198,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
diff --git a/docs/schemas/user.rst b/docs/schemas_system/user.rst
similarity index 86%
rename from docs/schemas/user.rst
rename to docs/schemas_system/user.rst
index e0a9260..b5d8a5b 100644
--- a/docs/schemas/user.rst
+++ b/docs/schemas_system/user.rst
@@ -230,11 +230,37 @@ Returned columns
           WHERE "id"="user"._session_id();
    ELSE
       RAISE 'Database connection is not associated to a user login.'
-          USING HINT := 'Use user.login(...) first.';
+          USING HINT := 'Use user.ins_login(...) first.';
    END IF;
 
 
 
+.. _FUNCTION-user._login_user:
+
+``user._login_user``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Shows informations for the current user login.
+Throws an exception if no login is associated to the
+current database connection.
+
+Parameters
+ *None*
+
+
+
+Returns
+ user.t_user
+
+
+
+.. code-block:: plpgsql
+
+   
+   RETURN (SELECT owner FROM "user"._get_login());
+
+
+
 .. _FUNCTION-user._session_id:
 
 ``user._session_id``
@@ -259,13 +285,43 @@ Returns
 
    
    RETURN
-       session_user || '.' ||
        pg_backend_pid() || '.' ||
        COALESCE((SELECT backend_start FROM pg_stat_get_activity(pg_backend_pid()))::varchar, 'xxx') || '.' ||
        pg_conf_load_time();
 
 
 
+.. _FUNCTION-user.del_login:
+
+``user.del_login``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Try to logout
+
+Parameters
+ *None*
+
+
+
+Returns
+ void
+
+
+Execute privilege
+ - :ref:`userlogin <ROLE-userlogin>`
+
+.. code-block:: plpgsql
+
+   
+   DELETE FROM "user".session WHERE id = "user"._session_id();
+   
+   IF NOT FOUND THEN
+      RAISE 'Carnivora: user logout failed, not logged in'
+       USING DETAIL = '$carnivora:user:logout_failed$';
+   END IF;
+
+
+
 .. _FUNCTION-user.ins_deputy:
 
 ``user.ins_deputy``
@@ -283,9 +339,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
@@ -297,7 +350,6 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
@@ -308,7 +360,8 @@ Execute privilege
        WHERE
            s.deputy = t.owner AND
            s.represented = p_act_as AND
-           t.id = "user"._session_id();
+           t.id = "user"._session_id() AND
+           t.owner = v_owner;
    
    IF NOT FOUND THEN
        RAISE 'Acting as deputy failed.'
@@ -355,7 +408,7 @@ Execute privilege
           WHERE
               p_login IS NOT NULL AND
               t.password IS NOT NULL AND
-              p_login IN (owner, contact_email) AND
+              lower(p_login) IN (owner, contact_email) AND
               commons._passwords_equal(p_password, t.password);
    
    IF v_login_owner IS NOT NULL THEN
@@ -383,9 +436,6 @@ Variables defined for body
  - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
    
    
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  TABLE
@@ -400,14 +450,13 @@ Execute privilege
 .. code-block:: plpgsql
 
    -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
    v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
    -- end userlogin prelude
    
    
    RETURN QUERY
        SELECT t.represented FROM "user".deputy AS t
-       WHERE t.deputy = v_login
+       WHERE t.deputy = "user"._login_user()
        ORDER BY t.represented;
 
 
@@ -425,34 +474,20 @@ Parameters
     
 
 
-Variables defined for body
- - ``v_owner`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
- - ``v_login`` :ref:`user.t_user <DOMAIN-user.t_user>`
-   
-   
 
 Returns
  void
 
 
-Execute privilege
- - :ref:`userlogin <ROLE-userlogin>`
 
 .. code-block:: plpgsql
 
-   -- begin userlogin prelude
-   v_login := (SELECT t.owner FROM "user"._get_login() AS t);
-   v_owner := (SELECT t.act_as FROM "user"._get_login() AS t);
-   -- end userlogin prelude
-   
    
    UPDATE "user".user
        SET password = commons._hash_password(p_password)
    
    WHERE
-       owner = v_login;
+       owner = "user"._login_user();
 
 
 
@@ -470,6 +505,14 @@ Domains
 
 Username
 
+Checks
+ - ``valid_characters``
+    Only lower-case letters, numbers and .-_
+
+   .. code-block:: sql
+
+    VALUE ~ '^[a-z0-9.\-_]+$'
+
 
 
 
-- 
GitLab