<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.open-xchange.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Daniel.becker</id>
	<title>Open-Xchange - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.open-xchange.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Daniel.becker"/>
	<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Special:Contributions/Daniel.becker"/>
	<updated>2026-08-18T01:28:22Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=Caldav_carddav_Bundles&amp;diff=25105</id>
		<title>Caldav carddav Bundles</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Caldav_carddav_Bundles&amp;diff=25105"/>
		<updated>2019-12-03T08:50:09Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: Deprecated with 7.10.3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article is valid until the version 7.10.2 of the Open Xchange Server. For newer versions please visit https://documentation.open-xchange.com/latest/middleware/miscellaneous/caldav_carddav.html&lt;br /&gt;
&lt;br /&gt;
= Installation and Configuration of the CalDAV- and CardDAV-bundles =&lt;br /&gt;
&lt;br /&gt;
The Open-Xchange server can be accessed via it&#039;s CalDAV- and CardDAV-interfaces to allow the synchronization of Calendar- and Contact-data with external applications like the Mac OS Calendar and Address Book clients.&lt;br /&gt;
&lt;br /&gt;
CalDAV and CardDAV are standard protocols for the exchange of calendar data and address data respectively. The CalDAV interface publishes all the user&#039;s calendar folders via CalDAV so the user can subscribe to them in a client application. Similarly, the CardDAV interface publishes the user&#039;s contact folders. Depending on the used client, the user can either subscribe one or more folders, or access all available data in an aggregated way. &lt;br /&gt;
&lt;br /&gt;
== User Guide and Client Configuration ==&lt;br /&gt;
Please find further information regarding the client configuration at [[CalDAVClients]] and [[CardDAVClients]].&lt;br /&gt;
&lt;br /&gt;
== Webserver Configuration ==&lt;br /&gt;
In order to redirect DAV requests to the appropiate servlets, the webserver&#039;s configuration may need to be adjusted using one of the following alternatives. Please be aware that for a working Mavericks auto configuration setup you need to have SSL enabled on the server. The non-SSL variant described below only works if you use the advanced CalDAV configuration in Mac OS X Mavericks and enter the path by hand. If you just want to enter the hostname, SSL is required. The same applies to iOS7 where SSL is always required.&lt;br /&gt;
&lt;br /&gt;
=== Alternative 1: Apache vhost (recommended) ===&lt;br /&gt;
Please edit your site configuration file for OX so that &#039;&#039;&#039; the existing OX configuration as well as the CalDAV/CardDAV configuration are placed inside their own virtual hosts sections.&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Please add the following entries before your existing &amp;lt;code&amp;gt;VirtualHost&amp;lt;/code&amp;gt; entry. This is an &amp;lt;b&amp;gt;example&amp;lt;/b&amp;gt; where &amp;lt;code&amp;gt;MYSERVER.TLD&amp;lt;/code&amp;gt; is the domain-name of the ox-server:&lt;br /&gt;
&lt;br /&gt;
 # NameVirtualHost directive no longer has any effect since Apache &amp;gt;=2.4&lt;br /&gt;
 # uncomment only for Apache Versions &amp;lt;2.4&lt;br /&gt;
 #NameVirtualHost *:80&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
        ServerName dav.&amp;lt;MYSERVER.TLD&amp;gt;&lt;br /&gt;
        ErrorLog /tmp/dav.err.log&lt;br /&gt;
        TransferLog /tmp/dav.access.log&lt;br /&gt;
 &lt;br /&gt;
       &amp;lt;Proxy balancer://oxserver-sync&amp;gt;&lt;br /&gt;
         Order deny,allow&lt;br /&gt;
         Allow from all&lt;br /&gt;
 &lt;br /&gt;
         # for grizzly http service&lt;br /&gt;
         BalancerMember http://localhost:8009 timeout=100 smax=0 ttl=60 retry=60 loadfactor=50 route=OX1&lt;br /&gt;
         # uncomment this entry if you have a clustered setup and want to use the other nodes too&lt;br /&gt;
         #BalancerMember http://&amp;lt;ip-of-other-host&amp;gt;:8009 timeout=100 smax=0 ttl=60 retry=60 loadfactor=50 route=OX2&lt;br /&gt;
         SetEnv proxy-initial-not-pooled&lt;br /&gt;
         SetEnv proxy-sendchunked&lt;br /&gt;
       &amp;lt;/Proxy&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
       ProxyPass / balancer://oxserver-sync/servlet/dav/&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you use this method, you have to make sure that &amp;lt;code&amp;gt;dav.&amp;lt;MYSERVER.TLD&amp;gt;&amp;lt;/code&amp;gt; is reachable, your DNS configuration needs an entry for this name. Take care of the the dav.* logfiles, the example writes them without logrotation to &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Please note the &amp;lt;code&amp;gt;NameVirtualHost&amp;lt;/code&amp;gt; directive is needed to be able to specify multiple virtual hosts for the same IP. The differentiation is only done by the given &amp;lt;code&amp;gt;ServerName&amp;lt;/code&amp;gt;. This implies that you need two server names, so the virtual host entry for the existing ox site configuration needs to be also enriched by a &amp;lt;code&amp;gt;ServerName&amp;lt;/code&amp;gt; if not already present. If you access the system without one of the given &amp;lt;code&amp;gt;ServerName&amp;lt;/code&amp;gt;s so e.g. via the IP the system will pick the corresponding one by order (in this case the DAV part first. If you want it to work differently please change the order accordingly.&lt;br /&gt;
&lt;br /&gt;
=== Alternative 2: Apache useragent detection ===&lt;br /&gt;
For environments where it is inconvenient to setup a vhost there is the possibility to redirect to relevant servlets another way: Via useragent detection. This is not recommended for the following reason: Per definition this is a whitelist-approach and any client sending a useragent-string not explicitly listed in the configuration will not be able to connect . Useragent-strings may also change between different versions of an application or may even be actively changed into something non-standard.&lt;br /&gt;
&lt;br /&gt;
   $ vi &amp;lt;your-ox-site-configuration-file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  RewriteEngine On&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      Calendar           [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      Reminders          [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      DataAccess         [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      DAVKit             [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      DAVx5              [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      &amp;quot;DAVdroid&amp;quot;         [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      Lightning          [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      Adresboek          [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      dataaccessd        [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      Preferences        [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      Adressbuch         [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      AddressBook        [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      Address\ Book      [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      CalendarStore      [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      CalendarAgent      [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      CalDAV%20Sync%20Adapter [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      accountsd          [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      &amp;quot;eM Client&amp;quot;        [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      &amp;quot;OX Sync&amp;quot;          [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      CalDav             [OR]&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      CoreDAV&lt;br /&gt;
  RewriteCond %{HTTP_USER_AGENT}      &amp;quot;!Open-Xchange Calendar Feed Client&amp;quot;&lt;br /&gt;
  RewriteRule (.*)                  http://localhost:8009/servlet/dav$1     [P] # for grizzly http service&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The address book app on OSX 10.6 uses a localized user-agent string. If you&#039;re expecting clients with non-english language settings, you need to add the translated user-agent string to these rewrite rules. For example: &amp;quot;Adressbuch&amp;quot; for german OSX clients.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Depending on the specific configuration, such a global definition of the rewrite rules might not be appropriate. However, the rules may also be defined inside a &amp;lt;code&amp;gt;Directory&amp;lt;/code&amp;gt; context. More details are available at http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule.&lt;br /&gt;
&lt;br /&gt;
== Autodiscovery ==&lt;br /&gt;
&lt;br /&gt;
By providing some DNS service name registrations for your domain and adding an additional rewrite-rule to the webserver&#039;s configuration, it&#039;s possible for some clients to automatically discover the account settings by just providing the user&#039;s e-mail address and password. The procedure is specified in [http://tools.ietf.org/html/rfc6764 RFC 6764]. &lt;br /&gt;
&lt;br /&gt;
The following example illustrates the DNS entries where MYSERVER.TLD would be the domain name of the ox-server, both for CalDAV and CardDAV via HTTP and HTTPS on the virtual host dav.MYSERVER.TLD:&lt;br /&gt;
&lt;br /&gt;
 _caldavs._tcp.MYSERVER.TLD.      10800 IN SRV      10 1 443 dav.MYSERVER.TLD.&lt;br /&gt;
 _caldav._tcp.MYSERVER.TLD.       10800 IN SRV      10 1  80 dav.MYSERVER.TLD.&lt;br /&gt;
 _carddavs._tcp.MYSERVER.TLD.     10800 IN SRV      10 1 443 dav.MYSERVER.TLD.&lt;br /&gt;
 _carddav._tcp.MYSERVER.TLD.      10800 IN SRV      10 1  80 dav.MYSERVER.TLD.&lt;br /&gt;
&lt;br /&gt;
Additionally, a rewrite-rule similar to the following example should be added to the webserver configuration of the virtual host to enable the bootstrapping process. The rewrite target must be the root of your DAV server.&lt;br /&gt;
The well-known aliases should be added for your DAV vhost and on the vhost serving the host matching the mail domain:&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteCond %{REQUEST_URI} ^/\.well-known/caldav   [OR]&lt;br /&gt;
 RewriteCond %{REQUEST_URI} ^/\.well-known/carddav&lt;br /&gt;
 RewriteRule (.*) / [L,R]&lt;br /&gt;
&lt;br /&gt;
In the case of not serving the DAV service on the vhost root additionally some DNS TXT records are recommended:&lt;br /&gt;
&lt;br /&gt;
 _caldavs._tcp.MYSERVER.TLD.      10800 IN TXT   path=/servlet/dav&lt;br /&gt;
 _caldav._tcp.MYSERVER.TLD.       10800 IN TXT   path=/servlet/dav&lt;br /&gt;
 _carddavs._tcp.MYSERVER.TLD.     10800 IN TXT   path=/servlet/dav&lt;br /&gt;
 _carddav._tcp.MYSERVER.TLD.      10800 IN TXT   path=/servlet/dav&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation on OX App Suite ==&lt;br /&gt;
&lt;br /&gt;
=== Debian GNU/Linux 7.0 (valid until v7.8.2)===&lt;br /&gt;
&lt;br /&gt;
Add the following entry to /etc/apt/sources.list.d/open-xchange.list if not already present:&lt;br /&gt;
&lt;br /&gt;
 deb https://software.open-xchange.com/products/appsuite/7.8.2/backend/DebianWheezy/ /&lt;br /&gt;
&lt;br /&gt;
 # if you have a valid maintenance subscription, please uncomment the &lt;br /&gt;
 # following and add the ldb account data to the url so that the most recent&lt;br /&gt;
 # packages get installed&lt;br /&gt;
 # deb https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/appsuite/7.8.2/backend/updates/DebianWheezy/ /&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
&lt;br /&gt;
 $ apt-get update&lt;br /&gt;
 $ apt-get install open-xchange-dav&lt;br /&gt;
&lt;br /&gt;
=== Debian GNU/Linux 8.0===&lt;br /&gt;
&lt;br /&gt;
Add the following entry to /etc/apt/sources.list.d/open-xchange.list if not already present:&lt;br /&gt;
&lt;br /&gt;
 deb https://software.open-xchange.com/products/appsuite/stable/backend/DebianJessie/ /&lt;br /&gt;
&lt;br /&gt;
 # if you have a valid maintenance subscription, please uncomment the &lt;br /&gt;
 # following and add the ldb account data to the url so that the most recent&lt;br /&gt;
 # packages get installed&lt;br /&gt;
 # deb https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/appsuite/stable/backend/updates/DebianJessie/ /&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
&lt;br /&gt;
 $ apt-get update&lt;br /&gt;
 $ apt-get install open-xchange-dav&lt;br /&gt;
&lt;br /&gt;
=== SUSE Linux Enterprise Server 11 (valid until v7.8.2)===&lt;br /&gt;
&lt;br /&gt;
Add the package repository using zypper if not already present:&lt;br /&gt;
&lt;br /&gt;
 $ zypper ar https://software.open-xchange.com/products/appsuite/7.8.2/backend/SLES11 ox&lt;br /&gt;
&lt;br /&gt;
If you have a valid maintenance subscription, please run the following command and add the ldb account data to the url so that the most recent packages get installed:&lt;br /&gt;
&lt;br /&gt;
 $ zypper ar https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/appsuite/stable/backend/updates/SLES11 ox-updates&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
&lt;br /&gt;
 $ zypper ref&lt;br /&gt;
 $ zypper in open-xchange-dav&lt;br /&gt;
&lt;br /&gt;
=== SUSE Linux Enterprise Server 12===&lt;br /&gt;
&lt;br /&gt;
Add the package repository using zypper if not already present:&lt;br /&gt;
&lt;br /&gt;
 $ zypper ar https://software.open-xchange.com/products/appsuite/stable/backend/SLE_12 ox&lt;br /&gt;
&lt;br /&gt;
If you have a valid maintenance subscription, please run the following command and add the ldb account data to the url so that the most recent packages get installed:&lt;br /&gt;
&lt;br /&gt;
 $ zypper ar https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/appsuite/stable/backend/updates/SLES11 ox-updates&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
&lt;br /&gt;
 $ zypper ref&lt;br /&gt;
 $ zypper in open-xchange-dav&lt;br /&gt;
&lt;br /&gt;
=== RedHat Enterprise Linux 6===&lt;br /&gt;
&lt;br /&gt;
Start a console and create a software repository file if not already present:&lt;br /&gt;
&lt;br /&gt;
 $ vim /etc/yum.repos.d/ox.repo&lt;br /&gt;
&lt;br /&gt;
 [ox]&lt;br /&gt;
 name=Open-Xchange&lt;br /&gt;
 baseurl=https://software.open-xchange.com/products/appsuite/stable/backend/RHEL6/&lt;br /&gt;
 gpgkey=https://software.open-xchange.com/oxbuildkey.pub&lt;br /&gt;
 enabled=1&lt;br /&gt;
 gpgcheck=1&lt;br /&gt;
 metadata_expire=0m&lt;br /&gt;
&lt;br /&gt;
 # if you have a valid maintenance subscription, please uncomment the &lt;br /&gt;
 # following and add the ldb account data to the url so that the most recent&lt;br /&gt;
 # packages get installed&lt;br /&gt;
 # [ox-updates]&lt;br /&gt;
 # name=Open-Xchange Updates&lt;br /&gt;
 # baseurl=https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/appsuite/stable/backend/updates/RHEL6/&lt;br /&gt;
 # gpgkey=https://software.open-xchange.com/oxbuildkey.pub&lt;br /&gt;
 # enabled=1&lt;br /&gt;
 # gpgcheck=1&lt;br /&gt;
 # metadata_expire=0m&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
&lt;br /&gt;
 $ yum update&lt;br /&gt;
 $ yum install open-xchange-dav&lt;br /&gt;
&lt;br /&gt;
===RedHat Enterprise Linux 7===&lt;br /&gt;
&lt;br /&gt;
Start a console and create a software repository file if not already present:&lt;br /&gt;
&lt;br /&gt;
 $ vim /etc/yum.repos.d/ox.repo&lt;br /&gt;
&lt;br /&gt;
 [ox]&lt;br /&gt;
 name=Open-Xchange&lt;br /&gt;
 baseurl=https://software.open-xchange.com/products/appsuite/stable/backend/RHEL7/&lt;br /&gt;
 gpgkey=https://software.open-xchange.com/oxbuildkey.pub&lt;br /&gt;
 enabled=1&lt;br /&gt;
 gpgcheck=1&lt;br /&gt;
 metadata_expire=0m&lt;br /&gt;
&lt;br /&gt;
 # if you have a valid maintenance subscription, please uncomment the &lt;br /&gt;
 # following and add the ldb account data to the url so that the most recent&lt;br /&gt;
 # packages get installed&lt;br /&gt;
 # [ox-updates]&lt;br /&gt;
 # name=Open-Xchange Updates&lt;br /&gt;
 # baseurl=https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/appsuite/stable/backend/updates/RHEL7/&lt;br /&gt;
 # gpgkey=https://software.open-xchange.com/oxbuildkey.pub&lt;br /&gt;
 # enabled=1&lt;br /&gt;
 # gpgcheck=1&lt;br /&gt;
 # metadata_expire=0m&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
&lt;br /&gt;
 $ yum update&lt;br /&gt;
 $ yum install open-xchange-dav&lt;br /&gt;
&lt;br /&gt;
===CentOS 6===&lt;br /&gt;
&lt;br /&gt;
Start a console and create a software repository file if not already present:&lt;br /&gt;
&lt;br /&gt;
 $ vim /etc/yum.repos.d/ox.repo&lt;br /&gt;
&lt;br /&gt;
 [ox]&lt;br /&gt;
 name=Open-Xchange&lt;br /&gt;
 baseurl=https://software.open-xchange.com/products/appsuite/stable/backend/RHEL6/&lt;br /&gt;
 gpgkey=https://software.open-xchange.com/oxbuildkey.pub&lt;br /&gt;
 enabled=1&lt;br /&gt;
 gpgcheck=1&lt;br /&gt;
 metadata_expire=0m&lt;br /&gt;
&lt;br /&gt;
 # if you have a valid maintenance subscription, please uncomment the &lt;br /&gt;
 # following and add the ldb account data to the url so that the most recent&lt;br /&gt;
 # packages get installed&lt;br /&gt;
 # [ox-updates]&lt;br /&gt;
 # name=Open-Xchange Updates&lt;br /&gt;
 # baseurl=https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/appsuite/stable/backend/updates/RHEL6/&lt;br /&gt;
 # gpgkey=https://software.open-xchange.com/oxbuildkey.pub&lt;br /&gt;
 # enabled=1&lt;br /&gt;
 # gpgcheck=1&lt;br /&gt;
 # metadata_expire=0m&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
&lt;br /&gt;
 $ yum update&lt;br /&gt;
 $ yum install open-xchange-dav&lt;br /&gt;
&lt;br /&gt;
===CentOS 7===&lt;br /&gt;
&lt;br /&gt;
Start a console and create a software repository file if not already present:&lt;br /&gt;
&lt;br /&gt;
 $ vim /etc/yum.repos.d/ox.repo&lt;br /&gt;
&lt;br /&gt;
 [ox]&lt;br /&gt;
 name=Open-Xchange&lt;br /&gt;
 baseurl=https://software.open-xchange.com/products/appsuite/stable/backend/RHEL7/&lt;br /&gt;
 gpgkey=https://software.open-xchange.com/oxbuildkey.pub&lt;br /&gt;
 enabled=1&lt;br /&gt;
 gpgcheck=1&lt;br /&gt;
 metadata_expire=0m&lt;br /&gt;
&lt;br /&gt;
 # if you have a valid maintenance subscription, please uncomment the &lt;br /&gt;
 # following and add the ldb account data to the url so that the most recent&lt;br /&gt;
 # packages get installed&lt;br /&gt;
 # [ox-updates]&lt;br /&gt;
 # name=Open-Xchange Updates&lt;br /&gt;
 # baseurl=https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/appsuite/stable/backend/updates/RHEL7/&lt;br /&gt;
 # gpgkey=https://software.open-xchange.com/oxbuildkey.pub&lt;br /&gt;
 # enabled=1&lt;br /&gt;
 # gpgcheck=1&lt;br /&gt;
 # metadata_expire=0m&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
&lt;br /&gt;
 $ yum update&lt;br /&gt;
 $ yum install open-xchange-dav&lt;br /&gt;
&lt;br /&gt;
== CalDAV Configuration ==&lt;br /&gt;
&lt;br /&gt;
The following configuration options are available in the configuration files &amp;lt;code&amp;gt;caldav.properties&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;caldav.yml&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
===com.openexchange.caldav.enabled===&lt;br /&gt;
The property &#039;&#039;&#039;com.openexchange.caldav.enabled&#039;&#039;&#039; governs whether a user has access to the CalDAV interface. This can be configured along the config cascade, in the default setting, everyone that has access to the infostore also has access to caldav. This is achieved in the following way:&lt;br /&gt;
&lt;br /&gt;
/opt/open-xchange/etc/caldav.properties:&lt;br /&gt;
  com.openexchange.caldav.enabled=false&lt;br /&gt;
&lt;br /&gt;
/opt/open-xchange/etc/contextSets/caldav.yml&lt;br /&gt;
  premium:&lt;br /&gt;
      com.openexchange.caldav.enabled: true&lt;br /&gt;
      withTags: ucInfostore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This means: In general CalDAV is turned off, but using the &amp;lt;code&amp;gt;contextSets&amp;lt;/code&amp;gt; feature of the config cascade it is turned on for everyone that has infostore access.&lt;br /&gt;
&lt;br /&gt;
===com.openexchange.caldav.tree===&lt;br /&gt;
Configures the ID of the folder tree used by the CalDAV interface. Currently, this should be set to the default value of &#039;0&#039;.&lt;br /&gt;
&lt;br /&gt;
===com.openexchange.caldav.interval.start===&lt;br /&gt;
Defines the minimum end time of appointments to be synchronized via the CalDAV interface, relative to the current date. Possible values are &amp;quot;one_month&amp;quot; (default), &amp;quot;one_year&amp;quot; and &amp;quot;six_months&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
===com.openexchange.caldav.interval.end===&lt;br /&gt;
Defines the maximum start time of appointments to be synchronized via the CalDAV interface, relative to the current date. Possible values are &amp;quot;one_year&amp;quot; (default) and &amp;quot;two_years&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
===com.openexchange.caldav.url===&lt;br /&gt;
Tells users where to find a caldav folder. This can be displayed in frontends. You can use the variables [hostname] and [folderId]. If you chose to deploy caldav as a virtual host (say &#039;dav.open-xchange.com&#039;) use https://dav.open-xchange.com/caldav/[folderId] as the value. If you are using user-agent sniffing use https://[hostname]/caldav/[folderId].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CardDAV Configuration ==&lt;br /&gt;
&lt;br /&gt;
The following configuration options are available in the configuration files carddav.properties and carddav.yml:&lt;br /&gt;
&lt;br /&gt;
===com.openexchange.carddav.enabled===&lt;br /&gt;
Similarly to CalDAV, the property &#039;&#039;&#039;com.openexchange.carddav.enabled&#039;&#039;&#039; governs whether CardDAV is available for a certain user. This is configured exactly like CalDAV with the config cascade only enabling this for users that have access to the infostore:&lt;br /&gt;
&lt;br /&gt;
/opt/open-xchange/etc/groupware/carddav.properties:&lt;br /&gt;
  com.openexchange.carddav.enabled=false&lt;br /&gt;
&lt;br /&gt;
/opt/open-xchange/etc/groupware/contextSets/carddav.yml&lt;br /&gt;
  premium:&lt;br /&gt;
      com.openexchange.carddav.enabled: true&lt;br /&gt;
      withTags: ucInfostore&lt;br /&gt;
&lt;br /&gt;
===com.openexchange.carddav.ignoreFolders===&lt;br /&gt;
A comma-separated list of folder IDs to exclude from the synchronization. Use this to disable syncing of very large folders (e.g. the global address list in large contexts, which always has ID 6). By default, no folders are excluded.&lt;br /&gt;
&lt;br /&gt;
===com.openexchange.carddav.tree===&lt;br /&gt;
Configures the ID of the folder tree used by the CardDAV interface. Currently, this should be set to the default value of &#039;0&#039;.&lt;br /&gt;
&lt;br /&gt;
===com.openexchange.carddav.exposedCollections===&lt;br /&gt;
Controls which collections are exposed via the CardDAV interface. Possible values are &#039;0&#039;, &#039;1&#039; and &#039;2&#039;. A value of &#039;1&#039; makes each visible folder available as a resource collection, while &#039;2&#039; only exposes an aggregated collection containing  all contact resources from all visible folders. The default value &#039;0&#039; exposes either an aggregated collection or individual collections for each folder, depending on the client&#039;s user-agent that is matched against the pattern in &#039;userAgentForAggregatedCollection&#039;. &lt;br /&gt;
&lt;br /&gt;
===com.openexchange.carddav.userAgentForAggregatedCollection===&lt;br /&gt;
Regular expression to match against the client&#039;s user-agent to decide whether the aggregated collection is exposed or not. The default pattern matches all known varieties of the Mac OS Addressbook client, that doesn&#039;t support multiple collections. Only used if &#039;exposedCollections&#039; is set to &#039;0&#039;. The pattern is used case insensitive. &lt;br /&gt;
&lt;br /&gt;
===com.openexchange.carddav.reducedAggregatedCollection===&lt;br /&gt;
Specifies if all visible folders are used to create the aggregated collection, or if a reduced set of folders only containing the global addressbook and the personal contacts folders should be used. This setting only influences the aggregated collection that is used for clients that don&#039;t support multiple collections. Possible values are &#039;true&#039; and &#039;false.&lt;br /&gt;
&lt;br /&gt;
[[Category: Clients]]&lt;br /&gt;
[[Category: Administrator]]&lt;br /&gt;
[[Category: AppSuite]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Sharing_and_Guest_Mode&amp;diff=24476</id>
		<title>AppSuite:Sharing and Guest Mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Sharing_and_Guest_Mode&amp;diff=24476"/>
		<updated>2018-12-07T13:37:49Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
{{VersionFrom|7.8.0}}&lt;br /&gt;
&lt;br /&gt;
This article is valid from 7.8.0 to 7.10 and is not updated for newer versions anymore.&lt;br /&gt;
For 7.10.1 and onwards you can find the corresponding documentation at https://documentation.open-xchange.com/7.10.1/middleware/components/sharing_guest_mode.html&lt;br /&gt;
&lt;br /&gt;
With the version 7.10.2 the publication mechanism along subscription done to those publications are removed.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Starting with v7.8.0, the Open-Xchange server comes with a whole new concept to share contents with external people, allowing guest users to interact with the shared data in the same way as regular groupware users do. This article describes the underlying technical implications and outlines the different use cases.&lt;br /&gt;
&lt;br /&gt;
The main idea behind the new sharing concept is that guest users, i.e. external users without a regular account on the server, should be able to access the shared contents using the existing interfaces, especially the App Suite web interface. On the one hand, this includes consuming the shared data using the App Suite&#039;s advanced media viewing capabilities. On the other hand, this enables guests to edit existing as well as to create or upload new content in the groupware. Even real-time collaboration between internal users and guests in OX Documents is possible.&lt;br /&gt;
&lt;br /&gt;
The following chapters cover different topics regarding sharing and guest users and try to describe some technical background and impact where hosters, administrators or integrators might be interested in.&lt;br /&gt;
&lt;br /&gt;
== Creating Shares ==&lt;br /&gt;
&lt;br /&gt;
Basically, creating a share means adding an additional permission entity to the shared folder or item. Previously, this was only possible for &amp;amp;quot;internal&amp;amp;quot; entities, i.e. regular users or user groups. Now, the underlying permission system has been extended to support external entities, which can be either invited guest users, or special &amp;amp;quot;anonymous&amp;amp;quot; guest users who access a shared folder or item via a secret link. Anonymous and invited guest users are explained in more detail below.&lt;br /&gt;
&lt;br /&gt;
Sharing is available for the groupware modules Calendar, Contacts, Tasks and Drive (a.k.a. Infostore/Files). While the latter one also allows &amp;quot;writable&amp;quot; access for invited guest users, folders from the Calendar, Contacts and Tasks module may only be published in &amp;quot;read-only&amp;quot; mode to external guests.&lt;br /&gt;
&lt;br /&gt;
=== Invite Guests ===&lt;br /&gt;
&lt;br /&gt;
To share something to a guest user, it&#039;s possible to just add the e-mail address of the invitee as new permission entity for files and folders. The middleware then takes care to provision a new or reuse an existing account for the guest user, and equips him with the required permissions for accessing the contents. So, from a client&#039;s point of view, sharing something to a guest user is mostly the same process as sharing something to an internal user or group.&lt;br /&gt;
&lt;br /&gt;
=== Share Links ===&lt;br /&gt;
&lt;br /&gt;
Besides explicitly inviting a guest user to a share, it&#039;s also possible to just get a secret link for a folder or item. This will result in an additional &amp;amp;quot;anonymous&amp;amp;quot; guest entity in the permissions of the shared object, and will grant any user with the corresponding share link access the shared contents. To simplify the creation of share links, the clients will offer an additional &amp;amp;quot;wizard&amp;amp;quot; to quickly get a share link for a folder or item. Unlike invited guests which behave much like internal users, anonymous guest entities are strictly bound to the underlying folder or item, i.e. there is at most one anonymous permission entity per file or folder, as well as an anonymous permission entity can only be used for only once.&lt;br /&gt;
&lt;br /&gt;
=== Required Permissions and Capabilities ===&lt;br /&gt;
&lt;br /&gt;
Whether a user is allowed to create share links, invite external guests, or internal groups or users, depends on the following module access permissions and capabilities. Please note that share links no longer require &amp;lt;code&amp;gt;read_create_shared_folders&amp;lt;/code&amp;gt; since Open-Xchange v7.8.1; this restriction was removed in order to allow simple publications also for non-groupware accounts, e.g. as defined by the &amp;lt;code&amp;gt;pim&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;pim_infostore&amp;lt;/code&amp;gt; module access combinations.&lt;br /&gt;
&lt;br /&gt;
==== v7.8.0 ====&lt;br /&gt;
* Create, update &amp;amp; remove share links: &amp;lt;code&amp;gt;read_create_shared_folders&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;share_links&amp;lt;/code&amp;gt;&lt;br /&gt;
* Add, update or remove internal users and group permissions: &amp;lt;code&amp;gt;read_create_shared_folders&amp;lt;/code&amp;gt;&lt;br /&gt;
* Add, update or remove external guest permissions: &amp;lt;code&amp;gt;read_create_shared_folders&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;invite_guests&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== v7.8.1 ====&lt;br /&gt;
* Create, update &amp;amp; remove share links: &amp;lt;code&amp;gt;share_links&amp;lt;/code&amp;gt;&lt;br /&gt;
* Add, update or remove internal users and group permissions in modules Calendar, Contacts, Tasks: &amp;lt;code&amp;gt;read_create_shared_folders&amp;lt;/code&amp;gt; for personal / &amp;lt;code&amp;gt;edit_public_folders&amp;lt;/code&amp;gt; for public folders&lt;br /&gt;
* Add, update or remove internal users and group permissions in module Drive: none&lt;br /&gt;
* Add, update or remove external guest permissions in modules Calendar, Contacts, Tasks: &amp;lt;code&amp;gt;invite_guests&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;read_create_shared_folders&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;read_create_shared_folders&amp;lt;/code&amp;gt; for personal / &amp;lt;code&amp;gt;edit_public_folders&amp;lt;/code&amp;gt; for public folders&lt;br /&gt;
* Add, update or remove external guest permissions in module Drive: &amp;lt;code&amp;gt;invite_guests&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Administrator Notes:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Existing shares for a guest user or context may be listed using the commandline utility &amp;lt;code&amp;gt;listshares&amp;lt;/code&amp;gt;&lt;br /&gt;
* The ability to create share links may be controlled via &amp;lt;code&amp;gt;com.openexchange.capability.share_links&amp;lt;/code&amp;gt;, either globally in the configuration file &amp;lt;code&amp;gt;permissions.properties&amp;lt;/code&amp;gt;, or on a more fine-granular level through the [https://oxpedia.org/wiki/index.php?title=ConfigCascade Config Cascade]&lt;br /&gt;
* The ability to invite guest users may be controlled via &amp;lt;code&amp;gt;com.openexchange.capability.invite_guests&amp;lt;/code&amp;gt;, either globally in the configuration file &amp;lt;code&amp;gt;permissions.properties&amp;lt;/code&amp;gt;, or on a more fine-granular level through the [https://oxpedia.org/wiki/index.php?title=ConfigCascade Config Cascade]&lt;br /&gt;
* The number of allowed share links per user may be specified via &amp;lt;code&amp;gt;com.openexchange.quota.share_links&amp;lt;/code&amp;gt;, either globally in the configuration file &amp;lt;code&amp;gt;share.properties&amp;lt;/code&amp;gt;, or on a more fine-granular level through the [https://oxpedia.org/wiki/index.php?title=ConfigCascade Config Cascade]&lt;br /&gt;
* The number of allowed guest invitations per user may be specified via &amp;lt;code&amp;gt;com.openexchange.quota.invite_guests&amp;lt;/code&amp;gt;, either globally in the configuration file &amp;lt;code&amp;gt;share.properties&amp;lt;/code&amp;gt;, or on a more fine-granular level through the [https://oxpedia.org/wiki/index.php?title=ConfigCascade Config Cascade]&lt;br /&gt;
* Both quotas can also be set on a per-context basis via a &#039;changecontext&#039; call and the &amp;lt;code&amp;gt;quota-module&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;quota-value&amp;lt;/code&amp;gt; options, see [http://oxpedia.org/wiki/index.php?title=AppSuite:Context_management#changecontext]. The module IDs are accordingly &amp;lt;code&amp;gt;share_links&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;invite_guests&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Quotas are always checked per-user, per default both are set to 100. You&#039;ll probably want to increase the quota for links when enabling the link mail feature available with OX App Suite 7.8.2.&lt;br /&gt;
&lt;br /&gt;
== Removing Shares ==&lt;br /&gt;
&lt;br /&gt;
The lifetime of shares is implicitly bound to the lifetime of the associated permission of the guest user entity. So, once a permission entity pointing to a (named or anonymous) guest user account is removed from the parent folder or item, this also leads to the removal of the associated share itself. Afterwards, the contents are no longer accessible for the guest user. For shares that were created with a specific expiry date, it is ensured that they can no longer be accessed via their share link after expiring. Additionally, expired shares are cleaned up periodically within a background task.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Administrator Notes:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Shares may be revoked manually using the commandline utility &amp;lt;code&amp;gt;removeshares&amp;lt;/code&amp;gt;&lt;br /&gt;
* The interval of the periodic cleanup task can be controlled via &amp;lt;code&amp;gt;com.openexchange.share.cleanup.periodicCleanerInterval&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;share.properties&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Share Links &amp;amp;amp; Tokens ==&lt;br /&gt;
&lt;br /&gt;
Shares are accessed with a hyperlink that contains the so-called share &amp;amp;quot;token&amp;amp;quot;. This 24-byte token uniquely identifies the associated guest account on the system, and carries enough randomness that it can&#039;t be guessed. Explicitly invited guest users receive this hyperlink in the invitation mail to a share, while in case of an &amp;amp;quot;anonymous&amp;amp;quot; share where just the link itself was generated, it&#039;s up to the sharing user to distribute the link on his own. Besides the token, a share link may contain an additional path that points to the concrete folder and item, which just aids to jump to the shared item in the web interface directly. The following shows an example of a share link:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://share.example.com/ajax/share/48b2b6190151f1bd8b4b610151f0405d9fc8cb89a087f14e/1/2/ODAxMDY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a guest user has been invited to more than one share in a context (based on his e-mail address), his individual share token remains equal, so that he will have access to all shared contents in the web interface after following any of the share links he received. However, the additional &amp;amp;quot;path&amp;amp;quot; still points to the concrete item. When inviting more than one guest user to the same share, each recipient will get his own individual share link.&lt;br /&gt;
&lt;br /&gt;
Once the share URL is requested from the server, the associated guest account is looked up and, depending of the guest type, the request is redirected to a specific login screen or directly into the App Suite web interface. More details regarding the different login modes are described at [[#Guest_Login_&amp;amp;_Session_Handling|Guest Login &amp;amp;amp; Session Handling]].&lt;br /&gt;
&lt;br /&gt;
After a share has been revoked (either explicitly, by removing the permission, or if the share is expired), share links can&#039;t be accessed any longer, and, after the last share for the guest user was removed, the guest account is removed from the system automatically.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Administrator Notes:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The share token is stored as user attribute &amp;lt;code&amp;gt;com.openexchange.shareBaseToken&amp;lt;/code&amp;gt; in the corresponding guest user account&lt;br /&gt;
* The target database schema for a share and the associated guest account is extracted from the context identifier encoded in the share token&lt;br /&gt;
&lt;br /&gt;
== Guest Users ==&lt;br /&gt;
&lt;br /&gt;
As outlined above, guest users are created on demand once something is being shared. We basically distinguish between two types of guest users: Those that were invited explicitly by the sharing user, or &amp;amp;quot;anonymous&amp;amp;quot; guest users that are able to access by visiting the share link. Access for the latter one may optionally be secured with a fixed PIN code.&lt;br /&gt;
&lt;br /&gt;
For both kinds of guest users, a corresponding user account is provisioned dynamically on the system once a new share is created. Such a guest account is handled much similar as an account for a regular user, with the following main exceptions:&lt;br /&gt;
&lt;br /&gt;
* No access to the &amp;amp;quot;Mail&amp;amp;quot; module&lt;br /&gt;
* No personal folders&lt;br /&gt;
* No access to the &amp;amp;quot;Portal&amp;amp;quot;&lt;br /&gt;
* No access to the global address book&lt;br /&gt;
* Module access is restricted to only include modules from the actual shares&lt;br /&gt;
&lt;br /&gt;
All those restrictions are configured and enforced using the built-in mechanisms of the Open-Xchange Server, i.e. by a reduced set of capabilities (i.e. module permissions), or by selectively set permission bits in the folder tree for the virtual guest group. This ensures that guest users are only able to access things they explicitly have been invited to, as well as a transparent handling of guest accounts within all subsystems.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Administrator Notes:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Guest users are stored much similar as regular users in the database (tables &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;prg_contacts&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;user_attribute&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;user_configuration&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Additionally, the identifier of the user who (initially) created the guest account is stored in &amp;lt;code&amp;gt;user.guestCreatedBy&amp;lt;/code&amp;gt;, i.e. if this column is not &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, this entry refers to a guest user&lt;br /&gt;
* All service calls and APIs that list or search users have been adjusted to be &amp;amp;quot;guest-aware&amp;amp;quot;, i.e. by default, guests users are not included in the output, yet may be included explicitly with additional parameters (namely &amp;lt;code&amp;gt;includeGuests&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;excludeUsers&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Service calls and APIs that request data explicitly based on an entity&#039;s identifier are also working with guest users, i.e. if a specific idnetifier points to a guest, then the referenced guest data is returned&lt;br /&gt;
&lt;br /&gt;
=== Capabilities ===&lt;br /&gt;
&lt;br /&gt;
Guest users always have the &amp;lt;code&amp;gt;guest&amp;lt;/code&amp;gt; capability set. Besides they are generally configured with a limited permission set, that allows them just to work with their shared items. This permission set includes:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Permission&lt;br /&gt;
!Capability&lt;br /&gt;
!Details&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;deniedportal&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|No &amp;lt;code&amp;gt;portal&amp;lt;/code&amp;gt; capability&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;editpublicfolders&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;edit_public_folders&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;readcreatesharedfolders&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;read_create_shared_folders&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;editpassword&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;edit_password&amp;lt;/code&amp;gt;&lt;br /&gt;
|Only for invited guests, not links&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Additionally, for every module the guest is having shared items in, the according module permission is granted, e.g. a shared drive folder results in permission &amp;lt;code&amp;gt;infostore&amp;lt;/code&amp;gt; and the according capability. Guest users are never allowed to share folders or items on their own, i.e. the capabilities &amp;lt;code&amp;gt;share_links&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;invite_guests&amp;lt;/code&amp;gt; can never be set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Administrator Notes:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This limited capability set can be extended by configuration. Currently three modes are supported:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Mode&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|deny_all&lt;br /&gt;
|No further capabilities are applied to guest users, except ones that have been explicitly set for the guest user via &amp;lt;code&amp;gt;changeuser --capabilities-to-add&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|static&lt;br /&gt;
|A static list of capabilities is applied to guest users via the &amp;lt;code&amp;gt;com.openexchange.share.staticGuestCapabilities&amp;lt;/code&amp;gt; property. Additionally capabilities that have been explicitly set for the guest user via &amp;lt;code&amp;gt;changeuser --capabilities-to-add&amp;lt;/code&amp;gt; are applied.&lt;br /&gt;
|-&lt;br /&gt;
|inherit&lt;br /&gt;
|All capabilities of the user who &amp;amp;quot;created&amp;amp;quot; the guest, i.e. created the link or initially invited somebody, are applied to the guest user. Additionally capabilities that have been explicitly set for the guest user via &amp;lt;code&amp;gt;changeuser --capabilities-to-add&amp;lt;/code&amp;gt; are applied.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The mode can be configured via the &amp;lt;code&amp;gt;com.openexchange.share.guestCapabilityMode&amp;lt;/code&amp;gt; property in &amp;lt;code&amp;gt;share.properties&amp;lt;/code&amp;gt;. This property is config-cascade capable, so it can for example be overridden for certain sets of contexts. The same applies to the &amp;lt;code&amp;gt;com.openexchange.share.staticGuestCapabilities&amp;lt;/code&amp;gt; property.&lt;br /&gt;
&lt;br /&gt;
Due to this configuration mechanism it is possible to increase the user experience for guests and even allow some real collaboration. As an &#039;&#039;&#039;example&#039;&#039;&#039; one could apply the following configuration to allow guests to see preview images of files and edit shared documents with OX Documents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;com.openexchange.share.guestCapabilityMode = static&lt;br /&gt;
com.openexchange.share.staticGuestCapabilities = document_preview, text, spreadsheet, presentation&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anonymous Guest Users ===&lt;br /&gt;
&lt;br /&gt;
If a &amp;amp;quot;share link&amp;amp;quot; is created, this results in an implicit creation of an anonymous guest user account on the server. The &amp;amp;quot;secret&amp;amp;quot; to access the shared contents is the share token itself that is encoded in the generated share link, so that everybody that knows the share link is able to access the shared contents. Optionally, such an anonymous share link may be secured with an additional PIN code. Guest users will be prompted to enter this PIN code when attempting to access the share.&lt;br /&gt;
&lt;br /&gt;
To have a strict separation between different shared contents, each time a folder or item is shared using the &amp;amp;quot;Get a link&amp;amp;quot; method, a designated anonymous guest account for this share is used. Consequently, each time such an anonymous share is revoked, this guest account is terminated again with no further delay. Additionally, such an anonymous guest entity can only be applied to the permission set of the folder or item the original link was created for, i.e. it&#039;s not possible to add more shared contents to an anonymous guest - in contrast to an invited, named guest user.&lt;br /&gt;
&lt;br /&gt;
Besides the common restrictions for guest accounts outlined above, the following applies for anonymous guest user accounts:&lt;br /&gt;
&lt;br /&gt;
* No e-mail address or display name&lt;br /&gt;
* No password, if no PIN was assigned by the sharing user&lt;br /&gt;
* A password that may only be changed by editing the link, if a PIN code was set&lt;br /&gt;
* Anonymous guest users may only receive &amp;amp;quot;read-only&amp;amp;quot; access permissions to the shared item&lt;br /&gt;
* Optionally, an expiry date can be applied for an anonymous guest user after which the share link is no longer accessible&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Administrator Notes:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The PIN code for anonymous guest users is stored using symmetrical encryption in the database, therefore, an encryption key needs to be specified via the property &amp;lt;code&amp;gt;com.openexchange.share.cryptKey&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;share.properties&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Named Guest Users ===&lt;br /&gt;
&lt;br /&gt;
Internal users are able to invite a guest user to a folder or item explicitly by specifying the e-mail address of the recipient. Such &amp;amp;quot;named&amp;amp;quot; guest users are internally stored as individual guest users, identified by their e-mail address.&lt;br /&gt;
&lt;br /&gt;
If data is shared for the first time to the recipient in the context, a new guest user account is provisioned and an initial set of user permissions and capabilities is assigned. In case there are already shares in different contexts to the same recipient (based on his e-mail address), some existing user data like a display name or an assigned password is copied over if a cross-context database is available on the system.&lt;br /&gt;
&lt;br /&gt;
If the recipient has already been invited from the same or another internal user in the context to another share before, the new share is added to the guest user in a way that the underlying folder- and object permissions are taken over, and the user capabilities getting expanded as needed to cover all modules the shares are located in. Similarly, if a share to a named guest user is revoked and the underlying folder- and object-permissions are removed, the guest user capabilities are updated implicitly to reflect the modules of the remaining shares.&lt;br /&gt;
&lt;br /&gt;
After the last share to a named guest user has been revoked, the user has no longer access to any data. The account itself gets removed from the context automatically after a configurable expiry time. Additionally, any data that is stored for the guest user in the cross-context database is removed once the guest user has been deleted from all contexts in the system.&lt;br /&gt;
&lt;br /&gt;
In contrast to an &amp;amp;quot;anonymous&amp;amp;quot; guest user, a named guest user has access to all shared items from a context after logging in, since the permissions get added to an existing guest user account automatically. For entering the web interface, he may use any of the share links that were sent to him in the different notification messages. Those links usually point to an individual share target like a folder or file, but the guest user may navigate to the other shared contents using the folder tree of the web interface in the same way as regular groupware users do. Similarly, if the guest user has access to shares from different modules, the modules can be switched in the web interface as usual.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Administrator Notes:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The timespan after which an unused named guest user should be removed from the system can be configured via &amp;lt;code&amp;gt;com.openexchange.share.cleanup.guestExpiry&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;share.properties&amp;lt;/code&amp;gt; - this value may also be set to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; to force an immediate removal&lt;br /&gt;
* For the removal of no longer needed guest user accounts, a periodical cleanup task is scheduled based on the interval of &amp;lt;code&amp;gt;com.openexchange.share.cleanup.periodicCleanerInterval&amp;lt;/code&amp;gt;&lt;br /&gt;
* Whether a cross-context database is considered for guest users may be configured via &amp;lt;code&amp;gt;com.openexchange.share.crossContextGuests&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Guest Login &amp;amp;amp; Session Handling ==&lt;br /&gt;
&lt;br /&gt;
Based on the underlying guest user account, different login operations with different authentication workflows are possible.&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
We have basically three different authentication options for guest users accessing a share, each of them having their own characteristics.&lt;br /&gt;
&lt;br /&gt;
==== Anonymous ====&lt;br /&gt;
&lt;br /&gt;
* Access is granted without providing additional authentication information, the knowledge of the link is sufficient&lt;br /&gt;
* When accessing the share link, a guest session is spawned implicitly&lt;br /&gt;
* Initially supplied cookies are considered to recycle an existing session&lt;br /&gt;
* The login screen is skipped, we&#039;ll redirect to the module/folder/item directly (using appropriate URL fragments)&lt;br /&gt;
&lt;br /&gt;
==== Anonymous with PIN ====&lt;br /&gt;
&lt;br /&gt;
* Access is granted for anonymous guest users providing a password / PIN code&lt;br /&gt;
* When accessing the share link, the client is redirected to the login screen of the webinterface, using &amp;lt;code&amp;gt;login_type=anonymous&amp;lt;/code&amp;gt;&lt;br /&gt;
* User can then enter his PIN code, client executes the &amp;lt;code&amp;gt;anonymous_login&amp;lt;/code&amp;gt; method, server authenticates, sends back a login response containing the target in the app suite webinterface (module/folder/item)&lt;br /&gt;
* Password can&#039;t be changed by an anonymous user&lt;br /&gt;
* Password can be re-constructed / changed by sharing user&lt;br /&gt;
&lt;br /&gt;
==== Guest without Password ====&lt;br /&gt;
&lt;br /&gt;
* Access is granted without providing additional authentication information, the knowledge of the guest&#039;s individual link is sufficient&lt;br /&gt;
* When accessing the share link, a guest session is spawned implicitly&lt;br /&gt;
* Exiting cookies are considered to recycle an existing session&lt;br /&gt;
* The login screen is skipped, we&#039;ll redirect to the module/folder/item directly (using appropriate URL fragments)&lt;br /&gt;
* Guest user may choose an individual password at a later stage&lt;br /&gt;
&lt;br /&gt;
==== Guest with Password ====&lt;br /&gt;
&lt;br /&gt;
* Access is granted for guest users providing a user name and password.&lt;br /&gt;
* Much similar to a regular groupware user&lt;br /&gt;
* When accessing the share link, the client is redirected to the login screen of the webinterface, using &amp;lt;code&amp;gt;login_type=guest&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;login_name=&amp;amp;lt;NAME&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* The login name is used to pre-fill the username input&lt;br /&gt;
* User can then enter his password, client executes the &amp;lt;code&amp;gt;guest_login&amp;lt;/code&amp;gt; method, server authenticates, sends back a login response containing the target in the app suite webinterface (module/folder/item)&lt;br /&gt;
* Password can be changed by guest user&lt;br /&gt;
* Guest user may reset his password if he can&#039;t remember&lt;br /&gt;
&lt;br /&gt;
=== Guest Hostname ===&lt;br /&gt;
&lt;br /&gt;
For serving shares, a separate guest hostname needs to be configured. This is mainly required to prevent guest- and regular user sessions using the same cookie container when logged in in the same client (otherwise, the cookie holding the alternative session identifier as well as other cookies would get overwritten concurrently). Additionally, this allows to have separate entry points to the web client for guest- and regular users. &lt;br /&gt;
&lt;br /&gt;
The hostname for guests is used when generating external share links, as well as at other locations where hyperlinks are constructed in the context of guest users. Usually, the guest hostname refers to a separate subdomain of the installation like &amp;lt;code&amp;gt;share.example.com&amp;lt;/code&amp;gt;, and is defined as an additional named virtual host pointing to the web client&#039;s document root in the webserver&#039;s configuration. &lt;br /&gt;
&lt;br /&gt;
Once the webserver configuration is done and the web client is accessible using the guest hostname, this hostname needs to be specified in the backend configuration, too. In simple scenarios, where a fixed guest hostname should be used for the installation, this can be done statically in a configuration file. This setting may also be overridden per context via the Config Cascade. In case a dedicated hostname service is installed (for example &amp;lt;code&amp;gt;open-xchange-hostname-ldap&amp;lt;/code&amp;gt;), this hostname service is also supposed to supply the guest hostname. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Administrator Notes:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The guest hostname may be specified via &amp;lt;code&amp;gt;com.openexchange.share.guestHostname&amp;lt;/code&amp;gt;, either globally in the configuration file &amp;lt;code&amp;gt;share.properties&amp;lt;/code&amp;gt;, or on a more fine-granular level through the [https://oxpedia.org/wiki/index.php?title=ConfigCascade Config Cascade]&lt;br /&gt;
* The guest hostname may also be supplied via dedicated hostname services like &amp;lt;code&amp;gt;open-xchange-hostname-config-cascade&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;open-xchange-hostname-ldap&amp;lt;/code&amp;gt;&lt;br /&gt;
* For test purposes, guests may also access the web interface using the same host as regular users do, however, this might lead to unexpected results (missing images, sessions timing out, auto-login malfunction...)&lt;br /&gt;
&lt;br /&gt;
=== Cookies ===&lt;br /&gt;
&lt;br /&gt;
Guest sessions basically make use of the same cookies as regular user sessions do. This includes the JSESSONID cookie for the JVM route, as well as the &amp;lt;code&amp;gt;open-xchange-secret-&amp;amp;lt;hash&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;open-xchange-public-session-&amp;amp;lt;hash&amp;amp;gt;&amp;lt;/code&amp;gt; cookies. Additionally, if configured, the client may also issue a &amp;lt;code&amp;gt;store&amp;lt;/code&amp;gt; request to persist the open-xchange-session-&amp;lt;hash&amp;gt; cookie. This cookie may then be used to auto-login the guest client into the previously used session if it is still valid.&lt;br /&gt;
&lt;br /&gt;
Besides the common cookies, another special cookie is set: &amp;lt;code&amp;gt;open-xchange-share-&amp;amp;lt;hash&amp;amp;gt;&amp;lt;/code&amp;gt;. The value contains the unique share token bound to the guest user accessing the share. here, the cookie hash is calculated as it&#039;s done for ordinary sessions, so that there can only be one &amp;lt;code&amp;gt;open-xchange-share-&amp;amp;lt;hash&amp;amp;gt;&amp;lt;/code&amp;gt; cookie in a client at the same time. Whenever an auto-login request is issued by the client, the server checks for the existence of this &amp;amp;quot;share&amp;amp;quot; cookie, and, once recognized and checked for validity, it will try to perform the auto-login for an existing guest session first, i.e. using the session cookie based on the special guest hash calculation outlined above. Otherwise, the common auto-login process takes place. The &amp;amp;quot;share&amp;amp;quot; cookie is removed once the guest session terminates, i.e. the guest user logs out.&lt;br /&gt;
&lt;br /&gt;
Since guest users access the web interface on a separate (sub)domain (see [[#Guest_Hostname|Guest Hostname]] above for details), guest session cookies won&#039;t interfere with cookies of a regular session on the same client. This allows to use the regular user session as well as one or more guest sessions in parallel - e.g. if the sharing user quickly wants to check how the contents appear for the guest user after generating a share link.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Administrator Notes:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Whether guest sessions are enabled for auto-login is configurable via the property &amp;lt;code&amp;gt;com.openexchange.share.autoLogin&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;share.properties&amp;lt;/code&amp;gt;&lt;br /&gt;
* By default, the cookie TTL for guest sessions is inherited from the TTL for cookies of regular sessions as defined by &amp;lt;code&amp;gt;com.openexchange.cookie.ttl&amp;lt;/code&amp;gt; - this default may be overridden by defining a timespan at &amp;lt;code&amp;gt;com.openexchange.share.cookieTTL&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Login Modes ===&lt;br /&gt;
&lt;br /&gt;
When accessing a share link, one of the following login modes is triggered to acquire a session and forward the client to the share target. The executed login operation and redirect depends on the authentication mode of underlying guest account, the share target iteself, and the client accessing the share.&lt;br /&gt;
&lt;br /&gt;
==== Redirect to Target ====&lt;br /&gt;
&lt;br /&gt;
In case a share is accessible without providing credentials, the client is redirected to the share target directly, i.e. without prompting for a username or password. By default, the client is redirected to the target in the App Suite web interface by responding the &amp;lt;code&amp;gt;GET&amp;lt;/code&amp;gt; request to the share link with &amp;lt;code&amp;gt;HTTP 302&amp;lt;/code&amp;gt;, and a location header like the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Location: /appsuite/ui#!&amp;amp;amp;session=80c711019d6f48b5bec9cd82758e3308&amp;amp;amp;store=true&amp;amp;amp;user=&amp;amp;amp;user_id=642&amp;amp;amp;context_id=1&amp;amp;amp;m=files&amp;amp;amp;f=41042&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The session for the guest user is created implicitly in the backend after checking the share link&#039;s validity, and the client is instructed to store appropriate cookies in the redirect response, including the &amp;amp;quot;share&amp;amp;quot; cookie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Set-Cookie: open-xchange-secret-aNobP2G9wLHJ6sMr7vtTA=38ee770d6e4f42ab8366d91db3279931; Expires=Thu, 13-Aug-2015 06:16:26 GMT; Path=/; Secure; HttpOnly&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;Set-Cookie: open-xchange-public-session-d0759656127fb7cee6e0fe8bb5fe19f9=cae6a3e712ac429e9da9194abd389cb3; Expires=Thu, 13-Aug-2015 06:16:26 GMT; Path=/; Secure; HttpOnly&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;Set-Cookie: open-xchange-share-b7gDSqJpnh9gS3Fs52I65Q=0ad50ac00418fbcdad50ac1418f94fb181d51b8fa7b2bde3; Expires=Thu, 13-Aug-2015 06:16:26 GMT; Path=/; Secure; HttpOnly&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Redirect to Login Screen ====&lt;br /&gt;
&lt;br /&gt;
If additional credentials, i.e. an additional PIN code or username/password combination, are required to access a share target, and no &amp;amp;quot;special client&amp;amp;quot; like an iCal consumer is detected by the backend, the client is redirected to the login screen of the app suite webinterface. The GET request to the share link is answered with statuscode HTTP 302, and a location header depending on the required credentials to access the share.&lt;br /&gt;
&lt;br /&gt;
If the share ought to be accessed anonymously, but protected by a PIN code, a location like the following is added to the response header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Location: /appsuite/ui#!&amp;amp;amp;share=08b4b6110151f1bd7d4b610151f0405d9fc8bb89a887f04e&amp;amp;amp;login_type=anonymous&amp;amp;amp;message_type=INFO&amp;amp;amp;message=Tony%20Parker%20has%20shared%20the%20folder%20%22Pictures%22%20with%20you.%20Please%20log%20in%20to%20view%20it.%20&amp;amp;amp;target=151ebb38&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For shares to dedicated guest users identified by their e-mail address, the redirect location looks like follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Location: /appsuite/ui#!&amp;amp;amp;share=4ac9eb590f9ca4d2ac9eb58f9ca611ec9b4f4638d288c8c0&amp;amp;amp;login_type=guest&amp;amp;amp;message_type=INFO&amp;amp;amp;message=Tony%20Parker%20has%20shared%20the%20file%20%22Agenda.pdf%22%20with%20you.%20Please%20log%20in%20to%20view%20it.%20&amp;amp;amp;login_name=ray%40example.com&amp;amp;amp;target=4444cbc7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The redirect response already contains the &amp;lt;code&amp;gt;Set-Cookie&amp;lt;/code&amp;gt; header for the JVM route. On the redirect target, the client should request the PIN code or password from the user, and then issue a special login request, supplying the share token and optional target from the URL parameters, and the password as URL encoded form data in the request body, similar to the usual login request via POST. After successful authentication, the login response includes, along with the common login response properties like the session identifier, information about the share target being accessed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;{&amp;amp;quot;session&amp;amp;quot;:&amp;amp;quot;b89af2c2ce494ce4b4573c0632b48e89&amp;amp;quot;,&amp;amp;quot;user&amp;amp;quot;:&amp;amp;quot;ray@example.com&amp;amp;quot;,&amp;amp;quot;user_id&amp;amp;quot;:660,&amp;amp;quot;context_id&amp;amp;quot;:1,&amp;amp;quot;locale&amp;amp;quot;:&amp;amp;quot;en_US&amp;amp;quot;,&amp;amp;quot;module&amp;amp;quot;:&amp;amp;quot;files&amp;amp;quot;,&amp;amp;quot;folder&amp;amp;quot;:&amp;amp;quot;10&amp;amp;quot;,&amp;amp;quot;item&amp;amp;quot;:&amp;amp;quot;10/456398&amp;amp;quot;, ... }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally, the client is instructed to store the secret cookies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Set-Cookie: open-xchange-share-b7gDSqJpnh9gS3Fs52I65Q=0ac9eb590f9ca4d5ac9eb58f9ca641ec9b4f4638d288c8a0; Expires=Thu, 13-Aug-2015 06:31:21 GMT; Path=/; Secure; HttpOnly&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;Set-Cookie: open-xchange-secret-MBIRg9bJBLduCcosqQBCw=70187de16f844be6880c18be373b953d; Expires=Thu, 13-Aug-2015 06:31:21 GMT; Path=/; Secure; HttpOnly&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;Set-Cookie: open-xchange-public-session-d0759656127fb7cee6e0fe8bb5fe19f9=4e797a59758a4dd7b763912472ccf26d; Expires=Thu, 13-Aug-2015 06:31:21 GMT; Path=/; Secure; HttpOnly&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afterwards, the client is able to use the session to access the share target as usual.&lt;br /&gt;
&lt;br /&gt;
=== Session Lifecycle ===&lt;br /&gt;
&lt;br /&gt;
Generally, guest sessions on the server are treated just like the sessions of ordinary users. Especially, guest sessions are also held in the local session containers of the backend host they&#039;re associated with. However, by default guest sessions are marked as &amp;lt;code&amp;gt;transient&amp;lt;/code&amp;gt;, i.e. they are not moved to the long-term session containers, nor they are put into the distributed session storage.&lt;br /&gt;
&lt;br /&gt;
If OX Documents functionality is used for guest users in a cluster of application servers, this setting needs to be adjusted to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; in order to also have guest sessions available in the distributed storage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Administrator Notes:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Guest sessions are also accounted in the monitoring outputs (e.g. in the sessions per container graphs)&lt;br /&gt;
* The &amp;lt;code&amp;gt;transient&amp;lt;/code&amp;gt; handling of guest sessions may be changed via the property &amp;lt;code&amp;gt;com.openexchange.share.transientSessions&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;share.properties&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logout ===&lt;br /&gt;
&lt;br /&gt;
Guest sessions are terminated once a logout request is issued by the client, i.e. the user clicks the &amp;amp;quot;Logout&amp;amp;quot; button in the web interface, just like it is done for regular sessions. Additionally, guest sessions expire in the backend when not being used for a while, the actual timeout depends on the configured default session lifetime and whether they are treated as &amp;amp;quot;transient&amp;amp;quot; or not, as explained above.&lt;br /&gt;
&lt;br /&gt;
Since guest users are not able to use the default login page for regular users, a custom logout location for guest users should be specified where guest users are taken to after clicking logout explicitly, or if their session expired.&lt;br /&gt;
&lt;br /&gt;
If a share is consumed &amp;amp;quot;directly&amp;amp;quot;, e.g. by downloading the binary contents of a file share directly (see [[#Consuming_Shares|Consuming Shares]] for details), the guest sessions is terminated instantly after serving the request.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Administrator Notes:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The logout location for guest accounts can be customized via &amp;lt;code&amp;gt;guestLogoutLocation&amp;lt;/code&amp;gt; in the file &amp;lt;code&amp;gt;as-config.yml&amp;lt;/code&amp;gt; (see file &amp;lt;code&amp;gt;as-config-default.yml&amp;lt;/code&amp;gt; for an example)&lt;br /&gt;
&lt;br /&gt;
== Share Notifications ==&lt;br /&gt;
&lt;br /&gt;
With the new sharing concept, notification mails can be sent out to the permission entities (i.e. internal or guest users) of folders or items. Mechanisms exist to send out such mails implicitly or explicitly. Notifications are sent out implicitly, if externals are invited as guests and can also be sent out for internal invitations, if configured so. The client (e.g. App Suite UI) decides on its own whether implicit notifications shall be sent when updating a folders or items permissions. Besides there are separate API calls for sending out notification messages explicitly. Its on the client to provide this functionality to its users. This makes it possible to re-send a link to a folder or item to an existing permission entity.&lt;br /&gt;
&lt;br /&gt;
Sending out links to shared folders and items is not the only case for notification messages, it can also be necessary to send out system notifications to guest users. Currently this is the case when a guest user secured his account with a password and needs to reset that password, because he cannot remember.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Administrator Notes:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* A special transport must be configured for system notifications and cases where the sharing user has no configured webmail account. This transport is configured in &amp;lt;code&amp;gt;noreply.properties&amp;lt;/code&amp;gt;. All properties therein are config-cascade capable, so their values can be sensitive to the current user or context.&lt;br /&gt;
* It is possible to disable the implicit notification of internal users about shared folders or items at all by setting &amp;lt;code&amp;gt;com.openexchange.share.notifyInternal&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;share.properties&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&lt;br /&gt;
* The layout of notifications mails can be changed via &amp;lt;code&amp;gt;as-config.yml&amp;lt;/code&amp;gt;. All available properties are defined and explained in &amp;lt;code&amp;gt;as-config-defaults.yml&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API Access ==&lt;br /&gt;
&lt;br /&gt;
From a client&#039;s point of view, guest users basically don&#039;t differ from regular users, although they usually have limited capabilities, for example no mail access or no personal folders. However, all those differences are reflected within the regular permission- and capability-concepts, so that existing clients, once the guest user is authenticated and has a valid session, continue to work transparently, and use the same API calls as with a regular groupware user.&lt;br /&gt;
&lt;br /&gt;
To create or manage shares and guest users, the HTTP API has been extended at various locations. The following list gives an overview about the changes, derived from the corresponding software change requests.&lt;br /&gt;
&lt;br /&gt;
=== Format change for object identifiers of the default &amp;amp;quot;infostore&amp;amp;quot; account ===&lt;br /&gt;
&lt;br /&gt;
As preparation for individual object permissions where a file can be accessed from different folder &amp;amp;quot;views&amp;amp;quot;, the object IDs for documents in the default &amp;amp;quot;infostore&amp;amp;quot; file storage account will get enhanced with the prefixing folder ID.&lt;br /&gt;
&lt;br /&gt;
The identifiers will now be of format &amp;lt;code&amp;gt;&amp;amp;lt;some numbers&amp;amp;gt;/&amp;amp;lt;more numbers&amp;amp;gt;&amp;lt;/code&amp;gt;. Object identifiers are already of type &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt;, so this change should usually be transparent to clients. However, there may be some clever clients out there that for example tried to interpret the string of numerical characters as number, so client developers should double-check their implementation for compatibility. They most likely would run into trouble when coping with non-infostore file storages anyway.&lt;br /&gt;
&lt;br /&gt;
=== Object permissions for files ===&lt;br /&gt;
&lt;br /&gt;
In order to define permissions on object-level, a new property &amp;lt;code&amp;gt;object_permissions&amp;lt;/code&amp;gt; for objects of type &amp;lt;code&amp;gt;infoitem&amp;lt;/code&amp;gt; is introduced. Each time the underlying folder permissions are not sufficient to access an item, those object permissions are taken into account. Object permissions are stored as an array of Object Permission objects as defined below within the detailed infoitem data, the column ID is &amp;lt;code&amp;gt;108&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Details about the JSON structure are available at:&lt;br /&gt;
&lt;br /&gt;
* [http://oxpedia.org/index.php?title=HTTP_API#DetailedInfoitemData HTTP API: Detailed Infoitem Data]&lt;br /&gt;
* [http://oxpedia.org/index.php?title=HTTP_API#ObjectPermissionObject HTTP API: Object Permission Object]&lt;br /&gt;
* [http://oxpedia.org/index.php?title=HTTP_API#ObjectPermissionFlags HTTP API: Object Permission Flags]&lt;br /&gt;
&lt;br /&gt;
=== New field for &amp;amp;quot;user&amp;amp;quot; data: &amp;amp;quot;guest_created_by&amp;amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
A new property has been introduced for users that needs to be exposed in our HTTP API, too. The following property is added to the detailed user data object:&lt;br /&gt;
&lt;br /&gt;
* ID: 616&lt;br /&gt;
* Name: guest_created_by&lt;br /&gt;
* Type: Number&lt;br /&gt;
* Value: Contains the ID of the user who has created this guest in case this user represents a guest user; it is 0 for regular users&lt;br /&gt;
&lt;br /&gt;
The property is read-only and can&#039;t be removed or set by clients.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
* [http://oxpedia.org/index.php?title=HTTP_API#DetailedUserData HTTP API: Detailed User Data]&lt;br /&gt;
&lt;br /&gt;
=== Extend folder- and object permissions for addressing external guests ===&lt;br /&gt;
&lt;br /&gt;
For sharing files- or folders to external guests, the folder- and object permission objects are extended with additional properties. Those extended properties can be set during creation or update of the parent folder or file. The underlying shares and guest user entities for the referenced recipients are created automatically along with folder/file creation/update. Afterwards, the external recipients appear as regular &amp;amp;quot;user&amp;amp;quot; entities in the permission arrays in subsequent &amp;amp;quot;get&amp;amp;quot; requests.&lt;br /&gt;
&lt;br /&gt;
Details about the extended JSON structure are available at:&lt;br /&gt;
&lt;br /&gt;
* [http://oxpedia.org/index.php?title=HTTP_API#PermissionObject HTTP API: Permission Object]&lt;br /&gt;
* [http://oxpedia.org/index.php?title=HTTP_API#ObjectPermissionObject HTTP API: Object Permission Object]&lt;br /&gt;
&lt;br /&gt;
=== New Ajax module: share/management ===&lt;br /&gt;
&lt;br /&gt;
To work with shares, a new Ajax module is introduced.&lt;br /&gt;
&lt;br /&gt;
The available actions in the module are described at:&lt;br /&gt;
&lt;br /&gt;
* [http://oxpedia.org/index.php?title=HTTP_API#Module_.22share.2Fmanagement.22_.28preliminary.2C_available_with_v7.8.0.29 HTTP API: Module share management]&lt;br /&gt;
&lt;br /&gt;
=== New column &amp;amp;quot;shareable&amp;amp;quot; in detailed infoitem data ===&lt;br /&gt;
&lt;br /&gt;
Clients want to know quickly if an infostore item is shareable or not. A new (read-only) property named &amp;lt;code&amp;gt;shareable&amp;lt;/code&amp;gt; of type Boolean with column identifier &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt; is introduced for &amp;amp;quot;detailed infoitem data&amp;amp;quot;. If &amp;amp;quot;true&amp;amp;quot;, the can be considered as shareable, i.e. the item&#039;s object permissions may be adjusted by the user.&lt;br /&gt;
&lt;br /&gt;
Further details are available at:&lt;br /&gt;
&lt;br /&gt;
* [http://oxpedia.org/index.php?title=HTTP_API#DetailedInfoitemData HTTP API: Detailed Infoitem Data]&lt;br /&gt;
&lt;br /&gt;
=== New action &amp;amp;quot;shares&amp;amp;quot; in module folder ===&lt;br /&gt;
&lt;br /&gt;
To provide an overview of all folders of a certain modules that are shared to others, a new &amp;lt;code&amp;gt;shares&amp;lt;/code&amp;gt; action is added to the Ajax module &amp;lt;code&amp;gt;folders&amp;lt;/code&amp;gt;. It returns all personal folders of a certain module that are shared to other entities.&lt;br /&gt;
&lt;br /&gt;
Further details are available at:&lt;br /&gt;
&lt;br /&gt;
* [http://oxpedia.org/index.php?title=HTTP_API#Get_shared_folders_.28Since_7.8.0.2C_Preliminary.29 HTTP API: Get shared folders]&lt;br /&gt;
&lt;br /&gt;
=== New action &amp;amp;quot;shares&amp;amp;quot; in module infostore ===&lt;br /&gt;
&lt;br /&gt;
To provide an overview of all files that are shared to others, a new &amp;lt;code&amp;gt;shares&amp;lt;/code&amp;gt; action is added to the Ajax module &amp;lt;code&amp;gt;infostore&amp;lt;/code&amp;gt;. It returns all personal files that are shared to other entities.&lt;br /&gt;
&lt;br /&gt;
Further details are available at:&lt;br /&gt;
&lt;br /&gt;
* [http://oxpedia.org/index.php?title=HTTP_API#Get_shared_infoitems_.28Since_7.8.0.2C_Preliminary.29 HTTP API: Get shared infoitems]&lt;br /&gt;
&lt;br /&gt;
=== New fields to retrieve extended permissions of files and folders ===&lt;br /&gt;
&lt;br /&gt;
Clients would like to have more details about permission entities folders directly. A new read-only property named &amp;lt;code&amp;gt;com.openexchange.share.extendedPermissions&amp;lt;/code&amp;gt; is introduced for &amp;amp;quot;Detailed folder data&amp;amp;quot;, with column identifier &amp;lt;code&amp;gt;3060&amp;lt;/code&amp;gt;. It basically contains the same as the regular &amp;lt;code&amp;gt;permissions&amp;lt;/code&amp;gt; array, yet enhanced by resolved information about the user, group or guest entities as well as additional, sharing-related properties.&lt;br /&gt;
&lt;br /&gt;
Similarly, a new read-only property named &amp;lt;code&amp;gt;com.openexchange.share.extendedObjectPermissions&amp;lt;/code&amp;gt; is introduced for &amp;amp;quot;Detailed infoitem data&amp;amp;quot;, with column identifier &amp;lt;code&amp;gt;7010&amp;lt;/code&amp;gt;. It basically contains the same as the regular &amp;lt;code&amp;gt;object_permissions&amp;lt;/code&amp;gt; array, yet enhanced by resolved information about the user, group or guest entities as well as additional, sharing-related properties.&lt;br /&gt;
&lt;br /&gt;
Further information about the JSON structure is available at:&lt;br /&gt;
&lt;br /&gt;
* [http://oxpedia.org/index.php?title=HTTP_API#ExtendedPermissionObject HTTP API: Extended Permission Object]&lt;br /&gt;
* [http://oxpedia.org/index.php?title=HTTP_API#ExtendedObjectPermissionObject HTTP API: Extended Object Permission Object]&lt;br /&gt;
&lt;br /&gt;
== Consuming Shares ==&lt;br /&gt;
&lt;br /&gt;
Depending on the shared contents and the requesting user agent, shares may be consumed in a couple of different ways. The concrete response to a request to the share URL is evaluated by the share servlet in the backend.&lt;br /&gt;
&lt;br /&gt;
=== App Suite ===&lt;br /&gt;
&lt;br /&gt;
The default handling for all shares is forwarding them to the App Suite web interface, where the shared contents are made available through the existing client. Based on the underlying guest account, the client is either forwarded to the login prompt, or taken directly to the share target if no credentials need to be provided. This process is described in more detail at [[#Guest_Login_&amp;amp;_Session_Handling|Guest Login &amp;amp;amp; Session Handling]].&lt;br /&gt;
&lt;br /&gt;
=== Direct Download ===&lt;br /&gt;
&lt;br /&gt;
Shares to a single file may also be downloaded directly by clients, without opening them in the web interface first. This is indicated by an additional parameter appended to the plain share link, and can be specified in the following ways:&lt;br /&gt;
&lt;br /&gt;
* Append &amp;lt;code&amp;gt;dl&amp;lt;/code&amp;gt; parameter:&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;https://ox.example.com/ajax/share/48b2b6190151f1bd8b4b610151f0405d9fc8cb89a087f14e/151eab38?dl=true&amp;lt;/code&amp;gt;&lt;br /&gt;
* Specify &amp;lt;code&amp;gt;delivery&amp;lt;/code&amp;gt; parameter:&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;https://ox.example.com/ajax/share/48b2b6190151f1bd8b4b610151f0405d9fc8cb89a087f14e/151eab38?delivery=download&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If accessing the item requires authentication, an unauthenticated request is responded with &amp;lt;code&amp;gt;HTTP 401 Unauthorized&amp;lt;/code&amp;gt;. The client then has to provide the correct credentials to access the share via basic authentication. If there&#039;s no dedicated username for the underlying guest account - i.e. an &amp;amp;quot;anonymous&amp;amp;quot; share link protected with a PIN code is accessed - only the password is checked, i.e. the client may then supply an arbitrary username in the basic authentication header like &amp;amp;quot;Guest&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Get iCal ===&lt;br /&gt;
&lt;br /&gt;
Shares to a single calendar- or task-folder may also be downloaded directly by clients as iCal files, without opening them in the web interface first. This standard format allows to consume event data directly using various calendaring clients, which often can be configured to subscribe an external calendar source.&lt;br /&gt;
&lt;br /&gt;
Once a share link to a calendar- or task-folder is requested by the client, the &amp;lt;code&amp;gt;Accept&amp;lt;/code&amp;gt;- and &amp;lt;code&amp;gt;User-Agent&amp;lt;/code&amp;gt; headers of the request are evaluated. If the &amp;lt;code&amp;gt;Accept&amp;lt;/code&amp;gt; header is either set to &amp;lt;code&amp;gt;text/calendar&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;text/iCal&amp;lt;/code&amp;gt;, or if the &amp;lt;code&amp;gt;User-Agent&amp;lt;/code&amp;gt; header denotes a well-known client like Microsoft Outlook or Mozilla Thunderbird w/ Lightning, the contents of the shared folder are converted to an iCal file that is directly written back in the response.&lt;br /&gt;
&lt;br /&gt;
To force the iCal output, an additional parameter may be appended to the plain share link:&lt;br /&gt;
&lt;br /&gt;
* Append &amp;lt;code&amp;gt;ical&amp;lt;/code&amp;gt; parameter:&amp;lt;br /&amp;gt;&lt;br /&gt;
 &amp;lt;code&amp;gt;https://ox.example.com/ajax/share/48b2b6190151f1bd8b4b610151f0405d9fc8cb89a087f14e/151eab38?ical=true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If accessing the item requires authentication, an unauthenticated request is responded with &amp;lt;code&amp;gt;HTTP 401 Unauthorized&amp;lt;/code&amp;gt;. The client then has to provide the correct credentials to access the share via basic authentication. If there&#039;s no dedicated username for the underlying guest account - i.e. an &amp;amp;quot;anonymous&amp;amp;quot; share link protected with a PIN code is accessed - only the password is checked, i.e. the client may then supply an arbitrary username in the basic authentication header like &amp;amp;quot;Guest&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Administrator Notes:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The interval of task- and appointment data considered for conversion to iCal can be adjusted via &amp;lt;code&amp;gt;com.openexchange.share.handler.iCal.futureInterval&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;com.openexchange.share.handler.iCal.pastInterval&amp;lt;/code&amp;gt; in configuration file &amp;lt;code&amp;gt;share.properties&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cross-context functionality ==&lt;br /&gt;
&lt;br /&gt;
As already mentioned in previous sections the administrator is able to configure if guests should be handled per context (default) or server wide by using the configuration parameter &amp;lt;code&amp;gt;com.openexchange.share.crossContextGuests&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If set to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; the guests email address is used to recognize if there is already a registered user with the given address and aligns the stored password to the already existing guest user. In addition to the password (which is the most important parameter this feature is about) even the users contact data gets synchronized.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Administrator Notes:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* To handle user and contact data across contexts boundaries the feature has to be enabled before a guest receives the first share. Guests that receive shares before the activation cannot be considered within the alignment process. Only latter shares will be considered.&lt;br /&gt;
* At the moment this feature does only sync user and contact related data (no shared content). If the user got two shares from different contexts he will only see shares related to the given link.&lt;br /&gt;
&lt;br /&gt;
== Publish/Subscribe vs. Sharing ==&lt;br /&gt;
&lt;br /&gt;
The upcoming sharing features are going to replace the previously used OXMF &amp;amp;quot;publications&amp;amp;quot;, allowing guest users to interact with the shared data in the same way as regular groupware users do. However, since the underlying concepts and their technical realization are completely different, a seamless migration between publications and shares is not possible without some drawbacks.&lt;br /&gt;
&lt;br /&gt;
The following list gives an overview of the main discrepancies:&lt;br /&gt;
&lt;br /&gt;
* Custom templates for OXMF publication targets&amp;lt;br /&amp;gt;An adminsitrator/admin may have defined some custom publication targets that are using the published data in a special way. While shares would still make all the data available (mainly via the web interface), this would only be a drop-in replacement for the ordinary &amp;amp;quot;view the publication in a browser&amp;amp;quot; use case, but not for anything beyond that scope.&lt;br /&gt;
* Subscribe of publications&amp;lt;br /&amp;gt;Publications from one user can be added to another user&#039;s groupware using the &amp;amp;quot;subscribe&amp;amp;quot; functionality, making use of the embedded microformat data of publications (OXMF). For sharing, we will not have a similar feature in the first iteration, so migrating an existing publication to a share would also stop it from being subscribable.&lt;br /&gt;
* Deep links to download files of publications&amp;lt;br /&amp;gt;Files behind an infostore publication were accessible behind a static URL, which would theoretically allow them to be requested independently of the parent publication (e.g. images linked from an external website). While the entry URL to a publication would be mappable to a corresponding share URL, converting existing publications to shares would at least break such deep links.&lt;br /&gt;
&lt;br /&gt;
Because of the above points and the whole different concept, we do not migrate existing publications to shares. Instead, the default behavior will be:&lt;br /&gt;
&lt;br /&gt;
* No new OXMF publications or subscriptions can be created by default&lt;br /&gt;
* The web client does no longer give the option to publish or subscribe in the OXMF format&lt;br /&gt;
* Existing OXMF publications / subscriptions can&#039;t be updated&lt;br /&gt;
* Existing OXMF publications continue to work as is, including associated subscriptions&lt;br /&gt;
* Yet it&#039;s still possible to delete existing publications and subscriptions&lt;br /&gt;
* Therefore, the menu section &amp;amp;quot;Publications and Subscriptions&amp;amp;quot; will still be available (if there&#039;s at least one publication or subscription)&lt;br /&gt;
&lt;br /&gt;
Exceptions to these rules cover special internal subscriptions to 3rd party services like addressbooks from LinkedIn (removed since 7.10.0) or Xing, as well as the auto-publish feature of mail attachments exceeding a specific size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Administrator Notes:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The possibility to create/update OXMF publications via HTTP-API may be configured via &amp;lt;code&amp;gt;com.openexchange.publish.createModifyEnabled&amp;lt;/code&amp;gt; in file &amp;lt;code&amp;gt;publications.properties&amp;lt;/code&amp;gt;&lt;br /&gt;
* The possibility to create/update OXMF subscriptions via HTTP-API may be configured via &amp;lt;code&amp;gt;com.openexchange.subscribe.microformats.createModifyEnabled&amp;lt;/code&amp;gt; in file &amp;lt;code&amp;gt;microformatSubscription.properties&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limit file accesses for named/anonymous guests (since 7.8.2) ==&lt;br /&gt;
&lt;br /&gt;
As links to shares might be shared without knowing the audience we introduced a mechanism to prevent abuse.&lt;br /&gt;
&lt;br /&gt;
Therefor the possibility to define size and/or count limits for named/anonymous guests has been introduced. As internal users can be considered as reliable it is not possible to define limits for them. &lt;br /&gt;
&lt;br /&gt;
For named and anonymous guests there are two kinds of limits which apply to a defined time frame. The time frame acts as a sliding time window which means that based on the current request all earlier requests matching the time frame are cumulated and evaluated if one of the two limits is exceeded. If so, the request will be answered with an exception.&lt;br /&gt;
&lt;br /&gt;
The two limits mentioned above are:&lt;br /&gt;
&lt;br /&gt;
* size limits: how many content (in bytes) should the guest be allowed to download (within the defined time frame).&lt;br /&gt;
* count limits: how often should the guest be allowed to download a file or folder (within the defined time frame). &lt;br /&gt;
&lt;br /&gt;
Named and anonymos guests can have different limits. Limits are valid for downloads of files and folders. Preview of images is not considered within the limit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Administrator Notes:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The anti-abuse mechanism will be available after updating the package open-xchange-core to release 7.8.2&lt;br /&gt;
* Additional parameters are located within the configuration file &amp;lt;code&amp;gt;share.properties&amp;lt;/code&amp;gt;&lt;br /&gt;
* Per default the feature is disabled&lt;br /&gt;
* To enable the feature you have to set &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.enabled&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;. If not enabled all additional checks will be skipped. If you would like to set limits via config cascade those will only be checked if the feature itself is enabled.&lt;br /&gt;
* To be more flexible the administrator is able to overwrite limits by using the config cascade. As guests do not have fixed user identifiers only the &#039;context&#039; level scope is supported.&lt;br /&gt;
&lt;br /&gt;
After the feature is enabled you have the ability to configure fine-grained accesses via: &lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.timeFrame.guests&amp;lt;/code&amp;gt;: sliding time frame (in milliseconds) the limits are valid for named guests. Setting to 0 will disable the check for named guests (if not overwritten via config cascade).&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.timeFrame.links&amp;lt;/code&amp;gt;: sliding time frame (in milliseconds) the limits are valid for anonymous guests. Setting to 0 will disable the check for anonymous guests (if not overwritten via config cascade).&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.size.guests&amp;lt;/code&amp;gt;: the limit in bytes for named guests (valid for aboves time frame). Setting to 0 will disable the size check for named guests (if not overwritten via config cascade).&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.size.links&amp;lt;/code&amp;gt;: the limit in bytes for anonymous guests (valid for aboves time frame). Setting to 0 will disable the size check for anonymous guests (if not overwritten via config cascade).&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.count.guests&amp;lt;/code&amp;gt;: the limit for a number of downloads (valid for aboves time frame) for named guests. Setting to 0 will disable the count check for named guests (if not overwritten via config cascade).&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.count.links&amp;lt;/code&amp;gt;: the limit for a number of downloads (valid for aboves time frame) for anonymous guests. Setting to 0 will disable the count check for anonymous guests (if not overwritten via config cascade).&lt;br /&gt;
&lt;br /&gt;
=== Example configurations === &lt;br /&gt;
&lt;br /&gt;
A mixed configuration is possible. Have a look at the following examples assuming that &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.enabled&amp;lt;/code&amp;gt; is set to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following configuration only checks the count limit for anonymous guests. Named guests and the limit for download sizes will not be checked&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.timeFrame.guests:0&amp;lt;/code&amp;gt; (# disabled)&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.timeFrame.links:3600000&amp;lt;/code&amp;gt; (# 60 minutes)&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.size.guests:0&amp;lt;/code&amp;gt; (# not considered as disabled)&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.size.links:0&amp;lt;/code&amp;gt; (# size for 60 minutes not checked)&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.count.guests:0&amp;lt;/code&amp;gt; (# not considered as disabled)&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.count.links:100&amp;lt;/code&amp;gt; (# 100 downloads within 60 minutes)&lt;br /&gt;
&lt;br /&gt;
The following configuration will check the count limit for named guests and the size limit for anonymous guests (both within the last 60 minutes).&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.timeFrame.guests:3600000&amp;lt;/code&amp;gt; (# 60 minutes)&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.timeFrame.links:3600000&amp;lt;/code&amp;gt; (# 60 minutes)&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.size.guests:0&amp;lt;/code&amp;gt; (# disabled)&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.size.links:1073741824&amp;lt;/code&amp;gt; (# 1 GB)&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.count.guests:1000&amp;lt;/code&amp;gt; (# 1000 downloads within 60 minutes)&lt;br /&gt;
* &amp;lt;code&amp;gt;com.openexchange.share.servlet.limit.count.links:0&amp;lt;/code&amp;gt; (# disabled)&lt;br /&gt;
&lt;br /&gt;
It is possible to reload an adapted configuration by using reloadconfiguration command line tool.&lt;br /&gt;
&lt;br /&gt;
[[Category: AppSuite]]&lt;br /&gt;
[[Category: Administrator]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Data_management&amp;diff=24402</id>
		<title>AppSuite:Data management</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Data_management&amp;diff=24402"/>
		<updated>2018-11-26T13:48:07Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: Cleanup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article has been moved to [https://documentation.open-xchange.com/latest/middleware/components/commandlinetools/deleteinvisible.html documentation.open-xchange.com]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Data_management&amp;diff=24401</id>
		<title>AppSuite:Data management</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Data_management&amp;diff=24401"/>
		<updated>2018-11-26T13:47:40Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: Page moved to documentation.open-xchange.com&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== deleteinvisible ==&lt;br /&gt;
&lt;br /&gt;
This article has been moved to [https://documentation.open-xchange.com/latest/middleware/components/commandlinetools/deleteinvisible.html documentation.open-xchange.com]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Permission_Level&amp;diff=24400</id>
		<title>AppSuite:Permission Level</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Permission_Level&amp;diff=24400"/>
		<updated>2018-11-26T13:42:22Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: Marked deprecated flags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{VersionFrom|7.4.2}}&lt;br /&gt;
= OX Permission Level Matrix=&lt;br /&gt;
Note: &#039;&#039;While permissions still apply to versions from 7.4.2 on, a new concept named capabilities has been introduced. This allows for a more granular control of access to features. This article has not yet been updated to reflect this enhancement.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
App Suite allows to provide different permission levels to the users. &lt;br /&gt;
&lt;br /&gt;
The levels start with pure webmail-only functionality and end with the full featured groupware product including all connectors and are described in the first table.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Webmail&#039;&#039;&#039; contains pure webmail functionality including a private addressbook&lt;br /&gt;
* &#039;&#039;&#039;PIM&#039;&#039;&#039; (Private Information Management) adds private calendar and private tasks, no group or sharing permissions are available&lt;br /&gt;
* &#039;&#039;&#039;PIM + Mobility&#039;&#039;&#039; adds mobile synchronisation to the PIM level&lt;br /&gt;
* &#039;&#039;&#039;PIM + InfoStore&#039;&#039;&#039; adds private InfoStore functionality to the PIM level&lt;br /&gt;
* &#039;&#039;&#039;Groupware Standard&#039;&#039;&#039; includes all group and sharing permissions as well as the InfoStore&lt;br /&gt;
* &#039;&#039;&#039;Groupware Premium&#039;&#039;&#039; adds all external connectors and mobile synchronisation to Groupware Standard&lt;br /&gt;
&lt;br /&gt;
In addition to this levels, App Suite contains several functions, which can flexible be used with every level. This functions are described in the second table.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to read the Matrix ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
!  !!  Definition&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Mandatory&#039;&#039;&#039; ||  This column defines the options, which must not be changed for this level. &#039;&#039;&#039;This is a technical requirement and necessary for the correct functioning of OX HE/SE/App Suite&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Default&#039;&#039;&#039; ||  This column lists the options, which are activated per default for this level&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;API Parameter&#039;&#039;&#039; || Related parameter in the RMI, SOAP and CLT API - described in the [http://software.open-xchange.com/OX6/doc/OX6-Provisioning.pdf Provisioning Documentation]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;nbsp; || &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;and/or&#039;&#039;&#039; || Minimum one of this options need to be activated in this level&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#C0C0C0&amp;quot; | &amp;amp;nbsp;|| Fields in this color define the most important differentiator to the next lower level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Matrix - Permission Levels ==&lt;br /&gt;
&lt;br /&gt;
This table describes the mandatory parameters for the different permission levels.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! OX Base Levels  !!  Functionality !! Mandatory (technical requirement) !! Default !! Requirements / Description !! &amp;amp;nbsp; !! API Parameter&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Webmail&#039;&#039;&#039;&lt;br /&gt;
Webmail only &lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Email ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] || &amp;amp;nbsp;|| &amp;amp;nbsp;|| webmail&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Contacts  ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]]  || &amp;amp;nbsp;|| &amp;amp;nbsp; || contacts&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp;  || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;5&amp;quot; | &#039;&#039;&#039;PIM&#039;&#039;&#039;&amp;lt;br&amp;gt;Private use only&amp;lt;br&amp;gt;No sharing, no group functions. &lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Email ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] || rowspan=&amp;quot;3&amp;quot; | The absence of other features defines this level || &amp;amp;nbsp; || webmail&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Contacts  ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]]  || &amp;amp;nbsp; || contacts&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Calendar ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]]  || &amp;amp;nbsp; || calendar&lt;br /&gt;
|-&lt;br /&gt;
|Global Addressbook  || &amp;amp;nbsp; || [[File:Cross_gray.gif]] || &amp;amp;nbsp;|| &amp;amp;nbsp; || globaladdressbookdisabled&lt;br /&gt;
|-&lt;br /&gt;
|Tasks  || &amp;amp;nbsp; || [[File:check.gif]] || &amp;amp;nbsp;|| &amp;amp;nbsp; || tasks&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp;  || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; ||&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; | &#039;&#039;&#039;PIM + Mobility&#039;&#039;&#039;&amp;lt;br&amp;gt;Private use only&amp;lt;br&amp;gt;No sharing, no group functions&amp;lt;br&amp;gt;Enabled for mobile synchronization &lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Email ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] || &amp;amp;nbsp; || &amp;amp;nbsp; || webmail&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Contacts  ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]]  || &amp;amp;nbsp;|| &amp;amp;nbsp; || contacts&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Calendar ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]]  || &amp;amp;nbsp;|| &amp;amp;nbsp; || calendar&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | USM ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]]  || &amp;amp;nbsp; || &amp;amp;nbsp; || usm&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#C0C0C0&amp;quot; | Active Sync ||style=&amp;quot;background-color:#C0C0C0&amp;quot; |  and/or ||style=&amp;quot;background-color:#C0C0C0&amp;quot; |  [[File:check.gif]]  || rowspan=&amp;quot;2&amp;quot; | This defines the level&amp;lt;br&amp;gt;At least one of these needs to be set&amp;lt;br&amp;gt;Typically &amp;quot;Active Sync&amp;quot;|| &amp;amp;nbsp; || activesync&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#C0C0C0&amp;quot; | SyncML ||style=&amp;quot;background-color:#C0C0C0&amp;quot; |  and/or ||style=&amp;quot;background-color:#C0C0C0&amp;quot; |  [[File:check.gif]]  || &amp;amp;nbsp; || syncml (deprecated)&lt;br /&gt;
|-&lt;br /&gt;
|Global Addressbook  || &amp;amp;nbsp;|| [[File:Cross_gray.gif]] || &amp;amp;nbsp;|| &amp;amp;nbsp; || globaladdressbookdisabled&lt;br /&gt;
|-&lt;br /&gt;
|Tasks  || &amp;amp;nbsp; || [[File:check.gif]] || &amp;amp;nbsp;|| &amp;amp;nbsp; || tasks&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp;  || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | &#039;&#039;&#039;PIM + InfoStore&#039;&#039;&#039; &amp;lt;br&amp;gt;Private use only&amp;lt;br&amp;gt;No sharing, no group functions&amp;lt;br&amp;gt;Enabled for document storage. &lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Email ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] || &amp;amp;nbsp;|| &amp;amp;nbsp; || webmail&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Contacts  ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]]  || &amp;amp;nbsp;|| &amp;amp;nbsp; || contacts&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Calendar ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]]  || &amp;amp;nbsp;|| &amp;amp;nbsp; || calendar&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#C0C0C0&amp;quot; | InfoStore ||style=&amp;quot;background-color:#C0C0C0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#C0C0C0&amp;quot; | [[File:check.gif]] || This combined with the absence of other switches defines the level &amp;lt;br&amp;gt; || &amp;amp;nbsp; || infostore&lt;br /&gt;
|-&lt;br /&gt;
|Global Addressbook  || &amp;amp;nbsp; || [[File:Cross_gray.gif]] || &amp;amp;nbsp;|| &amp;amp;nbsp; || globaladdressbookdisabled&lt;br /&gt;
|-&lt;br /&gt;
|Tasks  || &amp;amp;nbsp; || [[File:check.gif]] || &amp;amp;nbsp;|| &amp;amp;nbsp; || tasks&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp;  || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;9&amp;quot; | &#039;&#039;&#039;Groupware Standard&#039;&#039;&#039;&amp;lt;br&amp;gt;Full Groupware functionality&amp;lt;br&amp;gt;Access restricted to Web GUI &lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Email ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] || &amp;amp;nbsp; || &amp;amp;nbsp; || webmail&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Contacts  ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]]  || &amp;amp;nbsp;|| &amp;amp;nbsp; || contacts&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Calendar ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]]  || &amp;amp;nbsp;|| &amp;amp;nbsp; || calendar&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Tasks ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]]  || &amp;amp;nbsp;|| &amp;amp;nbsp; || tasks&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#C0C0C0&amp;quot; | Shared Folders ||style=&amp;quot;background-color:#C0C0C0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#C0C0C0&amp;quot; |  [[File:check.gif]]  || rowspan=&amp;quot;3&amp;quot; | This defines the level&amp;lt;br&amp;gt;All need to be set together || &amp;amp;nbsp; || readcreatesharedfolders&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#C0C0C0&amp;quot; | Public Folders ||style=&amp;quot;background-color:#C0C0C0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#C0C0C0&amp;quot; |  [[File:check.gif]]  || &amp;amp;nbsp; || editpublicfolders&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#C0C0C0&amp;quot; | Task Delegation ||style=&amp;quot;background-color:#C0C0C0&amp;quot; |  [[File:check.gif]] ||style=&amp;quot;background-color:#C0C0C0&amp;quot; |  [[File:check.gif]]  || &amp;amp;nbsp; || delegatetask&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Global Addressbook ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; |  [[File:check.gif]]  || &amp;amp;nbsp; || &amp;amp;nbsp; || globaladdressbookdisabled&lt;br /&gt;
|-&lt;br /&gt;
|InfoStore  || &amp;amp;nbsp; || [[File:check.gif]] || &amp;amp;nbsp;|| &amp;amp;nbsp; || infostore&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp;  || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;16&amp;quot; | &#039;&#039;&#039;Groupware Premium&#039;&#039;&#039;&amp;lt;br&amp;gt;Full Groupware functionality&amp;lt;br&amp;gt;All external clients enabled (Mobility, Outlook, Mac)&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Email ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] || &amp;amp;nbsp; || &amp;amp;nbsp; || webmail&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Contacts  ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]]  || &amp;amp;nbsp;|| &amp;amp;nbsp; || contacts&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Calendar ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]]  || &amp;amp;nbsp;|| &amp;amp;nbsp; || calendar&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Tasks ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]]  || &amp;amp;nbsp;|| &amp;amp;nbsp; || tasks&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Shared Folders ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; |  [[File:check.gif]]  || &amp;amp;nbsp; || &amp;amp;nbsp; || readcreatesharedfolders&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Public Folders ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; |  [[File:check.gif]]  || &amp;amp;nbsp; || &amp;amp;nbsp; || editpublicfolders&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Task Delegation ||style=&amp;quot;background-color:#F0F0F0&amp;quot; |  [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; |  [[File:check.gif]]  || &amp;amp;nbsp; || &amp;amp;nbsp; || delegatetask&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | Global Addressbook ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; |  [[File:check.gif]]  || &amp;amp;nbsp; || &amp;amp;nbsp; || globaladdressbookdisabled&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#F0F0F0&amp;quot; | USM ||style=&amp;quot;background-color:#F0F0F0&amp;quot; | [[File:check.gif]] ||style=&amp;quot;background-color:#F0F0F0&amp;quot; |  [[File:check.gif]]  || &amp;amp;nbsp; || &amp;amp;nbsp; || usm&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#C0C0C0&amp;quot; | OLOX2 ||style=&amp;quot;background-color:#C0C0C0&amp;quot; |  and/or ||style=&amp;quot;background-color:#C0C0C0&amp;quot; |  [[File:check.gif]]  || rowspan=&amp;quot;4&amp;quot; | This defines the level&amp;lt;br&amp;gt;At least one of these needs to be set.&amp;lt;br&amp;gt;Typically OLOX2 and Active Sync || &amp;amp;nbsp; || olox20 (deprecated)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#C0C0C0&amp;quot; | OLOX (Legacy) ||style=&amp;quot;background-color:#C0C0C0&amp;quot; |  and/or ||style=&amp;quot;background-color:#C0C0C0&amp;quot; |  [[File:check.gif]]  || &amp;amp;nbsp; || webdavxml (deprecated)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#C0C0C0&amp;quot; | Active Sync ||style=&amp;quot;background-color:#C0C0C0&amp;quot; |  and/or ||style=&amp;quot;background-color:#C0C0C0&amp;quot; |  [[File:check.gif]]  || &amp;amp;nbsp; || activesync&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#C0C0C0&amp;quot; | SyncML ||style=&amp;quot;background-color:#C0C0C0&amp;quot; |  and/or ||style=&amp;quot;background-color:#C0C0C0&amp;quot; |  [[File:check.gif]]  || &amp;amp;nbsp; || syncml (deprecated)&lt;br /&gt;
|-&lt;br /&gt;
|InfoStore  || &amp;amp;nbsp; || [[File:check.gif]] || &amp;amp;nbsp;|| &amp;amp;nbsp; || infostore&lt;br /&gt;
|-&lt;br /&gt;
|iCal Access  || &amp;amp;nbsp; || [[File:check.gif]] || &amp;amp;nbsp;|| &amp;amp;nbsp; || ical (deprecated)&lt;br /&gt;
|-&lt;br /&gt;
|vCard Access  || &amp;amp;nbsp; || [[File:check.gif]] || &amp;amp;nbsp;|| &amp;amp;nbsp; || vcard (deprecated)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional Flexible Functions ==&lt;br /&gt;
&lt;br /&gt;
The following functions can be added flexible to each permission level.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
! Additional Functions  !!  Default !! Requirements / Description !! &amp;amp;nbsp; !! API Parameter&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Minimum Webmail&#039;&#039;&#039;&lt;br /&gt;
|Collect Emailaddresses || Email addresses typed into sent/reveived emails can be saved automatically in a dedicated folder || &amp;amp;nbsp; || collectemailaddresses&lt;br /&gt;
|-&lt;br /&gt;
|Edit Password  || If a plugin to change the own password is installed on the system, it will be displayed in the settings area || &amp;amp;nbsp; || editpassword&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp;  || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot; | &#039;&#039;&#039;Minimum PIM&#039;&#039;&#039;&lt;br /&gt;
|Multiple Mailaccounts || The user can use  external IMAP/POP3 Mailaccounts within the OX WebGUI. Starting with 6.20 this can be configured per email service || &amp;amp;nbsp; || multiplemailaccounts&lt;br /&gt;
|-&lt;br /&gt;
|Subscriptions || The user can subscribe to external/social datasources, like LinkedIN (removed since 7.10.0), XING, Gmail, .... Starting with 6.20 this can be configured per subscription service || &amp;amp;nbsp; || subscriptions&lt;br /&gt;
|-&lt;br /&gt;
|Publications || [DEPRECATED] The user can publish his own data (contacts/documents) for other users in the internet || &amp;amp;nbsp; || publication&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp;  || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Minimum PIM + InfoStore&#039;&#039;&#039;&lt;br /&gt;
|WebDAV || Allows WebDAV access to InfoStore documents; Requires InfoStore || &amp;amp;nbsp; || webdav&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp;  || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Minimum GW Standard&#039;&#039;&#039;&lt;br /&gt;
|Manage Resources || The user is allowed to create and manage resources for the whole company || &amp;amp;nbsp; || editresource&lt;br /&gt;
|-&lt;br /&gt;
|Manage Groups  || The user is allowed to create and manage groups for the whole company || &amp;amp;nbsp; || editgroup&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;nbsp;  || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp; || &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | &#039;&#039;&#039;Minimum GW Premium&#039;&#039;&#039;&lt;br /&gt;
|vCard || The user  can download all his contacts via the vCard interface || &amp;amp;nbsp; || vcard (deprecated)&lt;br /&gt;
|-&lt;br /&gt;
|iCal  || The user can download all his contacts via the iCal interface || &amp;amp;nbsp; || ical (deprecated)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:User_management&amp;diff=24399</id>
		<title>AppSuite:User management</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:User_management&amp;diff=24399"/>
		<updated>2018-11-26T13:39:39Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: Marked deprecated flags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== createuser ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;createuser&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the tool to create new users in a given context. The displayname must be unique in one context.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
|Prints a help text&lt;br /&gt;
|-&lt;br /&gt;
| --environment&lt;br /&gt;
|Show infoabout commandline environment&lt;br /&gt;
|-&lt;br /&gt;
| --nonl&lt;br /&gt;
|Remove all newlines (\n) from output&lt;br /&gt;
|-&lt;br /&gt;
| --responsetimeout &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
|response timeout in seconds for reading response from the backend (default 0s; infinite) &#039;&#039;&#039;Available with v7.8.0&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| --extendedoptions &lt;br /&gt;
|Set this if you want to see all options, use this instead of help option&lt;br /&gt;
|-&lt;br /&gt;
|csv-import &amp;amp;lt;CSV file&amp;amp;gt; &lt;br /&gt;
| Full path to CSV file with user data to import. This option makes mandatory options obsolete, except credential options (if needed). &lt;br /&gt;
|-&lt;br /&gt;
| -c,--contextid &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
|The id of the context&lt;br /&gt;
|-&lt;br /&gt;
| -u,--username &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Username of the user&lt;br /&gt;
|-&lt;br /&gt;
| -d,--displayname &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Display name of the user&lt;br /&gt;
|-&lt;br /&gt;
| -g,--givenname &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Given name for the user&lt;br /&gt;
|-&lt;br /&gt;
| -s,--surname &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Surname of the user&lt;br /&gt;
|-&lt;br /&gt;
| -p,--password &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Password for the user &lt;br /&gt;
|-&lt;br /&gt;
| -e,--email &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Primary mail address &lt;br /&gt;
|-&lt;br /&gt;
| -l,--language &amp;amp;lt;lang&amp;amp;gt;&lt;br /&gt;
|Language for the user (de_DE,en_US,fr_FR)&lt;br /&gt;
|-&lt;br /&gt;
| -t,--timezone &amp;amp;lt;timezone&amp;amp;gt;&lt;br /&gt;
|Timezone of the user (Europe/Berlin)&lt;br /&gt;
|-&lt;br /&gt;
| -x,--department &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Department of the user &lt;br /&gt;
|-&lt;br /&gt;
| -z,--company &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Company of the user &lt;br /&gt;
|-&lt;br /&gt;
| -a,--aliases &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|E-Mail aliases of the user, separated by &amp;quot;,&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| --access-combination-name &amp;amp;lt;access-combination-name&amp;amp;gt;&lt;br /&gt;
|Access combination name&lt;br /&gt;
|-&lt;br /&gt;
| --addguipreferences &amp;amp;lt;addguipreferences&amp;amp;gt;&lt;br /&gt;
|Add a GUI setting (key=value)&lt;br /&gt;
|}&lt;br /&gt;
For the GUI preferences please also see [http://oxpedia.org/wiki/index.php?title=Gui_path]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== --csv-import &amp;lt;CSV file&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
Full path to CSV file with user data to&lt;br /&gt;
import. This option makes mandatory command line options obsolete, except credential options (if needed). But they have to be set in the CSV file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this option you can specify a csv file&lt;br /&gt;
(a full pathname must be given) with the data which should be imported. The columnnames in the CSV file must be the same as the long-options of the command line tools, without the prefix&lt;br /&gt;
&amp;quot;--&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This option will normally be used to fill new large installations with the new data. So instead of calling the command line tools in a shell script every time, just a csv file needs to&lt;br /&gt;
be created, containing the whole data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that the credentials of the masteradmin in the createcontext call must be given on the command line with the -A and -P options nevertheless - if&lt;br /&gt;
authentication is enabled. If the createuser command line tool is used, the credentials are part of the csv file, and cannot be set as options on the command line itself. The reason for this&lt;br /&gt;
different behavior is that different contexts have different credentials for the admin user, so they must be set in every line of the csv file. Opposed to this the credentials of the masteradmin&lt;br /&gt;
are always the same.&lt;br /&gt;
&lt;br /&gt;
=== Extended options ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| --email1 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Email1&lt;br /&gt;
|-&lt;br /&gt;
| --birthday &amp;amp;lt;datevalue&amp;amp;gt;&lt;br /&gt;
|Birthday&lt;br /&gt;
|-&lt;br /&gt;
| --anniversary &amp;amp;lt;datevalue&amp;amp;gt;&lt;br /&gt;
|Anniversary&lt;br /&gt;
|-&lt;br /&gt;
| --branches &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Branches&lt;br /&gt;
|-&lt;br /&gt;
| --business_category &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Business_category&lt;br /&gt;
|-&lt;br /&gt;
| --postal_code_business &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Postal_code_business&lt;br /&gt;
|-&lt;br /&gt;
| --state_business &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|State_business&lt;br /&gt;
|-&lt;br /&gt;
| --street_business &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Street_business&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_callback &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_callback&lt;br /&gt;
|-&lt;br /&gt;
| --city_home &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|City_home&lt;br /&gt;
|-&lt;br /&gt;
| --commercial_register &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Commercial_register&lt;br /&gt;
|-&lt;br /&gt;
| --country_home &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Country_home&lt;br /&gt;
|-&lt;br /&gt;
| --email2 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Email2&lt;br /&gt;
|-&lt;br /&gt;
| --email3 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Email3&lt;br /&gt;
|-&lt;br /&gt;
| --employeetype &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|EmployeeType&lt;br /&gt;
|-&lt;br /&gt;
| --fax_business &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Fax_business&lt;br /&gt;
|-&lt;br /&gt;
| --fax_home &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Fax_home&lt;br /&gt;
|-&lt;br /&gt;
| --fax_other &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Fax_other&lt;br /&gt;
|-&lt;br /&gt;
| --imapserver &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|ImapServer&lt;br /&gt;
|-&lt;br /&gt;
| --imaplogin &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|ImapLogin&lt;br /&gt;
|-&lt;br /&gt;
| --smtpserver &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|SmtpServer&lt;br /&gt;
|-&lt;br /&gt;
| --instant_messenger1 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Instant_messenger1&lt;br /&gt;
|-&lt;br /&gt;
| --instant_messenger2 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Instant_messenger2&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_ip &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_ip&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_isdn &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_isdn&lt;br /&gt;
|-&lt;br /&gt;
| --mail_folder_drafts_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Mail_folder_drafts_name&lt;br /&gt;
|-&lt;br /&gt;
| --mail_folder_sent_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Mail_folder_sent_name&lt;br /&gt;
|-&lt;br /&gt;
| --mail_folder_spam_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Mail_folder_spam_name&lt;br /&gt;
|-&lt;br /&gt;
| --mail_folder_trash_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Mail_folder_trash_name&lt;br /&gt;
|-&lt;br /&gt;
| --mail_folder_archive_full_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Mail_folder_archive_full_name&lt;br /&gt;
|-&lt;br /&gt;
| --manager_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Manager_name&lt;br /&gt;
|-&lt;br /&gt;
| --marital_status &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Marital_status&lt;br /&gt;
|-&lt;br /&gt;
| --cellular_telephone1 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Cellular_telephone1&lt;br /&gt;
|-&lt;br /&gt;
| --cellular_telephone2 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Cellular_telephone2&lt;br /&gt;
|-&lt;br /&gt;
| --info &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
| --nickname &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Nickname&lt;br /&gt;
|-&lt;br /&gt;
| --number_of_children &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Number_of_children&lt;br /&gt;
|-&lt;br /&gt;
| --note &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Note&lt;br /&gt;
|-&lt;br /&gt;
| --number_of_employee &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Number_of_employee&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_pager &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_pager&lt;br /&gt;
|-&lt;br /&gt;
| --password_expired &amp;amp;lt;booleanvalue&amp;amp;gt;&lt;br /&gt;
|Password_expired&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_assistant &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_assistant&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_business1 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_business1&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_business2 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_business2&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_car &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_car&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_company &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_company&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_home1 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_home1&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_home2 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_home2&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_other &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_other&lt;br /&gt;
|-&lt;br /&gt;
| --postal_code_home &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Postal_code_home&lt;br /&gt;
|-&lt;br /&gt;
| --profession &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Profession&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_radio &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_radio&lt;br /&gt;
|-&lt;br /&gt;
| --room_number &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Room_number&lt;br /&gt;
|-&lt;br /&gt;
| --sales_volume &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Sales_volume&lt;br /&gt;
|-&lt;br /&gt;
| --city_other &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|City_other&lt;br /&gt;
|-&lt;br /&gt;
| --country_other &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Country_other&lt;br /&gt;
|-&lt;br /&gt;
| --middle_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Middle_name&lt;br /&gt;
|-&lt;br /&gt;
| --postal_code_other &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Postal_code_other&lt;br /&gt;
|-&lt;br /&gt;
| --state_other &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|State_other&lt;br /&gt;
|-&lt;br /&gt;
| --street_other &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Street_other&lt;br /&gt;
|-&lt;br /&gt;
| --spouse_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Spouse_name&lt;br /&gt;
|-&lt;br /&gt;
| --state_home &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|State_home&lt;br /&gt;
|-&lt;br /&gt;
| --street_home &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Street_home&lt;br /&gt;
|-&lt;br /&gt;
| --suffix &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Suffix&lt;br /&gt;
|-&lt;br /&gt;
| --tax_id &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Tax_id&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_telex &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_telex&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_ttytdd &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_ttytdd&lt;br /&gt;
|-&lt;br /&gt;
| --uploadfilesizelimitperfile &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Upload file size limit per file for mail attachments&lt;br /&gt;
|-&lt;br /&gt;
| --uploadfilesizelimit &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Total upload file size limit for mail attachments&lt;br /&gt;
|-&lt;br /&gt;
| --url &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Url&lt;br /&gt;
|-&lt;br /&gt;
| --userfield01 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield01&lt;br /&gt;
|-&lt;br /&gt;
| --userfield02 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield02&lt;br /&gt;
|-&lt;br /&gt;
| --userfield03 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield03&lt;br /&gt;
|-&lt;br /&gt;
| --userfield04 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield04&lt;br /&gt;
|-&lt;br /&gt;
| --userfield05 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield05&lt;br /&gt;
|-&lt;br /&gt;
| --userfield06 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield06&lt;br /&gt;
|-&lt;br /&gt;
| --userfield07 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield07&lt;br /&gt;
|-&lt;br /&gt;
| --userfield08 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield08&lt;br /&gt;
|-&lt;br /&gt;
| --userfield09 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield09&lt;br /&gt;
|-&lt;br /&gt;
| --userfield10 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield10&lt;br /&gt;
|-&lt;br /&gt;
| --userfield11 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield11&lt;br /&gt;
|-&lt;br /&gt;
| --userfield12 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield12&lt;br /&gt;
|-&lt;br /&gt;
| --userfield13 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield13&lt;br /&gt;
|-&lt;br /&gt;
| --userfield14 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield14&lt;br /&gt;
|-&lt;br /&gt;
| --userfield15 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield15&lt;br /&gt;
|-&lt;br /&gt;
| --userfield16 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield16&lt;br /&gt;
|-&lt;br /&gt;
| --userfield17 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield17&lt;br /&gt;
|-&lt;br /&gt;
| --userfield18 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield18&lt;br /&gt;
|-&lt;br /&gt;
| --userfield19 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield19&lt;br /&gt;
|-&lt;br /&gt;
| --userfield20 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield20&lt;br /&gt;
|-&lt;br /&gt;
| --city_business &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|City_business&lt;br /&gt;
|-&lt;br /&gt;
| --country_business &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Country_business&lt;br /&gt;
|-&lt;br /&gt;
| --assistant_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Assistant_name&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_primary &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_primary&lt;br /&gt;
|-&lt;br /&gt;
| --categories &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Categories&lt;br /&gt;
|-&lt;br /&gt;
| --mail_folder_confirmed_ham_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Mail_folder_confirmed_ham_name&lt;br /&gt;
|-&lt;br /&gt;
| --mail_folder_confirmed_spam_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Mail_folder_confirmed_spam_name&lt;br /&gt;
|-&lt;br /&gt;
| --gui_spam_filter_capabilities_enabled &amp;amp;lt;booleanvalue&amp;amp;gt;&lt;br /&gt;
|GUI_spam_filter_capabilities_enabled&lt;br /&gt;
|-&lt;br /&gt;
| --mailenabled &amp;amp;lt;true/false&amp;amp;gt;&lt;br /&gt;
|Mailenabled&lt;br /&gt;
|-&lt;br /&gt;
| --defaultsenderaddress &amp;amp;lt;stringvalue&amp;amp;gt;&lt;br /&gt;
|DefaultSenderAddress&lt;br /&gt;
|-&lt;br /&gt;
| --title &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Title&lt;br /&gt;
|-&lt;br /&gt;
| --position &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Position&lt;br /&gt;
|-&lt;br /&gt;
| --access-calendar &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Calendar module (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-contacts &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Contact module access (Default is on)&lt;br /&gt;
|-&lt;br /&gt;
| --access-delegate-tasks &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Delegate tasks access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-edit-public-folder &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Edit public folder access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-ical &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Ical module access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-infostore &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Infostore module access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-read-create-shared-Folders &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Read create shared folder access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-syncml &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Syncml access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-active-sync &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Exchange Active Sync access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-usm &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Universal Sync Module access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-tasks &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Tasks access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-vcard &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Vcard access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
--access-webmail &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Webmail access (Default is on)&lt;br /&gt;
|-&lt;br /&gt;
| --access-publication &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|[DEPRECATED] Publication permission (Default is on). Note: access-publication needs access-infostore and is optional for Groupware+ and premium&lt;br /&gt;
|-&lt;br /&gt;
| --access-subscription &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Subscription permission (Default is on)&lt;br /&gt;
|-&lt;br /&gt;
| --access-edit-group &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Edit group access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-edit-resource &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Edit resource access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-edit-password &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Edit password access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-collect-email-addresses &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Edit collect email addresses (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-multiple-mail-accounts &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Use multiple mail account feature (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-global-address-book-disabled &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Access to global address book (Default is off). Note: Setting this option to true is only allowed in combination with PIM and Webmail rights. Note: There is a &#039;restoregaddefaults&#039; script to restore the default permissions of the global address book folder. &lt;br /&gt;
|-&lt;br /&gt;
| --access--voipnow &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Access to VoiceOverIP feature.&lt;br /&gt;
|-&lt;br /&gt;
| --access-public-folder-editable &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Access to public folders. Allows or denies to see public folders. &lt;br /&gt;
|-&lt;br /&gt;
| --foldertree &amp;amp;lt;0/1&amp;amp;gt;&lt;br /&gt;
|0 sets the OX standard folder tree and 1 sets the Outlook-like folder tree.&lt;br /&gt;
|-&lt;br /&gt;
| --access-olox20 &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
| [DEPRECATED] Access to Olox2.0&lt;br /&gt;
|-&lt;br /&gt;
| --default-folder-mode&lt;br /&gt;
| The mode how the default folders should be created. &#039;default&#039;, &#039;default-deletable&#039;, &#039;no-default-folders&#039;. If not selected, &#039;default&#039; is applied.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Open-Xchange module access ===&lt;br /&gt;
&lt;br /&gt;
With Open-Xchange it is&lt;br /&gt;
possible to limit the access to the available modules per context i. e., all users in one context per default get the same access rights. The rights though can be changed per user. Currently,&lt;br /&gt;
following modules are implemented: access-calendar, access-contacts, access-delegate-tasks, access-edit-public-folder, access-ical, access-infostore, access-read-create-shared-Folders,&lt;br /&gt;
access-tasks, access-vcard, access-webdav, access-syncml and access-webmail. There are several combinations possible and four are supported (not mentioned modules need to be&lt;br /&gt;
disabled). This limitation is needed because some modules depend on access to others. There are different Open-Xchange packages available for the customer: Webmail+, PIM+, Groupware+, Premium.&lt;br /&gt;
These packages have to be configured per context i. e., all users in a context need to use the same package. Each package consists of a combination of modules that has to be set up appropriately.&lt;br /&gt;
The following sections quickly introduce the packages and their module configuration. Open-Xchange also provides the possibility to use &amp;quot;access combination names&amp;quot; when creating and changing&lt;br /&gt;
contexts/users. If you want to change the package acess rights for a context, you can simply add the &amp;quot;access-combination-name&amp;quot; switch to the appropriate tool&lt;br /&gt;
(createcontext,createuser,changecontext etc.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Webmail+ ====&lt;br /&gt;
&lt;br /&gt;
If there are no access rights specified when creating a new user Webmail+ is used as default. Webmail+ is a base package that allows access to the&lt;br /&gt;
webmail interface and a personal address book. To grant access to this package, the following modules have to be set to &amp;quot;on&amp;quot; for all users in a context:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|access-contacts&lt;br /&gt;
|Access combination name: webmail_plus&lt;br /&gt;
|-&lt;br /&gt;
|access-webmail&lt;br /&gt;
|Access combinationname: webmail_plus&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PIM+ ====&lt;br /&gt;
&lt;br /&gt;
PIM+&lt;br /&gt;
is another base package that gives access to the webmailer, personal address book, calendar and tasks. Group appointments and delegating tasks are not supported. To grant access to this package,&lt;br /&gt;
the following modules have to be set to &amp;quot;on&amp;quot; for all users in a context:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|access-contacts&lt;br /&gt;
|Access combination name: pim_plus&lt;br /&gt;
|-&lt;br /&gt;
|access-webmail&lt;br /&gt;
|Access combination name: pim_plus&lt;br /&gt;
|-&lt;br /&gt;
|access-calendar&lt;br /&gt;
|Access combination name: pim_plus&lt;br /&gt;
|-&lt;br /&gt;
|access-delegate-tasks&lt;br /&gt;
|Access combination name: pim_plus&lt;br /&gt;
|-&lt;br /&gt;
|access-tasks&lt;br /&gt;
|Access combination name: pim_plus&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Groupware+ ====&lt;br /&gt;
&lt;br /&gt;
Groupware+ is an upsell package that provides full groupware functionality: private, shared and public folders, conflict handling for appointments, team view. Furthermore, the InfoStore is&lt;br /&gt;
available. To grant access to this package, the following modules have to be set to &amp;quot;on&amp;quot; for all users in a context:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|access-contacts&lt;br /&gt;
|Access combination name: groupware_plus&lt;br /&gt;
|-&lt;br /&gt;
|access-webmail&lt;br /&gt;
|Access combination name: groupware_plus&lt;br /&gt;
|-&lt;br /&gt;
|access-calendar&lt;br /&gt;
|Access combination name: groupware_plus&lt;br /&gt;
|-&lt;br /&gt;
|access-delegate-tasks&lt;br /&gt;
|Access combination name: groupware_plus&lt;br /&gt;
|-&lt;br /&gt;
|access-tasks&lt;br /&gt;
|Access combination name: groupware_plus&lt;br /&gt;
|-&lt;br /&gt;
|access-edit-public-folder&lt;br /&gt;
|Access combination name: groupware_plus&lt;br /&gt;
|-&lt;br /&gt;
|access-infostore&lt;br /&gt;
|Access combination name: groupware_plus&lt;br /&gt;
|-&lt;br /&gt;
|access-read-create-shared-Folders&lt;br /&gt;
|Access combination name: groupware_plus&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Premium ====&lt;br /&gt;
&lt;br /&gt;
Premium is a desktop integration package. It provides the functionality of the &amp;quot;Groupware+&amp;quot; package and comes with interfaces to integrate with other software: The OXtender for MS Outlook and the&lt;br /&gt;
WebDAV interface to integrate the InfoStore with desktops. To grant access to this package, the following modules have to be set to &amp;quot;on&amp;quot; for all users in a context:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|access-contacts&lt;br /&gt;
|Access combination name: premium&lt;br /&gt;
|-&lt;br /&gt;
|access-webmail&lt;br /&gt;
|Access combination name: premium&lt;br /&gt;
|-&lt;br /&gt;
|access-calendar&lt;br /&gt;
|Access combination name: premium&lt;br /&gt;
|-&lt;br /&gt;
|access-delegate-tasks&lt;br /&gt;
|Access combination name: premium&lt;br /&gt;
|-&lt;br /&gt;
|access-tasks&lt;br /&gt;
|Access combination name: premium&lt;br /&gt;
|-&lt;br /&gt;
|access-edit-public-folder&lt;br /&gt;
|Access combination name: premium&lt;br /&gt;
|-&lt;br /&gt;
|access-infostore&lt;br /&gt;
|Access combination name: premium&lt;br /&gt;
|-&lt;br /&gt;
|access-read-create-shared-Folders&lt;br /&gt;
|Access combination name: premium&lt;br /&gt;
|-&lt;br /&gt;
|access-ical&lt;br /&gt;
|Access combination name: premium&lt;br /&gt;
|-&lt;br /&gt;
|access-vcard&lt;br /&gt;
|Access combination name: premium&lt;br /&gt;
|-&lt;br /&gt;
|access-webdav&lt;br /&gt;
|Access combination name: premium&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== All ====&lt;br /&gt;
The setting &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; is equivalent to &amp;lt;code&amp;gt;premium&amp;lt;/code&amp;gt; for ordinary users. For context administrators, it adds the right &amp;lt;code&amp;gt;publicfoldereditable&amp;lt;/code&amp;gt;, which allows the admin to change the access rights to public folders for groups.&lt;br /&gt;
&lt;br /&gt;
==== Package access configuration ====&lt;br /&gt;
&lt;br /&gt;
This section provides a quick overview about the different packages that can be configured per context and the&lt;br /&gt;
required access configuration:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Module&lt;br /&gt;
|Webmail+&lt;br /&gt;
|PIM+&lt;br /&gt;
|Groupware+&lt;br /&gt;
|Premium&lt;br /&gt;
|-&lt;br /&gt;
| -access-calendar&lt;br /&gt;
|off&lt;br /&gt;
|on&lt;br /&gt;
|on&lt;br /&gt;
|on&lt;br /&gt;
|-&lt;br /&gt;
| -access-contacts&lt;br /&gt;
|on&lt;br /&gt;
|on&lt;br /&gt;
|on&lt;br /&gt;
|on&lt;br /&gt;
|-&lt;br /&gt;
| -access-delegate-tasks&lt;br /&gt;
|off&lt;br /&gt;
|on&lt;br /&gt;
|on&lt;br /&gt;
|on&lt;br /&gt;
|-&lt;br /&gt;
| -access-edit-public-folder&lt;br /&gt;
|off&lt;br /&gt;
|off&lt;br /&gt;
|on&lt;br /&gt;
|on&lt;br /&gt;
|-&lt;br /&gt;
| -access-ical&lt;br /&gt;
|off&lt;br /&gt;
|off&lt;br /&gt;
|off&lt;br /&gt;
|on&lt;br /&gt;
|-&lt;br /&gt;
| -access-infostore&lt;br /&gt;
|off&lt;br /&gt;
|off&lt;br /&gt;
|on&lt;br /&gt;
|on&lt;br /&gt;
|-&lt;br /&gt;
| -access-read-create-shared-Folders&lt;br /&gt;
|off&lt;br /&gt;
|off&lt;br /&gt;
|on&lt;br /&gt;
|on&lt;br /&gt;
|-&lt;br /&gt;
| -access-syncml&lt;br /&gt;
|off&lt;br /&gt;
|off&lt;br /&gt;
|off&lt;br /&gt;
|off&lt;br /&gt;
|-&lt;br /&gt;
|–access-tasks&lt;br /&gt;
|off&lt;br /&gt;
|on&lt;br /&gt;
|on&lt;br /&gt;
|on&lt;br /&gt;
|-&lt;br /&gt;
| -access-vcard&lt;br /&gt;
|off&lt;br /&gt;
|off&lt;br /&gt;
|off&lt;br /&gt;
|on&lt;br /&gt;
|-&lt;br /&gt;
| -access-webdav&lt;br /&gt;
|off&lt;br /&gt;
|off&lt;br /&gt;
|off&lt;br /&gt;
|on&lt;br /&gt;
|-&lt;br /&gt;
| -access-webmail&lt;br /&gt;
|on&lt;br /&gt;
|on&lt;br /&gt;
|on&lt;br /&gt;
|on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extra parameters when authentication is enabled ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -A,--adminuser &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Context admin user name&lt;br /&gt;
|-&lt;br /&gt;
| -P,--adminpass &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Context admin password&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Return value ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; on success&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;gt;0&amp;lt;/code&amp;gt; on failure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;contextid {adminuser adminpass} username displayname givenname surname password email&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
&lt;br /&gt;
On success:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;user &amp;amp;lt;userid&amp;amp;gt; in context &amp;amp;lt;contextid&amp;amp;gt; created&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On failure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;user in context &amp;amp;lt;contextid&amp;amp;gt; could not be created: &amp;amp;lt;reason from server&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;root@oxhe~# &amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;code&amp;gt;/opt/open-xchange/sbin/createuser -c 123 -u jd -d &amp;quot;john doe&amp;quot;&lt;br /&gt;
-g John -s Doe -p userpw -e jd@example.com&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;user 3 in context 123 created&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== deleteuser ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;deleteuser&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the tool to delete a user in a given context. If you delete a user the public folder entries of this user are&lt;br /&gt;
transferred to the admin user. All other data are deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
|Prints a help text&lt;br /&gt;
|-&lt;br /&gt;
| --environment&lt;br /&gt;
|Show info about commandline environment&lt;br /&gt;
|-&lt;br /&gt;
| --nonl&lt;br /&gt;
|Remove all newlines (\n) from output&lt;br /&gt;
|-&lt;br /&gt;
| --responsetimeout &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
|response timeout in seconds for reading response from the backend (default 0s; infinite) &#039;&#039;&#039;Available with v7.8.0&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| -c,--contextid &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
|The id of them context&lt;br /&gt;
|-&lt;br /&gt;
| -i,--userid &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
|Id of the user&lt;br /&gt;
|-&lt;br /&gt;
| -u,--username &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Username ofthe user&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extra parameters when authentication is enabled ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -A,--adminuser &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Context Admin user name&lt;br /&gt;
|-&lt;br /&gt;
| -P,--adminpass &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Context Admin password&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Return value ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; on success&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;gt;0&amp;lt;/code&amp;gt; on failure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&amp;lt;code&amp;gt;contextid {adminuser adminpass} (userid or username)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
&lt;br /&gt;
On success:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;user &amp;amp;lt;userid&amp;amp;gt; in context &amp;amp;lt;contextid&amp;amp;gt; deleted&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On failure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;user &amp;amp;lt;userid&amp;amp;gt; in context &amp;amp;lt;contextid&amp;amp;gt; could not be deleted: &amp;amp;lt;reason from&lt;br /&gt;
server&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;root@oxhe~# &amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;code&amp;gt; /opt/open-xchange/deleteuser -c 123 -i 3&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;user 3 in context 123 deleted&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== listuser ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;listuser&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the tool to list and search for users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
|Prints a help text&lt;br /&gt;
|-&lt;br /&gt;
| --environment&lt;br /&gt;
|Show info about commandline environment&lt;br /&gt;
|-&lt;br /&gt;
| --nonl&lt;br /&gt;
|Remove all newlines (\n) from output&lt;br /&gt;
|-&lt;br /&gt;
| --responsetimeout &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
|response timeout in seconds for reading response from the backend (default 0s; infinite) &#039;&#039;&#039;Available with v7.8.0&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| -c,--contextid &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
|The id of the context&lt;br /&gt;
|-&lt;br /&gt;
| -s,--searchpattern &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Search/List pattern, default “*”&lt;br /&gt;
|-&lt;br /&gt;
| --csv&lt;br /&gt;
|Command output as csv&lt;br /&gt;
|-&lt;br /&gt;
| -i,--ignorecase &lt;br /&gt;
|Do a case-insensitive search with the given search pattern&lt;br /&gt;
|-&lt;br /&gt;
| --includeguests&lt;br /&gt;
|Add guest users to listing &#039;&#039;&#039;Available with v7.8.0&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| --excludeusers&lt;br /&gt;
|Exclude usual users from listing &#039;&#039;&#039;Available with v7.8.0&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extra parameters when authentication is enabled ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -A,--adminuser &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Context Admin user name&lt;br /&gt;
|-&lt;br /&gt;
| -P,--adminpass &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Context Admin password&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Return value ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; on success&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;gt;0&amp;lt;/code&amp;gt; on failure&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&amp;lt;code&amp;gt;contextid adminuser adminpass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
&lt;br /&gt;
Standard output (only a subset of available attributes are printed also only disabled&lt;br /&gt;
modules):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|id&lt;br /&gt;
|enabled&lt;br /&gt;
|imapServer&lt;br /&gt;
|smtpserver&lt;br /&gt;
|language&lt;br /&gt;
|Webdav&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|true&lt;br /&gt;
|localhost&lt;br /&gt;
|localhost&lt;br /&gt;
|en_US&lt;br /&gt;
|false&lt;br /&gt;
|false&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
csv output: &lt;br /&gt;
Name,Language,Id,Display_name,PrimaryEmail,MaxQuota,UsedQuota,Email1,Mailenabled,Password,Sur_name,Given_name,&lt;br /&gt;
FilestoreId,FilestoreOwner,Filestore_name,Birthday,Anniversary,Branches,Business_category,Postal_code_business,&lt;br /&gt;
State_business,Street_business,Telephone_callback,City_home,Commercial_register,Country_home,Company,Department,&lt;br /&gt;
Email2,Email3,EmployeeType,Fax_business,Fax_home,Fax_other,ImapServer,ImapLogin,SmtpServer,Instant_messenger1,&lt;br /&gt;
Instant_messenger2,Telephone_ip,Telephone_isdn,Mail_folder_drafts_name,Mail_folder_sent_name,&lt;br /&gt;
Mail_folder_spam_name,Mail_folder_trash_name,Mail_folder_archive_full_name,Manager_name,Marital_status,Cellular_telephone1,Cellular_telephone2,&lt;br /&gt;
Info,Nickname,Number_of_children,Note,Number_of_employee,Telephone_pager,Password_expired,Telephone_assistant,&lt;br /&gt;
Telephone_business1,Telephone_business2,Telephone_car,Telephone_company,Telephone_home1,Telephone_home2,&lt;br /&gt;
Telephone_other,Position,Postal_code_home,Profession,Telephone_radio,Room_number,Sales_volume,City_other,&lt;br /&gt;
Country_other,Middle_name,Postal_code_other,State_other,Street_other,Spouse_name,State_home,Street_home,Suffix,&lt;br /&gt;
Tax_id,Telephone_telex,Timezone,Title,Telephone_ttytdd,UploadFileSizeLimit,UploadFileSizeLimitPerFile,Url,&lt;br /&gt;
Userfield01,Userfield02,Userfield03,Userfield04,Userfield05,Userfield06,Userfield07,Userfield08,Userfield09,&lt;br /&gt;
Userfield10,Userfield11,Userfield12,Userfield13,Userfield14,Userfield15,Userfield16,Userfield17,Userfield18,&lt;br /&gt;
Userfield19,Userfield20,Aliases,City_business,Country_business,Assistant_name,Telephone_primary,Categories,&lt;br /&gt;
PasswordMech,Mail_folder_confirmed_ham_name,Mail_folder_confirmed_spam_name,GUI_Spam_filter_capabilities_enabled,&lt;br /&gt;
DefaultSenderAddress,FolderTree,UserAttributes,GuiPreferences,access-calendar,access-contacts,&lt;br /&gt;
access-delegate-tasks,access-edit-public-folder,access-ical,access-infostore,&lt;br /&gt;
access-read-create-shared-Folders,access-syncml,access-tasks,access-vcard,access-webdav,&lt;br /&gt;
access-webmail,access-edit-group,access-edit-resource,access-edit-password,access-collect-email-addresses,&lt;br /&gt;
access-multiple-mail-accounts,access-subscription,access-publication,access-active-sync,access-usm,&lt;br /&gt;
access-olox20,access-denied-portal,access-global-address-book-disabled,access-public-folder-editable&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; root@oxhe:~# /opt/open-xchange/sbin/listuser -c 6 Id Name Displayname Email 2 admin admin admin@example.com 3 holger Holger&lt;br /&gt;
holger@example.com &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== getusercapabilities ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;getusercapabilities&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the tool to list available capabilities for a certain user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
|Prints a help text&lt;br /&gt;
|-&lt;br /&gt;
| --environment&lt;br /&gt;
|Show info about commandline environment&lt;br /&gt;
|-&lt;br /&gt;
| --nonl&lt;br /&gt;
|Remove all newlines (\n) from output&lt;br /&gt;
|-&lt;br /&gt;
| --responsetimeout &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
|response timeout in seconds for reading response from the backend (default 0s; infinite) &#039;&#039;&#039;Available with v7.8.0&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| -c,--contextid &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
|The id of the context&lt;br /&gt;
|-&lt;br /&gt;
| -i,--userid &amp;amp;lt;userid&amp;amp;gt;&lt;br /&gt;
|Id of the user&lt;br /&gt;
|-&lt;br /&gt;
| -u,--username &amp;amp;lt;username&amp;amp;gt;&lt;br /&gt;
|Username of the user&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extra parameters when authentication is enabled ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -A,--adminuser &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Context Admin user name&lt;br /&gt;
|-&lt;br /&gt;
| -P,--adminpass &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Context Admin password&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Return value ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; on success&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;gt;0&amp;lt;/code&amp;gt; on failure&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&amp;lt;code&amp;gt;contextid userid adminuser adminpass&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
&lt;br /&gt;
Either &amp;quot;There are no capabilities set for user &amp;amp;lt;user-id&amp;amp;gt; in context &amp;amp;lt;context-id&amp;amp;gt;&amp;quot;&lt;br /&gt;
or a line-wise listing of identifiers for available capabilities&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; root@oxhe:~# /opt/open-xchange/sbin/getusercapabilities -c 6 -i 345&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== changeuser ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;&amp;lt;code&amp;gt;changeuser&amp;lt;/code&amp;gt;&#039;&#039;&#039; tool allows to modify attributes of an existing user in a given context. The displayname must be unique in&lt;br /&gt;
one context.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
|Prints a help text&lt;br /&gt;
|-&lt;br /&gt;
| --environment&lt;br /&gt;
|Show info about commandline environment&lt;br /&gt;
|-&lt;br /&gt;
| --nonl&lt;br /&gt;
|Remove all newlines (\n) from output&lt;br /&gt;
|-&lt;br /&gt;
| --responsetimeout &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
|response timeout in seconds for reading response from the backend (default 0s; infinite) &#039;&#039;&#039;Available with v7.8.0&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| --extendedoptions &lt;br /&gt;
|Set this if you want to see all options, use this instead of help option&lt;br /&gt;
|-&lt;br /&gt;
| -c,--contextid &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
|The id of the context&lt;br /&gt;
|-&lt;br /&gt;
| -i,--userid &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
|Id of the user&lt;br /&gt;
|-&lt;br /&gt;
| -u,--username &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Username of the user &lt;br /&gt;
|-&lt;br /&gt;
| -d,--displayname &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Display name of the user &lt;br /&gt;
|-&lt;br /&gt;
| -g,--givenname &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Given name for the user &lt;br /&gt;
|-&lt;br /&gt;
| -s,--surname &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Surname of the user&lt;br /&gt;
|-&lt;br /&gt;
| -p,--password &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Password for the user &lt;br /&gt;
|-&lt;br /&gt;
| -e,--email &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Primary mail address &lt;br /&gt;
|-&lt;br /&gt;
| -l,--language &amp;amp;lt;lang&amp;amp;gt;&lt;br /&gt;
|Language for the user (de_DE,en_US, fr_FR)&lt;br /&gt;
|-&lt;br /&gt;
| -t,--timezone &amp;amp;lt;timezone&amp;amp;gt;&lt;br /&gt;
|Timezone of the user (Europe/Berlin)&lt;br /&gt;
|-&lt;br /&gt;
| -x,--department &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Department of the user&lt;br /&gt;
|-&lt;br /&gt;
| -z,--company &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Company of the user &lt;br /&gt;
|-&lt;br /&gt;
| -a,--aliases &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|E-Mail aliases of the user, separated by &amp;quot;,&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| --access-combination-name &amp;amp;lt;access-combination-name&amp;amp;gt;&lt;br /&gt;
|Access combination name &lt;br /&gt;
|-&lt;br /&gt;
| --addguipreferences &amp;amp;lt;addguipreferences&amp;amp;gt;&lt;br /&gt;
|Add a GUI setting (key=value)&lt;br /&gt;
|-&lt;br /&gt;
| --removeguipreferences &amp;amp;lt;removeguipreferences&amp;amp;gt;&lt;br /&gt;
|Remove a GUI setting &lt;br /&gt;
|-&lt;br /&gt;
| --access-denied-portal &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Denies portal access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --capabilities-to-add &amp;amp;lt;capabilities-to-add&amp;amp;gt;&lt;br /&gt;
| The capabilities to add as a comma-separated string (from 7.2.0 on)&lt;br /&gt;
|-&lt;br /&gt;
| --capabilities-to-remove &amp;amp;lt;capabilities-to-remove&amp;amp;gt;&lt;br /&gt;
|The capabilities to remove as a comma-separated string (from 7.2.0 on)&lt;br /&gt;
|-&lt;br /&gt;
| --capabilities-to-drop &amp;amp;lt;capabilities-to-drop&amp;amp;gt;&lt;br /&gt;
|The capabilities to drop; e.g. cleanse from storage; as a comma-separated string (from 7.6.0 on)&lt;br /&gt;
|}&lt;br /&gt;
For the GUI preferences please also see http://www.open-xchange.com/wiki/index.php?title=Gui_path&lt;br /&gt;
&lt;br /&gt;
=== Extended options ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| --email1 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Email1&lt;br /&gt;
|-&lt;br /&gt;
| --mailenabled &amp;amp;lt;booleanvalue &amp;amp;gt;&lt;br /&gt;
|Mailenabled&lt;br /&gt;
|-&lt;br /&gt;
| --birthday &amp;amp;lt;datevalue&amp;amp;gt;&lt;br /&gt;
|Birthday&lt;br /&gt;
|-&lt;br /&gt;
| --anniversary &amp;amp;lt;datevalue&amp;amp;gt;&lt;br /&gt;
|Anniversary&lt;br /&gt;
|-&lt;br /&gt;
| --branches &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Branches&lt;br /&gt;
|-&lt;br /&gt;
| --business_category &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Business_category&lt;br /&gt;
|-&lt;br /&gt;
| --postal_code_business &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Postal_code_business&lt;br /&gt;
|-&lt;br /&gt;
| --state_business &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|State_business&lt;br /&gt;
|-&lt;br /&gt;
| --street_business &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Street_business&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_callback &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_callback&lt;br /&gt;
|-&lt;br /&gt;
| --city_home &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|City_home&lt;br /&gt;
|-&lt;br /&gt;
| --commercial_register &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Commercial_register&lt;br /&gt;
|-&lt;br /&gt;
| --country_home &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Country_home&lt;br /&gt;
|-&lt;br /&gt;
| --email2 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Email2&lt;br /&gt;
|-&lt;br /&gt;
| --email3 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Email3&lt;br /&gt;
|-&lt;br /&gt;
| --employeetype &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|EmployeeType&lt;br /&gt;
|-&lt;br /&gt;
| --fax_business &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Fax_business&lt;br /&gt;
|-&lt;br /&gt;
| --fax_home &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Fax_home&lt;br /&gt;
|-&lt;br /&gt;
| --fax_other &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Fax_other&lt;br /&gt;
|-&lt;br /&gt;
| --imapserver &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|ImapServer&lt;br /&gt;
|-&lt;br /&gt;
| --imaplogin &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|ImapLogin&lt;br /&gt;
|-&lt;br /&gt;
| --smtpserver &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|SmtpServer&lt;br /&gt;
|-&lt;br /&gt;
| --instant_messenger1 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Instant_messenger1&lt;br /&gt;
|-&lt;br /&gt;
| --instant_messenger2 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Instant_messenger2&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_ip &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_ip&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_isdn &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_isdn&lt;br /&gt;
|-&lt;br /&gt;
| --mail_folder_drafts_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Mail_folder_drafts_name&lt;br /&gt;
|-&lt;br /&gt;
| --mail_folder_sent_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Mail_folder_sent_name&lt;br /&gt;
|-&lt;br /&gt;
| --mail_folder_spam_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Mail_folder_spam_name&lt;br /&gt;
|-&lt;br /&gt;
| --mail_folder_trash_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Mail_folder_trash_name&lt;br /&gt;
|-&lt;br /&gt;
| --mail_folder_archive_full_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Mail_folder_archive_full_name&lt;br /&gt;
|-&lt;br /&gt;
| --manager_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Manager_name&lt;br /&gt;
|-&lt;br /&gt;
| --marital_status &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Marital_status&lt;br /&gt;
|-&lt;br /&gt;
| --cellular_telephone1 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Cellular_telephone1&lt;br /&gt;
|-&lt;br /&gt;
| --cellular_telephone2 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Cellular_telephone2&lt;br /&gt;
|-&lt;br /&gt;
| --info &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Info&lt;br /&gt;
|-&lt;br /&gt;
| --nickname &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Nickname&lt;br /&gt;
|-&lt;br /&gt;
| --number_of_children &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Number_of_children&lt;br /&gt;
|-&lt;br /&gt;
| --note &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Note&lt;br /&gt;
|-&lt;br /&gt;
| --number_of_employee &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Number_of_employee&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_pager &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_pager&lt;br /&gt;
|-&lt;br /&gt;
| --password_expired &amp;amp;lt;booleanvalue&amp;amp;gt;&lt;br /&gt;
|Password_expired&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_assistant &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_assistant&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_business1 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_business1&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_business2 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_business2&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_car &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_car&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_company &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_company&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_home1 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_home1&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_home2 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_home2&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_other &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_other&lt;br /&gt;
|-&lt;br /&gt;
| --postal_code_home &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Postal_code_home&lt;br /&gt;
|-&lt;br /&gt;
| --profession &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Profession&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_radio &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_radio&lt;br /&gt;
|-&lt;br /&gt;
| --room_number &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Room_number&lt;br /&gt;
|-&lt;br /&gt;
| --sales_volume &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Sales_volume&lt;br /&gt;
|-&lt;br /&gt;
| --city_other &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|City_other&lt;br /&gt;
|-&lt;br /&gt;
| --country_other &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Country_other&lt;br /&gt;
|-&lt;br /&gt;
| --middle_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Middle_name&lt;br /&gt;
|-&lt;br /&gt;
| --postal_code_other &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Postal_code_other&lt;br /&gt;
|-&lt;br /&gt;
| --state_other &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|State_other&lt;br /&gt;
|-&lt;br /&gt;
| --street_other &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Street_other&lt;br /&gt;
|-&lt;br /&gt;
| --spouse_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Spouse_name&lt;br /&gt;
|-&lt;br /&gt;
| --state_home &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|State_home&lt;br /&gt;
|-&lt;br /&gt;
| --street_home &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Street_home&lt;br /&gt;
|-&lt;br /&gt;
| --suffix &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Suffix&lt;br /&gt;
|-&lt;br /&gt;
| --tax_id &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Tax_id&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_telex &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_telex&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_ttytdd &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_ttytdd&lt;br /&gt;
|-&lt;br /&gt;
| --url &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Url&lt;br /&gt;
|-&lt;br /&gt;
| --userfield01 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield01&lt;br /&gt;
|-&lt;br /&gt;
| --userfield02 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield02&lt;br /&gt;
|-&lt;br /&gt;
| --userfield03 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield03&lt;br /&gt;
|-&lt;br /&gt;
| --userfield04 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield04&lt;br /&gt;
|-&lt;br /&gt;
| --userfield05 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield05&lt;br /&gt;
|-&lt;br /&gt;
| --userfield06 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield06&lt;br /&gt;
|-&lt;br /&gt;
| --userfield07 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield07&lt;br /&gt;
|-&lt;br /&gt;
| --userfield08 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield08&lt;br /&gt;
|-&lt;br /&gt;
| --userfield09 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield09&lt;br /&gt;
|-&lt;br /&gt;
| --userfield10 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield10&lt;br /&gt;
|-&lt;br /&gt;
| --userfield11 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield11&lt;br /&gt;
|-&lt;br /&gt;
| --userfield12 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield12&lt;br /&gt;
|-&lt;br /&gt;
| --userfield13 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield13&lt;br /&gt;
|-&lt;br /&gt;
| --userfield14 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield14&lt;br /&gt;
|-&lt;br /&gt;
| --userfield15 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield15&lt;br /&gt;
|-&lt;br /&gt;
| --userfield16 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield16&lt;br /&gt;
|-&lt;br /&gt;
| --userfield17 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield17&lt;br /&gt;
|-&lt;br /&gt;
| --userfield18 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield18&lt;br /&gt;
|-&lt;br /&gt;
| --userfield19 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield19&lt;br /&gt;
|-&lt;br /&gt;
| --userfield20 &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Userfield20&lt;br /&gt;
|-&lt;br /&gt;
| --city_business &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|City_business&lt;br /&gt;
|-&lt;br /&gt;
| --country_business &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Country_business&lt;br /&gt;
|-&lt;br /&gt;
| --assistant_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Assistant_name&lt;br /&gt;
|-&lt;br /&gt;
| --telephone_primary &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Telephone_primary&lt;br /&gt;
|-&lt;br /&gt;
| --categories &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Categories&lt;br /&gt;
|-&lt;br /&gt;
| --mail_folder_confirmed_ham_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Mail_folder_confirmed_ham_name&lt;br /&gt;
|-&lt;br /&gt;
| --mail_folder_confirmed_spam_name &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Mail_folder_confirmed_spam_name&lt;br /&gt;
|-&lt;br /&gt;
| --gui_spam_filter_capabilities_enabled &amp;amp;lt;booleanvalue&amp;amp;gt;&lt;br /&gt;
|GUI_Spam_filter_capabilities_enabled&lt;br /&gt;
|-&lt;br /&gt;
| --defaultsenderaddress&amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|DefaultSenderAddress&lt;br /&gt;
|-&lt;br /&gt;
| --title &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Title&lt;br /&gt;
|-&lt;br /&gt;
| --position &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Position&lt;br /&gt;
|-&lt;br /&gt;
| --access-calendar&lt;br /&gt;
&amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Calendar module (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-contacts &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Contact module access (Default is on)&lt;br /&gt;
|-&lt;br /&gt;
| --access-delegate-tasks &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Delegate tasks access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-edit-public-folder &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Edit public folder access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-ical &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Ical module access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-infostore &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Infostore module access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-read-create-shared-Folders &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Read create shared folder access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-syncml &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Syncml access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-active-sync &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Exchange Active Sync access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-usm &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Universal Sync Module access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-tasks &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Tasks access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-vcard &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Vcard access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-webdav &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Webdav access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-webmail &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Webmail access (Default is on)&lt;br /&gt;
|-&lt;br /&gt;
| --access-publication &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|[DEPRECATED] Publication permission (Default is on). Note: access-publication needs access-infostore and is optional for Groupware+ and premium&lt;br /&gt;
|-&lt;br /&gt;
| --access-subscription &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Subscription permission (Default is on)&lt;br /&gt;
|-&lt;br /&gt;
| --access-edit-group &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Edit group access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-edit-resource &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Edit resource access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-edit-password &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Edit password access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-collect-email-addresses &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Edit collect email addresses (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-multiple-mail-accounts &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Use multiple mail account feature (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --access-global-address-book-disabled &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Access to global address book (Default is off). Note: Setting this option to true is only allowed in combination with PIM and Webmail rights. Note: There is a &#039;restoregaddefaults&#039; script to restore the default permissions of the global address book folder. &lt;br /&gt;
|-&lt;br /&gt;
| --access--voipnow &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Access to VoiceOverIP feature.&lt;br /&gt;
|-&lt;br /&gt;
| --access-public-folder-editable &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Access to public folders. Allows or denies to see public folders. &lt;br /&gt;
|-&lt;br /&gt;
| --foldertree &amp;amp;lt;0/1&amp;amp;gt;&lt;br /&gt;
|0 sets the OX standard folder tree and 1 sets the Outlook-like folder tree. &lt;br /&gt;
|-&lt;br /&gt;
| --access-olox20 &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
| [DEPRECATED] Access to Olox2.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Access changes for existing users ===&lt;br /&gt;
&lt;br /&gt;
Changes to module access must be done for all users in a given context. On downgrade i. e., to revoke former given access, the data for objects will still be present in the database and on the filestore but is not visible to the customer any more. Please note that only the specified modules are changed. That is why it is required to explicitly turn modules off. A list of packages and the required module configuration is provided in [[the section called “Package access configuration”]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Extra parameters when authentication is enabled ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|-A,--adminuser &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Context Admin user name&lt;br /&gt;
|-&lt;br /&gt;
|-P,--adminpass &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Context Admin password&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Return value ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; on success&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;gt;0&amp;lt;/code&amp;gt; on failure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;contextid {adminuser adminpass} (userid or username) and at minimum one attribute to change&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
primaryMail, Email1 and defaultSenderAddress must be present in set of aliases i. e., whenever you want to change one of&lt;br /&gt;
* --email&lt;br /&gt;
* --email1&lt;br /&gt;
* --defaultsenderaddress&lt;br /&gt;
you MUST take care, that the address you want to set is already contained in the aliases of the user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So when user has aliases: foo, bar and you want to change email to anotheraddr, you&lt;br /&gt;
must add anotheraddr to the aliases, first.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If needed, this can be done with one commandline call, e.g.:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;/changeuser -A oxadmin -P secret -c 666 -i 4 -e&lt;br /&gt;
anotheraddr -a foo,bar,anotheraddr&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
&lt;br /&gt;
On success:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;user &amp;amp;lt;userid&amp;amp;gt; in &amp;amp;lt;contextid&amp;amp;gt; changed&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On failure:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;user&lt;br /&gt;
&amp;amp;lt;userid&amp;amp;gt; in &amp;amp;lt;contextid&amp;amp;gt; could not be changed: &amp;amp;lt;reason from server&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;root@oxhe~#&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;code&amp;gt; changeuser -c 123 -i 3 -p newpwd&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;user 3 in context 123 changed&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Administrator]]&lt;br /&gt;
&lt;br /&gt;
[[Category: AppSuite]]&lt;br /&gt;
[[Category: AdminGuide]]&lt;br /&gt;
[[Category: CommandLineTools]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=Open-Xchange_Publishing&amp;diff=24394</id>
		<title>Open-Xchange Publishing</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Open-Xchange_Publishing&amp;diff=24394"/>
		<updated>2018-11-26T08:26:03Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: Removed article. Publishing mode was removed a while ago.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The publish mechanism was replaced with version 7.8.0 by the &#039;&#039;&#039;&#039;&#039;Sharing and Guest Mode&#039;&#039;&#039;&#039;&#039;. See [https://documentation.open-xchange.com/7.10.1/middleware/components/sharing_guest_mode.html documentation.open-xchange.com] for details.&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Sharing_and_Guest_Mode&amp;diff=24393</id>
		<title>AppSuite:Sharing and Guest Mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Sharing_and_Guest_Mode&amp;diff=24393"/>
		<updated>2018-11-26T08:08:52Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: Page moved to https://documentation.open-xchange.com/7.10.1/middleware/components/sharing_guest_mode.html&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article was moved to [https://documentation.open-xchange.com/7.10.1/middleware/components/sharing_guest_mode.html documentation.open-xchange.com]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Sharing_and_Guest_Mode&amp;diff=24392</id>
		<title>AppSuite:Sharing and Guest Mode</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Sharing_and_Guest_Mode&amp;diff=24392"/>
		<updated>2018-11-26T08:02:22Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: Page moved to https://documentation.open-xchange.com/7.10.1/middleware/components/sharing_guest_mode.html&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=OX_munin_scripts&amp;diff=22779</id>
		<title>OX munin scripts</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=OX_munin_scripts&amp;diff=22779"/>
		<updated>2016-12-08T12:31:30Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= How to install Munin scripts for Open-Xchange=&lt;br /&gt;
&lt;br /&gt;
== Support for Jolokia ==&lt;br /&gt;
&lt;br /&gt;
By Version 7.4.0, Munin Scripts do support [[Jolokia]] as a bridge to get their information.&lt;br /&gt;
This has been done to get less overhead and speak with the corresponding JMX-beans directly.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Munin node and munin master must be installed and configured prior using the Munin scripts package for Open-Xchange. The installation for this core components differs on various Linux distributions. For details, please visit:&lt;br /&gt;
&lt;br /&gt;
http://munin-monitoring.org/&lt;br /&gt;
&lt;br /&gt;
especially:&lt;br /&gt;
&lt;br /&gt;
http://munin-monitoring.org/wiki/LinuxInstallation&lt;br /&gt;
&lt;br /&gt;
=== open-xchange-munin-scripts ===&lt;br /&gt;
&lt;br /&gt;
== Installation on OX App Suite ==&lt;br /&gt;
&lt;br /&gt;
=== Debian GNU/Linux 7.0 (valid until v7.8.2)===&lt;br /&gt;
&lt;br /&gt;
Add the following entry to /etc/apt/sources.list.d/open-xchange.list if not already present:&lt;br /&gt;
&lt;br /&gt;
 deb https://software.open-xchange.com/products/appsuite/7.8.2/backend/DebianWheezy/ /&lt;br /&gt;
&lt;br /&gt;
 # if you have a valid maintenance subscription, please uncomment the &lt;br /&gt;
 # following and add the ldb account data to the url so that the most recent&lt;br /&gt;
 # packages get installed&lt;br /&gt;
 # deb https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/appsuite/7.8.2/backend/updates/DebianWheezy/ /&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
&lt;br /&gt;
 $ apt-get update&lt;br /&gt;
 $ apt-get install open-xchange-munin-scripts&lt;br /&gt;
&lt;br /&gt;
=== Debian GNU/Linux 8.0 ===&lt;br /&gt;
&lt;br /&gt;
Add the following entry to /etc/apt/sources.list.d/open-xchange.list if not already present:&lt;br /&gt;
&lt;br /&gt;
 deb https://software.open-xchange.com/products/appsuite/stable/backend/DebianJessie/ /&lt;br /&gt;
&lt;br /&gt;
 # if you have a valid maintenance subscription, please uncomment the &lt;br /&gt;
 # following and add the ldb account data to the url so that the most recent&lt;br /&gt;
 # packages get installed&lt;br /&gt;
 # deb https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/appsuite/stable/backend/updates/DebianJessie/ /&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
&lt;br /&gt;
 $ apt-get update&lt;br /&gt;
 $ apt-get install open-xchange-munin-scripts&lt;br /&gt;
&lt;br /&gt;
=== SUSE Linux Enterprise Server 11 (valid until v7.8.2) ===&lt;br /&gt;
&lt;br /&gt;
Add the package repository using zypper if not already present:&lt;br /&gt;
&lt;br /&gt;
 $ zypper ar https://software.open-xchange.com/products/appsuite/7.8.2/backend/SLES11 ox&lt;br /&gt;
&lt;br /&gt;
If you have a valid maintenance subscription, please run the following command and add the ldb account data to the url so that the most recent packages get installed:&lt;br /&gt;
&lt;br /&gt;
 $ zypper ar https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/appsuite/7.8.2/backend/updates/SLES11 ox-updates&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
&lt;br /&gt;
 $ zypper ref&lt;br /&gt;
 $ zypper in open-xchange-munin-scripts&lt;br /&gt;
&lt;br /&gt;
=== SUSE Linux Enterprise Server 12 ===&lt;br /&gt;
&lt;br /&gt;
Add the package repository using zypper if not already present:&lt;br /&gt;
&lt;br /&gt;
 $ zypper ar https://software.open-xchange.com/products/appsuite/stable/backend/SLE_12 ox&lt;br /&gt;
&lt;br /&gt;
If you have a valid maintenance subscription, please run the following command and add the ldb account data to the url so that the most recent packages get installed:&lt;br /&gt;
&lt;br /&gt;
 $ zypper ar https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/appsuite/stable/backend/updates/SLES11 ox-updates&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
&lt;br /&gt;
 $ zypper ref&lt;br /&gt;
 $ zypper in open-xchange-munin-scripts&lt;br /&gt;
&lt;br /&gt;
=== RedHat Enterprise Linux 6 ===&lt;br /&gt;
&lt;br /&gt;
Start a console and create a software repository file if not already present:&lt;br /&gt;
&lt;br /&gt;
 $ vim /etc/yum.repos.d/ox.repo&lt;br /&gt;
&lt;br /&gt;
 [ox]&lt;br /&gt;
 name=Open-Xchange&lt;br /&gt;
 baseurl=https://software.open-xchange.com/products/appsuite/stable/backend/RHEL6/&lt;br /&gt;
 gpgkey=https://software.open-xchange.com/oxbuildkey.pub&lt;br /&gt;
 enabled=1&lt;br /&gt;
 gpgcheck=1&lt;br /&gt;
 metadata_expire=0m&lt;br /&gt;
&lt;br /&gt;
 # if you have a valid maintenance subscription, please uncomment the &lt;br /&gt;
 # following and add the ldb account data to the url so that the most recent&lt;br /&gt;
 # packages get installed&lt;br /&gt;
 # [ox-updates]&lt;br /&gt;
 # name=Open-Xchange Updates&lt;br /&gt;
 # baseurl=https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/appsuite/stable/backend/updates/RHEL6/&lt;br /&gt;
 # gpgkey=https://software.open-xchange.com/oxbuildkey.pub&lt;br /&gt;
 # enabled=1&lt;br /&gt;
 # gpgcheck=1&lt;br /&gt;
 # metadata_expire=0m&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
&lt;br /&gt;
 $ yum update&lt;br /&gt;
 $ yum install open-xchange-munin-scripts&lt;br /&gt;
&lt;br /&gt;
=== RedHat Enterprise Linux 7 ===&lt;br /&gt;
&lt;br /&gt;
Start a console and create a software repository file if not already present:&lt;br /&gt;
&lt;br /&gt;
 $ vim /etc/yum.repos.d/ox.repo&lt;br /&gt;
&lt;br /&gt;
 [ox]&lt;br /&gt;
 name=Open-Xchange&lt;br /&gt;
 baseurl=https://software.open-xchange.com/products/appsuite/stable/backend/RHEL7/&lt;br /&gt;
 gpgkey=https://software.open-xchange.com/oxbuildkey.pub&lt;br /&gt;
 enabled=1&lt;br /&gt;
 gpgcheck=1&lt;br /&gt;
 metadata_expire=0m&lt;br /&gt;
&lt;br /&gt;
 # if you have a valid maintenance subscription, please uncomment the &lt;br /&gt;
 # following and add the ldb account data to the url so that the most recent&lt;br /&gt;
 # packages get installed&lt;br /&gt;
 # [ox-updates]&lt;br /&gt;
 # name=Open-Xchange Updates&lt;br /&gt;
 # baseurl=https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/appsuite/stable/backend/updates/RHEL7/&lt;br /&gt;
 # gpgkey=https://software.open-xchange.com/oxbuildkey.pub&lt;br /&gt;
 # enabled=1&lt;br /&gt;
 # gpgcheck=1&lt;br /&gt;
 # metadata_expire=0m&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
&lt;br /&gt;
 $ yum update&lt;br /&gt;
 $ yum install open-xchange-munin-scripts&lt;br /&gt;
&lt;br /&gt;
=== CentOS 6 ===&lt;br /&gt;
&lt;br /&gt;
Start a console and create a software repository file if not already present:&lt;br /&gt;
&lt;br /&gt;
 $ vim /etc/yum.repos.d/ox.repo&lt;br /&gt;
&lt;br /&gt;
 [ox]&lt;br /&gt;
 name=Open-Xchange&lt;br /&gt;
 baseurl=https://software.open-xchange.com/products/appsuite/stable/backend/RHEL6/&lt;br /&gt;
 gpgkey=https://software.open-xchange.com/oxbuildkey.pub&lt;br /&gt;
 enabled=1&lt;br /&gt;
 gpgcheck=1&lt;br /&gt;
 metadata_expire=0m&lt;br /&gt;
&lt;br /&gt;
 # if you have a valid maintenance subscription, please uncomment the &lt;br /&gt;
 # following and add the ldb account data to the url so that the most recent&lt;br /&gt;
 # packages get installed&lt;br /&gt;
 # [ox-updates]&lt;br /&gt;
 # name=Open-Xchange Updates&lt;br /&gt;
 # baseurl=https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/appsuite/stable/backend/updates/RHEL6/&lt;br /&gt;
 # gpgkey=https://software.open-xchange.com/oxbuildkey.pub&lt;br /&gt;
 # enabled=1&lt;br /&gt;
 # gpgcheck=1&lt;br /&gt;
 # metadata_expire=0m&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
&lt;br /&gt;
 $ yum update&lt;br /&gt;
 $ yum install open-xchange-munin-scripts&lt;br /&gt;
&lt;br /&gt;
=== CentOS 7 ===&lt;br /&gt;
&lt;br /&gt;
Start a console and create a software repository file if not already present:&lt;br /&gt;
&lt;br /&gt;
 $ vim /etc/yum.repos.d/ox.repo&lt;br /&gt;
&lt;br /&gt;
 [ox]&lt;br /&gt;
 name=Open-Xchange&lt;br /&gt;
 baseurl=https://software.open-xchange.com/products/appsuite/stable/backend/RHEL7/&lt;br /&gt;
 gpgkey=https://software.open-xchange.com/oxbuildkey.pub&lt;br /&gt;
 enabled=1&lt;br /&gt;
 gpgcheck=1&lt;br /&gt;
 metadata_expire=0m&lt;br /&gt;
&lt;br /&gt;
 # if you have a valid maintenance subscription, please uncomment the &lt;br /&gt;
 # following and add the ldb account data to the url so that the most recent&lt;br /&gt;
 # packages get installed&lt;br /&gt;
 # [ox-updates]&lt;br /&gt;
 # name=Open-Xchange Updates&lt;br /&gt;
 # baseurl=https://[CUSTOMERID:PASSWORD]@software.open-xchange.com/products/appsuite/stable/backend/updates/RHEL7/&lt;br /&gt;
 # gpgkey=https://software.open-xchange.com/oxbuildkey.pub&lt;br /&gt;
 # enabled=1&lt;br /&gt;
 # gpgcheck=1&lt;br /&gt;
 # metadata_expire=0m&lt;br /&gt;
&lt;br /&gt;
and run&lt;br /&gt;
&lt;br /&gt;
 $ yum update&lt;br /&gt;
 $ yum install open-xchange-munin-scripts&lt;br /&gt;
&lt;br /&gt;
=== open-xchange-munin-scripts-jolokia ===&lt;br /&gt;
&lt;br /&gt;
Munin-scripts for Jolokia need an additional perl modules json and lwp, which are set inside the depenecies. Those should be installed automaticly.&lt;br /&gt;
&lt;br /&gt;
If not, please install the following modules:&lt;br /&gt;
&lt;br /&gt;
Debian: libwww-perl, libjson-perl&lt;br /&gt;
&lt;br /&gt;
rpm: perl-JSON, perl-libwww-perl&lt;br /&gt;
&lt;br /&gt;
== Configuring munin-node scripts for Open-Xchange ==&lt;br /&gt;
&lt;br /&gt;
The configuration of the scripts is done automatically. &lt;br /&gt;
&lt;br /&gt;
Note: The database pool monitoring script will get only configured if the Open-Xchange server is running and the database pools initialized when installing the open-xchange-munin-scripts package. That can be verified by e.g.:&lt;br /&gt;
&lt;br /&gt;
 # showruntimestats -x | grep &amp;quot;DB Pool&amp;quot;&lt;br /&gt;
 com.openexchange.pooling:name=DB Pool 4,NumWaiting = 0&lt;br /&gt;
 com.openexchange.pooling:name=DB Pool 4,PoolSize = 3&lt;br /&gt;
 com.openexchange.pooling:name=DB Pool 4,NumBrokenConnections = 0&lt;br /&gt;
 com.openexchange.pooling:name=DB Pool 4,NumActive = 0&lt;br /&gt;
 com.openexchange.pooling:name=DB Pool 4,NumIdle = 3&lt;br /&gt;
 com.openexchange.pooling:name=DB Pool 4,AvgUseTime = 4.948&lt;br /&gt;
 com.openexchange.pooling:name=DB Pool 4,MaxUseTime = 16777&lt;br /&gt;
 com.openexchange.pooling:name=DB Pool 4,MinUseTime = 0&lt;br /&gt;
&lt;br /&gt;
=== Configuring for open-xchange-munin-scripts-jolokia ===&lt;br /&gt;
&lt;br /&gt;
Munin Scripts for Jolokia do have some additional settings for [[jolokia]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;vim /etc/munin/plugin-conf.d/ox&amp;lt;/code&amp;gt;&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot; style=&amp;quot;table-layout: fixed&amp;quot; class=&#039;wikitable sortable&#039; border=&#039;1&#039;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;30%&amp;quot; | Key&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;20%&amp;quot; | Default value&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;35%&amp;quot; | Comment&lt;br /&gt;
|-&lt;br /&gt;
| env.oxJolokiaUrl&lt;br /&gt;
| http://localhost:8009/monitoring/jolokia&lt;br /&gt;
| Base url for jolokia&lt;br /&gt;
|-&lt;br /&gt;
| env.oxJolokiaUser&lt;br /&gt;
| &amp;quot;changeMe!Now&amp;quot;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;User used for authentication with HTTP Basic Authentication.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| env.oxJolokiaPassword&lt;br /&gt;
| &amp;quot;s3cr3t!toBeChanged&amp;quot;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;Password used for authentification&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
WARNING: If &amp;lt;code&amp;gt; env.oxJolokiaUser &amp;lt;/code&amp;gt; is not changed from its default value &amp;lt;code&amp;gt; changeMe!Now &amp;lt;/code&amp;gt;, monitoring will not work as the user &amp;lt;code&amp;gt; changeMe!Now &amp;lt;/code&amp;gt; is set to stop monitoring inside the munin scripts.&lt;br /&gt;
&lt;br /&gt;
Both, &amp;lt;code&amp;gt; env.oxJolokiaUser &amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt; env.oxJolokiaPassword &amp;lt;/code&amp;gt; need to be set to the same value as set inside &amp;lt;code&amp;gt;jolokia.properties&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuring for OX Documents / Documentconverter ===&lt;br /&gt;
&lt;br /&gt;
OX Documents and Documentconverter monitoring can used by installing the additional packages &lt;br /&gt;
&amp;lt;code&amp;gt;open-xchange-documents-monitoring&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;open-xchange-documentconverter-jolokia&amp;lt;/code&amp;gt;. The Documentconverter uses a different port to access monitoring data. The corresponding oxJolokiaURL is has to be configured with an entry in the settings.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ox_documentconverter*]&lt;br /&gt;
env.oxJolokiaUrl http://localhost:8008/monitoring/jolokia&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See this [[AppSuite:DocumentsMonitoring|article]] for more details.&lt;br /&gt;
&lt;br /&gt;
= Supplementary notes for distributed munin clients =&lt;br /&gt;
&lt;br /&gt;
== Munin node ==&lt;br /&gt;
The default munin node configuration only allows connections from localhost, which means that munin master has to run on the same host. If there already is a munin master running, that master IP has to be added to the  file &amp;lt;code&amp;gt;/etc/munin/munin-node.conf&amp;lt;/code&amp;gt; on each node:&lt;br /&gt;
&lt;br /&gt;
 # A list of addresses that are allowed to connect.  This must be a&lt;br /&gt;
 # regular expression, since Net::Server does not understand CIDR-style&lt;br /&gt;
 # network notation unless the perl module Net::CIDR is installed.  You&lt;br /&gt;
 # may repeat the allow line as many times as you&#039;d like&lt;br /&gt;
 &lt;br /&gt;
 allow ^127\.0\.0\.1$&lt;br /&gt;
&lt;br /&gt;
== Munin master ==&lt;br /&gt;
&lt;br /&gt;
Make sure the munin and apache packages are installed. If only localhost is going to be monitored, the default configuration is sufficient. Other munin nodes can be added in the  &amp;lt;code&amp;gt;/etc/munin/munin.conf&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
 # a simple host tree&lt;br /&gt;
 [localhost.localdomain]&lt;br /&gt;
     address 127.0.0.1&lt;br /&gt;
     use_node_name yes&lt;br /&gt;
&lt;br /&gt;
By default, the munin monitoring web page is only reached from localhost,  other hosts or networks can be added in &amp;lt;code&amp;gt;/etc/apache2/conf.d/munin&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 Allow from localhost 127.0.0.0/8 ::1    # the default setting&lt;br /&gt;
 Allow from 10.99.0.0/8                  # added network&lt;br /&gt;
&lt;br /&gt;
The munin webpage is located at &amp;lt;code&amp;gt;http://yourhost_where_munin_is_running.org/munin&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: OX6]]&lt;br /&gt;
[[Category: Administrator]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Context_management_7_2&amp;diff=22761</id>
		<title>AppSuite:Context management 7 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Context_management_7_2&amp;diff=22761"/>
		<updated>2016-12-02T13:57:26Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: /* Command output */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== createcontext ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;createcontext&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the tool to create new contexts. A context is an independent instance within the createcontext Open-Xchange system and holds users, groups&lt;br /&gt;
and resources and all their objects. Data from one context is not visible to other contexts. Module access (calendar, tasks, email) can be set via predefined &amp;quot;access combination names&amp;quot;. These&lt;br /&gt;
names can be configured on the server side. All users which are created during later use of the &amp;quot;createuser&amp;quot; tool will inherit the module access rights from the context. If you do not specify any&lt;br /&gt;
access rights on createcontext minimal access rights will be granted. Currently, these are Webmail and Contacts access rights.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
| Prints a help text&lt;br /&gt;
|-&lt;br /&gt;
| --environment&lt;br /&gt;
|Show info about commandline environment&lt;br /&gt;
|-&lt;br /&gt;
| --nonl&lt;br /&gt;
|Remove all newlines (\n) from output&lt;br /&gt;
|-&lt;br /&gt;
| -c,--contextid &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
|The id of the context, when starting with 0, 0 is deleted&lt;br /&gt;
|-&lt;br /&gt;
| -q,--quota &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
|Context wide filestore quota in MB&lt;br /&gt;
|-&lt;br /&gt;
| -u,--username &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Username for the new context admin user&lt;br /&gt;
|-&lt;br /&gt;
| -d,--displayname &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Displayname for the new context admin user&lt;br /&gt;
|-&lt;br /&gt;
| -g,--givenname &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Given name for the new context admin user&lt;br /&gt;
|-&lt;br /&gt;
| -s,--surname &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Surname/last name for the new context Admin user&lt;br /&gt;
|-&lt;br /&gt;
| -p,--password &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Password for the new context Admin user&lt;br /&gt;
|-&lt;br /&gt;
| -e,--email &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Primary E-Mail address for the new context Admin user&lt;br /&gt;
|-&lt;br /&gt;
| -l,--lang &amp;amp;lt;lang&amp;amp;gt;&lt;br /&gt;
|Language for the new context Admin user&lt;br /&gt;
|-&lt;br /&gt;
| -t,--timezone &amp;amp;lt;timezone&amp;amp;gt;&lt;br /&gt;
|Timezone for the new context Amin user&lt;br /&gt;
|-&lt;br /&gt;
| -N,--contextname &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Context name&lt;br /&gt;
|-&lt;br /&gt;
| -L,--addmapping &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Add login mappings separated by &amp;quot;,&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| --access-combination-name &amp;amp;lt;access-combination-name&amp;amp;gt;&lt;br /&gt;
|Access combination name&lt;br /&gt;
|-&lt;br /&gt;
| --access-denied-portal &amp;amp;lt;on/off&amp;amp;gt;&lt;br /&gt;
|Denies portal access (Default is off)&lt;br /&gt;
|-&lt;br /&gt;
| --csv-import &amp;amp;lt;CSV file&amp;amp;gt; &lt;br /&gt;
| Full path to CSV file with user data to import. This option makes mandatory command line options obsolete, except credential options (if needed). But they have to be set in the CSV file.&lt;br /&gt;
&lt;br /&gt;
With this option you can specify a csv file (a full pathname must be given) with the data which should be imported. The columnnames in the CSV file must be&lt;br /&gt;
the same as the long-options of the command line tools, without the prefix &amp;quot;--&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This option will normally be used to fill new large installations with the new data. So instead of calling&lt;br /&gt;
the command line tools in a shell script every time, just a csv file needs to be created, containing the whole data.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that the credentials of the masteradmin in the createcontext call&lt;br /&gt;
must be given on the command line with the -A and -P options nevertheless - if authentication is enabled. If the createuser command line tool is used, the credentials are part of the csv file, and&lt;br /&gt;
cannot be set as options on the command line itself. The reason for this different behavior is that different contexts have different credentials for the admin user, so they must be set in every&lt;br /&gt;
line of the csv file. Opposed to this the credentials of the masteradmin are always the same.&lt;br /&gt;
&lt;br /&gt;
=== Return value ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; on success&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;lt;0&amp;lt;/code&amp;gt; on failure&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;contextid {adminuser adminpass} quota username displayname givenname surname password email&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
&lt;br /&gt;
On success:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;context &amp;amp;lt;contextid&amp;amp;gt; created&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On&lt;br /&gt;
failure:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;context &amp;amp;lt;contextid&amp;amp;gt; could not be created: &amp;amp;lt;reason from server&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;root@oxhe~# &amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;code&amp;gt;/opt/open-xchange/sbin/createcontext&lt;br /&gt;
-c 123 -q 1000 -N CompanyA -u &amp;quot;admin&amp;quot; -d &amp;quot;Admin of CompanyA&amp;quot; -g John -s Example -p newpw -e john@example.com&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;context 123&lt;br /&gt;
created&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== deletecontext ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;deletecontext&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the tool to delete contexts and all data stored that belong to it. This includes all database entries and files in the infostore but no&lt;br /&gt;
E-Mail components.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
|Prints a help text&lt;br /&gt;
|-&lt;br /&gt;
| --environment&lt;br /&gt;
|Show info about commandline environment&lt;br /&gt;
|-&lt;br /&gt;
| --nonl&lt;br /&gt;
|Remove all newlines (\n) from output&lt;br /&gt;
|-&lt;br /&gt;
| -c,--contextid &amp;amp;lt;contextid&amp;amp;gt;&lt;br /&gt;
|The id of the context&lt;br /&gt;
|-&lt;br /&gt;
| -N,--contextname &amp;amp;lt;contextname&amp;amp;gt;&lt;br /&gt;
|Context name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extra parameters when authentication is enabled ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -A,--adminuser &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Master Admin user name&lt;br /&gt;
|-&lt;br /&gt;
| -P,--adminpass &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Master Admin password&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Return value ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; on success&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;gt;0&amp;lt;/code&amp;gt; on failure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;(contextid or contexname) {adminuser adminpass}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
&lt;br /&gt;
On success:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;context &amp;amp;lt;contextid&amp;amp;gt; deleted&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On failure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;context &amp;amp;lt;contextid&amp;amp;gt; could not be deleted: &amp;amp;lt;reason from server&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;root@oxhe~# &amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;code&amp;gt;/opt/open-xchange/sbin/deletecontext -c&lt;br /&gt;
123&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;context 123 deleted&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== listcontext ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;listcontext&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the tool to list and search for contexts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
|Prints a help text&lt;br /&gt;
|-&lt;br /&gt;
| --environment&lt;br /&gt;
|Show info about commandline environment&lt;br /&gt;
|-&lt;br /&gt;
| --nonl&lt;br /&gt;
|Remove all newlines (\n) from&lt;br /&gt;
output&lt;br /&gt;
|-&lt;br /&gt;
| -s,--searchpattern &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Search/List pattern, default “*”&lt;br /&gt;
|-&lt;br /&gt;
| --csv&lt;br /&gt;
|Command output as csv&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extra parameters when authentication is enabled ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -A,--adminuser &amp;amp;lt;adminuser&amp;amp;gt;&lt;br /&gt;
|Master Admin user name&lt;br /&gt;
|-&lt;br /&gt;
| -P,--adminpass &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Master Admin password&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Return value ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; on success&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;gt;0&amp;lt;/code&amp;gt; on failure&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;{adminuser adminpass}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
&lt;br /&gt;
Standard output:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cid fid fname enabled qmax qused name&lt;br /&gt;
lmappings . . ... ... ... ... ... ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
csv output:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;id,filestore_id,filestore_name,enabled,max_quota,used_quota,name,lmappings&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@oxhe:/opt/open-xchange/sbin# ./listcontexts cid fid fname&lt;br /&gt;
enabled qmax qused name lmappings 6 3 6_ctx_store true 1000 0 customerA 6,customerA,secondlogin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== disablecontext ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;disablecontext&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the tool to disable contexts. Whenever a customer tries to log in to a disabled context, the login is denied.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
|Prints a help text&lt;br /&gt;
|-&lt;br /&gt;
| --environment&lt;br /&gt;
|Show info about commandline environment&lt;br /&gt;
|-&lt;br /&gt;
| --nonl&lt;br /&gt;
|Remove all newlines (\n) from output&lt;br /&gt;
|-&lt;br /&gt;
| -c,--contextid &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
|The id of the context&lt;br /&gt;
|-&lt;br /&gt;
| -N,--contextname &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Context name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extra parameters when authentication is enabled ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -A,--adminuser &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Master Admin user name&lt;br /&gt;
|-&lt;br /&gt;
| -P,--adminpass &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Master Admin password&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Return value ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; on success&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;gt;0&amp;lt;/code&amp;gt; on&lt;br /&gt;
failure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;(contextid or&lt;br /&gt;
contextname) {adminuser adminpass}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
&lt;br /&gt;
On&lt;br /&gt;
success:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;context &amp;amp;lt;contextid&amp;amp;gt; disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On failure:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;context &amp;amp;lt;contextid&amp;amp;gt; could not be disabled:&lt;br /&gt;
&amp;amp;lt;reason from server&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;root@oxhe~# &amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;code&amp;gt;/opt/open-xchange/sbin/disablecontext -c 123&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;context 123&lt;br /&gt;
disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== disableallcontexts ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;disableallcontexts&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the tool to disable all contexts. Whenever a customer tries to log in to a disabled context, the login is denied.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
|Prints a help text&lt;br /&gt;
|-&lt;br /&gt;
| --environment&lt;br /&gt;
|Show info about commandline environment&lt;br /&gt;
|-&lt;br /&gt;
| --nonl&lt;br /&gt;
|Remove all newlines (\n) from output&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extra parameters when authentication is enabled ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -A,--adminuser &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Master Admin user&lt;br /&gt;
name&lt;br /&gt;
|-&lt;br /&gt;
| -P,--adminpass &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Master Admin password&lt;br /&gt;
|}&lt;br /&gt;
=== Return value ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; on success&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;gt;0&amp;lt;/code&amp;gt; on&lt;br /&gt;
failure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;{adminuser&lt;br /&gt;
adminpass}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
&lt;br /&gt;
On success:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;all contexts disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On failure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;all contexts could not be disabled: &amp;amp;lt;reason from server&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;root@oxhe~# &amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;code&amp;gt;/opt/open-xchange/sbin/disableallcontexts&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;all contexts disabled&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== enablecontext ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;enablecontext&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the tool to enable a disabled context.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
|Prints a help text&lt;br /&gt;
|-&lt;br /&gt;
| --environment&lt;br /&gt;
|Show info about commandline environment&lt;br /&gt;
|-&lt;br /&gt;
| --nonl&lt;br /&gt;
|Remove all newlines (\n) from&lt;br /&gt;
output&lt;br /&gt;
|-&lt;br /&gt;
| -c,--contextid &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
|The id of the context&lt;br /&gt;
|-&lt;br /&gt;
| -N,--contextname &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Context name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extra parameters when authentication is enabled ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -A,--adminuser &amp;amp;lt;adminuser&amp;amp;gt;&lt;br /&gt;
|Master Admin user name&lt;br /&gt;
|-&lt;br /&gt;
| -P,--adminpass &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Master Admin password&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Return value ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; on success&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;gt;0&amp;lt;/code&amp;gt; on failure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;(contextid or contextname) {adminuser&lt;br /&gt;
adminpass}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
&lt;br /&gt;
On success:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;context &amp;amp;lt;contextid&amp;amp;gt; enabled&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On failure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;context &amp;amp;lt;contextid&amp;amp;gt; could not be enabled: &amp;amp;lt;reason from&lt;br /&gt;
server&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;root@oxhe~#&amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;code&amp;gt;/opt/open-xchange/sbin/enablecontext -c 123&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;context &amp;amp;lt;contextid&amp;amp;gt; enabled&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== enableallcontexts ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;enableallcontexts&amp;lt;/code&amp;gt;&#039;&#039;&#039; is the tool to enable all disabled contexts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
|Prints a help text&lt;br /&gt;
|-&lt;br /&gt;
| --environment&lt;br /&gt;
|Show info about commandline environment&lt;br /&gt;
|-&lt;br /&gt;
| --nonl&lt;br /&gt;
|Remove all newlines (\n) from&lt;br /&gt;
output&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extra parameters when authentication is enabled ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -A,--adminuser &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Master Admin user name&lt;br /&gt;
|-&lt;br /&gt;
| -P,--adminpass &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Master Admin password&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Return value ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; on success&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;gt;0&amp;lt;/code&amp;gt; on failure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;{adminuser adminpass}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
&lt;br /&gt;
On success:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;all contexts enabled&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On failure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;all contexts could not be enabled: &amp;amp;lt;reason from server&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;root@oxhe~# &amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;code&amp;gt;/opt/open-xchange/sbin/enableallcontexts&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;all contexts enabled&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== changecontext ==&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;changecontext&amp;lt;/code&amp;gt;&#039;&#039;&#039; makes context-wide changes.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you specify module access options; e.g. &amp;quot;--access-edit-password on&amp;quot;; then please be aware that basic module access set is the one from context&#039;s administrator. Meaning any option not explicitly specified as CLI argument will fall-back to context administrator setting for _every_ user in associated context.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use changecontext to change the current quota for a given context. When the context has more changecontext space in use than the new quota allows, the customer is only able to delete files until the usage is below quota. Module access (calendar,tasks,email) can be set via predefined &amp;quot;access combination names&amp;quot;. These names can be configured on the server side. All users which are created during later use of the &amp;quot;createuser&amp;quot; tool will inherit the module access rights from the context. If you do not specify any access rights on createcontext minimal access rights will be granted. Currently, these are Webmail and Contacts access rights.&lt;br /&gt;
&lt;br /&gt;
There are some default combinations in the ModuleAccessDefinitions.properties file on the admin server, like:&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|webmail&lt;br /&gt;
|webmail, contacts, globaladdressbookdisabled, collectemailaddresses, editpassword&lt;br /&gt;
|-&lt;br /&gt;
|pim&lt;br /&gt;
|webmail, calendar, contacts, tasks, globaladdressbookdisabled, collectemailaddresses, multiplemailaccounts, subscription, publication, editpassword&lt;br /&gt;
|-&lt;br /&gt;
|pim_infostore&lt;br /&gt;
|webmail, calendar, contacts, tasks, infostore, webdav, globaladdressbookdisabled,&lt;br /&gt;
collectemailaddresses, multiplemailaccounts, subscription, publication&lt;br /&gt;
|-&lt;br /&gt;
|pim_mobility&lt;br /&gt;
|webmail, calendar, contacts, tasks, syncml, usm, activesync, globaladdressbookdisabled, collectemailaddresses, multiplemailaccounts, subscription, publication, editpassword&lt;br /&gt;
|-&lt;br /&gt;
|groupware_standard&lt;br /&gt;
|webmail, calendar, contacts, infostore, tasks, webdav, ical, vcard, readcreatesharedfolders, delegatetask, editpublicfolders, editgroup, editresource, editpassword, collectemailaddresses, multiplemailaccounts, subscription, publication (Groupware Standard always gets new features except mobility and OXtender. ) &lt;br /&gt;
|-&lt;br /&gt;
|groupware_premium&lt;br /&gt;
|webmail, calendar, contacts, infostore, tasks, webdav, webdavxml, ical, vcard, syncml, usm, olox20, activesync, readcreatesharedfolders, delegatetask, editpublicfolders, editgroup, editresource, editpassword, collectemailaddresses, multiplemailaccounts, subscription, publication&lt;br /&gt;
|-&lt;br /&gt;
|all&lt;br /&gt;
|webmail, calendar, contacts, infostore, tasks, webdav, webdavxml, ical, vcard, syncml, usm, olox20, activesync, readcreatesharedfolders, delegatetask, editpublicfolders, editgroup, editresource, editpassword, publicfoldereditable, collectemailaddresses, multiplemailaccounts, subscription, publication&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
When having changed the access rights of the context and its users with &amp;quot;changecontext&amp;quot; the &amp;quot;downgrade&amp;quot; command should be called on the admin server. All unnecessary data are removed from&lt;br /&gt;
the data base via &amp;quot;groupware api&amp;quot;. If e. g. the context 1 is changed from &amp;quot;pim_infostore&amp;quot; to &amp;quot;webmail&amp;quot;, the &amp;quot;downgrade&amp;quot; command has to be called for this context then. Then, all unnecessary&lt;br /&gt;
folders for this context are removed from the data base.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
| Prints a help text          &lt;br /&gt;
|-&lt;br /&gt;
| --environment&lt;br /&gt;
| Show info about commandline environment&lt;br /&gt;
|-&lt;br /&gt;
| --nonl&lt;br /&gt;
| Remove all newlines (\n) from output&lt;br /&gt;
|-&lt;br /&gt;
| -A,--adminuser &amp;lt;adminuser&amp;gt;&lt;br /&gt;
| master Admin user name      &lt;br /&gt;
|-&lt;br /&gt;
| -P,--adminpass &amp;lt;adminpass&amp;gt;&lt;br /&gt;
| master Admin password&lt;br /&gt;
|-&lt;br /&gt;
| -c,--contextid &amp;lt;contextid&amp;gt;&lt;br /&gt;
| The id of the context       &lt;br /&gt;
|-&lt;br /&gt;
| -N,--contextname &amp;lt;contextname&amp;gt;&lt;br /&gt;
| context name                &lt;br /&gt;
|-&lt;br /&gt;
| -q,--quota &amp;lt;quota&amp;gt;&lt;br /&gt;
| Context wide filestore quota in MB.&lt;br /&gt;
|-&lt;br /&gt;
| --extendedoptions&lt;br /&gt;
| Set this if you want to see all options, use this instead of help option&lt;br /&gt;
|-&lt;br /&gt;
| -L,--addmapping &amp;lt;addmapping&amp;gt;&lt;br /&gt;
| Add login mappings.Seperated by &amp;quot;,&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -R,--removemapping &amp;lt;removemapping&amp;gt;&lt;br /&gt;
| Remove login mappings.Seperated by &amp;quot;,&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| --access-combination-name &amp;lt;access-combination-name&amp;gt;&lt;br /&gt;
| Access combination name     &lt;br /&gt;
|-&lt;br /&gt;
| --capabilities-to-add &amp;lt;capabilities-to-add&amp;gt;&lt;br /&gt;
| The capabilities to add as a comma-separated string; e.g. &amp;quot;portal, -autologin&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| --capabilities-to-remove &amp;lt;capabilities-to-remove&amp;gt;&lt;br /&gt;
| The capabilities to remove as a comma-separated string; e.g. &amp;quot;cap2, cap2&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| --quota-module &amp;lt;quota-module&amp;gt;&lt;br /&gt;
| The (comma-separated) list of identifiers for those modules to which to apply the quota value; currently supported values: [task, calendar, contact, infostore]&lt;br /&gt;
|-&lt;br /&gt;
| --quota-value &amp;lt;quota-value&amp;gt;&lt;br /&gt;
| The numeric quota value specifying the max. number of items allowed for context; zero is unlimited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extra parameters when authentication is enabled ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -A,- -adminuser &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Master Admin&lt;br /&gt;
user name&lt;br /&gt;
|-&lt;br /&gt;
| -P,- -adminpass &amp;amp;lt;string&amp;amp;gt;&lt;br /&gt;
|Master Admin password&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Return value ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; on success&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;amp;gt;0&amp;lt;/code&amp;gt; on failure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;(contextid or&lt;br /&gt;
contextname) {adminuser adminpass} and at minimum one attribute to change&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
&lt;br /&gt;
On success:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;context &amp;amp;lt;contextid&amp;amp;gt; changed&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On failure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;context&lt;br /&gt;
&amp;amp;lt;contextid&amp;amp;gt; could not be changed: &amp;amp;lt;reason from server&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;root@oxhe~# &amp;lt;/code&amp;gt;&#039;&#039;&#039;&amp;lt;code&amp;gt;/opt/open-xchange/sbin/changecontext -c 123 -q&lt;br /&gt;
500&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;context 123 changed&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== getAdminId ==&lt;br /&gt;
&lt;br /&gt;
Returns the ID of the context administrator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Administrator]]&lt;br /&gt;
&lt;br /&gt;
[[Category: AppSuite]]&lt;br /&gt;
[[Category: AdminGuide]]&lt;br /&gt;
[[Category: Administrator]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== getSchemaName (since v7.4.2) ==&lt;br /&gt;
&lt;br /&gt;
Returns the name of the database schema in which a specified context is located.&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
| Prints a help text          &lt;br /&gt;
|-&lt;br /&gt;
| --environment&lt;br /&gt;
| Show info about commandline environment&lt;br /&gt;
|-&lt;br /&gt;
| --nonl&lt;br /&gt;
| Remove all newlines (\n) from output&lt;br /&gt;
|-&lt;br /&gt;
| -A,--adminuser &amp;lt;adminuser&amp;gt;&lt;br /&gt;
| master Admin user name      &lt;br /&gt;
|-&lt;br /&gt;
| -P,--adminpass &amp;lt;adminpass&amp;gt;&lt;br /&gt;
| master Admin password&lt;br /&gt;
|-&lt;br /&gt;
| -c,--contextid &amp;lt;contextid&amp;gt;&lt;br /&gt;
| The id of the context       &lt;br /&gt;
|-&lt;br /&gt;
| -N,--contextname &amp;lt;contextname&amp;gt;&lt;br /&gt;
| context name                &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;code&amp;gt;(contextid or contexname) {adminuser adminpass}&amp;lt;/code&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Schema name for context &amp;quot; + &amp;lt;context-id&amp;gt; + &amp;quot;: &amp;quot; + &amp;lt;schema-name&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== includestacktrace (since v.7.4.2) ==&lt;br /&gt;
Enables/disables to include stack trace information (if any) in HTTP-API JSON responses for a certain user&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
| Prints usage of the command line tool&lt;br /&gt;
|-&lt;br /&gt;
| -e,--enable&lt;br /&gt;
| Enables to include stack trace information (if any) in HTTP-API JSON responses)&lt;br /&gt;
|-&lt;br /&gt;
| -d,--disable&lt;br /&gt;
| Disables to include stack trace information (if any) in HTTP-API JSON responses&lt;br /&gt;
|-&lt;br /&gt;
| -c,--context &amp;lt;contextid&amp;gt;&lt;br /&gt;
| The context identifier&lt;br /&gt;
|-&lt;br /&gt;
| -u,--user &amp;lt;userid&amp;gt;&lt;br /&gt;
| The user identifier&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The flags -e and -d are mutually exclusive.&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;{&amp;lt;code&amp;gt;context&amp;lt;/code&amp;gt;} {&amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt;} {&amp;lt;code&amp;gt;enable|disable&amp;lt;/code&amp;gt;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
&lt;br /&gt;
Including stack trace information successfully enabled|disabled for user &amp;lt;user-id&amp;gt; in context &amp;lt;context-id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
Enable to include stack trace information for user 1618 in context 314&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# includestacktrace -u 1618 -c 314 -e&lt;br /&gt;
&lt;br /&gt;
== sanitizefilemimetypes (since v.7.4.2) ==&lt;br /&gt;
Sanitizes those file entries that hold a broken/corrupt MIME type information&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
| Prints usage of the command line tool&lt;br /&gt;
|-&lt;br /&gt;
| -c,--context &amp;lt;contextid&amp;gt;&lt;br /&gt;
| The context id&lt;br /&gt;
|-&lt;br /&gt;
| -a,--all&lt;br /&gt;
| The flag to signal that all contexts shall be processed. Hence option -c/--context is then obsolete.&lt;br /&gt;
|-&lt;br /&gt;
| -i,--invalids&lt;br /&gt;
| An optional comma-separated list of those MIME types that should be considered as broken/corrupt. Default is &amp;quot;application/force-download, application/x-download, application/$suffix&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The options -c/--context and -a/--all are mutually exclusive.&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;contextid or all&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
A short result description; e.g. &amp;quot;Fixed 123 documents with a broken/corrupt MIME type in context 456&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== checkloginmappings (since v.7.6.0) ==&lt;br /&gt;
Checks (and fixes) those context-related entries in login2context mappings that miss the actual context identifier&lt;br /&gt;
&lt;br /&gt;
=== Parameters ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| -h,--help&lt;br /&gt;
| Prints usage of the command line tool&lt;br /&gt;
|-&lt;br /&gt;
| -c,--context &amp;lt;contextid&amp;gt;&lt;br /&gt;
| The context id&lt;br /&gt;
|-&lt;br /&gt;
| -a,--all&lt;br /&gt;
| The flag to signal that all contexts shall be processed. Hence option -c/--context is then obsolete.&lt;br /&gt;
|-&lt;br /&gt;
| -A,--adminuser&lt;br /&gt;
| Admin username. In case -a/--all is provided master administrator&#039;s user name is required; else the one for context administrator&lt;br /&gt;
|-&lt;br /&gt;
| -P,--adminpass&lt;br /&gt;
| Admin password. In case -a/--all is provided master administrator&#039;s password is required; else the one for context administrator&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The options -c/--context and -a/--all are mutually exclusive.&lt;br /&gt;
&lt;br /&gt;
=== Mandatory parameters ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;contextid or all&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Command output ===&lt;br /&gt;
A short result description; e.g. &amp;quot;Fixed 123 documents with a broken/corrupt MIME type in context 456&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Category: Administrator]]&lt;br /&gt;
&lt;br /&gt;
[[Category: AppSuite]]&lt;br /&gt;
[[Category: AdminGuide]]&lt;br /&gt;
[[Category: Administrator]]&lt;br /&gt;
[[Category: CommandLineTools]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Filestorages&amp;diff=22455</id>
		<title>AppSuite:Filestorages</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=AppSuite:Filestorages&amp;diff=22455"/>
		<updated>2016-10-17T10:38:34Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: /* Registering your app */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Common preparations =&lt;br /&gt;
This page shows how to setup external file stores. For all of these file stores you have to install the package &amp;quot;open-xchange-oauth&amp;quot;, which provides the necessary authentication mechanisms.&lt;br /&gt;
&lt;br /&gt;
Moreover your setup is required to be reachable via HTTPS, since the providers expect that a call-back URL to your setup is specified. Such a call-back URL is only accepted if it contains the &amp;lt;source enclose=&amp;quot;none&amp;quot; lang=&amp;quot;java&amp;quot;&amp;gt;&amp;quot;https://&amp;quot;&amp;lt;/source&amp;gt; scheme., e.g.:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;quot;https://my.oxsetup.invalid/ajax/defer&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Keep HTTPS protocol ==&lt;br /&gt;
[[Appsuite:Grizzly#Cluster_setup]] shows that HTTPS communication is terminated by the Apache balancer in front of the Open-Xchange nodes. To let the Open-Xchange application know about the HTTPS protocol that is used to communicate with the Apache server:&lt;br /&gt;
* Either set a special header in the SSL virtual hosts configurations in Apache to forward this information. The de facto standard for this is the &amp;lt;source enclose=&amp;quot;none&amp;quot; lang=&amp;quot;java&amp;quot;&amp;gt;&amp;quot;X-Forwarded-Proto&amp;quot;&amp;lt;/source&amp;gt; header. See [[Appsuite:Grizzly#X-FORWARDED-PROTO_Header]] for how to setup that header.&lt;br /&gt;
* Or force the Open-Xchange application to assume it is reached via SSL through setting property &amp;lt;source enclose=&amp;quot;none&amp;quot; lang=&amp;quot;properties&amp;quot;&amp;gt;&amp;quot;com.openexchange.forceHTTPS=true&amp;quot;&amp;lt;/source&amp;gt; in file &#039;&#039;/opt/open-xchange/etc/server.properties&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Deferrer URL ==&lt;br /&gt;
Open-Xchange application uses the deferrer URL as call-back for some of the providers, which use OAuth v2.0 authentication (such as Google).&lt;br /&gt;
&lt;br /&gt;
If your OX server is reachable only via one host name, you won&#039;t have to do anything. If it is reachable by more than one host name, create or open the file &#039;&#039;/opt/openexchange/etc/groupware/deferrer.properties&#039;&#039; and set the properties therein as such:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
 com.openexchange.http.deferrer.url=https://mymaindomain.invalid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Dropbox =&lt;br /&gt;
&lt;br /&gt;
To setup the Dropbox file store you have to install the package &amp;quot;open-xchange-file-storage-dropbox&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Registering your app ==&lt;br /&gt;
* Log in to your Dropbox account [https://www.dropbox.com/login here], and create your Dropbox app [https://www.dropbox.com/developers/apps/create here]&lt;br /&gt;
* There are two options available creating an app, Drops-in App &amp;amp; Dropbox API App. Please select &#039;&#039;&#039;Dropbox API&#039;&#039;&#039; app and enter the name of your app.&lt;br /&gt;
* Go to [https://www.dropbox.com/developers/apps App Console] and select your created app. Select settings tab to view the &amp;lt;source enclose=&amp;quot;none&amp;quot; lang=&amp;quot;java&amp;quot;&amp;gt;APP_KEY&amp;lt;/source&amp;gt; (App key) and &amp;lt;source enclose=&amp;quot;none&amp;quot; lang=&amp;quot;java&amp;quot;&amp;gt;SECRET_KEY&amp;lt;/source&amp;gt; (App secret)&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
In addition you have to configure the following properties in file &#039;&#039;/opt/open-xchange/etc/dropboxoauth.properties&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Enable the OAuth connector to Dropbox OAuth&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
 com.openexchange.oauth.dropbox=true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set the API key and secret&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
 com.openexchange.oauth.dropbox.apiKey=REPLACE_THIS_WITH_DROPBOX_APP_KEY&lt;br /&gt;
 com.openexchange.oauth.dropbox.apiSecret=REPLACE_THIS_WITH_DROPBOX_APP_SECRET&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can define them system-wide or via the config cascade mechanism.&lt;br /&gt;
&lt;br /&gt;
{{InstallPlugin|pluginname=open-xchange-file-storage-dropbox|toplevel=products|sopath=appsuite/stable/backend|version=App Suite}}&lt;br /&gt;
&lt;br /&gt;
= Google Drive = &lt;br /&gt;
&lt;br /&gt;
To setup the Google Drive file store you have to install the package &amp;quot;open-xchange-file-storage-googledrive&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Registering your app ==&lt;br /&gt;
* Sign in to [https://console.developers.google.com/ Google Developers Console] using your Google account&lt;br /&gt;
* Please follow [https://developers.google.com/identity/sign-in/web/devconsole-project these] instructions to create a new project with a client ID, which is needed to call the sign-in API&lt;br /&gt;
* Enable the following APIs for your project&lt;br /&gt;
** BigQuery API&lt;br /&gt;
** Calendar API&lt;br /&gt;
** Contacts API&lt;br /&gt;
** Drive API&lt;br /&gt;
** Drive SDK&lt;br /&gt;
** Gmail API&lt;br /&gt;
** Google Cloud SQL&lt;br /&gt;
** Google Cloud Storage&lt;br /&gt;
** Google Cloud Storage JSON API&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
In addition you have to configure the following properties in file &#039;&#039;/opt/open-xchange/etc/googleoauth.properties&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Enable the OAuth connector to Google OAuth&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
 com.openexchange.oauth.google=true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set the API key and secret, which is Client ID and Client Secret to call the sign-in API (Select your project, select API manager from upper left burger menu, select credentials in left side bar, select Client ID for Web application)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
 com.openexchange.oauth.google.apiKey=REPLACE_THIS_WITH_YOUR_CLIENT_ID&lt;br /&gt;
 com.openexchange.oauth.google.apiSecret=REPLACE_THIS_WITH_YOUR_CLIENT_SECRET&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set the redirect URL. Please ensure the following conditions are met:&lt;br /&gt;
** The redirect URL specified in the Google App needs to be the same as the one specified by this   property.&lt;br /&gt;
** The redirect URI uses &amp;lt;source enclose=&amp;quot;none&amp;quot; lang=&amp;quot;java&amp;quot;&amp;gt;&amp;quot;https://&amp;quot;&amp;lt;/source&amp;gt; as protocol&lt;br /&gt;
** The redirect URI follows the pattern: &amp;lt;source enclose=&amp;quot;none&amp;quot; lang=&amp;quot;java&amp;quot;&amp;gt;&amp;quot;https://&amp;quot; + &amp;lt;host-name&amp;gt; + &amp;quot;/ajax/defer&amp;quot;&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
 com.openexchange.oauth.google.redirectUrl=&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
E.g. &amp;lt;source enclose=&amp;quot;none&amp;quot; lang=&amp;quot;java&amp;quot;&amp;gt;&amp;quot;https://myappsuite.mydomain.invalid/ajax/defer&amp;quot;&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set the product ID of the registered Google app&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
 com.openexchange.oauth.google.productName=&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can define them system-wide or via the config cascade mechanism.&lt;br /&gt;
&lt;br /&gt;
{{InstallPlugin|pluginname=open-xchange-file-storage-googledrive|toplevel=products|sopath=appsuite/stable/backend|version=App Suite}}&lt;br /&gt;
&lt;br /&gt;
= Microsoft Onedrive =&lt;br /&gt;
To setup the Microsoft OneDrive file store you have to install the package &amp;quot;open-xchange-file-storage-onedrive&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Registering your app ==&lt;br /&gt;
* Please follow [https://msdn.microsoft.com/en-us/library/ff751474.aspx this guide] to create/register your app&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
In addition you have to configure the following properties in file &#039;&#039;/opt/open-xchange/etc/msliveconntectoauth.properties&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Enable the OAuth connector&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
 com.openexchange.oauth.msliveconnect=true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set the API key and secret&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
 com.openexchange.oauth.msliveconnect.apiKey=REPLACE_THIS_WITH_YOUR_MS_LIVE_CONNECT_CLIENT_KEY&lt;br /&gt;
 com.openexchange.oauth.msliveconnect.apiSecret=REPLACE_THIS_WITH_YOUR_MS_LIVE_CONNECT_CLIENT_SECRET&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set the redirect URL&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
 com.openexchange.oauth.msliveconnect.redirectUrl=REPLACE_THIS_WITH_YOUR_MS_LIVE_CONNECT_REDIRECT_URL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can define them system-wide or via the config cascade mechanism.&lt;br /&gt;
&lt;br /&gt;
{{InstallPlugin|pluginname=open-xchange-file-storage-onedrive|toplevel=products|sopath=appsuite/stable/backend|version=App Suite}}&lt;br /&gt;
&lt;br /&gt;
= Box.com = &lt;br /&gt;
To setup the Box.com file store you have to install the package &amp;quot;open-xchange-file-storage-boxcom&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Registering your app ==&lt;br /&gt;
* Sign in to [https://developers.box.com/ box Developers]&lt;br /&gt;
* Select &#039;&#039;&#039;Create a Box Application&#039;&#039;&#039;&lt;br /&gt;
* Select &#039;&#039;&#039;Box Content&#039;&#039;&#039;&lt;br /&gt;
* Hit &#039;&#039;&#039;Configure your application&#039;&#039;&#039;&lt;br /&gt;
* Enter &#039;&#039;redirect_uri&#039;&#039;&#039; (the deferrer URL; e.g. &amp;lt;source enclose=&amp;quot;none&amp;quot; lang=&amp;quot;java&amp;quot;&amp;gt;&amp;quot;https://my.oxsetup.invalid/ajax/defer&amp;quot;&amp;lt;/source&amp;gt;)&lt;br /&gt;
* Enable &#039;&#039;Read and write all files and folders&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
In addition you have to configure the following properties in file &#039;&#039;/opt/open-xchange/etc/boxcomoauth.properties&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Enable the OAuth connector&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
 com.openexchange.oauth.boxcom=true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set the API key and secret&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
 com.openexchange.oauth.boxcom.apiKey=REPLACE_THIS_WITH_YOUR_BOX_CLIENT_KEY&lt;br /&gt;
 com.openexchange.oauth.boxcom.apiSecret=REPLACE_THIS_WITH_YOUR_BOX_CLIENT_SECRET&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set the redirect URL&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;properties&amp;quot;&amp;gt;&lt;br /&gt;
 com.openexchange.oauth.boxcom.redirectUrl=REPLACE_THIS_WITH_YOUR_BOX_REDIRECT_URL&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can define them system-wide or via the config cascade mechanism.&lt;br /&gt;
&lt;br /&gt;
{{InstallPlugin|pluginname=open-xchange-file-storage-boxcom|toplevel=products|sopath=appsuite/stable/backend|version=App Suite}}&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22452</id>
		<title>Login variations</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22452"/>
		<updated>2016-10-14T08:13:15Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: /* IP Check */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Login variations&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction:&#039;&#039;&#039; This paper describes Open-Xchanges&#039;s authentication and session handling. It gives an overview of all available mechanisms and on how to safely pass on sessions from external applications to the Open-Xchange Server (Single Sign On, SSO).&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The Open-Xchange Server web front-end is implemented in AJAX (Asynchronous JavaScript and XML). Thus the complete user interface (GUI) is running in a browser. Opposed to standard web applications there are no HTML pages generated and delivered by the browser.&lt;br /&gt;
&lt;br /&gt;
The complete user front-end is rendered and displayed in the browser. Based on HTTP/S  the data are exchanged with the server via JavaScript Object Notation (JSON). That means it is not possible to simulate front-end actions  via HTTP/S request by simulating respectively formatted GET/POST calls. Instead, another abstraction is taking place that exclusively transfers data from GUI to server and vice versa.&lt;br /&gt;
&lt;br /&gt;
The Open-Xchange Server includes a session daemon (sessiond) that keeps the current data of a logged in user. If successfully authenticated the information kept in the session are sufficient for accessing the Open-Xchange Server.&lt;br /&gt;
&lt;br /&gt;
==Access to IMAP Back-End services==&lt;br /&gt;
To access external E-Mail systems (IMAP/SMTP) the Open-Xchange Server has to know the credentials of the current user for the system, i. e. the session object has to keep the respective password for the access in plain text. That means authenticating via SessionIDs alone is not sufficient. Authentication always has to take place by entering the username and password.&lt;br /&gt;
&lt;br /&gt;
(There are two exceptions: either if one master password is used for all IMAP accounts, or if a very special implementation of MAL is used, which does not need a password.)&lt;br /&gt;
&lt;br /&gt;
==Basic Implementation Rules==&lt;br /&gt;
* It must not be possible to get a valid session by e. g. guessing a SessionID. This is especially important when being passed on by an external system&lt;br /&gt;
* A session must not be verified by a single SessionID only, but has to compare at least two different data types, this is what the Session-Secret is for&lt;br /&gt;
* Both SessionID and Session-Secret must never be passed from the Open-Xchange server to the client in the same request. This ensures, that potential issues in the stack between the client and Open-Xchange (proxies, caches, loadbalancer, Apache, …) can not lead to wrong sessions &lt;br /&gt;
* To enhance security Session-Secret and SessionID are transferred as different data types. The Session-Secret will always be transferred as a cookie, the SessionID will be transferred as URL parameter if persistent auto-login is not activated for this session.&lt;br /&gt;
* It must never be possible to have conflicting session information per client (multiple cookies) within the same cookie store&lt;br /&gt;
* If any error in the session handling is detected, the relevant request is discarded and logged. It is not tried to fix the issue&lt;br /&gt;
* In memory data (SessionID) of the browser GUI must never be changed during a valid session&lt;br /&gt;
* All relevant information regarding session management must always be written to the relevant logfiles&lt;br /&gt;
* The whole mechanism is only secure when being used via encrypted connection&lt;br /&gt;
* ATTENTION: If persistent autologin is activated for the system and a user decided to use it, all information necessary to access the Open-Xchange server is stored within the browsers cookie store.  This means, that the security of the whole system depends on the level of security of the browsers cookie store&lt;br /&gt;
&lt;br /&gt;
== Authentication and Session Tokens ==&lt;br /&gt;
Following tokens are used for the session management:&lt;br /&gt;
&lt;br /&gt;
=== SessionID ===&lt;br /&gt;
The SessionID is used to identify every session. It is a UUID, generated by the backend via default Java UUID implementation. It is written into the OX logfiles for every log message. When no auto-login is used for the session, then the SessionID is transferred as an URL parameter. If auto-login is activated, then the SessionID is transferred as a cookie.&lt;br /&gt;
&lt;br /&gt;
=== Session-Secret ===&lt;br /&gt;
The Session-Secret is used to verify every session. It is a UUID, generated by the backend via default Java UUID implementation. Only accesses, where the Session-Secret matches with the one stored in SessionD for the given SessionID are valid. Mismatches lead to immediate session termination.&lt;br /&gt;
&lt;br /&gt;
=== Public Session ===&lt;br /&gt;
The public Session is used as a replacement for the SessionID. It is a UUID, generated by the backend via default Java UUID implementation. The Public Session is transferred as a cookie. Using the Public Session is limited to some non critical requests. By using this cookie instead of a request parameter, the browser is able to cache the response of special requests (e.g. contact images).&lt;br /&gt;
&lt;br /&gt;
=== Random ===&lt;br /&gt;
The Random-Token is a one time token with a limited lifetime, which is used to initiate sessions through 3rd party applications or websites. It is a UUID, generated by the backend via default Java UUID implementation. This token is deprecated and subject to change.&lt;br /&gt;
&lt;br /&gt;
=== Cookie Handling ===&lt;br /&gt;
In several situations, cookies are used to store and transfer the session tokens. The following rules for cookie creation and storage apply.&lt;br /&gt;
&lt;br /&gt;
==== Only one cookie per client session type ====&lt;br /&gt;
It must never happen, that the same client has more than one session associated with an Open-Xchange server. Therefore the cookies need to have the same name. If a new cookie is set to the browser, the original one will be overwritten. With the next client access either the SessionID or the Session-Secret do not match anymore and the invalid session is terminated.&lt;br /&gt;
Multiple clients with same cookie store.&lt;br /&gt;
&lt;br /&gt;
On the other hand it may happen, that several clients use the same cookie store. E.g. a standard browser GUI session and a browser plugin session. Therefore the cookie name needs to contain informations about the client.&lt;br /&gt;
&lt;br /&gt;
==== Naming of cookies ====&lt;br /&gt;
The cookies are named following this schema:&lt;br /&gt;
&lt;br /&gt;
  open-xchange-session-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;SessionID&amp;gt;&amp;gt;&lt;br /&gt;
  open-xchange-secret-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;Session-Secret&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;&amp;lt;name token&amp;gt;&amp;gt; is generated from configurable data associated with the client. It is a md5-hash build from the client-id and the User-Agent is used to identify the client. Other parameters can be added through a configuration file. If a request is performed by a browser with an invalid hash the corresponding cookies and session are invalidated.&lt;br /&gt;
&lt;br /&gt;
====Lifetime of cookies====&lt;br /&gt;
Normally, cookies are session cookies, which get invalid/deleted when the browser is shut down. &lt;br /&gt;
Using the persistent auto-login, the cookies are persistent cookies, with a configurable default. The default lifetime is one week.&lt;br /&gt;
&lt;br /&gt;
====Security of a cookie====&lt;br /&gt;
Cookies can be configured in different ways to be secure. For further information visit [[OXSessionSecurityFeatures]] &lt;br /&gt;
&lt;br /&gt;
All cookies get deleted when a logout is performed.&lt;br /&gt;
&lt;br /&gt;
==IP Check==&lt;br /&gt;
Per default an IP check is activated to terminate every session immediately, if the IP address of the client changes during the session lifetime. This check is not processed, when a session is reactivated following the persistent auto-login process.&lt;br /&gt;
There are several configuration options to enable, disable the IP Check and to define IP Ranges to omit the check and/or accept recurring connections from within these ranges. For further information on the configuration see [https://oxpedia.org/wiki/index.php?title=AppSuite:Configuration_properties_7.8.2 configuration properties].&lt;br /&gt;
&lt;br /&gt;
==Access via web browser with user credentials==&lt;br /&gt;
When directly logging in to the system by entering the credentials, following steps will be done to authenticate the user or verify the validity of the session after the authentication:&lt;br /&gt;
&lt;br /&gt;
# The browser sends initial request to the Open-Xchange server. The client represented by the application:&lt;br /&gt;
## is not authenticated yet&lt;br /&gt;
## has no cookie&lt;br /&gt;
## has no session ID.&lt;br /&gt;
# Open-Xchange server sends an AJAX application to browser.  The application is loaded into the browser and no data is exchanged between server and application.&lt;br /&gt;
# The AJAX application then will try to do an auto-login. Because the application has no knowledge of the cookies that may already be stored in the browser it will try to login the client. For further information on auto-login see [[OXSessionAutologin]]. With the precondition form 1. the auto-login try will be denied.&lt;br /&gt;
# The user enters username and password in the front-end.&lt;br /&gt;
# The username and password are sent to the server via JSON (SSL). If the user activated persistent auto-login on the login screen, this information is passed with the same request.&lt;br /&gt;
# The server authenticates the client and sends following data back to the browser via JSON (the data are saved in the session object):&lt;br /&gt;
## Session ID via JSON object&lt;br /&gt;
## (Optional) Random token for initial login via JSON object. For the random token to be send the server needs to be configured(see login.properties – com.openexchange.axaj.login.randomToken). CAUTION! The random token is deprecated and should no longer be used!&lt;br /&gt;
## Cookie with JSESSIONID. The JSESSIONID is set for loadbalancing to the browser&lt;br /&gt;
## Cookie containing the session secret. If persistent auto-login is selected, the cookie is configured with the relevant type and validity.&lt;br /&gt;
## Cookie containing the public identifier.&lt;br /&gt;
# The AJAX front-end saves the session ID in its memory. (Optional)  Ignores the random token.&lt;br /&gt;
# If the persistent auto-login is enabled the AJAX front-end will send a store request. If no error occurs a configured cookie with the relevant type and validity containing the session ID is set to the browser. &lt;br /&gt;
# The AJAX front-end sends initial data request via JSON to the Open-Xchange server and provides the session ID as an URL parameter. The secret is send along as a cookie.&lt;br /&gt;
# The Open-Xchange server processes this data request and compares:&lt;br /&gt;
## Session ID for validity in sessiond&lt;br /&gt;
## Session-Secret from the cookie for validity with session&lt;br /&gt;
# The request is correctly authenticated and is answered by the server.&lt;br /&gt;
# (Optional) Random token is discarded after timeout from sessiond.&lt;br /&gt;
# Repeat 9. - 11. until end of session&lt;br /&gt;
&lt;br /&gt;
If the user does not use the persistent auto-login, the session is only valid as long as the browser is opened. It will be cleared either on logout, on  browser termination or with any occurring error.&lt;br /&gt;
&lt;br /&gt;
For any details on the requests and responses please visit the [https://documentation.open-xchange.com/latest/middleware/http-api-gen/#_login_resource Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
==Access via web browser after authentication with external system==&lt;br /&gt;
The goal is to authenticate in the Open-Xchange system through an external system and to safely pass on the received session data to a browser. To do so the external system has to know the user data (username, password) in plain text. &lt;br /&gt;
&lt;br /&gt;
The process is based on the session initialization in the Open-Xchange Server via the JSON interface and on passing on the received data to a browser. The browser finally initializes the session with an additional random token that is only valid for one single access. &lt;br /&gt;
#	External tool sends initial JSON request directly to Open-Xchange Server&lt;br /&gt;
##	not authenticated yet&lt;br /&gt;
##	no cookie&lt;br /&gt;
##	no SessionID&lt;br /&gt;
#	The Open-Xchange Server authenticates and delivers back following data to external tool via JSON (all the data are stored in the session object in sessiond)&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Random token for initial login via JSON object (required for SSO login)&lt;br /&gt;
##	Cookie with Session-Secret is not set&lt;br /&gt;
#	External tool starts browser with special URL, that contains at least following data:&lt;br /&gt;
##	Random token for initial login&lt;br /&gt;
#	Open-Xchange Server compares:&lt;br /&gt;
##	Random token for validity in sessiond&lt;br /&gt;
#	Open-Xchange Server sends to the browser:&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Cookie with JSESSIONID for loadbalancing is set to the browser&lt;br /&gt;
#	The second part of the tokens is delivered in a separate request&lt;br /&gt;
##	Cookie with Session-Secret is set to the browser If persistent auto-login is selected, the cookie is configured with the relevant type and validity&lt;br /&gt;
#	Open-Xchange removes random token from sessiond.&lt;br /&gt;
&lt;br /&gt;
Then the process continues as described in the section above. The session is then verified with the SessionID and Session-Secret.&lt;br /&gt;
&lt;br /&gt;
==Token Login==&lt;br /&gt;
A dedicated login action (tokenLogin) is used to acquire a server token bound to a given client token. The combination of these tokens allows another client to gain a valid session. This Login is intended to replace the random token login. With this method there is no request or response containing all necessary information to create a valid session.&lt;br /&gt;
&lt;br /&gt;
==Form Login==&lt;br /&gt;
The Form Login provides a simple way of accessing the web frontend just by using standard HTML forms. The response contains a redirect link to the Web-UI. See [[OXSessionFormLogin]] for details.&lt;br /&gt;
&lt;br /&gt;
==Redeem Token Login==&lt;br /&gt;
With a valid session it is possible to acquire a secret. Using this secret another system is able to generate a valid session.&lt;br /&gt;
This session may also contain the users password (configurable). The system in question needs to be registered at the server and has to identify itself with a key configured at the open-xchange server. This is only for internal communication and by default no keys are available.&lt;br /&gt;
&lt;br /&gt;
== Authentication against other services ==&lt;br /&gt;
OX6 and AppSuite allow authentication using other services, too. This is not in the scope of this article. The Services team is available to build plugins for such services. Some standard ones are already implemented, see the following articles for that:&lt;br /&gt;
* [[Authentication IMAP Plugin description]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For further information on the session see [[OXSessionLifecycle]].&lt;br /&gt;
&lt;br /&gt;
For further information on HTTP API visit the [https://documentation.open-xchange.com/latest/middleware/http-api-gen/#_login_resource Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:OX6]]&lt;br /&gt;
[[Category:AppSuite]]&lt;br /&gt;
[[Category:Auth]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22451</id>
		<title>Login variations</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22451"/>
		<updated>2016-10-14T08:08:45Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: /* Authentication against other services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Login variations&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction:&#039;&#039;&#039; This paper describes Open-Xchanges&#039;s authentication and session handling. It gives an overview of all available mechanisms and on how to safely pass on sessions from external applications to the Open-Xchange Server (Single Sign On, SSO).&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The Open-Xchange Server web front-end is implemented in AJAX (Asynchronous JavaScript and XML). Thus the complete user interface (GUI) is running in a browser. Opposed to standard web applications there are no HTML pages generated and delivered by the browser.&lt;br /&gt;
&lt;br /&gt;
The complete user front-end is rendered and displayed in the browser. Based on HTTP/S  the data are exchanged with the server via JavaScript Object Notation (JSON). That means it is not possible to simulate front-end actions  via HTTP/S request by simulating respectively formatted GET/POST calls. Instead, another abstraction is taking place that exclusively transfers data from GUI to server and vice versa.&lt;br /&gt;
&lt;br /&gt;
The Open-Xchange Server includes a session daemon (sessiond) that keeps the current data of a logged in user. If successfully authenticated the information kept in the session are sufficient for accessing the Open-Xchange Server.&lt;br /&gt;
&lt;br /&gt;
==Access to IMAP Back-End services==&lt;br /&gt;
To access external E-Mail systems (IMAP/SMTP) the Open-Xchange Server has to know the credentials of the current user for the system, i. e. the session object has to keep the respective password for the access in plain text. That means authenticating via SessionIDs alone is not sufficient. Authentication always has to take place by entering the username and password.&lt;br /&gt;
&lt;br /&gt;
(There are two exceptions: either if one master password is used for all IMAP accounts, or if a very special implementation of MAL is used, which does not need a password.)&lt;br /&gt;
&lt;br /&gt;
==Basic Implementation Rules==&lt;br /&gt;
* It must not be possible to get a valid session by e. g. guessing a SessionID. This is especially important when being passed on by an external system&lt;br /&gt;
* A session must not be verified by a single SessionID only, but has to compare at least two different data types, this is what the Session-Secret is for&lt;br /&gt;
* Both SessionID and Session-Secret must never be passed from the Open-Xchange server to the client in the same request. This ensures, that potential issues in the stack between the client and Open-Xchange (proxies, caches, loadbalancer, Apache, …) can not lead to wrong sessions &lt;br /&gt;
* To enhance security Session-Secret and SessionID are transferred as different data types. The Session-Secret will always be transferred as a cookie, the SessionID will be transferred as URL parameter if persistent auto-login is not activated for this session.&lt;br /&gt;
* It must never be possible to have conflicting session information per client (multiple cookies) within the same cookie store&lt;br /&gt;
* If any error in the session handling is detected, the relevant request is discarded and logged. It is not tried to fix the issue&lt;br /&gt;
* In memory data (SessionID) of the browser GUI must never be changed during a valid session&lt;br /&gt;
* All relevant information regarding session management must always be written to the relevant logfiles&lt;br /&gt;
* The whole mechanism is only secure when being used via encrypted connection&lt;br /&gt;
* ATTENTION: If persistent autologin is activated for the system and a user decided to use it, all information necessary to access the Open-Xchange server is stored within the browsers cookie store.  This means, that the security of the whole system depends on the level of security of the browsers cookie store&lt;br /&gt;
&lt;br /&gt;
== Authentication and Session Tokens ==&lt;br /&gt;
Following tokens are used for the session management:&lt;br /&gt;
&lt;br /&gt;
=== SessionID ===&lt;br /&gt;
The SessionID is used to identify every session. It is a UUID, generated by the backend via default Java UUID implementation. It is written into the OX logfiles for every log message. When no auto-login is used for the session, then the SessionID is transferred as an URL parameter. If auto-login is activated, then the SessionID is transferred as a cookie.&lt;br /&gt;
&lt;br /&gt;
=== Session-Secret ===&lt;br /&gt;
The Session-Secret is used to verify every session. It is a UUID, generated by the backend via default Java UUID implementation. Only accesses, where the Session-Secret matches with the one stored in SessionD for the given SessionID are valid. Mismatches lead to immediate session termination.&lt;br /&gt;
&lt;br /&gt;
=== Public Session ===&lt;br /&gt;
The public Session is used as a replacement for the SessionID. It is a UUID, generated by the backend via default Java UUID implementation. The Public Session is transferred as a cookie. Using the Public Session is limited to some non critical requests. By using this cookie instead of a request parameter, the browser is able to cache the response of special requests (e.g. contact images).&lt;br /&gt;
&lt;br /&gt;
=== Random ===&lt;br /&gt;
The Random-Token is a one time token with a limited lifetime, which is used to initiate sessions through 3rd party applications or websites. It is a UUID, generated by the backend via default Java UUID implementation. This token is deprecated and subject to change.&lt;br /&gt;
&lt;br /&gt;
=== Cookie Handling ===&lt;br /&gt;
In several situations, cookies are used to store and transfer the session tokens. The following rules for cookie creation and storage apply.&lt;br /&gt;
&lt;br /&gt;
==== Only one cookie per client session type ====&lt;br /&gt;
It must never happen, that the same client has more than one session associated with an Open-Xchange server. Therefore the cookies need to have the same name. If a new cookie is set to the browser, the original one will be overwritten. With the next client access either the SessionID or the Session-Secret do not match anymore and the invalid session is terminated.&lt;br /&gt;
Multiple clients with same cookie store.&lt;br /&gt;
&lt;br /&gt;
On the other hand it may happen, that several clients use the same cookie store. E.g. a standard browser GUI session and a browser plugin session. Therefore the cookie name needs to contain informations about the client.&lt;br /&gt;
&lt;br /&gt;
==== Naming of cookies ====&lt;br /&gt;
The cookies are named following this schema:&lt;br /&gt;
&lt;br /&gt;
  open-xchange-session-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;SessionID&amp;gt;&amp;gt;&lt;br /&gt;
  open-xchange-secret-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;Session-Secret&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;&amp;lt;name token&amp;gt;&amp;gt; is generated from configurable data associated with the client. It is a md5-hash build from the client-id and the User-Agent is used to identify the client. Other parameters can be added through a configuration file. If a request is performed by a browser with an invalid hash the corresponding cookies and session are invalidated.&lt;br /&gt;
&lt;br /&gt;
====Lifetime of cookies====&lt;br /&gt;
Normally, cookies are session cookies, which get invalid/deleted when the browser is shut down. &lt;br /&gt;
Using the persistent auto-login, the cookies are persistent cookies, with a configurable default. The default lifetime is one week.&lt;br /&gt;
&lt;br /&gt;
====Security of a cookie====&lt;br /&gt;
Cookies can be configured in different ways to be secure. For further information visit [[OXSessionSecurityFeatures]] &lt;br /&gt;
&lt;br /&gt;
All cookies get deleted when a logout is performed.&lt;br /&gt;
&lt;br /&gt;
==IP Check==&lt;br /&gt;
Per default an IP check is activated to terminate every session immediately, if the IP address of the client changes during the session lifetime. This check is not processed, when a session is reactivated following the persistent auto-login process.&lt;br /&gt;
There are several configuration options to enable, disable the IP Check and to define IP Ranges to omit the check and/or accept recurring connections from within these ranges.&lt;br /&gt;
&lt;br /&gt;
==Access via web browser with user credentials==&lt;br /&gt;
When directly logging in to the system by entering the credentials, following steps will be done to authenticate the user or verify the validity of the session after the authentication:&lt;br /&gt;
&lt;br /&gt;
# The browser sends initial request to the Open-Xchange server. The client represented by the application:&lt;br /&gt;
## is not authenticated yet&lt;br /&gt;
## has no cookie&lt;br /&gt;
## has no session ID.&lt;br /&gt;
# Open-Xchange server sends an AJAX application to browser.  The application is loaded into the browser and no data is exchanged between server and application.&lt;br /&gt;
# The AJAX application then will try to do an auto-login. Because the application has no knowledge of the cookies that may already be stored in the browser it will try to login the client. For further information on auto-login see [[OXSessionAutologin]]. With the precondition form 1. the auto-login try will be denied.&lt;br /&gt;
# The user enters username and password in the front-end.&lt;br /&gt;
# The username and password are sent to the server via JSON (SSL). If the user activated persistent auto-login on the login screen, this information is passed with the same request.&lt;br /&gt;
# The server authenticates the client and sends following data back to the browser via JSON (the data are saved in the session object):&lt;br /&gt;
## Session ID via JSON object&lt;br /&gt;
## (Optional) Random token for initial login via JSON object. For the random token to be send the server needs to be configured(see login.properties – com.openexchange.axaj.login.randomToken). CAUTION! The random token is deprecated and should no longer be used!&lt;br /&gt;
## Cookie with JSESSIONID. The JSESSIONID is set for loadbalancing to the browser&lt;br /&gt;
## Cookie containing the session secret. If persistent auto-login is selected, the cookie is configured with the relevant type and validity.&lt;br /&gt;
## Cookie containing the public identifier.&lt;br /&gt;
# The AJAX front-end saves the session ID in its memory. (Optional)  Ignores the random token.&lt;br /&gt;
# If the persistent auto-login is enabled the AJAX front-end will send a store request. If no error occurs a configured cookie with the relevant type and validity containing the session ID is set to the browser. &lt;br /&gt;
# The AJAX front-end sends initial data request via JSON to the Open-Xchange server and provides the session ID as an URL parameter. The secret is send along as a cookie.&lt;br /&gt;
# The Open-Xchange server processes this data request and compares:&lt;br /&gt;
## Session ID for validity in sessiond&lt;br /&gt;
## Session-Secret from the cookie for validity with session&lt;br /&gt;
# The request is correctly authenticated and is answered by the server.&lt;br /&gt;
# (Optional) Random token is discarded after timeout from sessiond.&lt;br /&gt;
# Repeat 9. - 11. until end of session&lt;br /&gt;
&lt;br /&gt;
If the user does not use the persistent auto-login, the session is only valid as long as the browser is opened. It will be cleared either on logout, on  browser termination or with any occurring error.&lt;br /&gt;
&lt;br /&gt;
For any details on the requests and responses please visit the [https://documentation.open-xchange.com/latest/middleware/http-api-gen/#_login_resource Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
==Access via web browser after authentication with external system==&lt;br /&gt;
The goal is to authenticate in the Open-Xchange system through an external system and to safely pass on the received session data to a browser. To do so the external system has to know the user data (username, password) in plain text. &lt;br /&gt;
&lt;br /&gt;
The process is based on the session initialization in the Open-Xchange Server via the JSON interface and on passing on the received data to a browser. The browser finally initializes the session with an additional random token that is only valid for one single access. &lt;br /&gt;
#	External tool sends initial JSON request directly to Open-Xchange Server&lt;br /&gt;
##	not authenticated yet&lt;br /&gt;
##	no cookie&lt;br /&gt;
##	no SessionID&lt;br /&gt;
#	The Open-Xchange Server authenticates and delivers back following data to external tool via JSON (all the data are stored in the session object in sessiond)&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Random token for initial login via JSON object (required for SSO login)&lt;br /&gt;
##	Cookie with Session-Secret is not set&lt;br /&gt;
#	External tool starts browser with special URL, that contains at least following data:&lt;br /&gt;
##	Random token for initial login&lt;br /&gt;
#	Open-Xchange Server compares:&lt;br /&gt;
##	Random token for validity in sessiond&lt;br /&gt;
#	Open-Xchange Server sends to the browser:&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Cookie with JSESSIONID for loadbalancing is set to the browser&lt;br /&gt;
#	The second part of the tokens is delivered in a separate request&lt;br /&gt;
##	Cookie with Session-Secret is set to the browser If persistent auto-login is selected, the cookie is configured with the relevant type and validity&lt;br /&gt;
#	Open-Xchange removes random token from sessiond.&lt;br /&gt;
&lt;br /&gt;
Then the process continues as described in the section above. The session is then verified with the SessionID and Session-Secret.&lt;br /&gt;
&lt;br /&gt;
==Token Login==&lt;br /&gt;
A dedicated login action (tokenLogin) is used to acquire a server token bound to a given client token. The combination of these tokens allows another client to gain a valid session. This Login is intended to replace the random token login. With this method there is no request or response containing all necessary information to create a valid session.&lt;br /&gt;
&lt;br /&gt;
==Form Login==&lt;br /&gt;
The Form Login provides a simple way of accessing the web frontend just by using standard HTML forms. The response contains a redirect link to the Web-UI. See [[OXSessionFormLogin]] for details.&lt;br /&gt;
&lt;br /&gt;
==Redeem Token Login==&lt;br /&gt;
With a valid session it is possible to acquire a secret. Using this secret another system is able to generate a valid session.&lt;br /&gt;
This session may also contain the users password (configurable). The system in question needs to be registered at the server and has to identify itself with a key configured at the open-xchange server. This is only for internal communication and by default no keys are available.&lt;br /&gt;
&lt;br /&gt;
== Authentication against other services ==&lt;br /&gt;
OX6 and AppSuite allow authentication using other services, too. This is not in the scope of this article. The Services team is available to build plugins for such services. Some standard ones are already implemented, see the following articles for that:&lt;br /&gt;
* [[Authentication IMAP Plugin description]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For further information on the session see [[OXSessionLifecycle]].&lt;br /&gt;
&lt;br /&gt;
For further information on HTTP API visit the [https://documentation.open-xchange.com/latest/middleware/http-api-gen/#_login_resource Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:OX6]]&lt;br /&gt;
[[Category:AppSuite]]&lt;br /&gt;
[[Category:Auth]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22450</id>
		<title>Login variations</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22450"/>
		<updated>2016-10-14T08:01:33Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: /* Authentication against other services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Login variations&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction:&#039;&#039;&#039; This paper describes Open-Xchanges&#039;s authentication and session handling. It gives an overview of all available mechanisms and on how to safely pass on sessions from external applications to the Open-Xchange Server (Single Sign On, SSO).&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The Open-Xchange Server web front-end is implemented in AJAX (Asynchronous JavaScript and XML). Thus the complete user interface (GUI) is running in a browser. Opposed to standard web applications there are no HTML pages generated and delivered by the browser.&lt;br /&gt;
&lt;br /&gt;
The complete user front-end is rendered and displayed in the browser. Based on HTTP/S  the data are exchanged with the server via JavaScript Object Notation (JSON). That means it is not possible to simulate front-end actions  via HTTP/S request by simulating respectively formatted GET/POST calls. Instead, another abstraction is taking place that exclusively transfers data from GUI to server and vice versa.&lt;br /&gt;
&lt;br /&gt;
The Open-Xchange Server includes a session daemon (sessiond) that keeps the current data of a logged in user. If successfully authenticated the information kept in the session are sufficient for accessing the Open-Xchange Server.&lt;br /&gt;
&lt;br /&gt;
==Access to IMAP Back-End services==&lt;br /&gt;
To access external E-Mail systems (IMAP/SMTP) the Open-Xchange Server has to know the credentials of the current user for the system, i. e. the session object has to keep the respective password for the access in plain text. That means authenticating via SessionIDs alone is not sufficient. Authentication always has to take place by entering the username and password.&lt;br /&gt;
&lt;br /&gt;
(There are two exceptions: either if one master password is used for all IMAP accounts, or if a very special implementation of MAL is used, which does not need a password.)&lt;br /&gt;
&lt;br /&gt;
==Basic Implementation Rules==&lt;br /&gt;
* It must not be possible to get a valid session by e. g. guessing a SessionID. This is especially important when being passed on by an external system&lt;br /&gt;
* A session must not be verified by a single SessionID only, but has to compare at least two different data types, this is what the Session-Secret is for&lt;br /&gt;
* Both SessionID and Session-Secret must never be passed from the Open-Xchange server to the client in the same request. This ensures, that potential issues in the stack between the client and Open-Xchange (proxies, caches, loadbalancer, Apache, …) can not lead to wrong sessions &lt;br /&gt;
* To enhance security Session-Secret and SessionID are transferred as different data types. The Session-Secret will always be transferred as a cookie, the SessionID will be transferred as URL parameter if persistent auto-login is not activated for this session.&lt;br /&gt;
* It must never be possible to have conflicting session information per client (multiple cookies) within the same cookie store&lt;br /&gt;
* If any error in the session handling is detected, the relevant request is discarded and logged. It is not tried to fix the issue&lt;br /&gt;
* In memory data (SessionID) of the browser GUI must never be changed during a valid session&lt;br /&gt;
* All relevant information regarding session management must always be written to the relevant logfiles&lt;br /&gt;
* The whole mechanism is only secure when being used via encrypted connection&lt;br /&gt;
* ATTENTION: If persistent autologin is activated for the system and a user decided to use it, all information necessary to access the Open-Xchange server is stored within the browsers cookie store.  This means, that the security of the whole system depends on the level of security of the browsers cookie store&lt;br /&gt;
&lt;br /&gt;
== Authentication and Session Tokens ==&lt;br /&gt;
Following tokens are used for the session management:&lt;br /&gt;
&lt;br /&gt;
=== SessionID ===&lt;br /&gt;
The SessionID is used to identify every session. It is a UUID, generated by the backend via default Java UUID implementation. It is written into the OX logfiles for every log message. When no auto-login is used for the session, then the SessionID is transferred as an URL parameter. If auto-login is activated, then the SessionID is transferred as a cookie.&lt;br /&gt;
&lt;br /&gt;
=== Session-Secret ===&lt;br /&gt;
The Session-Secret is used to verify every session. It is a UUID, generated by the backend via default Java UUID implementation. Only accesses, where the Session-Secret matches with the one stored in SessionD for the given SessionID are valid. Mismatches lead to immediate session termination.&lt;br /&gt;
&lt;br /&gt;
=== Public Session ===&lt;br /&gt;
The public Session is used as a replacement for the SessionID. It is a UUID, generated by the backend via default Java UUID implementation. The Public Session is transferred as a cookie. Using the Public Session is limited to some non critical requests. By using this cookie instead of a request parameter, the browser is able to cache the response of special requests (e.g. contact images).&lt;br /&gt;
&lt;br /&gt;
=== Random ===&lt;br /&gt;
The Random-Token is a one time token with a limited lifetime, which is used to initiate sessions through 3rd party applications or websites. It is a UUID, generated by the backend via default Java UUID implementation. This token is deprecated and subject to change.&lt;br /&gt;
&lt;br /&gt;
=== Cookie Handling ===&lt;br /&gt;
In several situations, cookies are used to store and transfer the session tokens. The following rules for cookie creation and storage apply.&lt;br /&gt;
&lt;br /&gt;
==== Only one cookie per client session type ====&lt;br /&gt;
It must never happen, that the same client has more than one session associated with an Open-Xchange server. Therefore the cookies need to have the same name. If a new cookie is set to the browser, the original one will be overwritten. With the next client access either the SessionID or the Session-Secret do not match anymore and the invalid session is terminated.&lt;br /&gt;
Multiple clients with same cookie store.&lt;br /&gt;
&lt;br /&gt;
On the other hand it may happen, that several clients use the same cookie store. E.g. a standard browser GUI session and a browser plugin session. Therefore the cookie name needs to contain informations about the client.&lt;br /&gt;
&lt;br /&gt;
==== Naming of cookies ====&lt;br /&gt;
The cookies are named following this schema:&lt;br /&gt;
&lt;br /&gt;
  open-xchange-session-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;SessionID&amp;gt;&amp;gt;&lt;br /&gt;
  open-xchange-secret-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;Session-Secret&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;&amp;lt;name token&amp;gt;&amp;gt; is generated from configurable data associated with the client. It is a md5-hash build from the client-id and the User-Agent is used to identify the client. Other parameters can be added through a configuration file. If a request is performed by a browser with an invalid hash the corresponding cookies and session are invalidated.&lt;br /&gt;
&lt;br /&gt;
====Lifetime of cookies====&lt;br /&gt;
Normally, cookies are session cookies, which get invalid/deleted when the browser is shut down. &lt;br /&gt;
Using the persistent auto-login, the cookies are persistent cookies, with a configurable default. The default lifetime is one week.&lt;br /&gt;
&lt;br /&gt;
====Security of a cookie====&lt;br /&gt;
Cookies can be configured in different ways to be secure. For further information visit [[OXSessionSecurityFeatures]] &lt;br /&gt;
&lt;br /&gt;
All cookies get deleted when a logout is performed.&lt;br /&gt;
&lt;br /&gt;
==IP Check==&lt;br /&gt;
Per default an IP check is activated to terminate every session immediately, if the IP address of the client changes during the session lifetime. This check is not processed, when a session is reactivated following the persistent auto-login process.&lt;br /&gt;
There are several configuration options to enable, disable the IP Check and to define IP Ranges to omit the check and/or accept recurring connections from within these ranges.&lt;br /&gt;
&lt;br /&gt;
==Access via web browser with user credentials==&lt;br /&gt;
When directly logging in to the system by entering the credentials, following steps will be done to authenticate the user or verify the validity of the session after the authentication:&lt;br /&gt;
&lt;br /&gt;
# The browser sends initial request to the Open-Xchange server. The client represented by the application:&lt;br /&gt;
## is not authenticated yet&lt;br /&gt;
## has no cookie&lt;br /&gt;
## has no session ID.&lt;br /&gt;
# Open-Xchange server sends an AJAX application to browser.  The application is loaded into the browser and no data is exchanged between server and application.&lt;br /&gt;
# The AJAX application then will try to do an auto-login. Because the application has no knowledge of the cookies that may already be stored in the browser it will try to login the client. For further information on auto-login see [[OXSessionAutologin]]. With the precondition form 1. the auto-login try will be denied.&lt;br /&gt;
# The user enters username and password in the front-end.&lt;br /&gt;
# The username and password are sent to the server via JSON (SSL). If the user activated persistent auto-login on the login screen, this information is passed with the same request.&lt;br /&gt;
# The server authenticates the client and sends following data back to the browser via JSON (the data are saved in the session object):&lt;br /&gt;
## Session ID via JSON object&lt;br /&gt;
## (Optional) Random token for initial login via JSON object. For the random token to be send the server needs to be configured(see login.properties – com.openexchange.axaj.login.randomToken). CAUTION! The random token is deprecated and should no longer be used!&lt;br /&gt;
## Cookie with JSESSIONID. The JSESSIONID is set for loadbalancing to the browser&lt;br /&gt;
## Cookie containing the session secret. If persistent auto-login is selected, the cookie is configured with the relevant type and validity.&lt;br /&gt;
## Cookie containing the public identifier.&lt;br /&gt;
# The AJAX front-end saves the session ID in its memory. (Optional)  Ignores the random token.&lt;br /&gt;
# If the persistent auto-login is enabled the AJAX front-end will send a store request. If no error occurs a configured cookie with the relevant type and validity containing the session ID is set to the browser. &lt;br /&gt;
# The AJAX front-end sends initial data request via JSON to the Open-Xchange server and provides the session ID as an URL parameter. The secret is send along as a cookie.&lt;br /&gt;
# The Open-Xchange server processes this data request and compares:&lt;br /&gt;
## Session ID for validity in sessiond&lt;br /&gt;
## Session-Secret from the cookie for validity with session&lt;br /&gt;
# The request is correctly authenticated and is answered by the server.&lt;br /&gt;
# (Optional) Random token is discarded after timeout from sessiond.&lt;br /&gt;
# Repeat 9. - 11. until end of session&lt;br /&gt;
&lt;br /&gt;
If the user does not use the persistent auto-login, the session is only valid as long as the browser is opened. It will be cleared either on logout, on  browser termination or with any occurring error.&lt;br /&gt;
&lt;br /&gt;
For any details on the requests and responses please visit the [https://documentation.open-xchange.com/latest/middleware/http-api-gen/#_login_resource Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
==Access via web browser after authentication with external system==&lt;br /&gt;
The goal is to authenticate in the Open-Xchange system through an external system and to safely pass on the received session data to a browser. To do so the external system has to know the user data (username, password) in plain text. &lt;br /&gt;
&lt;br /&gt;
The process is based on the session initialization in the Open-Xchange Server via the JSON interface and on passing on the received data to a browser. The browser finally initializes the session with an additional random token that is only valid for one single access. &lt;br /&gt;
#	External tool sends initial JSON request directly to Open-Xchange Server&lt;br /&gt;
##	not authenticated yet&lt;br /&gt;
##	no cookie&lt;br /&gt;
##	no SessionID&lt;br /&gt;
#	The Open-Xchange Server authenticates and delivers back following data to external tool via JSON (all the data are stored in the session object in sessiond)&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Random token for initial login via JSON object (required for SSO login)&lt;br /&gt;
##	Cookie with Session-Secret is not set&lt;br /&gt;
#	External tool starts browser with special URL, that contains at least following data:&lt;br /&gt;
##	Random token for initial login&lt;br /&gt;
#	Open-Xchange Server compares:&lt;br /&gt;
##	Random token for validity in sessiond&lt;br /&gt;
#	Open-Xchange Server sends to the browser:&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Cookie with JSESSIONID for loadbalancing is set to the browser&lt;br /&gt;
#	The second part of the tokens is delivered in a separate request&lt;br /&gt;
##	Cookie with Session-Secret is set to the browser If persistent auto-login is selected, the cookie is configured with the relevant type and validity&lt;br /&gt;
#	Open-Xchange removes random token from sessiond.&lt;br /&gt;
&lt;br /&gt;
Then the process continues as described in the section above. The session is then verified with the SessionID and Session-Secret.&lt;br /&gt;
&lt;br /&gt;
==Token Login==&lt;br /&gt;
A dedicated login action (tokenLogin) is used to acquire a server token bound to a given client token. The combination of these tokens allows another client to gain a valid session. This Login is intended to replace the random token login. With this method there is no request or response containing all necessary information to create a valid session.&lt;br /&gt;
&lt;br /&gt;
==Form Login==&lt;br /&gt;
The Form Login provides a simple way of accessing the web frontend just by using standard HTML forms. The response contains a redirect link to the Web-UI. See [[OXSessionFormLogin]] for details.&lt;br /&gt;
&lt;br /&gt;
==Redeem Token Login==&lt;br /&gt;
With a valid session it is possible to acquire a secret. Using this secret another system is able to generate a valid session.&lt;br /&gt;
This session may also contain the users password (configurable). The system in question needs to be registered at the server and has to identify itself with a key configured at the open-xchange server. This is only for internal communication and by default no keys are available.&lt;br /&gt;
&lt;br /&gt;
== Authentication against other services ==&lt;br /&gt;
OX6 and AppSuite allow authentication using other services, too. This is not in the scope of this article. The Services team is available to build plugins for such services. Some standard ones are already implemented, see the following articles for that:&lt;br /&gt;
* [[Authentication IMAP Plugin description]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For further information on the session visit [[OXSessionLifecycle]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:OX6]]&lt;br /&gt;
[[Category:AppSuite]]&lt;br /&gt;
[[Category:Auth]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22449</id>
		<title>Login variations</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22449"/>
		<updated>2016-10-14T07:57:48Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: /* Cookie Handling */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Login variations&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction:&#039;&#039;&#039; This paper describes Open-Xchanges&#039;s authentication and session handling. It gives an overview of all available mechanisms and on how to safely pass on sessions from external applications to the Open-Xchange Server (Single Sign On, SSO).&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The Open-Xchange Server web front-end is implemented in AJAX (Asynchronous JavaScript and XML). Thus the complete user interface (GUI) is running in a browser. Opposed to standard web applications there are no HTML pages generated and delivered by the browser.&lt;br /&gt;
&lt;br /&gt;
The complete user front-end is rendered and displayed in the browser. Based on HTTP/S  the data are exchanged with the server via JavaScript Object Notation (JSON). That means it is not possible to simulate front-end actions  via HTTP/S request by simulating respectively formatted GET/POST calls. Instead, another abstraction is taking place that exclusively transfers data from GUI to server and vice versa.&lt;br /&gt;
&lt;br /&gt;
The Open-Xchange Server includes a session daemon (sessiond) that keeps the current data of a logged in user. If successfully authenticated the information kept in the session are sufficient for accessing the Open-Xchange Server.&lt;br /&gt;
&lt;br /&gt;
==Access to IMAP Back-End services==&lt;br /&gt;
To access external E-Mail systems (IMAP/SMTP) the Open-Xchange Server has to know the credentials of the current user for the system, i. e. the session object has to keep the respective password for the access in plain text. That means authenticating via SessionIDs alone is not sufficient. Authentication always has to take place by entering the username and password.&lt;br /&gt;
&lt;br /&gt;
(There are two exceptions: either if one master password is used for all IMAP accounts, or if a very special implementation of MAL is used, which does not need a password.)&lt;br /&gt;
&lt;br /&gt;
==Basic Implementation Rules==&lt;br /&gt;
* It must not be possible to get a valid session by e. g. guessing a SessionID. This is especially important when being passed on by an external system&lt;br /&gt;
* A session must not be verified by a single SessionID only, but has to compare at least two different data types, this is what the Session-Secret is for&lt;br /&gt;
* Both SessionID and Session-Secret must never be passed from the Open-Xchange server to the client in the same request. This ensures, that potential issues in the stack between the client and Open-Xchange (proxies, caches, loadbalancer, Apache, …) can not lead to wrong sessions &lt;br /&gt;
* To enhance security Session-Secret and SessionID are transferred as different data types. The Session-Secret will always be transferred as a cookie, the SessionID will be transferred as URL parameter if persistent auto-login is not activated for this session.&lt;br /&gt;
* It must never be possible to have conflicting session information per client (multiple cookies) within the same cookie store&lt;br /&gt;
* If any error in the session handling is detected, the relevant request is discarded and logged. It is not tried to fix the issue&lt;br /&gt;
* In memory data (SessionID) of the browser GUI must never be changed during a valid session&lt;br /&gt;
* All relevant information regarding session management must always be written to the relevant logfiles&lt;br /&gt;
* The whole mechanism is only secure when being used via encrypted connection&lt;br /&gt;
* ATTENTION: If persistent autologin is activated for the system and a user decided to use it, all information necessary to access the Open-Xchange server is stored within the browsers cookie store.  This means, that the security of the whole system depends on the level of security of the browsers cookie store&lt;br /&gt;
&lt;br /&gt;
== Authentication and Session Tokens ==&lt;br /&gt;
Following tokens are used for the session management:&lt;br /&gt;
&lt;br /&gt;
=== SessionID ===&lt;br /&gt;
The SessionID is used to identify every session. It is a UUID, generated by the backend via default Java UUID implementation. It is written into the OX logfiles for every log message. When no auto-login is used for the session, then the SessionID is transferred as an URL parameter. If auto-login is activated, then the SessionID is transferred as a cookie.&lt;br /&gt;
&lt;br /&gt;
=== Session-Secret ===&lt;br /&gt;
The Session-Secret is used to verify every session. It is a UUID, generated by the backend via default Java UUID implementation. Only accesses, where the Session-Secret matches with the one stored in SessionD for the given SessionID are valid. Mismatches lead to immediate session termination.&lt;br /&gt;
&lt;br /&gt;
=== Public Session ===&lt;br /&gt;
The public Session is used as a replacement for the SessionID. It is a UUID, generated by the backend via default Java UUID implementation. The Public Session is transferred as a cookie. Using the Public Session is limited to some non critical requests. By using this cookie instead of a request parameter, the browser is able to cache the response of special requests (e.g. contact images).&lt;br /&gt;
&lt;br /&gt;
=== Random ===&lt;br /&gt;
The Random-Token is a one time token with a limited lifetime, which is used to initiate sessions through 3rd party applications or websites. It is a UUID, generated by the backend via default Java UUID implementation. This token is deprecated and subject to change.&lt;br /&gt;
&lt;br /&gt;
=== Cookie Handling ===&lt;br /&gt;
In several situations, cookies are used to store and transfer the session tokens. The following rules for cookie creation and storage apply.&lt;br /&gt;
&lt;br /&gt;
==== Only one cookie per client session type ====&lt;br /&gt;
It must never happen, that the same client has more than one session associated with an Open-Xchange server. Therefore the cookies need to have the same name. If a new cookie is set to the browser, the original one will be overwritten. With the next client access either the SessionID or the Session-Secret do not match anymore and the invalid session is terminated.&lt;br /&gt;
Multiple clients with same cookie store.&lt;br /&gt;
&lt;br /&gt;
On the other hand it may happen, that several clients use the same cookie store. E.g. a standard browser GUI session and a browser plugin session. Therefore the cookie name needs to contain informations about the client.&lt;br /&gt;
&lt;br /&gt;
==== Naming of cookies ====&lt;br /&gt;
The cookies are named following this schema:&lt;br /&gt;
&lt;br /&gt;
  open-xchange-session-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;SessionID&amp;gt;&amp;gt;&lt;br /&gt;
  open-xchange-secret-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;Session-Secret&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;&amp;lt;name token&amp;gt;&amp;gt; is generated from configurable data associated with the client. It is a md5-hash build from the client-id and the User-Agent is used to identify the client. Other parameters can be added through a configuration file. If a request is performed by a browser with an invalid hash the corresponding cookies and session are invalidated.&lt;br /&gt;
&lt;br /&gt;
====Lifetime of cookies====&lt;br /&gt;
Normally, cookies are session cookies, which get invalid/deleted when the browser is shut down. &lt;br /&gt;
Using the persistent auto-login, the cookies are persistent cookies, with a configurable default. The default lifetime is one week.&lt;br /&gt;
&lt;br /&gt;
====Security of a cookie====&lt;br /&gt;
Cookies can be configured in different ways to be secure. For further information visit [[OXSessionSecurityFeatures]] &lt;br /&gt;
&lt;br /&gt;
All cookies get deleted when a logout is performed.&lt;br /&gt;
&lt;br /&gt;
==IP Check==&lt;br /&gt;
Per default an IP check is activated to terminate every session immediately, if the IP address of the client changes during the session lifetime. This check is not processed, when a session is reactivated following the persistent auto-login process.&lt;br /&gt;
There are several configuration options to enable, disable the IP Check and to define IP Ranges to omit the check and/or accept recurring connections from within these ranges.&lt;br /&gt;
&lt;br /&gt;
==Access via web browser with user credentials==&lt;br /&gt;
When directly logging in to the system by entering the credentials, following steps will be done to authenticate the user or verify the validity of the session after the authentication:&lt;br /&gt;
&lt;br /&gt;
# The browser sends initial request to the Open-Xchange server. The client represented by the application:&lt;br /&gt;
## is not authenticated yet&lt;br /&gt;
## has no cookie&lt;br /&gt;
## has no session ID.&lt;br /&gt;
# Open-Xchange server sends an AJAX application to browser.  The application is loaded into the browser and no data is exchanged between server and application.&lt;br /&gt;
# The AJAX application then will try to do an auto-login. Because the application has no knowledge of the cookies that may already be stored in the browser it will try to login the client. For further information on auto-login see [[OXSessionAutologin]]. With the precondition form 1. the auto-login try will be denied.&lt;br /&gt;
# The user enters username and password in the front-end.&lt;br /&gt;
# The username and password are sent to the server via JSON (SSL). If the user activated persistent auto-login on the login screen, this information is passed with the same request.&lt;br /&gt;
# The server authenticates the client and sends following data back to the browser via JSON (the data are saved in the session object):&lt;br /&gt;
## Session ID via JSON object&lt;br /&gt;
## (Optional) Random token for initial login via JSON object. For the random token to be send the server needs to be configured(see login.properties – com.openexchange.axaj.login.randomToken). CAUTION! The random token is deprecated and should no longer be used!&lt;br /&gt;
## Cookie with JSESSIONID. The JSESSIONID is set for loadbalancing to the browser&lt;br /&gt;
## Cookie containing the session secret. If persistent auto-login is selected, the cookie is configured with the relevant type and validity.&lt;br /&gt;
## Cookie containing the public identifier.&lt;br /&gt;
# The AJAX front-end saves the session ID in its memory. (Optional)  Ignores the random token.&lt;br /&gt;
# If the persistent auto-login is enabled the AJAX front-end will send a store request. If no error occurs a configured cookie with the relevant type and validity containing the session ID is set to the browser. &lt;br /&gt;
# The AJAX front-end sends initial data request via JSON to the Open-Xchange server and provides the session ID as an URL parameter. The secret is send along as a cookie.&lt;br /&gt;
# The Open-Xchange server processes this data request and compares:&lt;br /&gt;
## Session ID for validity in sessiond&lt;br /&gt;
## Session-Secret from the cookie for validity with session&lt;br /&gt;
# The request is correctly authenticated and is answered by the server.&lt;br /&gt;
# (Optional) Random token is discarded after timeout from sessiond.&lt;br /&gt;
# Repeat 9. - 11. until end of session&lt;br /&gt;
&lt;br /&gt;
If the user does not use the persistent auto-login, the session is only valid as long as the browser is opened. It will be cleared either on logout, on  browser termination or with any occurring error.&lt;br /&gt;
&lt;br /&gt;
For any details on the requests and responses please visit the [https://documentation.open-xchange.com/latest/middleware/http-api-gen/#_login_resource Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
==Access via web browser after authentication with external system==&lt;br /&gt;
The goal is to authenticate in the Open-Xchange system through an external system and to safely pass on the received session data to a browser. To do so the external system has to know the user data (username, password) in plain text. &lt;br /&gt;
&lt;br /&gt;
The process is based on the session initialization in the Open-Xchange Server via the JSON interface and on passing on the received data to a browser. The browser finally initializes the session with an additional random token that is only valid for one single access. &lt;br /&gt;
#	External tool sends initial JSON request directly to Open-Xchange Server&lt;br /&gt;
##	not authenticated yet&lt;br /&gt;
##	no cookie&lt;br /&gt;
##	no SessionID&lt;br /&gt;
#	The Open-Xchange Server authenticates and delivers back following data to external tool via JSON (all the data are stored in the session object in sessiond)&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Random token for initial login via JSON object (required for SSO login)&lt;br /&gt;
##	Cookie with Session-Secret is not set&lt;br /&gt;
#	External tool starts browser with special URL, that contains at least following data:&lt;br /&gt;
##	Random token for initial login&lt;br /&gt;
#	Open-Xchange Server compares:&lt;br /&gt;
##	Random token for validity in sessiond&lt;br /&gt;
#	Open-Xchange Server sends to the browser:&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Cookie with JSESSIONID for loadbalancing is set to the browser&lt;br /&gt;
#	The second part of the tokens is delivered in a separate request&lt;br /&gt;
##	Cookie with Session-Secret is set to the browser If persistent auto-login is selected, the cookie is configured with the relevant type and validity&lt;br /&gt;
#	Open-Xchange removes random token from sessiond.&lt;br /&gt;
&lt;br /&gt;
Then the process continues as described in the section above. The session is then verified with the SessionID and Session-Secret.&lt;br /&gt;
&lt;br /&gt;
==Token Login==&lt;br /&gt;
A dedicated login action (tokenLogin) is used to acquire a server token bound to a given client token. The combination of these tokens allows another client to gain a valid session. This Login is intended to replace the random token login. With this method there is no request or response containing all necessary information to create a valid session.&lt;br /&gt;
&lt;br /&gt;
==Form Login==&lt;br /&gt;
The Form Login provides a simple way of accessing the web frontend just by using standard HTML forms. The response contains a redirect link to the Web-UI. See [[OXSessionFormLogin]] for details.&lt;br /&gt;
&lt;br /&gt;
==Redeem Token Login==&lt;br /&gt;
With a valid session it is possible to acquire a secret. Using this secret another system is able to generate a valid session.&lt;br /&gt;
This session may also contain the users password (configurable). The system in question needs to be registered at the server and has to identify itself with a key configured at the open-xchange server. This is only for internal communication and by default no keys are available.&lt;br /&gt;
&lt;br /&gt;
== Authentication against other services ==&lt;br /&gt;
OX6 and AppSuite allow authentication using other services, too. This is not in the scope of this article. The Services team is available to build plugins for such services. Some standard ones are already implemented, see the following articles for that:&lt;br /&gt;
* [[Authentication IMAP Plugin description]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:OX6]]&lt;br /&gt;
[[Category:AppSuite]]&lt;br /&gt;
[[Category:Auth]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22448</id>
		<title>Login variations</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22448"/>
		<updated>2016-10-14T07:52:05Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: /* Only one cookie per client session type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Login variations&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction:&#039;&#039;&#039; This paper describes Open-Xchanges&#039;s authentication and session handling. It gives an overview of all available mechanisms and on how to safely pass on sessions from external applications to the Open-Xchange Server (Single Sign On, SSO).&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The Open-Xchange Server web front-end is implemented in AJAX (Asynchronous JavaScript and XML). Thus the complete user interface (GUI) is running in a browser. Opposed to standard web applications there are no HTML pages generated and delivered by the browser.&lt;br /&gt;
&lt;br /&gt;
The complete user front-end is rendered and displayed in the browser. Based on HTTP/S  the data are exchanged with the server via JavaScript Object Notation (JSON). That means it is not possible to simulate front-end actions  via HTTP/S request by simulating respectively formatted GET/POST calls. Instead, another abstraction is taking place that exclusively transfers data from GUI to server and vice versa.&lt;br /&gt;
&lt;br /&gt;
The Open-Xchange Server includes a session daemon (sessiond) that keeps the current data of a logged in user. If successfully authenticated the information kept in the session are sufficient for accessing the Open-Xchange Server.&lt;br /&gt;
&lt;br /&gt;
==Access to IMAP Back-End services==&lt;br /&gt;
To access external E-Mail systems (IMAP/SMTP) the Open-Xchange Server has to know the credentials of the current user for the system, i. e. the session object has to keep the respective password for the access in plain text. That means authenticating via SessionIDs alone is not sufficient. Authentication always has to take place by entering the username and password.&lt;br /&gt;
&lt;br /&gt;
(There are two exceptions: either if one master password is used for all IMAP accounts, or if a very special implementation of MAL is used, which does not need a password.)&lt;br /&gt;
&lt;br /&gt;
==Basic Implementation Rules==&lt;br /&gt;
* It must not be possible to get a valid session by e. g. guessing a SessionID. This is especially important when being passed on by an external system&lt;br /&gt;
* A session must not be verified by a single SessionID only, but has to compare at least two different data types, this is what the Session-Secret is for&lt;br /&gt;
* Both SessionID and Session-Secret must never be passed from the Open-Xchange server to the client in the same request. This ensures, that potential issues in the stack between the client and Open-Xchange (proxies, caches, loadbalancer, Apache, …) can not lead to wrong sessions &lt;br /&gt;
* To enhance security Session-Secret and SessionID are transferred as different data types. The Session-Secret will always be transferred as a cookie, the SessionID will be transferred as URL parameter if persistent auto-login is not activated for this session.&lt;br /&gt;
* It must never be possible to have conflicting session information per client (multiple cookies) within the same cookie store&lt;br /&gt;
* If any error in the session handling is detected, the relevant request is discarded and logged. It is not tried to fix the issue&lt;br /&gt;
* In memory data (SessionID) of the browser GUI must never be changed during a valid session&lt;br /&gt;
* All relevant information regarding session management must always be written to the relevant logfiles&lt;br /&gt;
* The whole mechanism is only secure when being used via encrypted connection&lt;br /&gt;
* ATTENTION: If persistent autologin is activated for the system and a user decided to use it, all information necessary to access the Open-Xchange server is stored within the browsers cookie store.  This means, that the security of the whole system depends on the level of security of the browsers cookie store&lt;br /&gt;
&lt;br /&gt;
== Authentication and Session Tokens ==&lt;br /&gt;
Following tokens are used for the session management:&lt;br /&gt;
&lt;br /&gt;
=== SessionID ===&lt;br /&gt;
The SessionID is used to identify every session. It is a UUID, generated by the backend via default Java UUID implementation. It is written into the OX logfiles for every log message. When no auto-login is used for the session, then the SessionID is transferred as an URL parameter. If auto-login is activated, then the SessionID is transferred as a cookie.&lt;br /&gt;
&lt;br /&gt;
=== Session-Secret ===&lt;br /&gt;
The Session-Secret is used to verify every session. It is a UUID, generated by the backend via default Java UUID implementation. Only accesses, where the Session-Secret matches with the one stored in SessionD for the given SessionID are valid. Mismatches lead to immediate session termination.&lt;br /&gt;
&lt;br /&gt;
=== Public Session ===&lt;br /&gt;
The public Session is used as a replacement for the SessionID. It is a UUID, generated by the backend via default Java UUID implementation. The Public Session is transferred as a cookie. Using the Public Session is limited to some non critical requests. By using this cookie instead of a request parameter, the browser is able to cache the response of special requests (e.g. contact images).&lt;br /&gt;
&lt;br /&gt;
=== Random ===&lt;br /&gt;
The Random-Token is a one time token with a limited lifetime, which is used to initiate sessions through 3rd party applications or websites. It is a UUID, generated by the backend via default Java UUID implementation. This token is deprecated and subject to change.&lt;br /&gt;
&lt;br /&gt;
=== Cookie Handling ===&lt;br /&gt;
In several situations, cookies are used to store and transfer the session tokens. The following rules for cookie creation and storage apply.&lt;br /&gt;
&lt;br /&gt;
==== Only one cookie per client session type ====&lt;br /&gt;
It must never happen, that the same client has more than one session associated with an Open-Xchange server. Therefore the cookies need to have the same name. If a new cookie is set to the browser, the original one will be overwritten. With the next client access either the SessionID or the Session-Secret do not match anymore and the invalid session is terminated.&lt;br /&gt;
Multiple clients with same cookie store.&lt;br /&gt;
&lt;br /&gt;
On the other hand it may happen, that several clients use the same cookie store. E.g. a standard browser GUI session and a browser plugin session. Therefore the cookie name needs to contain informations about the client.&lt;br /&gt;
&lt;br /&gt;
==== Naming of cookies ====&lt;br /&gt;
The cookies are named following this schema:&lt;br /&gt;
&lt;br /&gt;
  open-xchange-session-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;SessionID&amp;gt;&amp;gt;&lt;br /&gt;
  open-xchange-secret-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;Session-Secret&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;&amp;lt;name token&amp;gt;&amp;gt; is generated from configurable data associated with the client. It is a md5-hash build from the client-id and the User-Agent is used to identify the client. Other parameters can be added through a configuration file. If a request is performed by a browser with an invalid hash the corresponding cookies and session are invalidated.&lt;br /&gt;
&lt;br /&gt;
====Lifetime of cookies====&lt;br /&gt;
Normally, cookies are session cookies, which get invalid/deleted when the browser is shut down. &lt;br /&gt;
Using the persistent auto-login, the cookies are persistent cookies, with a configurable default. The default lifetime is one week.&lt;br /&gt;
&lt;br /&gt;
All cookies get deleted when a logout is performed.&lt;br /&gt;
&lt;br /&gt;
==IP Check==&lt;br /&gt;
Per default an IP check is activated to terminate every session immediately, if the IP address of the client changes during the session lifetime. This check is not processed, when a session is reactivated following the persistent auto-login process.&lt;br /&gt;
There are several configuration options to enable, disable the IP Check and to define IP Ranges to omit the check and/or accept recurring connections from within these ranges.&lt;br /&gt;
&lt;br /&gt;
==Access via web browser with user credentials==&lt;br /&gt;
When directly logging in to the system by entering the credentials, following steps will be done to authenticate the user or verify the validity of the session after the authentication:&lt;br /&gt;
&lt;br /&gt;
# The browser sends initial request to the Open-Xchange server. The client represented by the application:&lt;br /&gt;
## is not authenticated yet&lt;br /&gt;
## has no cookie&lt;br /&gt;
## has no session ID.&lt;br /&gt;
# Open-Xchange server sends an AJAX application to browser.  The application is loaded into the browser and no data is exchanged between server and application.&lt;br /&gt;
# The AJAX application then will try to do an auto-login. Because the application has no knowledge of the cookies that may already be stored in the browser it will try to login the client. For further information on auto-login see [[OXSessionAutologin]]. With the precondition form 1. the auto-login try will be denied.&lt;br /&gt;
# The user enters username and password in the front-end.&lt;br /&gt;
# The username and password are sent to the server via JSON (SSL). If the user activated persistent auto-login on the login screen, this information is passed with the same request.&lt;br /&gt;
# The server authenticates the client and sends following data back to the browser via JSON (the data are saved in the session object):&lt;br /&gt;
## Session ID via JSON object&lt;br /&gt;
## (Optional) Random token for initial login via JSON object. For the random token to be send the server needs to be configured(see login.properties – com.openexchange.axaj.login.randomToken). CAUTION! The random token is deprecated and should no longer be used!&lt;br /&gt;
## Cookie with JSESSIONID. The JSESSIONID is set for loadbalancing to the browser&lt;br /&gt;
## Cookie containing the session secret. If persistent auto-login is selected, the cookie is configured with the relevant type and validity.&lt;br /&gt;
## Cookie containing the public identifier.&lt;br /&gt;
# The AJAX front-end saves the session ID in its memory. (Optional)  Ignores the random token.&lt;br /&gt;
# If the persistent auto-login is enabled the AJAX front-end will send a store request. If no error occurs a configured cookie with the relevant type and validity containing the session ID is set to the browser. &lt;br /&gt;
# The AJAX front-end sends initial data request via JSON to the Open-Xchange server and provides the session ID as an URL parameter. The secret is send along as a cookie.&lt;br /&gt;
# The Open-Xchange server processes this data request and compares:&lt;br /&gt;
## Session ID for validity in sessiond&lt;br /&gt;
## Session-Secret from the cookie for validity with session&lt;br /&gt;
# The request is correctly authenticated and is answered by the server.&lt;br /&gt;
# (Optional) Random token is discarded after timeout from sessiond.&lt;br /&gt;
# Repeat 9. - 11. until end of session&lt;br /&gt;
&lt;br /&gt;
If the user does not use the persistent auto-login, the session is only valid as long as the browser is opened. It will be cleared either on logout, on  browser termination or with any occurring error.&lt;br /&gt;
&lt;br /&gt;
For any details on the requests and responses please visit the [https://documentation.open-xchange.com/latest/middleware/http-api-gen/#_login_resource Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
==Access via web browser after authentication with external system==&lt;br /&gt;
The goal is to authenticate in the Open-Xchange system through an external system and to safely pass on the received session data to a browser. To do so the external system has to know the user data (username, password) in plain text. &lt;br /&gt;
&lt;br /&gt;
The process is based on the session initialization in the Open-Xchange Server via the JSON interface and on passing on the received data to a browser. The browser finally initializes the session with an additional random token that is only valid for one single access. &lt;br /&gt;
#	External tool sends initial JSON request directly to Open-Xchange Server&lt;br /&gt;
##	not authenticated yet&lt;br /&gt;
##	no cookie&lt;br /&gt;
##	no SessionID&lt;br /&gt;
#	The Open-Xchange Server authenticates and delivers back following data to external tool via JSON (all the data are stored in the session object in sessiond)&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Random token for initial login via JSON object (required for SSO login)&lt;br /&gt;
##	Cookie with Session-Secret is not set&lt;br /&gt;
#	External tool starts browser with special URL, that contains at least following data:&lt;br /&gt;
##	Random token for initial login&lt;br /&gt;
#	Open-Xchange Server compares:&lt;br /&gt;
##	Random token for validity in sessiond&lt;br /&gt;
#	Open-Xchange Server sends to the browser:&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Cookie with JSESSIONID for loadbalancing is set to the browser&lt;br /&gt;
#	The second part of the tokens is delivered in a separate request&lt;br /&gt;
##	Cookie with Session-Secret is set to the browser If persistent auto-login is selected, the cookie is configured with the relevant type and validity&lt;br /&gt;
#	Open-Xchange removes random token from sessiond.&lt;br /&gt;
&lt;br /&gt;
Then the process continues as described in the section above. The session is then verified with the SessionID and Session-Secret.&lt;br /&gt;
&lt;br /&gt;
==Token Login==&lt;br /&gt;
A dedicated login action (tokenLogin) is used to acquire a server token bound to a given client token. The combination of these tokens allows another client to gain a valid session. This Login is intended to replace the random token login. With this method there is no request or response containing all necessary information to create a valid session.&lt;br /&gt;
&lt;br /&gt;
==Form Login==&lt;br /&gt;
The Form Login provides a simple way of accessing the web frontend just by using standard HTML forms. The response contains a redirect link to the Web-UI. See [[OXSessionFormLogin]] for details.&lt;br /&gt;
&lt;br /&gt;
==Redeem Token Login==&lt;br /&gt;
With a valid session it is possible to acquire a secret. Using this secret another system is able to generate a valid session.&lt;br /&gt;
This session may also contain the users password (configurable). The system in question needs to be registered at the server and has to identify itself with a key configured at the open-xchange server. This is only for internal communication and by default no keys are available.&lt;br /&gt;
&lt;br /&gt;
== Authentication against other services ==&lt;br /&gt;
OX6 and AppSuite allow authentication using other services, too. This is not in the scope of this article. The Services team is available to build plugins for such services. Some standard ones are already implemented, see the following articles for that:&lt;br /&gt;
* [[Authentication IMAP Plugin description]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:OX6]]&lt;br /&gt;
[[Category:AppSuite]]&lt;br /&gt;
[[Category:Auth]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22447</id>
		<title>Login variations</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22447"/>
		<updated>2016-10-14T07:48:41Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: /* Lifetime of cookies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Login variations&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction:&#039;&#039;&#039; This paper describes Open-Xchanges&#039;s authentication and session handling. It gives an overview of all available mechanisms and on how to safely pass on sessions from external applications to the Open-Xchange Server (Single Sign On, SSO).&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The Open-Xchange Server web front-end is implemented in AJAX (Asynchronous JavaScript and XML). Thus the complete user interface (GUI) is running in a browser. Opposed to standard web applications there are no HTML pages generated and delivered by the browser.&lt;br /&gt;
&lt;br /&gt;
The complete user front-end is rendered and displayed in the browser. Based on HTTP/S  the data are exchanged with the server via JavaScript Object Notation (JSON). That means it is not possible to simulate front-end actions  via HTTP/S request by simulating respectively formatted GET/POST calls. Instead, another abstraction is taking place that exclusively transfers data from GUI to server and vice versa.&lt;br /&gt;
&lt;br /&gt;
The Open-Xchange Server includes a session daemon (sessiond) that keeps the current data of a logged in user. If successfully authenticated the information kept in the session are sufficient for accessing the Open-Xchange Server.&lt;br /&gt;
&lt;br /&gt;
==Access to IMAP Back-End services==&lt;br /&gt;
To access external E-Mail systems (IMAP/SMTP) the Open-Xchange Server has to know the credentials of the current user for the system, i. e. the session object has to keep the respective password for the access in plain text. That means authenticating via SessionIDs alone is not sufficient. Authentication always has to take place by entering the username and password.&lt;br /&gt;
&lt;br /&gt;
(There are two exceptions: either if one master password is used for all IMAP accounts, or if a very special implementation of MAL is used, which does not need a password.)&lt;br /&gt;
&lt;br /&gt;
==Basic Implementation Rules==&lt;br /&gt;
* It must not be possible to get a valid session by e. g. guessing a SessionID. This is especially important when being passed on by an external system&lt;br /&gt;
* A session must not be verified by a single SessionID only, but has to compare at least two different data types, this is what the Session-Secret is for&lt;br /&gt;
* Both SessionID and Session-Secret must never be passed from the Open-Xchange server to the client in the same request. This ensures, that potential issues in the stack between the client and Open-Xchange (proxies, caches, loadbalancer, Apache, …) can not lead to wrong sessions &lt;br /&gt;
* To enhance security Session-Secret and SessionID are transferred as different data types. The Session-Secret will always be transferred as a cookie, the SessionID will be transferred as URL parameter if persistent auto-login is not activated for this session.&lt;br /&gt;
* It must never be possible to have conflicting session information per client (multiple cookies) within the same cookie store&lt;br /&gt;
* If any error in the session handling is detected, the relevant request is discarded and logged. It is not tried to fix the issue&lt;br /&gt;
* In memory data (SessionID) of the browser GUI must never be changed during a valid session&lt;br /&gt;
* All relevant information regarding session management must always be written to the relevant logfiles&lt;br /&gt;
* The whole mechanism is only secure when being used via encrypted connection&lt;br /&gt;
* ATTENTION: If persistent autologin is activated for the system and a user decided to use it, all information necessary to access the Open-Xchange server is stored within the browsers cookie store.  This means, that the security of the whole system depends on the level of security of the browsers cookie store&lt;br /&gt;
&lt;br /&gt;
== Authentication and Session Tokens ==&lt;br /&gt;
Following tokens are used for the session management:&lt;br /&gt;
&lt;br /&gt;
=== SessionID ===&lt;br /&gt;
The SessionID is used to identify every session. It is a UUID, generated by the backend via default Java UUID implementation. It is written into the OX logfiles for every log message. When no auto-login is used for the session, then the SessionID is transferred as an URL parameter. If auto-login is activated, then the SessionID is transferred as a cookie.&lt;br /&gt;
&lt;br /&gt;
=== Session-Secret ===&lt;br /&gt;
The Session-Secret is used to verify every session. It is a UUID, generated by the backend via default Java UUID implementation. Only accesses, where the Session-Secret matches with the one stored in SessionD for the given SessionID are valid. Mismatches lead to immediate session termination.&lt;br /&gt;
&lt;br /&gt;
=== Public Session ===&lt;br /&gt;
The public Session is used as a replacement for the SessionID. It is a UUID, generated by the backend via default Java UUID implementation. The Public Session is transferred as a cookie. Using the Public Session is limited to some non critical requests. By using this cookie instead of a request parameter, the browser is able to cache the response of special requests (e.g. contact images).&lt;br /&gt;
&lt;br /&gt;
=== Random ===&lt;br /&gt;
The Random-Token is a one time token with a limited lifetime, which is used to initiate sessions through 3rd party applications or websites. It is a UUID, generated by the backend via default Java UUID implementation. This token is deprecated and subject to change.&lt;br /&gt;
&lt;br /&gt;
=== Cookie Handling ===&lt;br /&gt;
In several situations, cookies are used to store and transfer the session tokens. The following rules for cookie creation and storage apply.&lt;br /&gt;
&lt;br /&gt;
==== Only one cookie per client session type ====&lt;br /&gt;
It must never happen, that the same client has more than one session associated with an Open-Xchange server. Therefore the cookies need to have the same name. If a new cookie is set to the browser, the original one will be overwritten. With the next client access either the SessionID or the Session-Secret do not match anymore and the invalid session is terminated.&lt;br /&gt;
Multiple clients with same cookie store&lt;br /&gt;
&lt;br /&gt;
On the other hand it may happen, that several clients use the same cookie store. E.g. a standard browser GUI session and a browser plugin session. Therefore the cookie name needs to contain informations about the client.&lt;br /&gt;
&lt;br /&gt;
==== Naming of cookies ====&lt;br /&gt;
The cookies are named following this schema:&lt;br /&gt;
&lt;br /&gt;
  open-xchange-session-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;SessionID&amp;gt;&amp;gt;&lt;br /&gt;
  open-xchange-secret-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;Session-Secret&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;&amp;lt;name token&amp;gt;&amp;gt; is generated from configurable data associated with the client. It is a md5-hash build from the client-id and the User-Agent is used to identify the client. Other parameters can be added through a configuration file. If a request is performed by a browser with an invalid hash the corresponding cookies and session are invalidated.&lt;br /&gt;
&lt;br /&gt;
====Lifetime of cookies====&lt;br /&gt;
Normally, cookies are session cookies, which get invalid/deleted when the browser is shut down. &lt;br /&gt;
Using the persistent auto-login, the cookies are persistent cookies, with a configurable default. The default lifetime is one week.&lt;br /&gt;
&lt;br /&gt;
All cookies get deleted when a logout is performed.&lt;br /&gt;
&lt;br /&gt;
==IP Check==&lt;br /&gt;
Per default an IP check is activated to terminate every session immediately, if the IP address of the client changes during the session lifetime. This check is not processed, when a session is reactivated following the persistent auto-login process.&lt;br /&gt;
There are several configuration options to enable, disable the IP Check and to define IP Ranges to omit the check and/or accept recurring connections from within these ranges.&lt;br /&gt;
&lt;br /&gt;
==Access via web browser with user credentials==&lt;br /&gt;
When directly logging in to the system by entering the credentials, following steps will be done to authenticate the user or verify the validity of the session after the authentication:&lt;br /&gt;
&lt;br /&gt;
# The browser sends initial request to the Open-Xchange server. The client represented by the application:&lt;br /&gt;
## is not authenticated yet&lt;br /&gt;
## has no cookie&lt;br /&gt;
## has no session ID.&lt;br /&gt;
# Open-Xchange server sends an AJAX application to browser.  The application is loaded into the browser and no data is exchanged between server and application.&lt;br /&gt;
# The AJAX application then will try to do an auto-login. Because the application has no knowledge of the cookies that may already be stored in the browser it will try to login the client. For further information on auto-login see [[OXSessionAutologin]]. With the precondition form 1. the auto-login try will be denied.&lt;br /&gt;
# The user enters username and password in the front-end.&lt;br /&gt;
# The username and password are sent to the server via JSON (SSL). If the user activated persistent auto-login on the login screen, this information is passed with the same request.&lt;br /&gt;
# The server authenticates the client and sends following data back to the browser via JSON (the data are saved in the session object):&lt;br /&gt;
## Session ID via JSON object&lt;br /&gt;
## (Optional) Random token for initial login via JSON object. For the random token to be send the server needs to be configured(see login.properties – com.openexchange.axaj.login.randomToken). CAUTION! The random token is deprecated and should no longer be used!&lt;br /&gt;
## Cookie with JSESSIONID. The JSESSIONID is set for loadbalancing to the browser&lt;br /&gt;
## Cookie containing the session secret. If persistent auto-login is selected, the cookie is configured with the relevant type and validity.&lt;br /&gt;
## Cookie containing the public identifier.&lt;br /&gt;
# The AJAX front-end saves the session ID in its memory. (Optional)  Ignores the random token.&lt;br /&gt;
# If the persistent auto-login is enabled the AJAX front-end will send a store request. If no error occurs a configured cookie with the relevant type and validity containing the session ID is set to the browser. &lt;br /&gt;
# The AJAX front-end sends initial data request via JSON to the Open-Xchange server and provides the session ID as an URL parameter. The secret is send along as a cookie.&lt;br /&gt;
# The Open-Xchange server processes this data request and compares:&lt;br /&gt;
## Session ID for validity in sessiond&lt;br /&gt;
## Session-Secret from the cookie for validity with session&lt;br /&gt;
# The request is correctly authenticated and is answered by the server.&lt;br /&gt;
# (Optional) Random token is discarded after timeout from sessiond.&lt;br /&gt;
# Repeat 9. - 11. until end of session&lt;br /&gt;
&lt;br /&gt;
If the user does not use the persistent auto-login, the session is only valid as long as the browser is opened. It will be cleared either on logout, on  browser termination or with any occurring error.&lt;br /&gt;
&lt;br /&gt;
For any details on the requests and responses please visit the [https://documentation.open-xchange.com/latest/middleware/http-api-gen/#_login_resource Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
==Access via web browser after authentication with external system==&lt;br /&gt;
The goal is to authenticate in the Open-Xchange system through an external system and to safely pass on the received session data to a browser. To do so the external system has to know the user data (username, password) in plain text. &lt;br /&gt;
&lt;br /&gt;
The process is based on the session initialization in the Open-Xchange Server via the JSON interface and on passing on the received data to a browser. The browser finally initializes the session with an additional random token that is only valid for one single access. &lt;br /&gt;
#	External tool sends initial JSON request directly to Open-Xchange Server&lt;br /&gt;
##	not authenticated yet&lt;br /&gt;
##	no cookie&lt;br /&gt;
##	no SessionID&lt;br /&gt;
#	The Open-Xchange Server authenticates and delivers back following data to external tool via JSON (all the data are stored in the session object in sessiond)&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Random token for initial login via JSON object (required for SSO login)&lt;br /&gt;
##	Cookie with Session-Secret is not set&lt;br /&gt;
#	External tool starts browser with special URL, that contains at least following data:&lt;br /&gt;
##	Random token for initial login&lt;br /&gt;
#	Open-Xchange Server compares:&lt;br /&gt;
##	Random token for validity in sessiond&lt;br /&gt;
#	Open-Xchange Server sends to the browser:&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Cookie with JSESSIONID for loadbalancing is set to the browser&lt;br /&gt;
#	The second part of the tokens is delivered in a separate request&lt;br /&gt;
##	Cookie with Session-Secret is set to the browser If persistent auto-login is selected, the cookie is configured with the relevant type and validity&lt;br /&gt;
#	Open-Xchange removes random token from sessiond.&lt;br /&gt;
&lt;br /&gt;
Then the process continues as described in the section above. The session is then verified with the SessionID and Session-Secret.&lt;br /&gt;
&lt;br /&gt;
==Token Login==&lt;br /&gt;
A dedicated login action (tokenLogin) is used to acquire a server token bound to a given client token. The combination of these tokens allows another client to gain a valid session. This Login is intended to replace the random token login. With this method there is no request or response containing all necessary information to create a valid session.&lt;br /&gt;
&lt;br /&gt;
==Form Login==&lt;br /&gt;
The Form Login provides a simple way of accessing the web frontend just by using standard HTML forms. The response contains a redirect link to the Web-UI. See [[OXSessionFormLogin]] for details.&lt;br /&gt;
&lt;br /&gt;
==Redeem Token Login==&lt;br /&gt;
With a valid session it is possible to acquire a secret. Using this secret another system is able to generate a valid session.&lt;br /&gt;
This session may also contain the users password (configurable). The system in question needs to be registered at the server and has to identify itself with a key configured at the open-xchange server. This is only for internal communication and by default no keys are available.&lt;br /&gt;
&lt;br /&gt;
== Authentication against other services ==&lt;br /&gt;
OX6 and AppSuite allow authentication using other services, too. This is not in the scope of this article. The Services team is available to build plugins for such services. Some standard ones are already implemented, see the following articles for that:&lt;br /&gt;
* [[Authentication IMAP Plugin description]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:OX6]]&lt;br /&gt;
[[Category:AppSuite]]&lt;br /&gt;
[[Category:Auth]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22446</id>
		<title>Login variations</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22446"/>
		<updated>2016-10-14T07:48:33Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: /* Naming of cookies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Login variations&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction:&#039;&#039;&#039; This paper describes Open-Xchanges&#039;s authentication and session handling. It gives an overview of all available mechanisms and on how to safely pass on sessions from external applications to the Open-Xchange Server (Single Sign On, SSO).&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The Open-Xchange Server web front-end is implemented in AJAX (Asynchronous JavaScript and XML). Thus the complete user interface (GUI) is running in a browser. Opposed to standard web applications there are no HTML pages generated and delivered by the browser.&lt;br /&gt;
&lt;br /&gt;
The complete user front-end is rendered and displayed in the browser. Based on HTTP/S  the data are exchanged with the server via JavaScript Object Notation (JSON). That means it is not possible to simulate front-end actions  via HTTP/S request by simulating respectively formatted GET/POST calls. Instead, another abstraction is taking place that exclusively transfers data from GUI to server and vice versa.&lt;br /&gt;
&lt;br /&gt;
The Open-Xchange Server includes a session daemon (sessiond) that keeps the current data of a logged in user. If successfully authenticated the information kept in the session are sufficient for accessing the Open-Xchange Server.&lt;br /&gt;
&lt;br /&gt;
==Access to IMAP Back-End services==&lt;br /&gt;
To access external E-Mail systems (IMAP/SMTP) the Open-Xchange Server has to know the credentials of the current user for the system, i. e. the session object has to keep the respective password for the access in plain text. That means authenticating via SessionIDs alone is not sufficient. Authentication always has to take place by entering the username and password.&lt;br /&gt;
&lt;br /&gt;
(There are two exceptions: either if one master password is used for all IMAP accounts, or if a very special implementation of MAL is used, which does not need a password.)&lt;br /&gt;
&lt;br /&gt;
==Basic Implementation Rules==&lt;br /&gt;
* It must not be possible to get a valid session by e. g. guessing a SessionID. This is especially important when being passed on by an external system&lt;br /&gt;
* A session must not be verified by a single SessionID only, but has to compare at least two different data types, this is what the Session-Secret is for&lt;br /&gt;
* Both SessionID and Session-Secret must never be passed from the Open-Xchange server to the client in the same request. This ensures, that potential issues in the stack between the client and Open-Xchange (proxies, caches, loadbalancer, Apache, …) can not lead to wrong sessions &lt;br /&gt;
* To enhance security Session-Secret and SessionID are transferred as different data types. The Session-Secret will always be transferred as a cookie, the SessionID will be transferred as URL parameter if persistent auto-login is not activated for this session.&lt;br /&gt;
* It must never be possible to have conflicting session information per client (multiple cookies) within the same cookie store&lt;br /&gt;
* If any error in the session handling is detected, the relevant request is discarded and logged. It is not tried to fix the issue&lt;br /&gt;
* In memory data (SessionID) of the browser GUI must never be changed during a valid session&lt;br /&gt;
* All relevant information regarding session management must always be written to the relevant logfiles&lt;br /&gt;
* The whole mechanism is only secure when being used via encrypted connection&lt;br /&gt;
* ATTENTION: If persistent autologin is activated for the system and a user decided to use it, all information necessary to access the Open-Xchange server is stored within the browsers cookie store.  This means, that the security of the whole system depends on the level of security of the browsers cookie store&lt;br /&gt;
&lt;br /&gt;
== Authentication and Session Tokens ==&lt;br /&gt;
Following tokens are used for the session management:&lt;br /&gt;
&lt;br /&gt;
=== SessionID ===&lt;br /&gt;
The SessionID is used to identify every session. It is a UUID, generated by the backend via default Java UUID implementation. It is written into the OX logfiles for every log message. When no auto-login is used for the session, then the SessionID is transferred as an URL parameter. If auto-login is activated, then the SessionID is transferred as a cookie.&lt;br /&gt;
&lt;br /&gt;
=== Session-Secret ===&lt;br /&gt;
The Session-Secret is used to verify every session. It is a UUID, generated by the backend via default Java UUID implementation. Only accesses, where the Session-Secret matches with the one stored in SessionD for the given SessionID are valid. Mismatches lead to immediate session termination.&lt;br /&gt;
&lt;br /&gt;
=== Public Session ===&lt;br /&gt;
The public Session is used as a replacement for the SessionID. It is a UUID, generated by the backend via default Java UUID implementation. The Public Session is transferred as a cookie. Using the Public Session is limited to some non critical requests. By using this cookie instead of a request parameter, the browser is able to cache the response of special requests (e.g. contact images).&lt;br /&gt;
&lt;br /&gt;
=== Random ===&lt;br /&gt;
The Random-Token is a one time token with a limited lifetime, which is used to initiate sessions through 3rd party applications or websites. It is a UUID, generated by the backend via default Java UUID implementation. This token is deprecated and subject to change.&lt;br /&gt;
&lt;br /&gt;
=== Cookie Handling ===&lt;br /&gt;
In several situations, cookies are used to store and transfer the session tokens. The following rules for cookie creation and storage apply.&lt;br /&gt;
&lt;br /&gt;
==== Only one cookie per client session type ====&lt;br /&gt;
It must never happen, that the same client has more than one session associated with an Open-Xchange server. Therefore the cookies need to have the same name. If a new cookie is set to the browser, the original one will be overwritten. With the next client access either the SessionID or the Session-Secret do not match anymore and the invalid session is terminated.&lt;br /&gt;
Multiple clients with same cookie store&lt;br /&gt;
&lt;br /&gt;
On the other hand it may happen, that several clients use the same cookie store. E.g. a standard browser GUI session and a browser plugin session. Therefore the cookie name needs to contain informations about the client.&lt;br /&gt;
&lt;br /&gt;
==== Naming of cookies ====&lt;br /&gt;
The cookies are named following this schema:&lt;br /&gt;
&lt;br /&gt;
  open-xchange-session-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;SessionID&amp;gt;&amp;gt;&lt;br /&gt;
  open-xchange-secret-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;Session-Secret&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;&amp;lt;name token&amp;gt;&amp;gt; is generated from configurable data associated with the client. It is a md5-hash build from the client-id and the User-Agent is used to identify the client. Other parameters can be added through a configuration file. If a request is performed by a browser with an invalid hash the corresponding cookies and session are invalidated.&lt;br /&gt;
&lt;br /&gt;
===Lifetime of cookies===&lt;br /&gt;
Normally, cookies are session cookies, which get invalid/deleted when the browser is shut down. &lt;br /&gt;
Using the persistent auto-login, the cookies are persistent cookies, with a configurable default. The default lifetime is one week.&lt;br /&gt;
&lt;br /&gt;
All cookies get deleted when a logout is performed.&lt;br /&gt;
&lt;br /&gt;
==IP Check==&lt;br /&gt;
Per default an IP check is activated to terminate every session immediately, if the IP address of the client changes during the session lifetime. This check is not processed, when a session is reactivated following the persistent auto-login process.&lt;br /&gt;
There are several configuration options to enable, disable the IP Check and to define IP Ranges to omit the check and/or accept recurring connections from within these ranges.&lt;br /&gt;
&lt;br /&gt;
==Access via web browser with user credentials==&lt;br /&gt;
When directly logging in to the system by entering the credentials, following steps will be done to authenticate the user or verify the validity of the session after the authentication:&lt;br /&gt;
&lt;br /&gt;
# The browser sends initial request to the Open-Xchange server. The client represented by the application:&lt;br /&gt;
## is not authenticated yet&lt;br /&gt;
## has no cookie&lt;br /&gt;
## has no session ID.&lt;br /&gt;
# Open-Xchange server sends an AJAX application to browser.  The application is loaded into the browser and no data is exchanged between server and application.&lt;br /&gt;
# The AJAX application then will try to do an auto-login. Because the application has no knowledge of the cookies that may already be stored in the browser it will try to login the client. For further information on auto-login see [[OXSessionAutologin]]. With the precondition form 1. the auto-login try will be denied.&lt;br /&gt;
# The user enters username and password in the front-end.&lt;br /&gt;
# The username and password are sent to the server via JSON (SSL). If the user activated persistent auto-login on the login screen, this information is passed with the same request.&lt;br /&gt;
# The server authenticates the client and sends following data back to the browser via JSON (the data are saved in the session object):&lt;br /&gt;
## Session ID via JSON object&lt;br /&gt;
## (Optional) Random token for initial login via JSON object. For the random token to be send the server needs to be configured(see login.properties – com.openexchange.axaj.login.randomToken). CAUTION! The random token is deprecated and should no longer be used!&lt;br /&gt;
## Cookie with JSESSIONID. The JSESSIONID is set for loadbalancing to the browser&lt;br /&gt;
## Cookie containing the session secret. If persistent auto-login is selected, the cookie is configured with the relevant type and validity.&lt;br /&gt;
## Cookie containing the public identifier.&lt;br /&gt;
# The AJAX front-end saves the session ID in its memory. (Optional)  Ignores the random token.&lt;br /&gt;
# If the persistent auto-login is enabled the AJAX front-end will send a store request. If no error occurs a configured cookie with the relevant type and validity containing the session ID is set to the browser. &lt;br /&gt;
# The AJAX front-end sends initial data request via JSON to the Open-Xchange server and provides the session ID as an URL parameter. The secret is send along as a cookie.&lt;br /&gt;
# The Open-Xchange server processes this data request and compares:&lt;br /&gt;
## Session ID for validity in sessiond&lt;br /&gt;
## Session-Secret from the cookie for validity with session&lt;br /&gt;
# The request is correctly authenticated and is answered by the server.&lt;br /&gt;
# (Optional) Random token is discarded after timeout from sessiond.&lt;br /&gt;
# Repeat 9. - 11. until end of session&lt;br /&gt;
&lt;br /&gt;
If the user does not use the persistent auto-login, the session is only valid as long as the browser is opened. It will be cleared either on logout, on  browser termination or with any occurring error.&lt;br /&gt;
&lt;br /&gt;
For any details on the requests and responses please visit the [https://documentation.open-xchange.com/latest/middleware/http-api-gen/#_login_resource Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
==Access via web browser after authentication with external system==&lt;br /&gt;
The goal is to authenticate in the Open-Xchange system through an external system and to safely pass on the received session data to a browser. To do so the external system has to know the user data (username, password) in plain text. &lt;br /&gt;
&lt;br /&gt;
The process is based on the session initialization in the Open-Xchange Server via the JSON interface and on passing on the received data to a browser. The browser finally initializes the session with an additional random token that is only valid for one single access. &lt;br /&gt;
#	External tool sends initial JSON request directly to Open-Xchange Server&lt;br /&gt;
##	not authenticated yet&lt;br /&gt;
##	no cookie&lt;br /&gt;
##	no SessionID&lt;br /&gt;
#	The Open-Xchange Server authenticates and delivers back following data to external tool via JSON (all the data are stored in the session object in sessiond)&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Random token for initial login via JSON object (required for SSO login)&lt;br /&gt;
##	Cookie with Session-Secret is not set&lt;br /&gt;
#	External tool starts browser with special URL, that contains at least following data:&lt;br /&gt;
##	Random token for initial login&lt;br /&gt;
#	Open-Xchange Server compares:&lt;br /&gt;
##	Random token for validity in sessiond&lt;br /&gt;
#	Open-Xchange Server sends to the browser:&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Cookie with JSESSIONID for loadbalancing is set to the browser&lt;br /&gt;
#	The second part of the tokens is delivered in a separate request&lt;br /&gt;
##	Cookie with Session-Secret is set to the browser If persistent auto-login is selected, the cookie is configured with the relevant type and validity&lt;br /&gt;
#	Open-Xchange removes random token from sessiond.&lt;br /&gt;
&lt;br /&gt;
Then the process continues as described in the section above. The session is then verified with the SessionID and Session-Secret.&lt;br /&gt;
&lt;br /&gt;
==Token Login==&lt;br /&gt;
A dedicated login action (tokenLogin) is used to acquire a server token bound to a given client token. The combination of these tokens allows another client to gain a valid session. This Login is intended to replace the random token login. With this method there is no request or response containing all necessary information to create a valid session.&lt;br /&gt;
&lt;br /&gt;
==Form Login==&lt;br /&gt;
The Form Login provides a simple way of accessing the web frontend just by using standard HTML forms. The response contains a redirect link to the Web-UI. See [[OXSessionFormLogin]] for details.&lt;br /&gt;
&lt;br /&gt;
==Redeem Token Login==&lt;br /&gt;
With a valid session it is possible to acquire a secret. Using this secret another system is able to generate a valid session.&lt;br /&gt;
This session may also contain the users password (configurable). The system in question needs to be registered at the server and has to identify itself with a key configured at the open-xchange server. This is only for internal communication and by default no keys are available.&lt;br /&gt;
&lt;br /&gt;
== Authentication against other services ==&lt;br /&gt;
OX6 and AppSuite allow authentication using other services, too. This is not in the scope of this article. The Services team is available to build plugins for such services. Some standard ones are already implemented, see the following articles for that:&lt;br /&gt;
* [[Authentication IMAP Plugin description]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:OX6]]&lt;br /&gt;
[[Category:AppSuite]]&lt;br /&gt;
[[Category:Auth]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22445</id>
		<title>Login variations</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22445"/>
		<updated>2016-10-14T07:48:21Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: /* Only one cookie per client session type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Login variations&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction:&#039;&#039;&#039; This paper describes Open-Xchanges&#039;s authentication and session handling. It gives an overview of all available mechanisms and on how to safely pass on sessions from external applications to the Open-Xchange Server (Single Sign On, SSO).&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The Open-Xchange Server web front-end is implemented in AJAX (Asynchronous JavaScript and XML). Thus the complete user interface (GUI) is running in a browser. Opposed to standard web applications there are no HTML pages generated and delivered by the browser.&lt;br /&gt;
&lt;br /&gt;
The complete user front-end is rendered and displayed in the browser. Based on HTTP/S  the data are exchanged with the server via JavaScript Object Notation (JSON). That means it is not possible to simulate front-end actions  via HTTP/S request by simulating respectively formatted GET/POST calls. Instead, another abstraction is taking place that exclusively transfers data from GUI to server and vice versa.&lt;br /&gt;
&lt;br /&gt;
The Open-Xchange Server includes a session daemon (sessiond) that keeps the current data of a logged in user. If successfully authenticated the information kept in the session are sufficient for accessing the Open-Xchange Server.&lt;br /&gt;
&lt;br /&gt;
==Access to IMAP Back-End services==&lt;br /&gt;
To access external E-Mail systems (IMAP/SMTP) the Open-Xchange Server has to know the credentials of the current user for the system, i. e. the session object has to keep the respective password for the access in plain text. That means authenticating via SessionIDs alone is not sufficient. Authentication always has to take place by entering the username and password.&lt;br /&gt;
&lt;br /&gt;
(There are two exceptions: either if one master password is used for all IMAP accounts, or if a very special implementation of MAL is used, which does not need a password.)&lt;br /&gt;
&lt;br /&gt;
==Basic Implementation Rules==&lt;br /&gt;
* It must not be possible to get a valid session by e. g. guessing a SessionID. This is especially important when being passed on by an external system&lt;br /&gt;
* A session must not be verified by a single SessionID only, but has to compare at least two different data types, this is what the Session-Secret is for&lt;br /&gt;
* Both SessionID and Session-Secret must never be passed from the Open-Xchange server to the client in the same request. This ensures, that potential issues in the stack between the client and Open-Xchange (proxies, caches, loadbalancer, Apache, …) can not lead to wrong sessions &lt;br /&gt;
* To enhance security Session-Secret and SessionID are transferred as different data types. The Session-Secret will always be transferred as a cookie, the SessionID will be transferred as URL parameter if persistent auto-login is not activated for this session.&lt;br /&gt;
* It must never be possible to have conflicting session information per client (multiple cookies) within the same cookie store&lt;br /&gt;
* If any error in the session handling is detected, the relevant request is discarded and logged. It is not tried to fix the issue&lt;br /&gt;
* In memory data (SessionID) of the browser GUI must never be changed during a valid session&lt;br /&gt;
* All relevant information regarding session management must always be written to the relevant logfiles&lt;br /&gt;
* The whole mechanism is only secure when being used via encrypted connection&lt;br /&gt;
* ATTENTION: If persistent autologin is activated for the system and a user decided to use it, all information necessary to access the Open-Xchange server is stored within the browsers cookie store.  This means, that the security of the whole system depends on the level of security of the browsers cookie store&lt;br /&gt;
&lt;br /&gt;
== Authentication and Session Tokens ==&lt;br /&gt;
Following tokens are used for the session management:&lt;br /&gt;
&lt;br /&gt;
=== SessionID ===&lt;br /&gt;
The SessionID is used to identify every session. It is a UUID, generated by the backend via default Java UUID implementation. It is written into the OX logfiles for every log message. When no auto-login is used for the session, then the SessionID is transferred as an URL parameter. If auto-login is activated, then the SessionID is transferred as a cookie.&lt;br /&gt;
&lt;br /&gt;
=== Session-Secret ===&lt;br /&gt;
The Session-Secret is used to verify every session. It is a UUID, generated by the backend via default Java UUID implementation. Only accesses, where the Session-Secret matches with the one stored in SessionD for the given SessionID are valid. Mismatches lead to immediate session termination.&lt;br /&gt;
&lt;br /&gt;
=== Public Session ===&lt;br /&gt;
The public Session is used as a replacement for the SessionID. It is a UUID, generated by the backend via default Java UUID implementation. The Public Session is transferred as a cookie. Using the Public Session is limited to some non critical requests. By using this cookie instead of a request parameter, the browser is able to cache the response of special requests (e.g. contact images).&lt;br /&gt;
&lt;br /&gt;
=== Random ===&lt;br /&gt;
The Random-Token is a one time token with a limited lifetime, which is used to initiate sessions through 3rd party applications or websites. It is a UUID, generated by the backend via default Java UUID implementation. This token is deprecated and subject to change.&lt;br /&gt;
&lt;br /&gt;
=== Cookie Handling ===&lt;br /&gt;
In several situations, cookies are used to store and transfer the session tokens. The following rules for cookie creation and storage apply.&lt;br /&gt;
&lt;br /&gt;
==== Only one cookie per client session type ====&lt;br /&gt;
It must never happen, that the same client has more than one session associated with an Open-Xchange server. Therefore the cookies need to have the same name. If a new cookie is set to the browser, the original one will be overwritten. With the next client access either the SessionID or the Session-Secret do not match anymore and the invalid session is terminated.&lt;br /&gt;
Multiple clients with same cookie store&lt;br /&gt;
&lt;br /&gt;
On the other hand it may happen, that several clients use the same cookie store. E.g. a standard browser GUI session and a browser plugin session. Therefore the cookie name needs to contain informations about the client.&lt;br /&gt;
&lt;br /&gt;
=== Naming of cookies ===&lt;br /&gt;
The cookies are named following this schema:&lt;br /&gt;
&lt;br /&gt;
  open-xchange-session-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;SessionID&amp;gt;&amp;gt;&lt;br /&gt;
  open-xchange-secret-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;Session-Secret&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;&amp;lt;name token&amp;gt;&amp;gt; is generated from configurable data associated with the client. It is a md5-hash build from the client-id and the User-Agent is used to identify the client. Other parameters can be added through a configuration file. If a request is performed by a browser with an invalid hash the corresponding cookies and session are invalidated.&lt;br /&gt;
&lt;br /&gt;
===Lifetime of cookies===&lt;br /&gt;
Normally, cookies are session cookies, which get invalid/deleted when the browser is shut down. &lt;br /&gt;
Using the persistent auto-login, the cookies are persistent cookies, with a configurable default. The default lifetime is one week.&lt;br /&gt;
&lt;br /&gt;
All cookies get deleted when a logout is performed.&lt;br /&gt;
&lt;br /&gt;
==IP Check==&lt;br /&gt;
Per default an IP check is activated to terminate every session immediately, if the IP address of the client changes during the session lifetime. This check is not processed, when a session is reactivated following the persistent auto-login process.&lt;br /&gt;
There are several configuration options to enable, disable the IP Check and to define IP Ranges to omit the check and/or accept recurring connections from within these ranges.&lt;br /&gt;
&lt;br /&gt;
==Access via web browser with user credentials==&lt;br /&gt;
When directly logging in to the system by entering the credentials, following steps will be done to authenticate the user or verify the validity of the session after the authentication:&lt;br /&gt;
&lt;br /&gt;
# The browser sends initial request to the Open-Xchange server. The client represented by the application:&lt;br /&gt;
## is not authenticated yet&lt;br /&gt;
## has no cookie&lt;br /&gt;
## has no session ID.&lt;br /&gt;
# Open-Xchange server sends an AJAX application to browser.  The application is loaded into the browser and no data is exchanged between server and application.&lt;br /&gt;
# The AJAX application then will try to do an auto-login. Because the application has no knowledge of the cookies that may already be stored in the browser it will try to login the client. For further information on auto-login see [[OXSessionAutologin]]. With the precondition form 1. the auto-login try will be denied.&lt;br /&gt;
# The user enters username and password in the front-end.&lt;br /&gt;
# The username and password are sent to the server via JSON (SSL). If the user activated persistent auto-login on the login screen, this information is passed with the same request.&lt;br /&gt;
# The server authenticates the client and sends following data back to the browser via JSON (the data are saved in the session object):&lt;br /&gt;
## Session ID via JSON object&lt;br /&gt;
## (Optional) Random token for initial login via JSON object. For the random token to be send the server needs to be configured(see login.properties – com.openexchange.axaj.login.randomToken). CAUTION! The random token is deprecated and should no longer be used!&lt;br /&gt;
## Cookie with JSESSIONID. The JSESSIONID is set for loadbalancing to the browser&lt;br /&gt;
## Cookie containing the session secret. If persistent auto-login is selected, the cookie is configured with the relevant type and validity.&lt;br /&gt;
## Cookie containing the public identifier.&lt;br /&gt;
# The AJAX front-end saves the session ID in its memory. (Optional)  Ignores the random token.&lt;br /&gt;
# If the persistent auto-login is enabled the AJAX front-end will send a store request. If no error occurs a configured cookie with the relevant type and validity containing the session ID is set to the browser. &lt;br /&gt;
# The AJAX front-end sends initial data request via JSON to the Open-Xchange server and provides the session ID as an URL parameter. The secret is send along as a cookie.&lt;br /&gt;
# The Open-Xchange server processes this data request and compares:&lt;br /&gt;
## Session ID for validity in sessiond&lt;br /&gt;
## Session-Secret from the cookie for validity with session&lt;br /&gt;
# The request is correctly authenticated and is answered by the server.&lt;br /&gt;
# (Optional) Random token is discarded after timeout from sessiond.&lt;br /&gt;
# Repeat 9. - 11. until end of session&lt;br /&gt;
&lt;br /&gt;
If the user does not use the persistent auto-login, the session is only valid as long as the browser is opened. It will be cleared either on logout, on  browser termination or with any occurring error.&lt;br /&gt;
&lt;br /&gt;
For any details on the requests and responses please visit the [https://documentation.open-xchange.com/latest/middleware/http-api-gen/#_login_resource Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
==Access via web browser after authentication with external system==&lt;br /&gt;
The goal is to authenticate in the Open-Xchange system through an external system and to safely pass on the received session data to a browser. To do so the external system has to know the user data (username, password) in plain text. &lt;br /&gt;
&lt;br /&gt;
The process is based on the session initialization in the Open-Xchange Server via the JSON interface and on passing on the received data to a browser. The browser finally initializes the session with an additional random token that is only valid for one single access. &lt;br /&gt;
#	External tool sends initial JSON request directly to Open-Xchange Server&lt;br /&gt;
##	not authenticated yet&lt;br /&gt;
##	no cookie&lt;br /&gt;
##	no SessionID&lt;br /&gt;
#	The Open-Xchange Server authenticates and delivers back following data to external tool via JSON (all the data are stored in the session object in sessiond)&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Random token for initial login via JSON object (required for SSO login)&lt;br /&gt;
##	Cookie with Session-Secret is not set&lt;br /&gt;
#	External tool starts browser with special URL, that contains at least following data:&lt;br /&gt;
##	Random token for initial login&lt;br /&gt;
#	Open-Xchange Server compares:&lt;br /&gt;
##	Random token for validity in sessiond&lt;br /&gt;
#	Open-Xchange Server sends to the browser:&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Cookie with JSESSIONID for loadbalancing is set to the browser&lt;br /&gt;
#	The second part of the tokens is delivered in a separate request&lt;br /&gt;
##	Cookie with Session-Secret is set to the browser If persistent auto-login is selected, the cookie is configured with the relevant type and validity&lt;br /&gt;
#	Open-Xchange removes random token from sessiond.&lt;br /&gt;
&lt;br /&gt;
Then the process continues as described in the section above. The session is then verified with the SessionID and Session-Secret.&lt;br /&gt;
&lt;br /&gt;
==Token Login==&lt;br /&gt;
A dedicated login action (tokenLogin) is used to acquire a server token bound to a given client token. The combination of these tokens allows another client to gain a valid session. This Login is intended to replace the random token login. With this method there is no request or response containing all necessary information to create a valid session.&lt;br /&gt;
&lt;br /&gt;
==Form Login==&lt;br /&gt;
The Form Login provides a simple way of accessing the web frontend just by using standard HTML forms. The response contains a redirect link to the Web-UI. See [[OXSessionFormLogin]] for details.&lt;br /&gt;
&lt;br /&gt;
==Redeem Token Login==&lt;br /&gt;
With a valid session it is possible to acquire a secret. Using this secret another system is able to generate a valid session.&lt;br /&gt;
This session may also contain the users password (configurable). The system in question needs to be registered at the server and has to identify itself with a key configured at the open-xchange server. This is only for internal communication and by default no keys are available.&lt;br /&gt;
&lt;br /&gt;
== Authentication against other services ==&lt;br /&gt;
OX6 and AppSuite allow authentication using other services, too. This is not in the scope of this article. The Services team is available to build plugins for such services. Some standard ones are already implemented, see the following articles for that:&lt;br /&gt;
* [[Authentication IMAP Plugin description]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:OX6]]&lt;br /&gt;
[[Category:AppSuite]]&lt;br /&gt;
[[Category:Auth]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22444</id>
		<title>Login variations</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22444"/>
		<updated>2016-10-14T07:40:15Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: /* IP Check */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Login variations&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction:&#039;&#039;&#039; This paper describes Open-Xchanges&#039;s authentication and session handling. It gives an overview of all available mechanisms and on how to safely pass on sessions from external applications to the Open-Xchange Server (Single Sign On, SSO).&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The Open-Xchange Server web front-end is implemented in AJAX (Asynchronous JavaScript and XML). Thus the complete user interface (GUI) is running in a browser. Opposed to standard web applications there are no HTML pages generated and delivered by the browser.&lt;br /&gt;
&lt;br /&gt;
The complete user front-end is rendered and displayed in the browser. Based on HTTP/S  the data are exchanged with the server via JavaScript Object Notation (JSON). That means it is not possible to simulate front-end actions  via HTTP/S request by simulating respectively formatted GET/POST calls. Instead, another abstraction is taking place that exclusively transfers data from GUI to server and vice versa.&lt;br /&gt;
&lt;br /&gt;
The Open-Xchange Server includes a session daemon (sessiond) that keeps the current data of a logged in user. If successfully authenticated the information kept in the session are sufficient for accessing the Open-Xchange Server.&lt;br /&gt;
&lt;br /&gt;
==Access to IMAP Back-End services==&lt;br /&gt;
To access external E-Mail systems (IMAP/SMTP) the Open-Xchange Server has to know the credentials of the current user for the system, i. e. the session object has to keep the respective password for the access in plain text. That means authenticating via SessionIDs alone is not sufficient. Authentication always has to take place by entering the username and password.&lt;br /&gt;
&lt;br /&gt;
(There are two exceptions: either if one master password is used for all IMAP accounts, or if a very special implementation of MAL is used, which does not need a password.)&lt;br /&gt;
&lt;br /&gt;
==Basic Implementation Rules==&lt;br /&gt;
* It must not be possible to get a valid session by e. g. guessing a SessionID. This is especially important when being passed on by an external system&lt;br /&gt;
* A session must not be verified by a single SessionID only, but has to compare at least two different data types, this is what the Session-Secret is for&lt;br /&gt;
* Both SessionID and Session-Secret must never be passed from the Open-Xchange server to the client in the same request. This ensures, that potential issues in the stack between the client and Open-Xchange (proxies, caches, loadbalancer, Apache, …) can not lead to wrong sessions &lt;br /&gt;
* To enhance security Session-Secret and SessionID are transferred as different data types. The Session-Secret will always be transferred as a cookie, the SessionID will be transferred as URL parameter if persistent auto-login is not activated for this session.&lt;br /&gt;
* It must never be possible to have conflicting session information per client (multiple cookies) within the same cookie store&lt;br /&gt;
* If any error in the session handling is detected, the relevant request is discarded and logged. It is not tried to fix the issue&lt;br /&gt;
* In memory data (SessionID) of the browser GUI must never be changed during a valid session&lt;br /&gt;
* All relevant information regarding session management must always be written to the relevant logfiles&lt;br /&gt;
* The whole mechanism is only secure when being used via encrypted connection&lt;br /&gt;
* ATTENTION: If persistent autologin is activated for the system and a user decided to use it, all information necessary to access the Open-Xchange server is stored within the browsers cookie store.  This means, that the security of the whole system depends on the level of security of the browsers cookie store&lt;br /&gt;
&lt;br /&gt;
== Authentication and Session Tokens ==&lt;br /&gt;
Following tokens are used for the session management:&lt;br /&gt;
&lt;br /&gt;
=== SessionID ===&lt;br /&gt;
The SessionID is used to identify every session. It is a UUID, generated by the backend via default Java UUID implementation. It is written into the OX logfiles for every log message. When no auto-login is used for the session, then the SessionID is transferred as an URL parameter. If auto-login is activated, then the SessionID is transferred as a cookie.&lt;br /&gt;
&lt;br /&gt;
=== Session-Secret ===&lt;br /&gt;
The Session-Secret is used to verify every session. It is a UUID, generated by the backend via default Java UUID implementation. Only accesses, where the Session-Secret matches with the one stored in SessionD for the given SessionID are valid. Mismatches lead to immediate session termination.&lt;br /&gt;
&lt;br /&gt;
=== Public Session ===&lt;br /&gt;
The public Session is used as a replacement for the SessionID. It is a UUID, generated by the backend via default Java UUID implementation. The Public Session is transferred as a cookie. Using the Public Session is limited to some non critical requests. By using this cookie instead of a request parameter, the browser is able to cache the response of special requests (e.g. contact images).&lt;br /&gt;
&lt;br /&gt;
=== Random ===&lt;br /&gt;
The Random-Token is a one time token with a limited lifetime, which is used to initiate sessions through 3rd party applications or websites. It is a UUID, generated by the backend via default Java UUID implementation. This token is deprecated and subject to change.&lt;br /&gt;
&lt;br /&gt;
=== Cookie Handling ===&lt;br /&gt;
In several situations, cookies are used to store and transfer the session tokens. The following rules for cookie creation and storage apply.&lt;br /&gt;
&lt;br /&gt;
=== Only one cookie per client session type ===&lt;br /&gt;
It must never happen, that the same client has more than one session associated with an Open-Xchange server. Therefore the cookies need to have the same name. If a new cookie is set to the browser, the original one will be overwritten. With the next client access either the SessionID or the Session-Secret do not match anymore and the invalid session is terminated.&lt;br /&gt;
Multiple clients with same cookie store&lt;br /&gt;
&lt;br /&gt;
On the other hand it may happen, that several clients use the same cookie store. E.g. a standard browser GUI session and a browser plugin session. Therefore the cookie name needs to contain informations about the client.&lt;br /&gt;
&lt;br /&gt;
=== Naming of cookies ===&lt;br /&gt;
The cookies are named following this schema:&lt;br /&gt;
&lt;br /&gt;
  open-xchange-session-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;SessionID&amp;gt;&amp;gt;&lt;br /&gt;
  open-xchange-secret-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;Session-Secret&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;&amp;lt;name token&amp;gt;&amp;gt; is generated from configurable data associated with the client. It is a md5-hash build from the client-id and the User-Agent is used to identify the client. Other parameters can be added through a configuration file. If a request is performed by a browser with an invalid hash the corresponding cookies and session are invalidated.&lt;br /&gt;
&lt;br /&gt;
===Lifetime of cookies===&lt;br /&gt;
Normally, cookies are session cookies, which get invalid/deleted when the browser is shut down. &lt;br /&gt;
Using the persistent auto-login, the cookies are persistent cookies, with a configurable default. The default lifetime is one week.&lt;br /&gt;
&lt;br /&gt;
All cookies get deleted when a logout is performed.&lt;br /&gt;
&lt;br /&gt;
==IP Check==&lt;br /&gt;
Per default an IP check is activated to terminate every session immediately, if the IP address of the client changes during the session lifetime. This check is not processed, when a session is reactivated following the persistent auto-login process.&lt;br /&gt;
There are several configuration options to enable, disable the IP Check and to define IP Ranges to omit the check and/or accept recurring connections from within these ranges.&lt;br /&gt;
&lt;br /&gt;
==Access via web browser with user credentials==&lt;br /&gt;
When directly logging in to the system by entering the credentials, following steps will be done to authenticate the user or verify the validity of the session after the authentication:&lt;br /&gt;
&lt;br /&gt;
# The browser sends initial request to the Open-Xchange server. The client represented by the application:&lt;br /&gt;
## is not authenticated yet&lt;br /&gt;
## has no cookie&lt;br /&gt;
## has no session ID.&lt;br /&gt;
# Open-Xchange server sends an AJAX application to browser.  The application is loaded into the browser and no data is exchanged between server and application.&lt;br /&gt;
# The AJAX application then will try to do an auto-login. Because the application has no knowledge of the cookies that may already be stored in the browser it will try to login the client. For further information on auto-login see [[OXSessionAutologin]]. With the precondition form 1. the auto-login try will be denied.&lt;br /&gt;
# The user enters username and password in the front-end.&lt;br /&gt;
# The username and password are sent to the server via JSON (SSL). If the user activated persistent auto-login on the login screen, this information is passed with the same request.&lt;br /&gt;
# The server authenticates the client and sends following data back to the browser via JSON (the data are saved in the session object):&lt;br /&gt;
## Session ID via JSON object&lt;br /&gt;
## (Optional) Random token for initial login via JSON object. For the random token to be send the server needs to be configured(see login.properties – com.openexchange.axaj.login.randomToken). CAUTION! The random token is deprecated and should no longer be used!&lt;br /&gt;
## Cookie with JSESSIONID. The JSESSIONID is set for loadbalancing to the browser&lt;br /&gt;
## Cookie containing the session secret. If persistent auto-login is selected, the cookie is configured with the relevant type and validity.&lt;br /&gt;
## Cookie containing the public identifier.&lt;br /&gt;
# The AJAX front-end saves the session ID in its memory. (Optional)  Ignores the random token.&lt;br /&gt;
# If the persistent auto-login is enabled the AJAX front-end will send a store request. If no error occurs a configured cookie with the relevant type and validity containing the session ID is set to the browser. &lt;br /&gt;
# The AJAX front-end sends initial data request via JSON to the Open-Xchange server and provides the session ID as an URL parameter. The secret is send along as a cookie.&lt;br /&gt;
# The Open-Xchange server processes this data request and compares:&lt;br /&gt;
## Session ID for validity in sessiond&lt;br /&gt;
## Session-Secret from the cookie for validity with session&lt;br /&gt;
# The request is correctly authenticated and is answered by the server.&lt;br /&gt;
# (Optional) Random token is discarded after timeout from sessiond.&lt;br /&gt;
# Repeat 9. - 11. until end of session&lt;br /&gt;
&lt;br /&gt;
If the user does not use the persistent auto-login, the session is only valid as long as the browser is opened. It will be cleared either on logout, on  browser termination or with any occurring error.&lt;br /&gt;
&lt;br /&gt;
For any details on the requests and responses please visit the [https://documentation.open-xchange.com/latest/middleware/http-api-gen/#_login_resource Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
==Access via web browser after authentication with external system==&lt;br /&gt;
The goal is to authenticate in the Open-Xchange system through an external system and to safely pass on the received session data to a browser. To do so the external system has to know the user data (username, password) in plain text. &lt;br /&gt;
&lt;br /&gt;
The process is based on the session initialization in the Open-Xchange Server via the JSON interface and on passing on the received data to a browser. The browser finally initializes the session with an additional random token that is only valid for one single access. &lt;br /&gt;
#	External tool sends initial JSON request directly to Open-Xchange Server&lt;br /&gt;
##	not authenticated yet&lt;br /&gt;
##	no cookie&lt;br /&gt;
##	no SessionID&lt;br /&gt;
#	The Open-Xchange Server authenticates and delivers back following data to external tool via JSON (all the data are stored in the session object in sessiond)&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Random token for initial login via JSON object (required for SSO login)&lt;br /&gt;
##	Cookie with Session-Secret is not set&lt;br /&gt;
#	External tool starts browser with special URL, that contains at least following data:&lt;br /&gt;
##	Random token for initial login&lt;br /&gt;
#	Open-Xchange Server compares:&lt;br /&gt;
##	Random token for validity in sessiond&lt;br /&gt;
#	Open-Xchange Server sends to the browser:&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Cookie with JSESSIONID for loadbalancing is set to the browser&lt;br /&gt;
#	The second part of the tokens is delivered in a separate request&lt;br /&gt;
##	Cookie with Session-Secret is set to the browser If persistent auto-login is selected, the cookie is configured with the relevant type and validity&lt;br /&gt;
#	Open-Xchange removes random token from sessiond.&lt;br /&gt;
&lt;br /&gt;
Then the process continues as described in the section above. The session is then verified with the SessionID and Session-Secret.&lt;br /&gt;
&lt;br /&gt;
==Token Login==&lt;br /&gt;
A dedicated login action (tokenLogin) is used to acquire a server token bound to a given client token. The combination of these tokens allows another client to gain a valid session. This Login is intended to replace the random token login. With this method there is no request or response containing all necessary information to create a valid session.&lt;br /&gt;
&lt;br /&gt;
==Form Login==&lt;br /&gt;
The Form Login provides a simple way of accessing the web frontend just by using standard HTML forms. The response contains a redirect link to the Web-UI. See [[OXSessionFormLogin]] for details.&lt;br /&gt;
&lt;br /&gt;
==Redeem Token Login==&lt;br /&gt;
With a valid session it is possible to acquire a secret. Using this secret another system is able to generate a valid session.&lt;br /&gt;
This session may also contain the users password (configurable). The system in question needs to be registered at the server and has to identify itself with a key configured at the open-xchange server. This is only for internal communication and by default no keys are available.&lt;br /&gt;
&lt;br /&gt;
== Authentication against other services ==&lt;br /&gt;
OX6 and AppSuite allow authentication using other services, too. This is not in the scope of this article. The Services team is available to build plugins for such services. Some standard ones are already implemented, see the following articles for that:&lt;br /&gt;
* [[Authentication IMAP Plugin description]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:OX6]]&lt;br /&gt;
[[Category:AppSuite]]&lt;br /&gt;
[[Category:Auth]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22443</id>
		<title>Login variations</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22443"/>
		<updated>2016-10-14T07:39:47Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: /* Access via web browser with user credentials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Login variations&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction:&#039;&#039;&#039; This paper describes Open-Xchanges&#039;s authentication and session handling. It gives an overview of all available mechanisms and on how to safely pass on sessions from external applications to the Open-Xchange Server (Single Sign On, SSO).&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The Open-Xchange Server web front-end is implemented in AJAX (Asynchronous JavaScript and XML). Thus the complete user interface (GUI) is running in a browser. Opposed to standard web applications there are no HTML pages generated and delivered by the browser.&lt;br /&gt;
&lt;br /&gt;
The complete user front-end is rendered and displayed in the browser. Based on HTTP/S  the data are exchanged with the server via JavaScript Object Notation (JSON). That means it is not possible to simulate front-end actions  via HTTP/S request by simulating respectively formatted GET/POST calls. Instead, another abstraction is taking place that exclusively transfers data from GUI to server and vice versa.&lt;br /&gt;
&lt;br /&gt;
The Open-Xchange Server includes a session daemon (sessiond) that keeps the current data of a logged in user. If successfully authenticated the information kept in the session are sufficient for accessing the Open-Xchange Server.&lt;br /&gt;
&lt;br /&gt;
==Access to IMAP Back-End services==&lt;br /&gt;
To access external E-Mail systems (IMAP/SMTP) the Open-Xchange Server has to know the credentials of the current user for the system, i. e. the session object has to keep the respective password for the access in plain text. That means authenticating via SessionIDs alone is not sufficient. Authentication always has to take place by entering the username and password.&lt;br /&gt;
&lt;br /&gt;
(There are two exceptions: either if one master password is used for all IMAP accounts, or if a very special implementation of MAL is used, which does not need a password.)&lt;br /&gt;
&lt;br /&gt;
==Basic Implementation Rules==&lt;br /&gt;
* It must not be possible to get a valid session by e. g. guessing a SessionID. This is especially important when being passed on by an external system&lt;br /&gt;
* A session must not be verified by a single SessionID only, but has to compare at least two different data types, this is what the Session-Secret is for&lt;br /&gt;
* Both SessionID and Session-Secret must never be passed from the Open-Xchange server to the client in the same request. This ensures, that potential issues in the stack between the client and Open-Xchange (proxies, caches, loadbalancer, Apache, …) can not lead to wrong sessions &lt;br /&gt;
* To enhance security Session-Secret and SessionID are transferred as different data types. The Session-Secret will always be transferred as a cookie, the SessionID will be transferred as URL parameter if persistent auto-login is not activated for this session.&lt;br /&gt;
* It must never be possible to have conflicting session information per client (multiple cookies) within the same cookie store&lt;br /&gt;
* If any error in the session handling is detected, the relevant request is discarded and logged. It is not tried to fix the issue&lt;br /&gt;
* In memory data (SessionID) of the browser GUI must never be changed during a valid session&lt;br /&gt;
* All relevant information regarding session management must always be written to the relevant logfiles&lt;br /&gt;
* The whole mechanism is only secure when being used via encrypted connection&lt;br /&gt;
* ATTENTION: If persistent autologin is activated for the system and a user decided to use it, all information necessary to access the Open-Xchange server is stored within the browsers cookie store.  This means, that the security of the whole system depends on the level of security of the browsers cookie store&lt;br /&gt;
&lt;br /&gt;
== Authentication and Session Tokens ==&lt;br /&gt;
Following tokens are used for the session management:&lt;br /&gt;
&lt;br /&gt;
=== SessionID ===&lt;br /&gt;
The SessionID is used to identify every session. It is a UUID, generated by the backend via default Java UUID implementation. It is written into the OX logfiles for every log message. When no auto-login is used for the session, then the SessionID is transferred as an URL parameter. If auto-login is activated, then the SessionID is transferred as a cookie.&lt;br /&gt;
&lt;br /&gt;
=== Session-Secret ===&lt;br /&gt;
The Session-Secret is used to verify every session. It is a UUID, generated by the backend via default Java UUID implementation. Only accesses, where the Session-Secret matches with the one stored in SessionD for the given SessionID are valid. Mismatches lead to immediate session termination.&lt;br /&gt;
&lt;br /&gt;
=== Public Session ===&lt;br /&gt;
The public Session is used as a replacement for the SessionID. It is a UUID, generated by the backend via default Java UUID implementation. The Public Session is transferred as a cookie. Using the Public Session is limited to some non critical requests. By using this cookie instead of a request parameter, the browser is able to cache the response of special requests (e.g. contact images).&lt;br /&gt;
&lt;br /&gt;
=== Random ===&lt;br /&gt;
The Random-Token is a one time token with a limited lifetime, which is used to initiate sessions through 3rd party applications or websites. It is a UUID, generated by the backend via default Java UUID implementation. This token is deprecated and subject to change.&lt;br /&gt;
&lt;br /&gt;
=== Cookie Handling ===&lt;br /&gt;
In several situations, cookies are used to store and transfer the session tokens. The following rules for cookie creation and storage apply.&lt;br /&gt;
&lt;br /&gt;
=== Only one cookie per client session type ===&lt;br /&gt;
It must never happen, that the same client has more than one session associated with an Open-Xchange server. Therefore the cookies need to have the same name. If a new cookie is set to the browser, the original one will be overwritten. With the next client access either the SessionID or the Session-Secret do not match anymore and the invalid session is terminated.&lt;br /&gt;
Multiple clients with same cookie store&lt;br /&gt;
&lt;br /&gt;
On the other hand it may happen, that several clients use the same cookie store. E.g. a standard browser GUI session and a browser plugin session. Therefore the cookie name needs to contain informations about the client.&lt;br /&gt;
&lt;br /&gt;
=== Naming of cookies ===&lt;br /&gt;
The cookies are named following this schema:&lt;br /&gt;
&lt;br /&gt;
  open-xchange-session-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;SessionID&amp;gt;&amp;gt;&lt;br /&gt;
  open-xchange-secret-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;Session-Secret&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;&amp;lt;name token&amp;gt;&amp;gt; is generated from configurable data associated with the client. It is a md5-hash build from the client-id and the User-Agent is used to identify the client. Other parameters can be added through a configuration file. If a request is performed by a browser with an invalid hash the corresponding cookies and session are invalidated.&lt;br /&gt;
&lt;br /&gt;
===Lifetime of cookies===&lt;br /&gt;
Normally, cookies are session cookies, which get invalid/deleted when the browser is shut down. &lt;br /&gt;
Using the persistent auto-login, the cookies are persistent cookies, with a configurable default. The default lifetime is one week.&lt;br /&gt;
&lt;br /&gt;
All cookies get deleted when a logout is performed.&lt;br /&gt;
&lt;br /&gt;
==IP Check==&lt;br /&gt;
Per default an IP check is activated to terminate every session immediately, if the IP address of the client changes during the session lifetime. This check is not processed, when a session is reactivated following the persistent auto-login process.&lt;br /&gt;
There are several configuration options to enable, disable the IP Check and to define IP Ranges to omit the check and/or accept recurring connections from within these ranges.&lt;br /&gt;
&lt;br /&gt;
 ==Access via web browser with user credentials==&lt;br /&gt;
When directly logging in to the system by entering the credentials, following steps will be done to authenticate the user or verify the validity of the session after the authentication:&lt;br /&gt;
&lt;br /&gt;
# The browser sends initial request to the Open-Xchange server. The client represented by the application:&lt;br /&gt;
## is not authenticated yet&lt;br /&gt;
## has no cookie&lt;br /&gt;
## has no session ID.&lt;br /&gt;
# Open-Xchange server sends an AJAX application to browser.  The application is loaded into the browser and no data is exchanged between server and application.&lt;br /&gt;
# The AJAX application then will try to do an auto-login. Because the application has no knowledge of the cookies that may already be stored in the browser it will try to login the client. For further information on auto-login see [[OXSessionAutologin]]. With the precondition form 1. the auto-login try will be denied.&lt;br /&gt;
# The user enters username and password in the front-end.&lt;br /&gt;
# The username and password are sent to the server via JSON (SSL). If the user activated persistent auto-login on the login screen, this information is passed with the same request.&lt;br /&gt;
# The server authenticates the client and sends following data back to the browser via JSON (the data are saved in the session object):&lt;br /&gt;
## Session ID via JSON object&lt;br /&gt;
## (Optional) Random token for initial login via JSON object. For the random token to be send the server needs to be configured(see login.properties – com.openexchange.axaj.login.randomToken). CAUTION! The random token is deprecated and should no longer be used!&lt;br /&gt;
## Cookie with JSESSIONID. The JSESSIONID is set for loadbalancing to the browser&lt;br /&gt;
## Cookie containing the session secret. If persistent auto-login is selected, the cookie is configured with the relevant type and validity.&lt;br /&gt;
## Cookie containing the public identifier.&lt;br /&gt;
# The AJAX front-end saves the session ID in its memory. (Optional)  Ignores the random token.&lt;br /&gt;
# If the persistent auto-login is enabled the AJAX front-end will send a store request. If no error occurs a configured cookie with the relevant type and validity containing the session ID is set to the browser. &lt;br /&gt;
# The AJAX front-end sends initial data request via JSON to the Open-Xchange server and provides the session ID as an URL parameter. The secret is send along as a cookie.&lt;br /&gt;
# The Open-Xchange server processes this data request and compares:&lt;br /&gt;
## Session ID for validity in sessiond&lt;br /&gt;
## Session-Secret from the cookie for validity with session&lt;br /&gt;
# The request is correctly authenticated and is answered by the server.&lt;br /&gt;
# (Optional) Random token is discarded after timeout from sessiond.&lt;br /&gt;
# Repeat 9. - 11. until end of session&lt;br /&gt;
&lt;br /&gt;
If the user does not use the persistent auto-login, the session is only valid as long as the browser is opened. It will be cleared either on logout, on  browser termination or with any occurring error.&lt;br /&gt;
&lt;br /&gt;
For any details on the requests and responses please visit the [https://documentation.open-xchange.com/latest/middleware/http-api-gen/#_login_resource Technical Documentation]&lt;br /&gt;
&lt;br /&gt;
==Access via web browser after authentication with external system==&lt;br /&gt;
The goal is to authenticate in the Open-Xchange system through an external system and to safely pass on the received session data to a browser. To do so the external system has to know the user data (username, password) in plain text. &lt;br /&gt;
&lt;br /&gt;
The process is based on the session initialization in the Open-Xchange Server via the JSON interface and on passing on the received data to a browser. The browser finally initializes the session with an additional random token that is only valid for one single access. &lt;br /&gt;
#	External tool sends initial JSON request directly to Open-Xchange Server&lt;br /&gt;
##	not authenticated yet&lt;br /&gt;
##	no cookie&lt;br /&gt;
##	no SessionID&lt;br /&gt;
#	The Open-Xchange Server authenticates and delivers back following data to external tool via JSON (all the data are stored in the session object in sessiond)&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Random token for initial login via JSON object (required for SSO login)&lt;br /&gt;
##	Cookie with Session-Secret is not set&lt;br /&gt;
#	External tool starts browser with special URL, that contains at least following data:&lt;br /&gt;
##	Random token for initial login&lt;br /&gt;
#	Open-Xchange Server compares:&lt;br /&gt;
##	Random token for validity in sessiond&lt;br /&gt;
#	Open-Xchange Server sends to the browser:&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Cookie with JSESSIONID for loadbalancing is set to the browser&lt;br /&gt;
#	The second part of the tokens is delivered in a separate request&lt;br /&gt;
##	Cookie with Session-Secret is set to the browser If persistent auto-login is selected, the cookie is configured with the relevant type and validity&lt;br /&gt;
#	Open-Xchange removes random token from sessiond.&lt;br /&gt;
&lt;br /&gt;
Then the process continues as described in the section above. The session is then verified with the SessionID and Session-Secret.&lt;br /&gt;
&lt;br /&gt;
==Token Login==&lt;br /&gt;
A dedicated login action (tokenLogin) is used to acquire a server token bound to a given client token. The combination of these tokens allows another client to gain a valid session. This Login is intended to replace the random token login. With this method there is no request or response containing all necessary information to create a valid session.&lt;br /&gt;
&lt;br /&gt;
==Form Login==&lt;br /&gt;
The Form Login provides a simple way of accessing the web frontend just by using standard HTML forms. The response contains a redirect link to the Web-UI. See [[OXSessionFormLogin]] for details.&lt;br /&gt;
&lt;br /&gt;
==Redeem Token Login==&lt;br /&gt;
With a valid session it is possible to acquire a secret. Using this secret another system is able to generate a valid session.&lt;br /&gt;
This session may also contain the users password (configurable). The system in question needs to be registered at the server and has to identify itself with a key configured at the open-xchange server. This is only for internal communication and by default no keys are available.&lt;br /&gt;
&lt;br /&gt;
== Authentication against other services ==&lt;br /&gt;
OX6 and AppSuite allow authentication using other services, too. This is not in the scope of this article. The Services team is available to build plugins for such services. Some standard ones are already implemented, see the following articles for that:&lt;br /&gt;
* [[Authentication IMAP Plugin description]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:OX6]]&lt;br /&gt;
[[Category:AppSuite]]&lt;br /&gt;
[[Category:Auth]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22437</id>
		<title>Login variations</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22437"/>
		<updated>2016-10-10T12:51:51Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: /* Access via web browser with user credentials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Login variations&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction:&#039;&#039;&#039; This paper describes Open-Xchanges&#039;s authentication and session handling. It gives an overview of all available mechanisms and on how to safely pass on sessions from external applications to the Open-Xchange Server (Single Sign On, SSO).&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The Open-Xchange Server web front-end is implemented in AJAX (Asynchronous JavaScript and XML). Thus the complete user interface (GUI) is running in a browser. Opposed to standard web applications there are no HTML pages generated and delivered by the browser.&lt;br /&gt;
&lt;br /&gt;
The complete user front-end is rendered and displayed in the browser. Based on HTTP/S  the data are exchanged with the server via JavaScript Object Notation (JSON). That means it is not possible to simulate front-end actions  via HTTP/S request by simulating respectively formatted GET/POST calls. Instead, another abstraction is taking place that exclusively transfers data from GUI to server and vice versa.&lt;br /&gt;
&lt;br /&gt;
The Open-Xchange Server includes a session daemon (sessiond) that keeps the current data of a logged in user. If successfully authenticated the information kept in the session are sufficient for accessing the Open-Xchange Server.&lt;br /&gt;
&lt;br /&gt;
==Access to IMAP Back-End services==&lt;br /&gt;
To access external E-Mail systems (IMAP/SMTP) the Open-Xchange Server has to know the credentials of the current user for the system, i. e. the session object has to keep the respective password for the access in plain text. That means authenticating via SessionIDs alone is not sufficient. Authentication always has to take place by entering the username and password.&lt;br /&gt;
&lt;br /&gt;
(There are two exceptions: either if one master password is used for all IMAP accounts, or if a very special implementation of MAL is used, which does not need a password.)&lt;br /&gt;
&lt;br /&gt;
==Basic Implementation Rules==&lt;br /&gt;
* It must not be possible to get a valid session by e. g. guessing a SessionID. This is especially important when being passed on by an external system&lt;br /&gt;
* A session must not be verified by a single SessionID only, but has to compare at least two different data types, this is what the Session-Secret is for&lt;br /&gt;
* Both SessionID and Session-Secret must never be passed from the Open-Xchange server to the client in the same request. This ensures, that potential issues in the stack between the client and Open-Xchange (proxies, caches, loadbalancer, Apache, …) can not lead to wrong sessions &lt;br /&gt;
* To enhance security Session-Secret and SessionID are transferred as different data types. The Session-Secret will always be transferred as a cookie, the SessionID will be transferred as URL parameter if persistent auto-login is not activated for this session.&lt;br /&gt;
* It must never be possible to have conflicting session information per client (multiple cookies) within the same cookie store&lt;br /&gt;
* If any error in the session handling is detected, the relevant request is discarded and logged. It is not tried to fix the issue&lt;br /&gt;
* In memory data (SessionID) of the browser GUI must never be changed during a valid session&lt;br /&gt;
* All relevant information regarding session management must always be written to the relevant logfiles&lt;br /&gt;
* The whole mechanism is only secure when being used via encrypted connection&lt;br /&gt;
* ATTENTION: If persistent autologin is activated for the system and a user decided to use it, all information necessary to access the Open-Xchange server is stored within the browsers cookie store.  This means, that the security of the whole system depends on the level of security of the browsers cookie store&lt;br /&gt;
&lt;br /&gt;
== Authentication and Session Tokens ==&lt;br /&gt;
Following tokens are used for the session management:&lt;br /&gt;
&lt;br /&gt;
=== SessionID ===&lt;br /&gt;
The SessionID is used to identify every session. It is a UUID, generated by the backend via default Java UUID implementation. It is written into the OX logfiles for every log message. When no auto-login is used for the session, then the SessionID is transferred as an URL parameter. If auto-login is activated, then the SessionID is transferred as a cookie.&lt;br /&gt;
&lt;br /&gt;
=== Session-Secret ===&lt;br /&gt;
The Session-Secret is used to verify every session. It is a UUID, generated by the backend via default Java UUID implementation. Only accesses, where the Session-Secret matches with the one stored in SessionD for the given SessionID are valid. Mismatches lead to immediate session termination.&lt;br /&gt;
&lt;br /&gt;
=== Public Session ===&lt;br /&gt;
The public Session is used as a replacement for the SessionID. It is a UUID, generated by the backend via default Java UUID implementation. The Public Session is transferred as a cookie. Using the Public Session is limited to some non critical requests. By using this cookie instead of a request parameter, the browser is able to cache the response of special requests (e.g. contact images).&lt;br /&gt;
&lt;br /&gt;
=== Random ===&lt;br /&gt;
The Random-Token is a one time token with a limited lifetime, which is used to initiate sessions through 3rd party applications or websites. It is a UUID, generated by the backend via default Java UUID implementation. This token is deprecated and subject to change.&lt;br /&gt;
&lt;br /&gt;
=== Cookie Handling ===&lt;br /&gt;
In several situations, cookies are used to store and transfer the session tokens. The following rules for cookie creation and storage apply.&lt;br /&gt;
&lt;br /&gt;
=== Only one cookie per client session type ===&lt;br /&gt;
It must never happen, that the same client has more than one session associated with an Open-Xchange server. Therefore the cookies need to have the same name. If a new cookie is set to the browser, the original one will be overwritten. With the next client access either the SessionID or the Session-Secret do not match anymore and the invalid session is terminated.&lt;br /&gt;
Multiple clients with same cookie store&lt;br /&gt;
&lt;br /&gt;
On the other hand it may happen, that several clients use the same cookie store. E.g. a standard browser GUI session and a browser plugin session. Therefore the cookie name needs to contain informations about the client.&lt;br /&gt;
&lt;br /&gt;
=== Naming of cookies ===&lt;br /&gt;
The cookies are named following this schema:&lt;br /&gt;
&lt;br /&gt;
  open-xchange-session-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;SessionID&amp;gt;&amp;gt;&lt;br /&gt;
  open-xchange-secret-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;Session-Secret&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;&amp;lt;name token&amp;gt;&amp;gt; is generated from configurable data associated with the client. It is a md5-hash build from the client-id and the User-Agent is used to identify the client. Other parameters can be added through a configuration file. If a request is performed by a browser with an invalid hash the corresponding cookies and session are invalidated.&lt;br /&gt;
&lt;br /&gt;
===Lifetime of cookies===&lt;br /&gt;
Normally, cookies are session cookies, which get invalid/deleted when the browser is shut down. &lt;br /&gt;
Using the persistent auto-login, the cookies are persistent cookies, with a configurable default. The default lifetime is one week.&lt;br /&gt;
&lt;br /&gt;
All cookies get deleted when a logout is performed.&lt;br /&gt;
&lt;br /&gt;
==IP Check==&lt;br /&gt;
Per default an IP check is activated to terminate every session immediately, if the IP address of the client changes during the session lifetime. This check is not processed, when a session is reactivated following the persistent auto-login process.&lt;br /&gt;
There are several configuration options to enable, disable the IP Check and to define IP Ranges to omit the check and/or accept recurring connections from within these ranges.&lt;br /&gt;
&lt;br /&gt;
==Access via web browser with user credentials==&lt;br /&gt;
When directly logging in to the system by entering the credentials, following steps will be done to authenticate the user or verify the validity of the session after the authentication:&lt;br /&gt;
&lt;br /&gt;
If the user does not use the persistent auto-login, the session is only valid as long as the browser is opened. It will be cleared either on logout, on  browser termination or with any occurring error.&lt;br /&gt;
&lt;br /&gt;
# The browser sends initial request to the Open-Xchange server. The client represented by the application:&lt;br /&gt;
## is not authenticated yet&lt;br /&gt;
## has no cookie&lt;br /&gt;
## has no session ID.&lt;br /&gt;
# Open-Xchange Server sends an AJAX application to browser.  The application is loaded into the browser and no data is exchanged between server and application.&lt;br /&gt;
# The user enters username and password in the front-end.&lt;br /&gt;
# The username and password are sent to the server via JSON (SSL). If the user activated persistent auto-login on the login screen, this information is passed with the same request.&lt;br /&gt;
# The server authenticates the client and sends following data back to the browser via JSON (the data are saved in the session object):&lt;br /&gt;
## Session ID via JSON object&lt;br /&gt;
## (Optional) Random token for initial login via JSON object. For the random token to be send the server needs to be configured(see login.properties – com.openexchange.axaj.login.randomToken). CAUTION! The random token is deprecated and should no longer be used!&lt;br /&gt;
## Cookie with JSESSIONID. The JSESSIONID is set for loadbalancing to the browser&lt;br /&gt;
## Cookie containing the session secret. If persistent auto-login is selected, the cookie is configured with the relevant type and validity.&lt;br /&gt;
## Cookie containing the public identifier.&lt;br /&gt;
# The AJAX front-end saves the session ID in its memory. (Optional)  Ignores the random token.&lt;br /&gt;
# If the persistent auto-login is enabled the AJAX front-end will send a store request. If no error occurs a configured cookie with the relevant type and validity containing the session ID is set to the browser. &lt;br /&gt;
# The AJAX front-end sends initial data request via JSON to the Open-Xchange server and provides the session ID as an URL parameter. The secret is send along as a cookie.&lt;br /&gt;
# The Open-Xchange server processes this data request and compares:&lt;br /&gt;
## Session ID for validity in sessiond&lt;br /&gt;
## Session-Secret from the cookie for validity with session&lt;br /&gt;
# The request is correctly authenticated and is answered by the server.&lt;br /&gt;
# (Optional) Random token is discarded after timeout from sessiond.&lt;br /&gt;
# Repeat 8. - 10. until end of session&lt;br /&gt;
&lt;br /&gt;
For any details on the requests please visit https://documentation.open-xchange.com/latest/middleware/http-api-gen/#_login_resource&lt;br /&gt;
&lt;br /&gt;
==Access via web browser after authentication with external system==&lt;br /&gt;
The goal is to authenticate in the Open-Xchange system through an external system and to safely pass on the received session data to a browser. To do so the external system has to know the user data (username, password) in plain text. &lt;br /&gt;
&lt;br /&gt;
The process is based on the session initialization in the Open-Xchange Server via the JSON interface and on passing on the received data to a browser. The browser finally initializes the session with an additional random token that is only valid for one single access. &lt;br /&gt;
#	External tool sends initial JSON request directly to Open-Xchange Server&lt;br /&gt;
##	not authenticated yet&lt;br /&gt;
##	no cookie&lt;br /&gt;
##	no SessionID&lt;br /&gt;
#	The Open-Xchange Server authenticates and delivers back following data to external tool via JSON (all the data are stored in the session object in sessiond)&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Random token for initial login via JSON object (required for SSO login)&lt;br /&gt;
##	Cookie with Session-Secret is not set&lt;br /&gt;
#	External tool starts browser with special URL, that contains at least following data:&lt;br /&gt;
##	Random token for initial login&lt;br /&gt;
#	Open-Xchange Server compares:&lt;br /&gt;
##	Random token for validity in sessiond&lt;br /&gt;
#	Open-Xchange Server sends to the browser:&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Cookie with JSESSIONID for loadbalancing is set to the browser&lt;br /&gt;
#	The second part of the tokens is delivered in a separate request&lt;br /&gt;
##	Cookie with Session-Secret is set to the browser If persistent auto-login is selected, the cookie is configured with the relevant type and validity&lt;br /&gt;
#	Open-Xchange removes random token from sessiond.&lt;br /&gt;
&lt;br /&gt;
Then the process continues as described in the section above. The session is then verified with the SessionID and Session-Secret.&lt;br /&gt;
&lt;br /&gt;
==Token Login==&lt;br /&gt;
A dedicated login action (tokenLogin) is used to acquire a server token bound to a given client token. The combination of these tokens allows another client to gain a valid session. This Login is intended to replace the random token login. With this method there is no request or response containing all necessary information to create a valid session.&lt;br /&gt;
&lt;br /&gt;
==Form Login==&lt;br /&gt;
The Form Login provides a simple way of accessing the web frontend just by using standard HTML forms. The response contains a redirect link to the Web-UI. See [[OXSessionFormLogin]] for details.&lt;br /&gt;
&lt;br /&gt;
==Redeem Token Login==&lt;br /&gt;
With a valid session it is possible to acquire a secret. Using this secret another system is able to generate a valid session.&lt;br /&gt;
This session may also contain the users password (configurable). The system in question needs to be registered at the server and has to identify itself with a key configured at the open-xchange server. This is only for internal communication and by default no keys are available.&lt;br /&gt;
&lt;br /&gt;
== Authentication against other services ==&lt;br /&gt;
OX6 and AppSuite allow authentication using other services, too. This is not in the scope of this article. The Services team is available to build plugins for such services. Some standard ones are already implemented, see the following articles for that:&lt;br /&gt;
* [[Authentication IMAP Plugin description]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:OX6]]&lt;br /&gt;
[[Category:AppSuite]]&lt;br /&gt;
[[Category:Auth]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22420</id>
		<title>Login variations</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=Login_variations&amp;diff=22420"/>
		<updated>2016-09-29T09:48:09Z</updated>

		<summary type="html">&lt;p&gt;Daniel.becker: /* Access via web browser with user credentials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Login variations&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Introduction:&#039;&#039;&#039; This paper describes Open-Xchanges&#039;s authentication and session handling. It gives an overview of all available mechanisms and on how to safely pass on sessions from external applications to the Open-Xchange Server (Single Sign On, SSO).&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The Open-Xchange Server web front-end is implemented in AJAX (Asynchronous JavaScript and XML). Thus the complete user interface (GUI) is running in a browser. Opposed to standard web applications there are no HTML pages generated and delivered by the browser.&lt;br /&gt;
&lt;br /&gt;
The complete user front-end is rendered and displayed in the browser. Based on HTTP/S  the data are exchanged with the server via JavaScript Object Notation (JSON). That means it is not possible to simulate front-end actions  via HTTP/S request by simulating respectively formatted GET/POST calls. Instead, another abstraction is taking place that exclusively transfers data from GUI to server and vice versa.&lt;br /&gt;
&lt;br /&gt;
The Open-Xchange Server includes a session daemon (sessiond) that keeps the current data of a logged in user. If successfully authenticated the information kept in the session are sufficient for accessing the Open-Xchange Server.&lt;br /&gt;
&lt;br /&gt;
==Access to IMAP Back-End services==&lt;br /&gt;
To access external E-Mail systems (IMAP/SMTP) the Open-Xchange Server has to know the credentials of the current user for the system, i. e. the session object has to keep the respective password for the access in plain text. That means authenticating via SessionIDs alone is not sufficient. Authentication always has to take place by entering the username and password.&lt;br /&gt;
&lt;br /&gt;
(There are two exceptions: either if one master password is used for all IMAP accounts, or if a very special implementation of MAL is used, which does not need a password.)&lt;br /&gt;
&lt;br /&gt;
==Basic Implementation Rules==&lt;br /&gt;
* It must not be possible to get a valid session by e. g. guessing a SessionID. This is especially important when being passed on by an external system&lt;br /&gt;
* A session must not be verified by a single SessionID only, but has to compare at least two different data types, this is what the Session-Secret is for&lt;br /&gt;
* Both SessionID and Session-Secret must never be passed from the Open-Xchange server to the client in the same request. This ensures, that potential issues in the stack between the client and Open-Xchange (proxies, caches, loadbalancer, Apache, …) can not lead to wrong sessions &lt;br /&gt;
* To enhance security Session-Secret and SessionID are transferred as different data types. The Session-Secret will always be transferred as a cookie, the SessionID will be transferred as URL parameter if persistent auto-login is not activated for this session.&lt;br /&gt;
* It must never be possible to have conflicting session information per client (multiple cookies) within the same cookie store&lt;br /&gt;
* If any error in the session handling is detected, the relevant request is discarded and logged. It is not tried to fix the issue&lt;br /&gt;
* In memory data (SessionID) of the browser GUI must never be changed during a valid session&lt;br /&gt;
* All relevant information regarding session management must always be written to the relevant logfiles&lt;br /&gt;
* The whole mechanism is only secure when being used via encrypted connection&lt;br /&gt;
* ATTENTION: If persistent autologin is activated for the system and a user decided to use it, all information necessary to access the Open-Xchange server is stored within the browsers cookie store.  This means, that the security of the whole system depends on the level of security of the browsers cookie store&lt;br /&gt;
&lt;br /&gt;
== Authentication and Session Tokens ==&lt;br /&gt;
Following tokens are used for the session management:&lt;br /&gt;
&lt;br /&gt;
=== SessionID ===&lt;br /&gt;
The SessionID is used to identify every session. It is a UUID, generated by the backend via default Java UUID implementation. It is written into the OX logfiles for every log message. When no auto-login is used for the session, then the SessionID is transferred as an URL parameter. If auto-login is activated, then the SessionID is transferred as a cookie.&lt;br /&gt;
&lt;br /&gt;
=== Session-Secret ===&lt;br /&gt;
The Session-Secret is used to verify every session. It is a UUID, generated by the backend via default Java UUID implementation. Only accesses, where the Session-Secret matches with the one stored in SessionD for the given SessionID are valid. Mismatches lead to immediate session termination.&lt;br /&gt;
&lt;br /&gt;
=== Public Session ===&lt;br /&gt;
The public Session is used as a replacement for the SessionID. It is a UUID, generated by the backend via default Java UUID implementation. The Public Session is transferred as a cookie. Using the Public Session is limited to some non critical requests. By using this cookie instead of a request parameter, the browser is able to cache the response of special requests (e.g. contact images).&lt;br /&gt;
&lt;br /&gt;
=== Random ===&lt;br /&gt;
The Random-Token is a one time token with a limited lifetime, which is used to initiate sessions through 3rd party applications or websites. It is a UUID, generated by the backend via default Java UUID implementation. This token is deprecated and subject to change.&lt;br /&gt;
&lt;br /&gt;
=== Cookie Handling ===&lt;br /&gt;
In several situations, cookies are used to store and transfer the session tokens. The following rules for cookie creation and storage apply.&lt;br /&gt;
&lt;br /&gt;
=== Only one cookie per client session type ===&lt;br /&gt;
It must never happen, that the same client has more than one session associated with an Open-Xchange server. Therefore the cookies need to have the same name. If a new cookie is set to the browser, the original one will be overwritten. With the next client access either the SessionID or the Session-Secret do not match anymore and the invalid session is terminated.&lt;br /&gt;
Multiple clients with same cookie store&lt;br /&gt;
&lt;br /&gt;
On the other hand it may happen, that several clients use the same cookie store. E.g. a standard browser GUI session and a browser plugin session. Therefore the cookie name needs to contain informations about the client.&lt;br /&gt;
&lt;br /&gt;
=== Naming of cookies ===&lt;br /&gt;
The cookies are named following this schema:&lt;br /&gt;
&lt;br /&gt;
  open-xchange-session-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;SessionID&amp;gt;&amp;gt;&lt;br /&gt;
  open-xchange-secret-&amp;lt;&amp;lt;name token&amp;gt;&amp;gt;=&amp;lt;&amp;lt;Session-Secret&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;&amp;lt;name token&amp;gt;&amp;gt; is generated from configurable data associated with the client. It is a md5-hash build from the client-id and the User-Agent is used to identify the client. Other parameters can be added through a configuration file. If a request is performed by a browser with an invalid hash the corresponding cookies and session are invalidated.&lt;br /&gt;
&lt;br /&gt;
===Lifetime of cookies===&lt;br /&gt;
Normally, cookies are session cookies, which get invalid/deleted when the browser is shut down. &lt;br /&gt;
Using the persistent auto-login, the cookies are persistent cookies, with a configurable default. The default lifetime is one week.&lt;br /&gt;
&lt;br /&gt;
All cookies get deleted when a logout is performed.&lt;br /&gt;
&lt;br /&gt;
==IP Check==&lt;br /&gt;
Per default an IP check is activated to terminate every session immediately, if the IP address of the client changes during the session lifetime. This check is not processed, when a session is reactivated following the persistent auto-login process.&lt;br /&gt;
There are several configuration options to enable, disable the IP Check and to define IP Ranges to omit the check and/or accept recurring connections from within these ranges.&lt;br /&gt;
&lt;br /&gt;
==Access via web browser with user credentials==&lt;br /&gt;
When directly logging in to the system by entering the credentials, following steps will be done to authenticate the user or verify the valid session after the authentication:&lt;br /&gt;
&lt;br /&gt;
If the user does not use the persistent auto-login, the session is only valid as long as the browser is opened. It will be cleared either on logout, on  browser termination or with any occurring error.&lt;br /&gt;
&lt;br /&gt;
# Browser sends initial request to the Open-Xchange Server&lt;br /&gt;
## not authenticated yet&lt;br /&gt;
## no cookie&lt;br /&gt;
## no SessionID&lt;br /&gt;
# Open-Xchange Server sends AJAX application to browser it is loaded, no data is exchanged &lt;br /&gt;
# User enters username and password in the front-end&lt;br /&gt;
# Username and password are sent to the server via JSON (SSL). If the user activated persistent auto-login on the login screen, this information is passed with the same request&lt;br /&gt;
# The server authenticates and sends following data back to the browser via JSON (the data are all saved in the session object in sessiond)&lt;br /&gt;
## SessionID in JSON object&lt;br /&gt;
## Random token for initial login via JSON object (required for SSO login)&lt;br /&gt;
## Cookie with JSESSIONID for loadbalancing is set to the browser&lt;br /&gt;
# The second part of the tokens is delivered in a separate request&lt;br /&gt;
## Cookie with Session-Secret is set to the browser. If persistent auto-login is selected, the cookie is configured with the relevant type and validity&lt;br /&gt;
# AJAX front-end saves the SessionID in memory. AJAX front-end ignores random token&lt;br /&gt;
# AJAX sends initial data request via JSON to the Open-Xchange Server and provides following data:&lt;br /&gt;
## SessionID in JSON object&lt;br /&gt;
## Open-Xchange Server processes this data request and requests from browser the cookie with Session-Secret&lt;br /&gt;
# Open-Xchange Server compares:&lt;br /&gt;
## SessionID for validity in sessiond&lt;br /&gt;
## Session-Secret from Cookie for validity with sessiond&lt;br /&gt;
# Request is correctly authenticated and is answered&lt;br /&gt;
# Random token is discarded after timeout from sessiond &lt;br /&gt;
# If persistent auto-login is selected&lt;br /&gt;
## Cookie with SessionID is set to the browser. The cookie is configured with the relevant type and validity&lt;br /&gt;
# Repeat 7. - 10. until end of session&lt;br /&gt;
&lt;br /&gt;
==Access via web browser after authentication with external system==&lt;br /&gt;
The goal is to authenticate in the Open-Xchange system through an external system and to safely pass on the received session data to a browser. To do so the external system has to know the user data (username, password) in plain text. &lt;br /&gt;
&lt;br /&gt;
The process is based on the session initialization in the Open-Xchange Server via the JSON interface and on passing on the received data to a browser. The browser finally initializes the session with an additional random token that is only valid for one single access. &lt;br /&gt;
#	External tool sends initial JSON request directly to Open-Xchange Server&lt;br /&gt;
##	not authenticated yet&lt;br /&gt;
##	no cookie&lt;br /&gt;
##	no SessionID&lt;br /&gt;
#	The Open-Xchange Server authenticates and delivers back following data to external tool via JSON (all the data are stored in the session object in sessiond)&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Random token for initial login via JSON object (required for SSO login)&lt;br /&gt;
##	Cookie with Session-Secret is not set&lt;br /&gt;
#	External tool starts browser with special URL, that contains at least following data:&lt;br /&gt;
##	Random token for initial login&lt;br /&gt;
#	Open-Xchange Server compares:&lt;br /&gt;
##	Random token for validity in sessiond&lt;br /&gt;
#	Open-Xchange Server sends to the browser:&lt;br /&gt;
##	SessionID in JSON object&lt;br /&gt;
##	Cookie with JSESSIONID for loadbalancing is set to the browser&lt;br /&gt;
#	The second part of the tokens is delivered in a separate request&lt;br /&gt;
##	Cookie with Session-Secret is set to the browser If persistent auto-login is selected, the cookie is configured with the relevant type and validity&lt;br /&gt;
#	Open-Xchange removes random token from sessiond.&lt;br /&gt;
&lt;br /&gt;
Then the process continues as described in the section above. The session is then verified with the SessionID and Session-Secret.&lt;br /&gt;
&lt;br /&gt;
==Token Login==&lt;br /&gt;
A dedicated login action (tokenLogin) is used to acquire a server token bound to a given client token. The combination of these tokens allows another client to gain a valid session. This Login is intended to replace the random token login. With this method there is no request or response containing all necessary information to create a valid session.&lt;br /&gt;
&lt;br /&gt;
==Form Login==&lt;br /&gt;
The Form Login provides a simple way of accessing the web frontend just by using standard HTML forms. The response contains a redirect link to the Web-UI. See [[OXSessionFormLogin]] for details.&lt;br /&gt;
&lt;br /&gt;
==Redeem Token Login==&lt;br /&gt;
With a valid session it is possible to acquire a secret. Using this secret another system is able to generate a valid session.&lt;br /&gt;
This session may also contain the users password (configurable). The system in question needs to be registered at the server and has to identify itself with a key configured at the open-xchange server. This is only for internal communication and by default no keys are available.&lt;br /&gt;
&lt;br /&gt;
== Authentication against other services ==&lt;br /&gt;
OX6 and AppSuite allow authentication using other services, too. This is not in the scope of this article. The Services team is available to build plugins for such services. Some standard ones are already implemented, see the following articles for that:&lt;br /&gt;
* [[Authentication IMAP Plugin description]] &lt;br /&gt;
* [[Authentication LDAP Plugin description]] &lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:OX6]]&lt;br /&gt;
[[Category:AppSuite]]&lt;br /&gt;
[[Category:Auth]]&lt;/div&gt;</summary>
		<author><name>Daniel.becker</name></author>
	</entry>
</feed>