debops.roundcube default variables
Sections
Packages and installation
- roundcube__required_php_packages
List of PHP packages required by Roundcube. Refer to the official Roundcube documentation for details.
roundcube__required_php_packages: - 'iconv' - 'openssl' - 'session' - 'sockets' - 'xml' # Included in the xml package #- 'dom' - 'mbstring' - 'json' - 'intl'
- roundcube__optional_php_packages
List of recommended/optional PHP packages for Roundcube. Refer to the official Roundcube documentation for details.
roundcube__optional_php_packages: - '{{ "ldap" if roundcube__ldap_enabled | bool else [] }}' - '{{ "memcached" if roundcube__memcached_enabled | bool else [] }}' - '{{ "redis" if roundcube__redis_enabled | bool else [] }}' - 'fileinfo' - 'enchant' - 'zip'
- roundcube__custom_php_packages
List of user defined PHP packages for Roundcube.
roundcube__custom_php_packages: []
- roundcube__base_php_packages
List of base PHP packages required by Roundcube.
roundcube__base_php_packages: - '{{ roundcube__required_php_packages }}' - '{{ roundcube__apt_php_packages }}' - '{{ roundcube__optional_php_packages }}' - '{{ ["mysql"] if (roundcube__database_map[roundcube__database].dbtype == "mysql") else [] }}' - '{{ ["pgsql"] if (roundcube__database_map[roundcube__database].dbtype == "postgresql") else [] }}' - '{{ ["sqlite3"] if (roundcube__database_map[roundcube__database].dbtype == "sqlite") else [] }}'
- roundcube__apt_php_packages
PHP packages which are installed via APT repository if they are available in a sufficiently new version in the current distribution. The required minimal versions are taken from the file:composer.json.dist of the Roundcube 1.3.0 release. If you install an older version of Roundcube you may want to adjust this list.
roundcube__apt_php_packages: '{{ ["mail-mime", "net-smtp", "pear"] if ansible_distribution_release in ["stretch", "buster", "sid", "xenial", "yakkety", "zesty", "artful"] else [] }}'
- roundcube__packages
List of additional APT packages (e. g. language dictionaries) that should be installed with Roundcube.
roundcube__packages: []
- roundcube__base_packages
APT packages required for the Roundcube installation.
roundcube__base_packages: [ 'curl', 'file', 'unzip', 'aspell', 'aspell-en' ]
Roundcube user account
- roundcube__user
Roundcube system user account.
roundcube__user: 'roundcube'
- roundcube__group
Roundcube system user group.
roundcube__group: 'roundcube'
- roundcube__home
Path to the home directory of the Roundcube system account.
roundcube__home: '{{ (ansible_local.fhs.home | d("/var/local")) + "/" + roundcube__user }}'
- roundcube__comment
The GECOS string set for the Roundcube account.
roundcube__comment: 'Roundcube Webmail'
- roundcube__shell
The default shell of the Roundcube account.
roundcube__shell: '/usr/sbin/nologin'
Roundcube source and deployment
- roundcube__git_gpg_key
The GPG key used to sign Roundcube releases.
roundcube__git_gpg_key: '4295 5C9D 6F2A CA9D 3E96 D55F 3E54 28D0 262C 54F8'
- roundcube__git_additional_gpg_keys
List of additional GPG keys to add to the Roundcue user account. This might be needed if multiple people/organizations sign git commits or tags in the Roundcube repository, or installation from a private repository is used instead of a public one.
roundcube__git_additional_gpg_keys: []
- roundcube__git_repo
Roundcube source repository. You can specify a public or private git repository using the
https://protocol. See Deployment from private or internal git repository for more details.roundcube__git_repo: 'https://github.com/roundcube/roundcubemail.git'
- roundcube__git_dir
Roundcube source directory on the host.
roundcube__git_dir: '{{ roundcube__src + "/" + roundcube__git_repo.split("@" if ("@" in roundcube__git_repo) else "://")[1] }}'
- roundcube__git_version
Roundcube release tag to deploy.
roundcube__git_version: '1.6.0'
- roundcube__git_dest
Default path where Roundcube source files will be deployed.
roundcube__git_dest: '{{ roundcube__www + "/sites/" + roundcube__user + "/public" }}'
- roundcube__src
Base path for git bare repository with Roundcube source.
roundcube__src: '{{ (ansible_local.fhs.src | d("/usr/local/src")) + "/" + roundcube__user }}'
- roundcube__www
Base web root directory for Roundcube website.
roundcube__www: '{{ ansible_local.nginx.www if (ansible_local | d() and ansible_local.nginx | d()) else "/srv/www" }}'
- roundcube__webserver_user
Roundcube webserver user (needs read-only access to the website code).
roundcube__webserver_user: '{{ ansible_local.nginx.user | d("www-data") }}'
Database configuration
- roundcube__database
Database definition to use from the
roundcube__database_map.roundcube__database: 'sqlite-default'
- roundcube__database_user
Database user account to use for Roundcube.
roundcube__database_user: 'roundcube'
- roundcube__database_password_path
Path to the database password file.
roundcube__database_password_path: '{{ secret + "/credentials/" + inventory_hostname + "/roundcube/" + roundcube__database + "/" + roundcube__database_user + "/password" }}'
- roundcube__database_password
Database password for the account given in
roundcube__database_user.roundcube__database_password: '{{ lookup("password", roundcube__database_password_path + " length=30") }}'
- roundcube__database_name
Name of the database to use for Roundcube.
roundcube__database_name: '{{ roundcube__database_user if roundcube__database == "postgresql-default" else "roundcubemail" }}'
- roundcube__database_map
Database connection definitions. Select the database connection to use in
roundcube__database.roundcube__database_map: sqlite-default: dbtype: 'sqlite' dbname: 'db/roundcube.db' mysql-default: dbtype: 'mysql' dbname: '{{ roundcube__database_name }}' dbuser: '{{ roundcube__database_user }}' dbpass: '{{ roundcube__database_password }}' dbhost: 'localhost' dbtableprefix: '' postgresql-default: dbtype: 'postgresql' dbname: '{{ roundcube__database_name }}' dbuser: '{{ roundcube__database_user }}' dbpass: '{{ roundcube__database_password }}' dbhost: 'localhost' dbtableprefix: ''
- roundcube__database_schema_map
Database type to schema mapping.
roundcube__database_schema_map: mysql: '{{ roundcube__git_dest + "/SQL/mysql.initial.sql" }}' postgresql: '{{ roundcube__git_dest + "/SQL/postgres.initial.sql" }}'
- roundcube__database_schema
Initial Roundcube database schema loaded by Ansible.
roundcube__database_schema: '{{ roundcube__database_schema_map[roundcube__database_map[roundcube__database].dbtype] if roundcube__database_schema_map[roundcube__database_map[roundcube__database].dbtype] | d() else "" }}'
Cache configuration
- roundcube__memcached_enabled
Enable or disable support for memcached service. It will be enabled automatically if local instance of memcached is detected.
roundcube__memcached_enabled: '{{ True if (ansible_local | d() and ansible_local.memcached | d() and (ansible_local.memcached.installed | d()) | bool) else False }}'
- roundcube__memcached_hosts
List of the memcached instances to use by Roundcube. By default only the local instance will be used, if detected. See debops.memcached for more details.
roundcube__memcached_hosts: [ 'localhost:11211' ]
- roundcube__redis_enabled
Enable or disable support for redis service. It will be enabled automatically if local instance of redis is detected.
roundcube__redis_enabled: '{{ True if (ansible_local | d() and ansible_local.redis_server | d() and (ansible_local.redis_server.installed | d()) | bool) else False }}'
- roundcube__redis_host
The address of the Redis server instance to use. Currently only a single server is supported by Roundcube. By default the Redis instance on the same host will be used, if it's detected via Ansible local facts.
roundcube__redis_server: 'localhost'
- roundcube__redis_port
The TCP port to use for Redis connections.
roundcube__redis_port: '{{ ansible_local.redis_server.port | d("6379") }}'
- roundcube__redis_database
The Redis "database" number to use.
roundcube__redis_database: '1'
- roundcube__redis_password
Specify the password required for authentication to Redis.
roundcube__redis_password: '{{ ansible_local.redis_server.password | d("") }}'
- roundcube__redis_hosts
List of the Redis instances which should be used by Roundcube. Currently only a single instance is supported, but the variable expects a list.
roundcube__redis_hosts: [ '{{ ([roundcube__redis_server, roundcube__redis_port, roundcube__redis_database, roundcube__redis_password]) | join(":") }}' ]
- roundcube__session_storage
Select the session storage type to use. Currently supported are
redisandmemcached. The session storage will be selected automatically by detecting available cache services via Ansible local facts. If the variable is empty, session storage will not be configured and will fall back to thedbstorage type.roundcube__session_storage: '{{ "redis" if roundcube__redis_enabled | bool else ("memcached" if roundcube__memcached_enabled | bool else "") }}'
LDAP configuration
These variables configure the access to the LDAP address book managed by DebOps. See debops.ldap and debops.slapd role documentation to learn more about managing LDAP infrastructure with DebOps, and Roundcube LDAP Address Books documentation to learn more about configuring LDAP access in Roundcube.
- roundcube__ldap_enabled
Enable or disable LDAP integration in Roundcube.
roundcube__ldap_enabled: '{{ ansible_local.ldap.enabled if (ansible_local | d() and ansible_local.ldap | d() and ansible_local.ldap.enabled is defined) else False }}'
- roundcube__ldap_password_enabled
Enable or disable support for changing user passwords using the "password" Roundcube plugin. The plugin will be configured to use LDAP Password Modify Extended Operation (RFC 3062).
If the password change support is disabled, the "password" plugin will be disabled as well. Password change via other mechanisms can be configured separately via Ansible inventory variables.
roundcube__ldap_password_enabled: '{{ roundcube__ldap_enabled }}'
- roundcube__ldap_addressbook_name
The name of the LDAP address book. It will be visible on the address book list and as the source of the search results.
roundcube__ldap_addressbook_name: 'LDAP Address Book'
- roundcube__ldap_hosts
List of the FQDN addresses of the LDAP directory servers which should be used by Roundcube.
roundcube__ldap_hosts: '{{ ansible_local.ldap.hosts | d([]) }}'
- roundcube__ldap_port
The TCP port to use to connect to the LDAP directory.
roundcube__ldap_port: '{{ ansible_local.ldap.port | d("389") }}'
- roundcube__ldap_use_tls
Enable or disable support for STARTTLS extension while connecting to the LDAP directory.
roundcube__ldap_use_tls: '{{ ansible_local.ldap.start_tls | d(True) }}'
- roundcube__ldap_base_dn
The Base Distinguished Name of the LDAP directory, defined as a YAML list.
roundcube__ldap_base_dn: '{{ ansible_local.ldap.base_dn | d([]) }}'
- roundcube__ldap_device_dn
The Distinguished Name of the current host LDAP object, defined as a YAML list. It will be used as a base for the Roundcube application account LDAP object. If the list is empty, the role will not create the account LDAP object automatically.
roundcube__ldap_device_dn: '{{ ansible_local.ldap.device_dn | d([]) }}'
- roundcube__ldap_self_rdn
The Relative Distinguished Name of the account LDAP object used by the Roundcube application to access the LDAP directory.
roundcube__ldap_self_rdn: '{{ "uid=" + roundcube__user }}'
- roundcube__ldap_self_object_classes
List of the LDAP object classes which will be used to create the LDAP object used by the Roundcube application to access the LDAP directory.
roundcube__ldap_self_object_classes: [ 'account', 'simpleSecurityObject' ]
- roundcube__ldap_self_attributes
YAML dictionary that defines the attributes of the LDAP object used by the Roundcube application to access the LDAP directory.
roundcube__ldap_self_attributes: uid: '{{ roundcube__ldap_self_rdn.split("=")[1] }}' userPassword: '{{ roundcube__ldap_bindpw }}' host: '{{ [ansible_fqdn, ansible_hostname] | unique }}' description: 'Account used by the "Roundcube" application to access the LDAP directory'
- roundcube__ldap_binddn
The Distinguished Name of the account LDAP object used by the Roundcube application to bind to the LDAP directory.
roundcube__ldap_binddn: '{{ ([roundcube__ldap_self_rdn] + roundcube__ldap_device_dn) | join(",") }}'
- roundcube__ldap_bindpw
The password stored in the account LDAP object used by the Roundcube application to bind to the LDAP directory.
roundcube__ldap_bindpw: '{{ (lookup("password", secret + "/ldap/credentials/" + roundcube__ldap_binddn | to_uuid + ".password length=32")) if roundcube__ldap_enabled | bool else "" }}'
- roundcube__ldap_people_rdn
The Relative Distinguished Name of the people subtree which contains personal LDAP entries.
roundcube__ldap_people_rdn: '{{ ansible_local.ldap.people_rdn | d([]) }}'
- roundcube__ldap_people_dn
The Distinguished Name of the people subtree which will be used for LDAP address book searches.
roundcube__ldap_people_dn: '{{ [roundcube__ldap_people_rdn] + roundcube__ldap_base_dn }}'
- roundcube__ldap_groups_rdn
The Relative Distinguished Name of the groups subtree which contains group LDAP entries.
roundcube__ldap_groups_rdn: '{{ ansible_local.ldap.groups_rdn | d([]) }}'
- roundcube__ldap_groups_dn
The Distinguished Name of the groups subtree which will be used for LDAP address book searches.
roundcube__ldap_groups_dn: '{{ [roundcube__ldap_groups_rdn] + roundcube__ldap_base_dn }}'
Show or hide the LDAP address book in the Address Books interface. Hiding the LDAP address book still allows for searching its contents and autocompletion of recipient e-mail addresses.
Since the default LDAP address book configuration disables direct browsing of the contents and is read-only, displaying an entry for it is not very useful. Therefore it will be hidden by default.
roundcube__ldap_hidden: True
- roundcube__ldap_field_map
YAML dictionary which defines mapping between Roundcube address book fields and LDAP entry attributes. Some of the fields are not mapped yet because they don't work or there are currently no good LDAP equivalents.
roundcube__ldap_field_map: name: 'cn' firstname: 'givenName' #middlename #prefix #suffix surname: 'sn' #nicname #maidenname #gender #spouse #organization #department jobtitle: 'title' #assistant #manager email: 'mail:*' 'phone:home': 'homePhone' 'phone:work': 'telephoneNumber' 'phone:mobile': 'mobile' 'phone:pager': 'pager' 'phone:workfax': 'facsimileTelephoneNumber' street: 'street' zipcode: 'postalCode' region: 'st' locality: 'l' #address #birthday #anniversary #website #im notes: 'description:*' photo: 'jpegPhoto'
Roundcube application options
- roundcube__fqdn
The default DNS address of the RoundCube web application, used in the HTTP server configuration.
roundcube__fqdn: 'webmail.{{ roundcube__domain }}'
- roundcube__domain
The DNS domain of the RoundCube installation.
roundcube__domain: '{{ ansible_domain }}'
- roundcube__imap_srv_rr
List which contains the result of the DNS query for IMAP server
SRVresource records in the host's domain. See RFC 6186 for details.If there are no resource records, the role checks if a local Dovecot installation is present and uses the host FQDN as the IMAP server address. Finally,
imap.<domain>is used as a fallback.roundcube__imap_srv_rr: '{{ q("debops.debops.dig_srv", "_imaps._tcp." + roundcube__domain, ansible_fqdn if (ansible_local | d() and ansible_local.dovecot | d() and (ansible_local.dovecot.installed | d()) | bool) else "imap." + roundcube__domain, 993) }}'
- roundcube__imap_fqdn
The FQDN address of the IMAP server which stores user mailboxes.
The use of the FQDN instead of
localhostis required for X.509 certificate verification and for correct information in system logs.roundcube__imap_fqdn: '{{ roundcube__imap_srv_rr[0]["target"] }}'
- roundcube__imap_port
The TCP port to use for IMAP connections.
roundcube__imap_port: '{{ roundcube__imap_srv_rr[0]["port"] | string }}'
- roundcube__imap_server
The IMAP host chosen to perform the log-in. This variable is also called default_server by Roundcube .
Leave blank to show a textbox at login, give a list of hosts to display a pulldown menu or set one host as string. To use SSL/TLS connection, enter hostname with prefix ssl:// or tls:// Supported replacement variables: %n - hostname ($_SERVER['SERVER_NAME']) %t - hostname without the first part %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) %s - domain name after the '@' from e-mail address provided at login screen For example %n = mail.domain.tld, %t = domain.tld
roundcube__imap_server: '{{ ("ssl://" if (roundcube__imap_port == "993") else ("tls://" if (roundcube__imap_port == "143") else "tls://")) + roundcube__imap_fqdn + ":" + roundcube__imap_port }}'
- roundcube__smtp_srv_rr
List which contains the result of the DNS query for the SMTP (submission) server
SRVresource records in the host's domain. See RFC 6186 for details.If there are no resource records, the role checks if a local Postfix installation is present and uses the host FQDN as the SMTP server address. Finally,
smtp.<domain>is used as a fallback.roundcube__smtp_srv_rr: '{{ q("debops.debops.dig_srv", "_submissions._tcp." + roundcube__domain, ansible_fqdn if (ansible_local | d() and ansible_local.postfix | d() and (ansible_local.postfix.installed | d()) | bool) else ("smtp." + roundcube__domain), 465) }}'
- roundcube__smtp_fqdn
The FQDN address of the SMTP (submission) server which will be used to send e-mail messages.
The use of the FQDN instead of
localhostis required for X.509 certificate verification and for correct information in system logs.roundcube__smtp_fqdn: '{{ roundcube__smtp_srv_rr[0]["target"] }}'
- roundcube__smtp_port
The TCP port to use for SMTP connections.
Common values include 25 for unencrypted communication, 587 for STARTTLS, or 465 for SMTP over SSL (aka SMTPS).
roundcube__smtp_port: '{{ roundcube__smtp_srv_rr[0]["port"] | string }}'
- roundcube__smtp_server
SMTP server host (for sending mails).
Enter hostname with prefix tls:// to use STARTTLS, or use prefix ssl:// to use the deprecated SSL over SMTP (aka SMTPS) Supported replacement variables: %h - user's IMAP hostname %n - hostname ($_SERVER['SERVER_NAME']) %t - hostname without the first part %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) %z - IMAP domain (IMAP hostname without the first part) For example %n = mail.domain.tld, %t = domain.tld
roundcube__smtp_server: '{{ ("ssl://" if (roundcube__smtp_port == "465") else ("tls://" if (roundcube__smtp_port == "587") else "tls://")) + roundcube__smtp_fqdn + ":" + roundcube__smtp_port }}'
- roundcube__smtp_user
SMTP username (if required) if you use %u as the username Roundcube will use the current username for login.
roundcube__smtp_user: '%u'
- roundcube__smtp_pass
SMTP password (if required) if you use %p as the password Roundcube will use the current user's password for login.
roundcube__smtp_pass: '%p'
- roundcube__sieve_srv_rr
List which contains the result of the DNS query for Sieve server
SRVresource records in the host's domain. See RFC 5804 for details.If there are no resource records, the role checks if a local Dovecot installation is present and uses the host FQDN as the Sieve server address. Finally,
sieve.<domain>is used as a fallback.roundcube__sieve_srv_rr: '{{ q("debops.debops.dig_srv", "_sieve._tcp." + roundcube__domain, ansible_fqdn if (ansible_local | d() and ansible_local.dovecot | d() and (ansible_local.dovecot.installed | d()) | bool) else ("sieve." + roundcube__domain), 4190) }}'
- roundcube__sieve_fqdn
The FQDN address of the Sieve server which allows management of the Sieve filter scripts.
The use of the FQDN instead of
localhostis required for X.509 certificate verification and for correct information in system logs.roundcube__sieve_fqdn: '{{ roundcube__sieve_srv_rr[0]["target"] }}'
- roundcube__sieve_port
The TCP port used for Sieve connections.
roundcube__sieve_port: '{{ roundcube__sieve_srv_rr[0]["port"] | string }}'
- roundcube__sieve_server
The Sieve host chosen to access the Sieve configuration interface. Replacement variables supported in host name: %h - user's IMAP hostname %n - http hostname ($_SERVER['SERVER_NAME']) %d - domain (http hostname without the first part) For example %n = mail.domain.tld, %d = domain.tld
roundcube__sieve_server: '{{ "tls://" + roundcube__sieve_fqdn }}'
- roundcube__product_name
Name your service. This is displayed on the login screen and in the window title
roundcube__product_name: '{{ ansible_local.machine.organization | d("Roundcube") + " Webmail" }}'
- roundcube__des_key
Encryption key for the users imap password which is stored in the session record (and the client cookie if remember password is enabled).
roundcube__des_key: '{{ lookup("password", secret + "/credentials/" + inventory_hostname + "/roundcube/des_key chars=hexdigits length=24") }}'
- roundcube__username_domain
Specify a domain (realm) to add to usernames without a specified domain. Defining a default domain helps avoid creating separate RoundCube profiles when users use logins with and without a domain specified.
The default is to create a domain based on the host DNS domain.
roundcube__username_domain: '%d'
- roundcube__log_driver
Define the log driver. Currently available:
syslog,stdout,file.roundcube__log_driver: 'syslog'
Roundcube configuration file
These variables define the contents of the config/config.inc.php
local configuration file. See roundcube__configuration for more
details.
- roundcube__original_configuration
The list defines the Roundcube configuration options stored in the
config.inc.php.sampleconfiguration file. Modifications to these configuration options should be done using the subsequent variables.roundcube__original_configuration: # [[[ init - name: 'init_config' raw: | $config = array(); section: 'init' # [[[ sql - name: 'db_dsnw' comment: | Database connection string (DSN) for read+write operations Format (compatible with PEAR MDB2): db_provider://user:password@host/database Currently supported db_providers: mysql, pgsql, sqlite, mssql, sqlsrv, oracle For examples see https://pear.php.net/manual/en/package.database.mdb2.intro-dsn.php Note: for SQLite use absolute path (Linux): 'sqlite:////full/path/to/sqlite.db?mode=0646' or (Windows): 'sqlite:///C:/full/path/to/sqlite.db' Note: Various drivers support various additional arguments for connection, for Mysql: key, cipher, cert, capath, ca, verify_server_cert, for Postgres: application_name, sslmode, sslcert, sslkey, sslrootcert, sslcrl, sslcompression, service. e.g. 'mysql://roundcube:@localhost/roundcubemail?verify_server_cert=false' value: 'mysql://roundcube:pass@localhost/roundcubemail' section: 'sql' - name: 'db_dsnr' comment: | Database DSN for read-only operations (if empty write database will be used) useful for database replication value: '' section: 'sql' state: 'init' - name: 'db_dsnw_noread' comment: 'Disable the use of already established dsnw connections for subsequent reads' value: False section: 'sql' state: 'init' - name: 'db_persistent' comment: | use persistent db-connections beware this will not "always" work as expected see: http://www.php.net/manual/en/features.persistent-connections.php value: False section: 'sql' state: 'init' - name: 'db_prefix' comment: 'You can define specific table (and sequence) names prefix' value: '' section: 'sql' state: 'init' - name: 'db_table_dsn' comment: | Mapping of table names and connections to use for ALL operations. This can be used in a setup with replicated databases and a DB master where read/write access to cache tables should not go to master. array: - 'cache': 'r' 'cache_index': 'r' 'cache_thread': 'r' 'cache_messages': 'r' section: 'sql' state: 'init' - name: 'db_max_allowed_packet' comment: | It is possible to specify database variable values e.g. some limits here. Use them if your server is not MySQL or for better performance. For example Roundcube uses max_allowed_packet value (in bytes) which limits query size for database cache operations. value: null section: 'sql' state: 'init' # [[[ logging - name: 'log_driver' comment: | Log driver: 'syslog', 'stdout' or 'file'. value: 'file' section: 'logging' state: 'init' - name: 'log_date_format' comment: | Date format for log entries (read https://php.net/manual/en/function.date.php for all format characters) value: 'd-M-Y H:i:s O' section: 'logging' state: 'init' - name: 'log_session_id' comment: | Length of the session ID to prepend each log line with set to 0 to avoid session IDs being logged. value: 8 section: 'logging' state: 'init' - name: 'log_file_ext' comment: 'Default extension used for log file name' value: '.log' section: 'logging' state: 'init' - name: 'syslog_id' comment: 'Syslog ident string to use, if using the "syslog" log driver.' value: 'roundcube' section: 'logging' state: 'init' - name: 'syslog_facility' comment: | Syslog facility to use, if using the 'syslog' log driver. For possible values see installer or https://php.net/manual/en/function.openlog.php value: 'LOG_USER' quotes: False section: 'logging' state: 'init' - name: 'per_user_logging' comment: | Activate this option if logs should be written to per-user directories. Data will only be logged if a directory <log_dir>/<username>/ exists and is writable. value: False section: 'logging' state: 'init' - name: 'smtp_log' comment: 'Log sent messages to <log_dir>/sendmail.log or to syslog' value: True section: 'logging' state: 'init' - name: 'log_logins' comment: 'Log successful/failed logins to <log_dir>/userlogins.log or to syslog' value: False section: 'logging' state: 'init' - name: 'session_debug' comment: | Log session debug information/authentication errors to <log_dir>/session.log or to syslog value: False section: 'logging' state: 'init' - name: 'sql_debug' comment: 'Log SQL queries to <log_dir>/sql.log or to syslog' value: False section: 'logging' state: 'init' - name: 'imap_debug' comment: 'Log IMAP conversation to <log_dir>/imap.log or to syslog' value: False section: 'logging' state: 'init' - name: 'ldap_debug' comment: 'Log LDAP conversation to <log_dir>/ldap.log or to syslog' value: False section: 'logging' state: 'init' - name: 'smtp_debug' comment: 'Log SMTP conversation to <log_dir>/smtp.log or to syslog' value: False section: 'logging' state: 'init' - name: 'memcache_debug' comment: 'Log Memcache conversation to <log_dir>/memcache.log or to syslog' value: False section: 'logging' state: 'init' - name: 'apc_debug' comment: 'Log APC conversation to <log_dir>/apc.log or to syslog' value: False section: 'logging' state: 'init' - name: 'redis_debug' comment: 'Log Redis conversation to <log_dir>/redis.log or to syslog' value: False section: 'logging' state: 'init' # [[[ imap - name: 'imap_host' comment: | IMAP host chosen to perform the log-in. See defaults.inc.php for the option description. value: 'localhost:143' section: 'imap' - name: 'imap_auth_type' comment: | IMAP authentication method (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or null). Use 'IMAP' to authenticate with IMAP LOGIN command. By default the most secure method (from supported) will be selected. value: null section: 'imap' state: 'init' - name: 'imap_conn_options' comment: | IMAP socket context options See https://php.net/manual/en/context.ssl.php The example below enables server certificate validation Note: These can be also specified as an array of options indexed by hostname array: - ssl: - verify_peer: True verify_depth: 3 cafile: '/etc/ssl/certs/ca-certificates.crt' section: 'imap' state: 'init' - name: 'imap_timeout' comment: 'IMAP connection timeout, in seconds. Default: 0 (use default_socket_timeout)' value: 0 section: 'imap' state: 'init' - name: 'imap_auth_cid' comment: 'Optional IMAP authentication identifier to be used as authorization proxy' value: null section: 'imap' state: 'init' - name: 'imap_auth_pw' comment: 'Optional IMAP authentication password to be used for imap_auth_cid' value: null section: 'imap' state: 'init' - name: 'imap_delimiter' comment: | If you know your imap's folder delimiter, you can specify it here. Otherwise it will be determined automatically value: null section: 'imap' state: 'init' - name: 'imap_vendor' comment: | If you know your imap's folder vendor, you can specify it here. Otherwise it will be determined automatically. Use lower-case identifiers, e.g. 'dovecot', 'cyrus', 'gimap', 'hmail', 'uw-imap'. value: null section: 'imap' state: 'init' - name: 'imap_ns_personal' comment: | If IMAP server doesn't support NAMESPACE extension, but you're using shared folders or personal root folder is non-empty, you'll need to set these options. All can be strings or arrays of strings. Note: Folders need to be ended with directory separator, e.g. "INBOX." (special directory "~" is an exception to this rule) Note: These can be used also to overwrite server's namespaces Note: Set these to FALSE to disable access to specified namespace value: null section: 'imap' state: 'init' - name: 'imap_ns_other' value: null section: 'imap' state: 'init' - name: 'imap_ns_shared' value: null section: 'imap' state: 'init' - name: 'imap_force_caps' comment: | By default IMAP capabilities are read after connection to IMAP server In some cases, e.g. when using IMAP proxy, there's a need to refresh the list after login. Set to True if you've got this case. value: False section: 'imap' state: 'init' - name: 'imap_force_lsub' comment: | By default list of subscribed folders is determined using LIST-EXTENDED extension if available. Some servers (dovecot 1.x) returns wrong results for shared namespaces in this case. https://github.com/roundcube/roundcubemail/issues/2474 Enable this option to force LSUB command usage instead. Deprecated: Use imap_disabled_caps = array('LIST-EXTENDED') value: False section: 'imap' state: 'init' - name: 'imap_force_ns' comment: | Some server configurations (e.g. Courier) doesn't list folders in all namespaces Enable this option to force listing of folders in all namespaces value: False section: 'imap' state: 'init' - name: 'imap_skip_hidden_folders' comment: | Some servers return hidden folders (name starting with a dot) from user home directory. IMAP RFC does not forbid that. Enable this option to hide them and disable possibility to create such. value: False section: 'imap' state: 'init' - name: 'imap_dual_use_folders' comment: | Some servers do not support folders with both folders and messages inside If your server supports that use true, if it does not, use false. By default it will be determined automatically (once per user session). value: null section: 'imap' state: 'init' - name: 'imap_disabled_caps' comment: | List of disabled imap extensions. Use if your IMAP server has broken implementation of some feature and you can't remove it from CAPABILITY string on server-side. For example UW-IMAP server has broken ESEARCH. Note: Because the list is cached, re-login is required after change. value: [] section: 'imap' state: 'init' - name: 'imap_log_session' comment: | Log IMAP session identifiers after each IMAP login. This is used to relate IMAP session with Roundcube user sessions value: False section: 'imap' state: 'init' - name: 'imap_cache' comment: | Type of IMAP indexes cache. Supported values: 'db', 'apc' and 'memcache' or 'memcached'. value: null section: 'imap' state: 'init' - name: 'messages_cache' comment: | Enables messages cache. Only 'db' cache is supported. This requires an IMAP server that supports QRESYNC and CONDSTORE extensions (RFC7162). See synchronize() in program/lib/Roundcube/rcube_imap_cache.php for further info, or if you experience syncing problems. value: False section: 'imap' state: 'init' - name: 'imap_cache_ttl' comment: 'Lifetime of IMAP indexes cache. Possible units: s, m, h, d, w' value: '10d' section: 'imap' state: 'init' - name: 'messages_cache_ttl' comment: 'Lifetime of messages cache. Possible units: s, m, h, d, w' value: '10d' section: 'imap' state: 'init' - name: 'messages_cache_threshold' comment: | Maximum cached message size in kilobytes. Note: On MySQL this should be less than (max_allowed_packet - 30%) value: 50 section: 'imap' state: 'init' # [[[ smtp - name: 'smtp_host' comment: | SMTP server host (for sending mails). See defaults.inc.php for the option description. value: 'localhost:587' section: 'smtp' - name: 'smtp_user' comment: | SMTP username (if required) if you use %u as the username Roundcube will use the current username for login value: '%u' section: 'smtp' - name: 'smtp_pass' comment: | SMTP password (if required) if you use %p as the password Roundcube will use the current user's password for login value: '%p' section: 'smtp' - name: 'smtp_auth_type' comment: | SMTP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or empty to use best server supported one) value: null section: 'smtp' state: 'init' - name: 'smtp_auth_cid' comment: | Optional SMTP authentication identifier to be used as authorization proxy value: null section: 'smtp' state: 'init' - name: 'smtp_auth_pw' comment: | Optional SMTP authentication password to be used for smtp_auth_cid value: null section: 'smtp' state: 'init' - name: 'smtp_helo_host' comment: | SMTP HELO host Hostname to give to the remote server for SMTP 'HELO' or 'EHLO' messages Leave this blank and you will get the server variable 'server_name' or localhost if that isn't defined. value: '' section: 'smtp' state: 'init' - name: 'smtp_timeout' comment: | SMTP connection timeout, in seconds. Default: 0 (use default_socket_timeout) Note: There's a known issue where using ssl connection with timeout > 0 causes connection errors (https://bugs.php.net/bug.php?id=54511) value: 0 section: 'smtp' state: 'init' - name: 'smtp_conn_options' comment: | SMTP socket context options See https://php.net/manual/en/context.ssl.php The example below enables server certificate validation, and requires 'smtp_timeout' to be non zero. Note: These can be also specified as an array of options indexed by hostname array: - ssl: - verify_peer: True verify_depth: 3 cafile: '/etc/ssl/certs/ca-certificates.crt' section: 'smtp' state: 'init' # [[[ ldap - name: 'ldap_cache' comment: | Type of LDAP cache. Supported values: 'db', 'apc' and 'memcache' or 'memcached'. value: 'db' section: 'ldap' state: 'init' - name: 'ldap_cache_ttl' comment: 'Lifetime of LDAP cache. Possible units: s, m, h, d, w' value: '10m' section: 'ldap' state: 'init' # [[[ cache - name: 'memcache_hosts' comment: | Use these hosts for accessing memcached Define any number of hosts in the form of hostname:port or unix:///path/to/socket.file Example: array('localhost:11211', '192.168.1.12:11211', 'unix:///var/tmp/memcached.sock'); value: null section: 'cache' state: 'init' - name: 'memcache_pconnect' comment: | Controls the use of a persistent connections to memcache servers See https://php.net/manual/en/memcache.addserver.php value: True section: 'cache' state: 'init' - name: 'memcache_timeout' comment: | Value in seconds which will be used for connecting to the daemon See https://php.net/manual/en/memcache.addserver.php value: 1 section: 'cache' state: 'init' - name: 'memcache_retry_interval' comment: | Controls how often a failed server will be retried (value in seconds). Setting this parameter to -1 disables automatic retry. See https://php.net/manual/en/memcache.addserver.php value: 15 section: 'cache' state: 'init' - name: 'redis_hosts' comment: | Use these hosts for accessing Redis. Currently only one host is supported. Cluster support may come in a future release. You can pass 4 fields, host, port (optional), database (optional) and password (optional). Unset fields will be set to the default values host=127.0.0.1, port=6379. Examples: array('localhost:6379'); array('192.168.1.1:6379:1:secret'); array('unix:///var/run/redis/redis-server.sock:1:secret'); value: null section: 'cache' state: 'init' - name: 'memcache_max_allowed_packet' comment: 'Maximum size of an object in memcache (in bytes). Default: 2MB' value: '2M' section: 'cache' state: 'init' - name: 'apc_mac_allowed_packet' comment: 'Maximum size of an object in APC cache (in bytes). Default: 2MB' value: '2M' section: 'cache' state: 'init' - name: 'redis_max_allowed_packet' comment: 'Maximum size of an object in Redis cache (in bytes). Default: 2MB' value: '2M' section: 'cache' state: 'init' # [[[ system - name: 'enable_installer' comment: | THIS OPTION WILL ALLOW THE INSTALLER TO RUN AND CAN EXPOSE SENSITIVE CONFIG DATA. ONLY ENABLE IT IF YOU'RE REALLY SURE WHAT YOU'RE DOING! value: False section: 'system' state: 'init' - name: 'dont_override' comment: "Don't allow these settings to be overridden by the user" value: [] section: 'system' state: 'init' - name: 'disabled_actions' comment: 'List of disabled UI elements/actions' value: [] section: 'system' state: 'init' - name: 'advanced_prefs' comment: | Define which settings should be listed under the 'advanced' block which is hidden by default value: [] section: 'system' state: 'init' - name: 'support_url' comment: | Provide an URL where a user can get support for this Roundcube installation PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE! value: '' section: 'system' - name: 'skin_logo' comment: | Logo image replacement. Specifies location of the image as: - URL relative to the document root of this Roundcube installation - full URL with http:// or https:// prefix - URL relative to the current skin folder (when starts with a '/') An array can be used to specify different logos for specific template files The array key specifies the place(s) the logo should be applied to and is made up of (up to) 3 parts: - skin name prefix (always with colon, can be replaced with *) - template name (or * for all templates) - logo type - it is used for logos used on multiple templates the available types include '[favicon]' for favicon, '[print]' for logo on all print templates (e.g. messageprint, contactprint) and '[small]' for small screen logo in supported skins Example config for skin_logo array( // show the image /images/logo_login_small.png for the Login screen in the Elastic skin on small screens "elastic:login[small]" => "/images/logo_login_small.png", // show the image /images/logo_login.png for the Login screen in the Elastic skin "elastic:login" => "/images/logo_login.png", // show the image /images/logo_small.png in the Elastic skin "elastic:*[small]" => "/images/logo_small.png", // show the image /images/larry.png in the Larry skin "larry:*" => "/images/larry.png", // show the image /images/logo_login.png on the login template in all skins "login" => "/images/logo_login.png", // show the image /images/logo_print.png for all print type logos in all skins "[print]" => "/images/logo_print.png", ); value: null section: 'system' state: 'init' - name: 'auto_create_user' comment: | Automatically create a new Roundcube user when log-in the first time. A new user will be created once the IMAP login succeeds. Set to false if only registered users can use this service value: True section: 'system' state: 'init' - name: 'user_aliases' comment: 'Enables possibility to log in using email address from user identities' value: False section: 'system' state: 'init' - name: 'log_dir' comment: | use this folder to store log files must be writeable for the user who runs PHP process (Apache user if mod_php is being used) This is used by the 'file' log driver. value: "RCUBE_INSTALL_PATH . 'logs/'" quotes: False section: 'system' state: 'init' - name: 'temp_dir' comment: | Use this folder to store temp files Must be writeable for the user who runs PHP process (Apache user if mod_php is being used) value: "RCUBE_INSTALL_PATH . 'temp/'" quotes: False section: 'system' state: 'init' - name: 'temp_dir_ttl' comment: | Expire files in temp_dir after 48 hours Possible units: s, m, h, d, w value: '48h' section: 'system' state: 'init' - name: 'force_https' comment: | Enforce connections over https With this option enabled, all non-secure connections will be redirected. It can be also a port number, hostname or hostname:port if they are different than default HTTP_HOST:443 value: False section: 'system' state: 'init' - name: 'use_https' comment: | Tell PHP that it should work as under secure connection even if it doesn't recognize it as secure ($_SERVER['HTTPS'] is not set) e.g. when you're running Roundcube behind a https proxy This option is mutually exclusive to 'force_https' and only either one of them should be set to true. value: False section: 'system' state: 'init' - name: 'login_autocomplete' comment: | Allow browser-autocompletion on login form. 0 - disabled, 1 - username and host only, 2 - username, host, password value: 0 section: 'system' state: 'init' - name: 'login_lc' comment: | Forces conversion of logins to lower case. 0 - disabled, 1 - only domain part, 2 - domain and local part. If users authentication is case-insensitive this must be enabled. Note: After enabling it all user records need to be updated, e.g. with query: UPDATE users SET username = LOWER(username); value: 2 section: 'system' state: 'init' - name: 'login_username_maxlen' comment: 'Maximum length (in bytes) of logon username and password.' value: 1024 section: 'system' state: 'init' - name: 'login_password_maxlen' value: 1024 section: 'system' state: 'init' - name: 'login_username_filter' comment: | Logon username filter. Regular expression for use with preg_match(). Example: '/^[a-z0-9_@.-]+$/' value: null section: 'system' state: 'init' - name: 'login_rate_limit' comment: | Brute-force attacks prevention. The value specifies maximum number of failed logon attempts per minute. value: 3 section: 'system' state: 'init' - name: 'skin_include_php' comment: 'Includes should be interpreted as PHP files' value: False section: 'system' state: 'init' - name: 'display_product_info' comment: | Display product name and software version on login screen 0 - hide product name and version number, 1 - show product name only, 2 - show product name and version number value: 1 section: 'system' state: 'init' - name: 'session_lifetime' comment: 'Session lifetime in minutes' value: 10 section: 'system' state: 'init' - name: 'session_domain' comment: 'Session domain: .example.org' value: '' section: 'system' state: 'init' - name: 'session_name' comment: | Session name. Default: 'roundcube_sessid' value: null section: 'system' state: 'init' - name: 'session_auth_name' comment: | Session authentication cookie name. Default: 'roundcube_sessauth' value: null section: 'system' state: 'init' - name: 'session_path' comment: | Session path. Defaults to PHP session.cookie_path setting. value: null section: 'system' state: 'init' - name: 'session_storage' comment: | Backend to use for session storage. Can either be 'db' (default), 'redis', 'memcache', or 'php' If set to 'memcache' or 'memcached', a list of servers need to be specified in 'memcache_hosts' Make sure the Memcache extension (https://pecl.php.net/package/memcache) version >= 2.0.0 or the Memcached extension (https://pecl.php.net/package/memcached) version >= 2.0.0 is installed. If set to 'redis', a server needs to be specified in 'redis_hosts' Make sure the Redis extension (https://pecl.php.net/package/redis) version >= 2.0.0 is installed. Setting this value to 'php' will use the default session save handler configured in PHP value: 'db' section: 'system' state: 'init' - name: 'proxy_whitelist' comment: | List of trusted proxies X_FORWARDED_* and X_REAL_IP headers are only accepted from these IPs value: [] section: 'system' state: 'init' - name: 'trusted_host_pattern' comment: | List of trusted host names Attackers can modify Host header of the HTTP request causing $_SERVER['SERVER_NAME'] or $_SERVER['HTTP_HOST'] variables pointing to a different host, that could be used to collect user names and passwords. Some server configurations prevent that, but not all. An empty list accepts any host name. The list can contain host names or PCRE patterns (without // delimiters, that will be added automatically). value: [] section: 'system' state: 'init' - name: 'ip_check' comment: 'Check client IP in session authorization' value: False section: 'system' state: 'init' - name: 'x_frame_options' comment: | X-Frame-Options HTTP header value sent to prevent from Clickjacking. Possible values: sameorigin|deny|allow-from <uri>. Set to false in order to disable sending the header. value: 'sameorigin' section: 'system' state: 'init' - name: 'des_key' comment: | this key is used to encrypt the users imap password which is stored in the session record (and the client cookie if remember password is enabled). please provide a string of exactly 24 chars. YOUR KEY MUST BE DIFFERENT THAN THE SAMPLE VALUE FOR SECURITY REASONS value: 'rcmail-!24ByteDESkey*Str' section: 'system' - name: 'cipher_method' comment: | Encryption algorithm. You can use any method supported by OpenSSL. Default is set for backward compatibility to DES-EDE3-CBC, but you can choose e.g. AES-256-CBC which we consider a better choice. value: 'DES-EDE3-CBC' section: 'system' state: 'init' - name: 'username_domain' comment: | Automatically add this domain to user names for login Only for IMAP servers that require full e-mail addresses for login Specify an array with 'host' => 'domain' values to support multiple hosts Supported replacement variables: %h - user's IMAP hostname %n - hostname ($_SERVER['SERVER_NAME']) %t - hostname without the first part %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) %z - IMAP domain (IMAP hostname without the first part) For example %n = mail.domain.tld, %t = domain.tld value: '' section: 'system' state: 'init' - name: 'username_domain_forced' comment: | Force domain configured in username_domain to be used for login. Any domain in username will be replaced by username_domain. value: False section: 'system' state: 'init' - name: 'mail_domain' comment: | This domain will be used to form e-mail addresses of new users Specify an array with 'host' => 'domain' values to support multiple hosts Supported replacement variables: %h - user's IMAP hostname %n - http hostname ($_SERVER['SERVER_NAME']) %d - domain (http hostname without the first part) %z - IMAP domain (IMAP hostname without the first part) For example %n = mail.domain.tld, %t = domain.tld value: '' section: 'system' state: 'init' - name: 'password_charset' comment: | Password character set, to change the password for user authentication or for password change operations value: 'UTF-8' section: 'system' state: 'init' - name: 'sendmail_delay' comment: 'How many seconds must pass between emails sent by a user' value: 0 section: 'system' state: 'init' - name: 'max_message_size' comment: | Message size limit. Note that SMTP server(s) may use a different value. This limit is verified when user attaches files to a composed message. Size in bytes (possible unit suffix: K, M, G) value: '100M' section: 'system' state: 'init' - name: 'max_recipients' comment: | Maximum number of recipients per message (including To, Cc, Bcc). Default: 0 (no limit) value: 0 section: 'system' state: 'init' - name: 'max_disclosed_recipients' comment: | Maximum number of recipients per message excluding Bcc header. This is a soft limit, which means we only display a warning to the user. Default: 5 value: 5 section: 'system' state: 'init' - name: 'max_group_members' comment: | Maximum allowed number of members of an address group. Default: 0 (no limit) If 'max_recipients' is set this value should be less or equal value: 0 section: 'system' state: 'init' - name: 'product_name' comment: | Name your service. This is displayed on the login screen and in the window title value: 'Roundcube Webmail' section: 'system' - name: 'useragent' comment: 'Add this user-agent to message headers when sending' value: "'Roundcube Webmail/'.RCUBE_VERSION" quotes: False section: 'system' state: 'init' - name: 'include_host_config' comment: | Try to load host-specific configuration See https://github.com/roundcube/roundcubemail/wiki/Configuration:-Multi-Domain-Setup for more details value: False section: 'system' state: 'init' - name: 'generic_message_footer' comment: | Path to a text file which will be added to each sent message Paths are relative to the Roundcube root folder value: '' section: 'system' state: 'init' - name: 'generic_message_footer_html' comment: | Path to a text file which will be added to each sent HTML message Paths are relative to the Roundcube root folder value: '' section: 'system' state: 'init' - name: 'http_received_header' comment: | Add a received header to outgoing mails containing the creators IP and hostname value: False section: 'system' state: 'init' - name: 'http_received_header_encrypt' comment: | Whether or not to encrypt the IP address and the host name these could, in some circles, be considered as sensitive information; however, for the administrator, these could be invaluable help when tracking down issues. value: False section: 'system' state: 'init' - name: 'line_length' comment: | Number of chars allowed for line when wrapping text. Text wrapping is done when composing/sending messages value: 72 section: 'system' state: 'init' - name: 'send_format_flowed' comment: 'Send plaintext messages as format=flowed' value: True section: 'system' state: 'init' - name: 'mdn_use_from' comment: | According to RFC2298, return receipt envelope sender address must be empty. If this option is true, Roundcube will use user's identity as envelope sender for MDN responses. value: False section: 'system' state: 'init' - name: 'identities_level' comment: | Set identities access level: 0 - many identities with possibility to edit all params 1 - many identities with possibility to edit all params but not email address 2 - one identity with possibility to edit all params 3 - one identity with possibility to edit all params but not email address 4 - one identity with possibility to edit only signature value: 0 section: 'system' state: 'init' - name: 'identity_image_size' comment: | Maximum size of uploaded image in kilobytes Images (in html signatures) are stored in database as data URIs value: 64 section: 'system' state: 'init' - name: 'client_mimetypes' comment: | Mimetypes supported by the browser. Attachments of these types will open in a preview window Either a comma-separated list or an array: 'text/plain,text/html,text/xml,image/jpeg,image/gif,image/png,application/pdf' value: null section: 'system' state: 'init' - name: 'mime_magic' comment: | Path to a local mime magic database file for PHPs finfo extension. Set to null if the default path should be used. value: null section: 'system' state: 'init' - name: 'mime_types' comment: | Absolute path to a local mime.types mapping table file. This is used to derive mime-types from the filename extension or vice versa. Such a file is usually part of the apache webserver. If you don't find a file named mime.types on your system, download it from https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types value: null section: 'system' state: 'init' - name: 'im_identify_path' comment: | Path to imagemagick identify binary (if not set we'll use Imagick or GD extensions) value: null section: 'system' state: 'init' - name: 'im_convert_path' comment: | Path to imagemagick convert binary (if not set we'll use Imagick or GD extensions) value: null section: 'system' state: 'init' - name: 'image_thumbnail_size' comment: | Size of thumbnails from image attachments displayed below the message content. Note: whether images are displayed at all depends on the 'inline_images' option. Set to 0 to display images in full size. value: 240 section: 'system' state: 'init' - name: 'contact_photo_size' comment: 'Maximum size of uploaded contact photos in pixel' value: 160 section: 'system' state: 'init' - name: 'email_dns_check' comment: 'Enable DNS checking for e-mail address validation' value: False section: 'system' state: 'init' - name: 'no_save_sent_messages' comment: | Disables saving sent messages in Sent folder (like gmail) (Default: false) Note: useful when SMTP server stores sent mail in user mailbox value: False section: 'system' state: 'init' - name: 'use_secure_urls' comment: | Improve system security by using special URL with security token. This can be set to a number defining token length. Default: 16. Warning: This requires http server configuration. Sample: RewriteRule ^/roundcubemail/[a-zA-Z0-9]{16}/(.*) /roundcubemail/$1 [PT] Alias /roundcubemail /var/www/roundcubemail/ Note: Use assets_path to not prevent the browser from caching assets value: False section: 'system' state: 'init' - name: 'assets_path' comment: | Allows to define separate server/path for image/js/css files Warning: If the domain is different cross-domain access to some resources need to be allowed Sample: <FilesMatch ".(eot|ttf|woff)"> Header set Access-Control-Allow-Origin "*" </FilesMatch> value: '' section: 'system' state: 'init' - name: 'assets_dir' comment: | While assets_path is for the browser, assets_dir informs PHP code about the location of asset files in filesystem value: '' section: 'system' state: 'init' # [[[ plugins - name: 'plugins' comment: 'List of active plugins (in plugins/ directory)' value: [ 'archive', 'zipdownload' ] section: 'plugins' # [[[ ui - name: 'message_sort_col' comment: | Default messages sort column. Use empty value for default server's sorting, or 'arrival', 'date', 'subject', 'from', 'to', 'fromto', 'size', 'cc' value: '' section: 'ui' state: 'init' - name: 'message_sort_order' comment: 'Default messages sort order' value: 'DESC' section: 'ui' state: 'init' - name: 'list_cols' comment: | These cols are shown in the message list. Available cols are: subject, from, to, fromto, cc, replyto, date, size, status, flag, attachment, priority value: [ 'subject', 'status', 'fromto', 'date', 'size', 'flag', 'attachment' ] section: 'ui' state: 'init' - name: 'language' comment: | The default locale setting (leave empty for auto-detection) RFC1766 formatted language name like en_US, de_DE, de_CH, fr_FR, pt_BR value: null section: 'ui' state: 'init' - name: 'date_format' comment: 'Use this format for date display (date or strftime format)' value: 'Y-m-d' section: 'ui' state: 'init' - name: 'date_formats' comment: | Give this choice of date formats to the user to select from Note: do not use ambiguous formats like m/d/Y value: [ 'Y-m-d', 'Y/m/d', 'Y.m.d', 'd-m-Y', 'd/m/Y', 'd.m.Y', 'j.n.Y' ] section: 'ui' state: 'init' - name: 'time_format' comment: 'Use this format for time display (date or strftime format)' value: 'H:i' section: 'ui' state: 'init' - name: 'time_formats' comment: 'Give this choice of time formats to the user to select from' value: [ 'G:i', 'H:i', 'g:i a', 'h:i A' ] section: 'ui' state: 'init' - name: 'date_short' comment: | Use this format for short date display (derived from date_format and time_format) value: 'D H:i' section: 'ui' state: 'init' - name: 'date_long' comment: | Use this format for detailed date/time formatting (derived from date_format and time_format) value: 'Y-m-d H:i' section: 'ui' state: 'init' - name: 'drafts_mbox' comment: | Store draft message is this mailbox Leave blank if draft messages should not be stored NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) value: 'Drafts' section: 'ui' state: 'init' - name: 'junk_mbox' comment: | Store spam messages in this mailbox NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) value: 'Junk' section: 'ui' state: 'init' - name: 'sent_mbox' comment: | Store sent message is this mailbox Leave blank if sent messages should not be stored NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) value: 'Sent' section: 'ui' state: 'init' - name: 'trash_mbox' comment: | Move messages to this folder when deleting them Leave blank if they should be deleted directly NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) value: 'Trash' section: 'ui' state: 'init' - name: 'create_default_folders' comment: | Automatically create the above listed default folders on user login value: False section: 'ui' state: 'init' - name: 'protect_default_folders' comment: | Protect the default folders from renames, deletes, and subscription changes value: True section: 'ui' state: 'init' - name: 'show_real_foldernames' comment: | Disable localization of the default folder names listed above value: False section: 'ui' state: 'init' - name: 'quota_zero_as_unlimited' comment: | If in your system 0 quota means no limit set this option to true value: False section: 'ui' state: 'init' - name: 'enable_spellcheck' comment: | Make use of the built-in spell checker. It is based on GoogieSpell. value: True section: 'ui' state: 'init' - name: 'spellcheck_engine' comment: | Set the spell checking engine. Possible values: - 'googie' - the default (also used for connecting to Nox Spell Server, see 'spellcheck_uri' setting) - 'pspell' - requires the PHP Pspell module and aspell installed - 'enchant' - requires the PHP Enchant module - 'atd' - install your own After the Deadline server or check with the people at http://www.afterthedeadline.com before using their API Since Google shut down their public spell checking service, the default settings connect to https://spell.roundcube.net/ which is a hosted service provided by Roundcube. You can connect to any other googie-compliant service by setting 'spellcheck_uri' accordingly. value: 'googie' section: 'ui' state: 'init' - name: 'spellcheck_uri' comment: | For locally installed Nox Spell Server or After the Deadline services, please specify the URI to call it. Get Nox Spell Server from http://orangoo.com/labs/?page_id=72 or the After the Deadline package from http://www.afterthedeadline.com. Leave empty to use the public API of service.afterthedeadline.com value: '' section: 'ui' state: 'init' - name: 'spellcheck_languages' comment: | These languages can be selected for spell checking. Configure as a PHP style hash array: array('en'=>'English', 'de'=>'Deutsch'); Leave empty for default set of available language. value: null section: 'ui' state: 'init' - name: 'spellcheck_ignore_caps' comment: | Makes that words with all letters capitalized will be ignored (e.g. GOOGLE) value: False section: 'ui' state: 'init' - name: 'spellcheck_ignore_nums' comment: | Makes that words with numbers will be ignored (e.g. g00gle) value: False section: 'ui' state: 'init' - name: 'spellcheck_ignore_syms' comment: | Makes that words with symbols will be ignored (e.g. g@@gle) value: False section: 'ui' state: 'init' - name: 'sig_max_lines' comment: | Number of lines at the end of a message considered to contain the signature. Increase this value if signatures are not properly detected and colored value: 15 section: 'ui' state: 'init' - name: 'max_pagesize' comment: | Don't let users set pagesize to more than this value if set value: 200 section: 'ui' state: 'init' - name: 'min_refresh_interval' comment: | Minimal value of user's 'refresh_interval' setting (in seconds) value: 60 section: 'ui' state: 'init' - name: 'undo_timeout' comment: | Specifies for how many seconds the Undo button will be available after object delete action. Currently used with supporting address book sources. Setting it to 0, disables the feature. value: 0 section: 'ui' state: 'init' - name: 'compose_responses_static' comment: | A static list of canned responses which are immutable for the user array: - [ 'name': 'Canned Response 1', 'text': 'Static Response One' ] - [ 'name': 'Canned Response 2', 'text': 'Static Response Two' ] section: 'ui' state: 'init' - name: 'keyservers' comment: | List of HKP key servers for PGP public key lookups in Enigma/Mailvelope Default: array("keys.fedoraproject.org", "keybase.io") value: [] section: 'ui' state: 'init' # [[[ addressbook - name: 'address_book_type' comment: | This indicates which type of address book to use. Possible choices: 'sql' - built-in sql addressbook enabled (default), '' - built-in sql addressbook disabled. Still LDAP or plugin-added addressbooks will be available. BC Note: The value can actually be anything except 'sql', it does not matter. value: 'sql' section: 'addressbook' state: 'init' - name: 'ldap_public' comment: | In order to enable public ldap search, configure an array like the Verisign example further below. if you would like to test, simply uncomment the example. Array key must contain only safe characters, ie. a-zA-Z0-9_ value: [] section: 'addressbook' state: 'init' - name: 'ldap_public_verisign' option: [ 'ldap_public', 'Verisign' ] comment: | If you are going to use LDAP for individual address books, you will need to set 'user_specific' to true and use the variables to generate the appropriate DNs to access it. The recommended directory structure for LDAP is to store all the address book entries under the users main entry, e.g.: o=root ou=people uid=user@domain mail=contact@contactdomain So the base_dn would be uid=%fu,ou=people,o=root The bind_dn would be the same as based_dn or some super user login. array: - name: 'Verisign.com' # Replacement variables supported in host names: # %h - user's IMAP hostname # %n - hostname ($_SERVER['SERVER_NAME']) # %t - hostname without the first part # %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) # %z - IMAP domain (IMAP hostname without the first part) # For example %n = mail.domain.tld, %t = domain.tld hosts: [ 'directory.verisign.com' ] port: 389 use_tls: False ldap_version: 3 # using LDAPv3 # The timeout (in seconds) for connect + bind arrempts. This is only # supported in PHP >= 5.3.0 with OpenLDAP 2.x network_timeout: 10 # If true the base_dn, bind_dn and bind_pass default to the user's IMAP login. user_specific: False # When 'user_specific' is enabled following variables can be used in base_dn/bind_dn config: # %fu - The full username provided, assumes the username is an email # address, uses the username_domain value if not an email address. # %u - The username prior to the '@'. # %d - The domain name after the '@'. # %dc - The domain name hierarchal string e.g. "dc=test,dc=domain,dc=com" # %dn - DN found by ldap search when search_filter/search_base_dn are used base_dn: '' bind_dn: '' bind_pass: '' # It's possible to bind for an individual address book # The login name is used to search for the DN to bind with search_base_dn: '' search_filter: '' # e.g. '(& (objectClass=posixAccount) (uid=%u) )' # DN and password to bind as before searching for bind DN, if anonymous search is not allowed search_bind_dn: '' search_bind_pw: '' # Base DN and filter used for resolving the user's domain root DN which feeds the %dc variables # Leave empty to skip this lookup and derive the root DN from the username domain domain_base_dn: '' domain_filter: '' # Optional map of replacement strings => attributes used when binding for an individual address book search_bind_attrib: [] # e.g. array('%udc' => 'ou') # Default for %dn variable if search doesn't return DN value search_dn_default: '' # Optional authentication identifier to be used as SASL authorization proxy # bind_dn need to be empty auth_cid: '' # SASL authentication method (for proxy auth), e.g. DIGEST-MD5 auth_method: '' # Indicates if the addressbook shall be hidden from the list. # With this option enabled you can still search/view contacts. hidden: False # Indicates if the addressbook shall not list contacts but only allows searching. searchonly: False # Indicates if we can write to the LDAP directory or not. # If writable is true then these fields need to be populated: # LDAP_Object_Classes, required_fields, LDAP_rdn writable: False # To create a new contact these are the object classes to specify # (or any other classes you wish to use). LDAP_Object_Classes: [ 'top', 'inetOrgPerson' ] # The RDN field that is used for new entries, this field needs # to be one of the search_fields, the base of base_dn is appended # to the RDN to insert into the LDAP directory. LDAP_rdn: 'cn' # The required fields needed to build a new contact as required by # the object classes (can include additional fields not required by the object classes). required_fields: [ 'cn', 'sn', 'mail' ] search_fields: [ 'mail', 'cn' ] # Fields to search in # Mapping of contact fields to directory attributes # 1. for every attribute one can specify the number of values (limit) allowed. # default is 1, a wildcard * means unlimited # 2. another possible parameter is separator character for composite fields # 3. it's possible to define field format for write operations, e.g. for date fields # example: 'birthday:date[YmdHis\\Z]' fieldmap: # Roundcube LDAP:limit - 'name': 'cn' 'surname': 'sn' 'firstname': 'givenName' 'jobtitle': 'title' 'email': 'mail:*' 'phone:home': 'homePhone' 'phone:work': 'telephoneNumber' 'phone:mobile': 'mobile' 'phone:pager': 'pager' 'phone:workfax': 'facsimileTelephoneNumber' 'street': 'street' 'zipcode': 'postalCode' 'region': 'st' 'locality': 'l' # If you country is a complex object, you need to configure 'sub_fields' below 'country': 'c' 'organization': 'o' 'department': 'ou' 'notes': 'description' 'photo': 'jpegPhoto' # These currently don't work #'manager': 'manager' #'assistant': 'secretary' # Map of contact sub-objects (attribute name => objectClass(es)), e.g. 'c' => 'country' sub_fields: [] # Generate values for the following LDAP attributes automatically when creating a new record autovalues: - 'uid': 'md5(microtime())' # You may specify PHP code snippets which are then eval'ed 'mail': '{givenname}.{sn}@mydomain.com' # or composite strings with placeholders for existing attributes sort: 'cn' # The field to sort the listing by. scope: 'sub' # Search mode sub|base | list # Used for basic listing (if not empty) and will be &'d with search queries. Example: status=act filter: '(objectClass=inetOrgPerson)' fuzzy_search: True # Server allows wildcard search # Enable Virtual List View to more efficiently fetch paginated data (if server supports it) vlv: False # Use Virtual List View functions for autocompletion searches (if server supports it) vlv_search: False # With VLV, we also use numSubOrdinates to query the total number of # records. Set this filter to get all numSubOrdinates attributes for # counting numsub_filter: '(objectClass=organizationalUnit)' # Root DN to search config entries (e.g. vlv indexes) config_root_dn: 'cn=config' # Enables you to limit the count of entries fetched. Setting this to 0 means no limit. sizelimit: '0' # Sets the number of seconds how long is spend on the search. Setting this to 0 means no limit. timelimit: '0' # Sets the LDAP_OPT_REFERRALS option. Mostly used in multi-domain Active Directory setups referrals: False # Sets the LDAP_OPT_DEREF option. One of: LDAP_DEREF_NEVER, LDAP_DEREF_SEARCHING, LDAP_DEREF_FINDING, LDAP_DEREF_ALWAYS # Used where addressbook contains aliases to objects elsewhere in the LDAP tree. dereference: 0 # Definition for contact groups (uncomment if no groups are supported) # for the groups base_dn, the user replacements %fu, %u, %d and %dc work as for base_dn (see above) # if the groups base_dn is empty, the contact base_dn is used for the groups as well # -> in this case, assure that groups and contacts are separated due to the concernig filters! groups: - 'base_dn': '' 'scope': 'sub' # Search mode: sub|base | list 'filter': '(objectClass=groupOfNames)' 'object_classes': [ 'top', 'groupOfNames' ] # Object classes to be assigned to new groups 'member_attr': 'member' # Name of the default member attribute, e.g. uniqueMember 'name_attr': 'cn' # Attribute to be used as group name 'email_attr': 'mail' # Group email address attribute (e.g. for mailing lists) 'member_filter': '(objectClass=*)' # Optional filter to use when querying for group members 'vlv': False # Use VLV controls to list groups 'class_member_attr': # Mapping of group object class to member attribute used in these objects - 'groupOfNames': 'member' 'groupOfUniqueNames': 'uniqueMember' # This configuration replaces the regular groups listing in the directory tree with # a hard-conoded list of groups, each listing entries with the configured base DN and filter. # if the 'groups' option from above is set, it'll be shown as the first entry with the name 'Groups' group_filters: - departments: - 'name': 'Company Departments' 'scope': 'list' 'base_dn': 'ou=Groups,dc=mydomain,dc=com' 'filter': '(| (objectclass=groupOfUniqueNames) (objectclass=groupOfURLs) )' 'name_attr': 'cn' - customers: - 'name': 'Customers' 'scope': 'sub' 'base_dn': 'ou=Customers,dc=mydomain,dc=com' 'filter': '(objectClass=inetOrgPerson)' 'name_attr': 'sn' section: 'addressbook' state: 'init' - name: 'autocomplete_addressbooks' comment: | An ordered array of the ids of the addressbooks that should be searched when populating address autocomplete fields server-side. ex: array('sql','Verisign'); value: [ 'sql' ] section: 'addressbook' state: 'init' - name: 'autocomplete_min_length' comment: | The minimum number of characters required to be typed in an autocomplete field before address books will be searched. Most useful for LDAP directories that may need to do lengthy results building given overly-broad searches value: 1 section: 'addressbook' state: 'init' - name: 'autocomplete_threads' comment: | Number of parallel autocomplete requests. If there's more than one address book, n parallel (async) requests will be created, where each request will search in one address book. By default (0), all address books are searched in one request. value: 0 section: 'addressbook' state: 'init' - name: 'autocomplete_max' comment: 'Max. number of entries in autocomplete popup. Default: 15.' value: 15 section: 'addressbook' state: 'init' - name: 'address_template' comment: | Show address fields in this order Available placeholders: {street}, {locality}, {zipcode}, {country}, {region} value: '{street}<br/>{locality} {zipcode}<br/>{country} {region}' section: 'addressbook' state: 'init' - name: 'addressbook_search_mode' comment: | Matching mode for addressbook search (including autocompletion) 0 - partial (*abc*), default 1 - strict (abc) 2 - prefix (abc*) Note: For LDAP sources fuzzy_search must be enabled to use 'partial' or 'prefix' mode value: 0 section: 'addressbook' state: 'init' - name: 'contactlist_fields' comment: | List of fields used on contacts list and for autocompletion searches Warning: These are field names not LDAP attributes (see 'fieldmap' setting)! value: [ 'name', 'firstname', 'surname', 'email' ] section: 'addressbook' state: 'init' - name: 'contact_search_name' comment: | Template of contact entry on the autocompletion list. You can use contact fields as: name, email, organization, department, etc. See program/steps/addressbook/func.inc for a list value: '{name} <{email}>' section: 'addressbook' state: 'init' # [[[ userprefs - name: 'default_charset' comment: 'Use this charset as fallback for message decoding' value: 'ISO-8859-1' section: 'userprefs' state: 'init' - name: 'skin' comment: 'Skin name: folder from skins/' value: 'elastic' section: 'userprefs' - name: 'skins_allowed' comment: 'Limit skins available/shown in the settings section' value: [] section: 'userprefs' state: 'init' - name: 'standard_windows' comment: | Enables using standard browser windows (that can be handled as tabs) instead of popup windows value: False section: 'userprefs' state: 'init' - name: 'mail_pagesize' comment: 'Show up to X items in messages list view' value: 50 section: 'userprefs' state: 'init' - name: 'addressbook_pagesize' comment: 'Show up to X items in contacts list view' value: 50 section: 'userprefs' state: 'init' - name: 'addressbook_sort_col' comment: | Sort contacts by this col (preferably either one of name, firstname, surname) value: 'surname' section: 'userprefs' state: 'init' - name: 'addressbook_name_listing' comment: | The way how contact names are displayed in the list. 0: prefix firstname middlename surname suffix (only if display name is not set) 1: firstname middlename surname 2: surname firstname middlename 3: surname, firstname middlename value: 0 section: 'userprefs' state: 'init' - name: 'timezone' comment: | Use this timezone to display date/time Valid timezone identifiers are listed here: php.net/manual/en/timezones.php 'auto' will use the browser's timezone settings value: 'auto' section: 'userprefs' state: 'init' - name: 'prefer_html' comment: 'Prefer displaying HTML messages' value: True section: 'userprefs' state: 'init' - name: 'show_images' comment: | Display remote resources (inline images, styles) 0 - Never, always ask 1 - Ask if sender is not in address book 2 - Always allow value: 0 section: 'userprefs' state: 'init' - name: 'message_extwin' comment: 'Open messages in new window' value: False section: 'userprefs' state: 'init' - name: 'compose_extwin' comment: 'Open message compose form in new window' value: False section: 'userprefs' state: 'init' - name: 'htmleditor' comment: | Compose html formatted messages by default 0 - never, 1 - always, 2 - on reply to HTML message, 3 - on forward or reply to HTML message 4 - always, except when replying to plain text message value: 0 section: 'userprefs' state: 'init' - name: 'compose_save_localstorage' comment: | Save copies of compose messages in the browser's local storage for recovery in case of browser crashes and session timeout. value: True section: 'userprefs' state: 'init' - name: 'prettydate' comment: 'Show pretty dates as standard' value: True section: 'userprefs' state: 'init' - name: 'draft_autosave' comment: 'Save compose message every 300 seconds (5min)' value: 300 section: 'userprefs' state: 'init' - name: 'layout' comment: | Interface layout. Default: 'widescreen'. 'widescreen' - three columns 'desktop' - two columns, preview on bottom 'list' - two columns, no preview value: 'widescreen' section: 'userprefs' state: 'init' - name: 'mail_read_time' comment: | Mark as read when viewing a message (delay in seconds) Set to -1 if messages should not be marked as read value: 0 section: 'userprefs' state: 'init' - name: 'logout_purge' comment: 'Clear Trash on logout' value: False section: 'userprefs' state: 'init' - name: 'logout_expunge' comment: 'Compact INBOX on logout' value: False section: 'userprefs' state: 'init' - name: 'inline_images' comment: 'Display attached images below the message body' value: True section: 'userprefs' state: 'init' - name: 'mime_param_folding' comment: | Encoding of long/non-ascii attachment names: 0 - Full RFC 2231 compatible 1 - RFC 2047 for 'name' and RFC 2231 for 'filename' parameter (Thunderbird's default) 2 - Full 2047 compatible value: 1 section: 'userprefs' state: 'init' - name: 'skip_deleted' comment: | Set true if deleted messages should not be displayed This will make the application run slower value: False section: 'userprefs' state: 'init' - name: 'read_when_deleted' comment: | Set true to Mark deleted messages as read as well as deleted False means that a message's read status is not affected by marking it as deleted value: True section: 'userprefs' state: 'init' - name: 'flag_for_deletion' comment: | Set to true to never delete messages immediately Use 'Purge' to remove messages marked as deleted value: False section: 'userprefs' state: 'init' - name: 'refresh_interval' comment: | Default interval for auto-refresh requests (in seconds) These are requests for system state updates e.g. checking for new messages, etc. Setting it to 0 disables the feature. value: 60 section: 'userprefs' state: 'init' - name: 'check_all_folders' comment: 'If true all folders will be checked for recent messages' value: False section: 'userprefs' state: 'init' - name: 'display_next' comment: | If true, after message/contact delete/move, the next message/contact will be displayed value: True section: 'userprefs' state: 'init' - name: 'default_list_mode' comment: | Default messages listing mode. One of 'threads' or 'list'. value: 'list' section: 'userprefs' state: 'init' - name: 'autoexpand_threads' comment: | 0 - Do not expand threads 1 - Expand all threads automatically 2 - Expand only threads with unread messages value: 0 section: 'userprefs' state: 'init' - name: 'reply_mode' comment: | When replying: -1 - don't cite the original message 0 - place cursor below the original message 1 - place cursor above original message (top posting) 2 - place cursor above original message (top posting), but do not indent the quote value: 0 section: 'userprefs' state: 'init' - name: 'strip_existing_sig' comment: 'When replying strip original signature from message' value: True section: 'userprefs' state: 'init' - name: 'show_sig' comment: | Show signature: 0 - Never 1 - Always 2 - New messages only 3 - Forwards and Replies only value: 1 section: 'userprefs' state: 'init' - name: 'sig_below' comment: | By default the signature is placed depending on cursor position (reply_mode). Sometimes it might be convenient to start the reply on top but keep the signature below the quoted text (sig_below = true). value: False section: 'userprefs' state: 'init' - name: 'sig_separator' comment: | Enables adding of standard separator to the signature value: True section: 'userprefs' state: 'init' - name: 'force_7bit' comment: | Use MIME encoding (quoted-printable) for 8bit characters in message body value: False section: 'userprefs' state: 'init' - name: 'search_mods' comment: | Defaults of the search field configuration. The array can contain a per-folder list of header fields which should be considered when searching The entry with key '*' stands for all folders which do not have a specific list set. Please note that folder names should to be in sync with $config['*_mbox'] options Example: array('*' => array('subject'=>1, 'from'=>1), 'Sent' => array('subject'=>1, 'to'=>1)); value: null section: 'userprefs' state: 'init' - name: 'addressbook_search_mods' comment: | Defaults of the addressbook search field configuration. Example: array('name'=>1, 'firstname'=>1, 'surname'=>1, 'email'=>1, '*'=>1); value: null section: 'userprefs' state: 'init' - name: 'delete_junk' comment: 'Directly delete messages in Junk instead of moving to Trash' value: False section: 'userprefs' state: 'init' - name: 'mdn_requests' comment: | Behavior if a received message requests a message delivery notification (read receipt) 0 = ask the user, 1 = send automatically, 2 = ignore (never send or ask) 3 = send automatically if sender is in addressbook, otherwise ask the user 4 = send automatically if sender is in addressbook, otherwise ignore value: 0 section: 'userprefs' state: 'init' - name: 'mdn_default' comment: 'Return receipt checkbox default state' value: 0 section: 'userprefs' state: 'init' - name: 'dsn_default' comment: | Delivery Status Notification checkbox default state value: 0 section: 'userprefs' state: 'init' - name: 'reply_same_folder' comment: | Place replies in the folder of the message being replied to value: False section: 'userprefs' state: 'init' - name: 'forward_attachment' comment: | Sets default mode of Forward feature to "forward as attachment" value: False section: 'userprefs' state: 'init' - name: 'default_addressbook' comment: | Defines address book (internal index) to which new contacts will be added By default it is the first writeable addressbook. Note: Use '0' for built-in address book. value: null section: 'userprefs' state: 'init' - name: 'spellcheck_before_send' comment: 'Enables spell checking before sending a message.' value: False section: 'userprefs' state: 'init' - name: 'autocomplete_single' comment: | Skip alternative email addresses in autocompletion (show one address per contact) value: False section: 'userprefs' state: 'init' - name: 'default_font' comment: | Default font for composed HTML message. Supported values: Andale Mono, Arial, Arial Black, Book Antiqua, Courier New, Georgia, Helvetica, Impact, Tahoma, Terminal, Times New Roman, Trebuchet MS, Verdana value: 'Verdana' section: 'userprefs' state: 'init' - name: 'default_font_size' comment: | Default font size for composed HTML message. Supported sizes: 8pt, 10pt, 12pt, 14pt, 18pt, 24pt, 36pt value: '10pt' section: 'userprefs' state: 'init' - name: 'message_show_email' comment: | Enables display of email address with name instead of a name (and address in title) value: False section: 'userprefs' state: 'init' - name: 'reply_all_mode' comment: | Default behavior of Reply-All button: 0 - Reply-All always 1 - Reply-List if mailing list is detected value: 0 section: 'userprefs' state: 'init'
- roundcube__default_configuration
This list defines Roundcube configuration options which are defined by the role and override the original configuration options.
roundcube__default_configuration: - name: 'db_dsnw' value: '{{ "sqlite:///" + roundcube__git_dest + "/" + roundcube__database_map[roundcube__database].dbname | d() + "?mode=640" }}' state: '{{ "present" if (roundcube__database_map[roundcube__database].dbtype == "sqlite") else "ignore" }}' - name: 'db_dsnw' value: '{{ "mysql://" + roundcube__database_map[roundcube__database].dbuser | d() + ":" + roundcube__database_map[roundcube__database].dbpass | d() + "@" + roundcube__database_map[roundcube__database].dbhost | d() + "/" + roundcube__database_map[roundcube__database].dbname | d() }}' state: '{{ "present" if (roundcube__database_map[roundcube__database].dbtype == "mysql") else "ignore" }}' - name: 'db_dsnw' value: '{{ "pgsql://" + roundcube__database_map[roundcube__database].dbuser | d() + ":" + roundcube__database_map[roundcube__database].dbpass | d() + "@" + roundcube__database_map[roundcube__database].dbhost | d() + "/" + roundcube__database_map[roundcube__database].dbname | d() }}' state: '{{ "present" if (roundcube__database_map[roundcube__database].dbtype == "postgresql") else "ignore" }}' - name: 'log_driver' comment: | Log driver: "syslog", "stdout" or "file" value: '{{ roundcube__log_driver }}' - name: 'imap_host' value: '{{ roundcube__imap_server }}' # Enable use of memcached to cache IMAP indexes, if local memcached # instance is detected - name: 'imap_cache' value: 'memcached' state: '{{ "present" if roundcube__memcached_enabled | bool else "ignore" }}' # Enable message caching in the database if the IMAP server is remote - name: 'messages_cache' value: True state: '{{ "ignore" if (ansible_local | d() and ansible_local.dovecot | d() and (ansible_local.dovecot.installed | d()) | bool) else "present" }}' - name: 'smtp_host' value: '{{ roundcube__smtp_server }}' - name: 'smtp_user' value: '{{ roundcube__smtp_user }}' - name: 'smtp_pass' value: '{{ roundcube__smtp_pass }}' # Enable use of memcached to cache LDAP data, if local memcached instance # is detected - name: 'ldap_cache' value: 'memcached' state: '{{ "present" if roundcube__memcached_enabled | bool else "ignore" }}' # Enable support for memcached on localhost if it's detected - name: 'memcache_hosts' value: '{{ roundcube__memcached_hosts }}' state: '{{ "present" if roundcube__memcached_enabled | bool else "ignore" }}' # Enable support for Redis on localhost if it's detected - name: 'redis_hosts' value: '{{ roundcube__redis_hosts }}' state: '{{ "present" if roundcube__redis_enabled | bool else "ignore" }}' - name: 'skin_logo' value: '{{ roundcube__skin_logo }}' # Ensure that all communication to the client is encrypted - name: 'force_https' value: True # Configure preferred session storage backend - name: 'session_storage' value: '{{ roundcube__session_storage }}' state: '{{ "present" if roundcube__session_storage | d() else "ignore" }}' - name: 'des_key' value: '{{ roundcube__des_key }}' # Roundcube developers consider this a better choice - name: 'cipher_method' value: 'AES-256-CBC' - name: 'username_domain' value: '{{ roundcube__username_domain }}' # Slow down potential bots - name: 'sendmail_delay' value: 5 - name: 'product_name' value: '{{ roundcube__product_name }}' # Use the system-wide MIME database from the 'mime-support' APT package - name: 'mime_types' value: '/etc/mime.types' # Help mitigate mails to non-existent DNS domains - name: 'email_dns_check' value: True - name: 'plugins' value: '{{ roundcube__combined_plugins | debops.debops.parse_kv_items | selectattr("state", "equalto", "enabled") | map(attribute="name") | list | unique }}' # Create Special Folders automatically. This will ensure that the Junk # folder is present and selected in the preferences. - name: 'create_default_folders' value: True # Set minimum refresh interval available to users to 5 minutes, to lower # the IMAP server load. - name: 'min_refresh_interval' value: 300 # Enable autocompletion for the LDAP address book. - name: 'autocomplete_addressbooks' value: '{{ (["sql"] + (["People"] if roundcube__ldap_enabled | bool else [])) | flatten }}' state: '{{ "present" if roundcube__ldap_enabled | bool else "ignore" }}' # Set the default number of autocompletion characters for lower sever load. - name: 'autocomplete_min_length' value: 3 # Only pick single e-mail address in autocomplete, this reduces the number # of entries shown to the user. - name: 'autocomplete_single' value: True # Configure the access to the default LDAP address book managed by DebOps. # Roundcube will use user credentials to login to the LDAP directory. - name: 'ldap_public_people' option: [ 'ldap_public', 'People' ] section: 'addressbook' state: '{{ "present" if roundcube__ldap_enabled | bool else "ignore" }}' array: - name: '{{ roundcube__ldap_addressbook_name }}' hosts: '{{ (["tls://"] if roundcube__ldap_use_tls else [""]) | product(roundcube__ldap_hosts) | map("join") | product([roundcube__ldap_port]) | map("join") }}' ldap_version: 3 user_specific: True base_dn: '{{ roundcube__ldap_people_dn | join(",") }}' bind_dn: '{{ "uid=%u," + roundcube__ldap_people_dn | join(",") }}' bind_pass: '' search_base_dn: '{{ roundcube__ldap_base_dn | join(",") }}' search_filter: '(& (objectClass=mailRecipient) (| (uid=%u) (mail=%fu) ) )' search_bind_dn: '{{ roundcube__ldap_binddn }}' search_bind_pw: '{{ roundcube__ldap_bindpw }}' filter: '(objectClass=inetOrgPerson)' scope: 'sub' searchonly: True vlv: False sort: 'sn' search_fields: [ 'sn', 'cn', 'mail', 'telephoneNumber' ] hidden: '{{ roundcube__ldap_hidden }}' writable: False groups: - base_dn: '{{ roundcube__ldap_groups_dn | join(",") }}' filter: '(objectClass=groupOfNames)' object_classes: [ 'groupOfNames' ] fieldmap: [ '{{ roundcube__ldap_field_map }}' ] # Set the default mail charset to Unicode - name: 'default_charset' value: 'UTF-8' - name: 'skin' value: '{{ roundcube__skin_folder }}' # Don't prefer HTML message view by default - name: 'prefer_html' value: False # Refresh the mail status in longer intervals (15 minutes) by default, to # make the IMAP server load lower. - name: 'refresh_interval' value: 900 # Delete spam messages without moving them to Trash first - name: 'delete_junk' value: True # Forward e-mails as attachments by default - name: 'forward_attachment' value: True # Display the sender e-mail address by default to help users detect forged # senders - name: 'message_show_email' value: True # Better support for mailing lists - name: 'reply_all_mode' value: 1 - name: 'swipe_actions' comment: | Configuration for the 'swipe' Roundcube plugin array: - messagelist: - left: 'swipe-read' right: 'move' down: 'checkmail' - contactlist: - left: 'none' right: 'compose' down: 'none' - name: 'enable_spellcheck' value: True state: 'present' - name: 'spellcheck_engine' value: 'enchant' state: 'present' - name: 'spellcheck_ignore_caps' value: True state: 'present' - name: 'spellcheck_ignore_nums' value: True state: 'present' - name: 'spellcheck_ignore_syms' value: True state: 'present'
- roundcube__configuration
This list defines Roundcube configuration options which should be present on all hosts in the Ansible inventory.
roundcube__configuration: []
- roundcube__group_configuration
This list defines Roundcube configuration options which should be present on hosts in a specific Ansible inventory group.
roundcube__group_configuration: []
- roundcube__host_configuration
This list defines Roundcube configuration options which should be present on specific hosts in the Ansible inventory.
roundcube__host_configuration: []
- roundcube__combined_configuration
This variable combines all Roundcube configuration lists and is used in role tasks and templates.
roundcube__combined_configuration: '{{ roundcube__original_configuration + roundcube__default_configuration + roundcube__configuration + roundcube__group_configuration + roundcube__host_configuration }}'
Configuration file sections
These variables define the sections in the Roundcube
config/config.inc.php configuration file. See
roundcube__configuration_sections for more details.
- roundcube__default_configuration_sections
The list of the default configuration sections defined by the role.
roundcube__default_configuration_sections: - name: 'init' state: 'hidden' - name: 'sql' title: 'SQL DATABASE' - name: 'logging' title: 'LOGGING/DEBUGGING' - name: 'imap' - name: 'smtp' - name: 'ldap' - name: 'cache' title: 'CACHE(S)' - name: 'system' - name: 'plugins' - name: 'ui' title: 'USER INTERFACE' - name: 'addressbook' title: 'ADDRESSBOOK SETTINGS' - name: 'userprefs' title: 'USER PREFERENCES' - name: 'unknown' title: 'OTHER OPTIONS'
- roundcube__configuration_sections
List of configuration sections defined by the user.
roundcube__configuration_sections: []
- roundcube__combined_configuration_sections
Variable which combines all of the configuration section lists and is used in role tasks and templates.
roundcube__combined_configuration_sections: '{{ roundcube__default_configuration_sections + roundcube__configuration_sections }}'
Roundcube plugins
The variables below contain configuration of Roundcube plugins installed using PHP Composer. See roundcube__plugins for more details.
- roundcube__default_plugins
List of Roundcube plugins configured by the role.
roundcube__default_plugins: # Plugin that adds a new button to the toolbar to move messages to a (user # selectable) archive folder. - name: 'archive' state: 'enabled' # This is a core plugin which provides support for handling attachments # through the filesystem. It might be required by other plugins. - name: 'filesystem_attachments' state: 'enabled' # This plugin provides jQuery library and features for other plugins. - name: 'jqueryui' state: 'enabled' # This plugin adds an option to download all attachments to a message in # one zip file, when a message has multiple attachments. The plugin also # allows the download of a selection of messages in 1 zip file. - name: 'zipdownload' state: 'enabled' options: - name: 'zipdownload_attachments' comment: | Zip attachments Only show the link when there are more than this many attachments -1 to prevent downloading of attachments as zip value: 1 - name: 'zipdownload_selection' comment: | Zip selection of mail messages This option enables downloading of multiple messages as one zip archive. The number or string value specifies maximum total size of all messages in the archive (not the size of the archive itself). value: '50MB' - name: 'zipdownload_charset' comment: | Charset to use for filenames inside the zip value: 'UTF-8' # This entry installs the libraries required for LDAP support in Roundcube. # It's not a real plugin. - name: 'ldap_support' package: 'kolab/net_ldap3' state: '{{ "present" if roundcube__ldap_enabled | bool else "ignore" }}' # This plugin adds right-click context menus to various parts of the # Roundcube interface. - name: 'contextmenu' package: 'johndoh/contextmenu{{ ":3.2.1" if roundcube__git_version is version("1.5", "<") else "" }}' state: 'enabled' # This plugin provides a toolbar button and folder menu option which # calculates and displays the sizes of the message folders. - name: 'show_folder_size' package: 'jfcherng/show-folder-size' state: 'enabled' options: - name: 'auto_show_folder_size' comment: | Automatically show the folder size without clicking on the toolbar button. This could be a serious performance penalty if there are many users value: False - name: 'show_mailboxoptions_button' comment: 'Show mailbox options button' value: True - name: 'show_toolbar_button' comment: 'Show the toolbar button' value: False # This plugin adds a button on the main toolbar which opens the # Nextcloud/ownCloud instance at specified URL. - name: 'cloud_button' package: 'san4op/cloud_button' state: 'enabled' options: - name: 'cloud_button_url' comment: 'URL to cloud storage' value: '{{ "https://cloud." + ansible_domain + "/" }}' # This plugin uses the LDAP directory to create the user identity at login. # Roundcube 1.4.x might need to be patched for this to work correctly. # See: https://github.com/roundcube/roundcubemail/issues/7667 - name: 'new_user_identity' state: '{{ "enabled" if roundcube__ldap_enabled | bool else "ignore" }}' options: - name: 'new_user_identity_addressbook' comment: | The id of the address book to use to automatically set a user's full name in their new identity. (This should be an string, which refers to the $config['ldap_public'] array.) value: 'People' - name: 'new_user_identity_match' comment: | When automatically setting a user's full name in their new identity, match the user's login name against this field. value: 'mail' - name: 'new_user_identity_onlogin' comment: | Determine whether to import user's identities on each login. New user identity will be created for each e-mail address present in address book, but not assigned to any identity. value: True - name: 'password' state: '{{ "enabled" if roundcube__ldap_password_enabled | bool else "absent" }}' options: - name: 'password_driver' comment: | Password Plugin options ----------------------- A driver to use for password change. Default: "sql". See README file for list of supported driver names. value: '{{ "ldap_exop" if roundcube__ldap_password_enabled | bool else "sql" }}' - name: 'password_strength_driver' comment: | A driver to use for checking password strength. Default: null (disabled). See README file for list of supported driver names. value: null - name: 'password_confirm_current' comment: | Determine whether current password is required to change password. Default: false. value: True - name: 'password_minimum_length' comment: | Require the new password to be a certain length. set to blank to allow passwords of any length value: 0 - name: 'password_minimum_score' comment: | Require the new password to have at least the specified strength score. Note: Password strength is scored from 1 (week) to 5 (strong). value: 0 - name: 'password_log' comment: | Enables logging of password changes into logs/password value: False - name: 'password_login_exceptions' comment: | Comma-separated list of login exceptions for which password change will be not available (no Password tab in Settings) value: null - name: 'password_hosts' comment: | Array of hosts that support password changing. Listed hosts will feature a Password option in Settings; others will not. Example: array('mail.example.com', 'mail2.example.org'); Default is NULL (all hosts supported). value: null - name: 'password_force_save' comment: | Enables saving the new password even if it matches the old password. Useful for upgrading the stored passwords after the encryption scheme has changed. value: False - name: 'password_force_new_user' comment: | Enables forcing new users to change their password at their first login. value: False - name: 'password_algorithm' comment: | Default password hashing/crypting algorithm. Possible options: des-crypt, ext-des-crypt, md5-crypt, blowfish-crypt, sha256-crypt, sha512-crypt, md5, sha, smd5, ssha, ssha512, samba, ad, dovecot, clear. For details see password::hash_password() method. value: 'clear' - name: 'password_algorithm_prefix' comment: | Password prefix (e.g. {CRYPT}, {SHA}) for passwords generated using password_algorithm above. Default: empty. value: '' - name: 'password_dovecotpw' comment: | Path for dovecotpw/doveadm-pw (if not in the $PATH). Used for password_algorithm = 'dovecot'. $config['password_dovecotpw'] = '/usr/local/sbin/dovecotpw'; // for dovecot-1.x value: '/usr/bin/doveadm pw' # for dovecot-2.x - name: 'password_dovecotpw_method' comment: | Dovecot password scheme. Used for password_algorithm = 'dovecot'. value: 'CRAM-MD5' - name: 'password_dovecotpw_with_method' comment: | Enables use of password with method prefix, e.g. {MD5}$1$LUiMYWqx$fEkg/ggr/L6Mb2X7be4i1/ when using password_algorithm=dovecot value: False - name: 'password_blowfish_cost' comment: | Iteration count parameter for Blowfish-based hashing algo. It must be between 4 and 31. Default: 12. Be aware, the higher the value, the longer it takes to generate the password hashes. value: 12 - name: 'password_crypt_rounds' comment: | Number of rounds for the sha256 and sha512 crypt hashing algorithms. Must be at least 1000. If not set, then the number of rounds is left up to the crypt() implementation. On glibc this defaults to 5000. Be aware, the higher the value, the longer it takes to generate the password hashes. value: 50000 - name: 'password_disabled' comment: | This option temporarily disables the password change functionality. Use it when the users database server is in maintenance mode or sth like that. You can set it to TRUE/FALSE or a text describing the reason which will replace the default. value: False - name: 'password_username_format' comment: | Various drivers/setups use different format of the username. This option allows you to force specified format use. Default: '%u'. Supported variables: %u - full username, %l - the local part of the username (in case the username is an email address) %d - the domain part of the username (in case the username is an email address) Note: This may no apply to some drivers implementing their own rules, e.g. sql. value: '%u' - name: 'password_db_dsn' comment: | SQL Driver options ------------------ PEAR database DSN for performing the query. By default Roundcube DB settings are used. Supported replacement variables: %h - user's IMAP hostname %n - hostname ($_SERVER['SERVER_NAME']) %t - hostname without the first part %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) %z - IMAP domain (IMAP hostname without the first part) value: '' - name: 'password_query' comment: | The SQL query used to change the password. The query can contain the following macros that will be expanded as follows: %p is replaced with the plaintext new password %P is replaced with the encrypted/hashed new password according to configured password_method %o is replaced with the old (current) password %O is replaced with the encrypted/hashed old (current) password according to configured password_method %h is replaced with the imap host (from the session info) %u is replaced with the username (from the session info) %l is replaced with the local part of the username (in case the username is an email address) %d is replaced with the domain part of the username (in case the username is an email address) Deprecated macros: %c is replaced with the crypt version of the new password, MD5 if available otherwise DES. More hash function can be enabled using the password_crypt_hash configuration parameter. %D is replaced with the dovecotpw-crypted version of the new password %n is replaced with the hashed version of the new password %q is replaced with the hashed password before the change Escaping of macros is handled by this module. Default: "SELECT update_passwd(%c, %u)" value: 'SELECT update_passwd(%c, %u)' - name: 'password_crypt_hash' comment: | By default the crypt() function which is used to create the %c parameter uses the md5 algorithm (deprecated, use %P). You can choose between: des, md5, blowfish, sha256, sha512. value: 'md5' - name: 'password_idn_ascii' comment: | By default domains in variables are using unicode. Enable this option to use punycoded names value: False - name: 'password_hash_algorithm' comment: | Using a password hash for %n and %q variables (deprecated, use %P). Determine which hashing algorithm should be used to generate the hashed new and current password for using them within the SQL query. Requires PHP's 'hash' extension. value: 'sha1' - name: 'password_hash_base64' comment: | You can also decide whether the hash should be provided as hex string or in base64 encoded format. value: False - name: 'password_pop_host' comment: | Poppassd Driver options ----------------------- The host which changes the password (default: localhost) Supported replacement variables: %n - hostname ($_SERVER['SERVER_NAME']) %t - hostname without the first part %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) %h - IMAP host %z - IMAP domain without first part %s - domain name after the '@' from e-mail address provided at login screen value: 'localhost' - name: 'password_pop_port' comment: | TCP port used for poppassd connections (default: 106) value: 106 - name: 'password_saslpasswd_args' comment: | SASL Driver options ------------------- Additional arguments for the saslpasswd2 call value: '' - name: 'password_ldap_host' comment: | LDAP, LDAP_SIMPLE and LDAP_EXOP Driver options ----------------------------------- LDAP server name to connect to. You can provide one or several hosts in an array in which case the hosts are tried from left to right. Example: array('ldap1.example.com', 'ldap2.example.com'); Default: 'localhost' value: '{{ (roundcube__ldap_hosts | first) if roundcube__ldap_hosts | d() else "" }}' - name: 'password_ldap_port' comment: | LDAP server port to connect to Default: '389' value: '{{ roundcube__ldap_port }}' - name: 'password_ldap_starttls' comment: | TLS is started after connecting Using TLS for password modification is recommended. Default: false value: '{{ roundcube__ldap_use_tls | bool }}' - name: 'password_ldap_version' comment: | LDAP version Default: '3' value: '3' - name: 'password_ldap_basedn' comment: | LDAP base name (root directory) Example: 'dc=example,dc=com' value: '{{ roundcube__ldap_base_dn | join(",") }}' - name: 'password_ldap_method' comment: | LDAP connection method There are two connection methods for changing a user's LDAP password. 'user': use user credential (recommended, require password_confirm_current=true) 'admin': use admin credential (this mode require password_ldap_adminDN and password_ldap_adminPW) Default: 'user' value: 'user' - name: 'password_ldap_adminDN' comment: | LDAP Admin DN Used only in admin connection mode Default: null value: null - name: 'password_ldap_adminPW' comment: | LDAP Admin Password Used only in admin connection mode Default: null value: null - name: 'password_ldap_userDN_mask' comment: | LDAP user DN mask The user's DN is mandatory and as we only have his login, we need to re-create his DN using a mask '%login' will be replaced by the current roundcube user's login '%name' will be replaced by the current roundcube user's name part '%domain' will be replaced by the current roundcube user's domain part '%dc' will be replaced by domain name hierarchal string e.g. "dc=test,dc=domain,dc=com" Example: 'uid=%login,ou=people,dc=example,dc=com' value: 'uid=%login,ou=people,dc=example,dc=com' state: 'comment' # use searches instead - name: 'password_ldap_searchDN' comment: | LDAP search DN The DN roundcube should bind with to find out user's DN based on his login. Note that you should comment out the default password_ldap_userDN_mask setting for this to take effect. Use this if you cannot specify a general template for user DN with password_ldap_userDN_mask. You need to perform a search based on users login to find his DN instead. A common reason might be that your users are placed under different ou's like engineering or sales which cannot be derived from their login only. value: '{{ roundcube__ldap_binddn }}' - name: 'password_ldap_searchPW' comment: | LDAP search password If password_ldap_searchDN is set, the password to use for binding to search for user's DN. Note that you should comment out the default password_ldap_userDN_mask setting for this to take effect. Warning: Be sure to set appropriate permissions on this file so this password is only accessible to roundcube and don't forget to restrict roundcube's access to your directory as much as possible using ACLs. Should this password be compromised you want to minimize the damage. value: '{{ roundcube__ldap_bindpw }}' - name: 'password_ldap_search_base' comment: | LDAP search base If password_ldap_searchDN is set, the base to search in using the filter below. Note that you should comment out the default password_ldap_userDN_mask setting for this to take effect. value: '{{ roundcube__ldap_base_dn | join(",") }}' - name: 'password_ldap_search_filter' comment: | LDAP search filter If password_ldap_searchDN is set, the filter to use when searching for user's DN. Note that you should comment out the default password_ldap_userDN_mask setting for this to take effect. '%login' will be replaced by the current roundcube user's login '%name' will be replaced by the current roundcube user's name part '%domain' will be replaced by the current roundcube user's domain part '%dc' will be replaced by domain name hierarchal string e.g. "dc=test,dc=domain,dc=com" Example: '(uid=%login)' Example: '(&(objectClass=posixAccount)(uid=%login))' value: '(& (objectClass=mailRecipient) (| (uid=%name) (mail=%login) ) )' - name: 'password_ldap_encodage' comment: | LDAP password hash type Standard LDAP encryption type which must be one of: crypt, ext_des, md5crypt, blowfish, md5, sha, smd5, ssha, ad, cram-md5 (dovecot style) or clear. Set to 'default' if you want to use method specified in password_algorithm option above. Multiple password Values can be generated by concatenating encodings with a +. E.g. 'cram-md5+crypt' Default: 'crypt'. value: 'clear' # default: crypt - name: 'password_ldap_pwattr' comment: | LDAP password attribute Name of the ldap's attribute used for storing user password Default: 'userPassword' value: 'userPassword' - name: 'password_ldap_force_replace' comment: | LDAP password force replace Force LDAP replace in cases where ACL allows only replace not read See https://pear.php.net/package/Net_LDAP2/docs/latest/Net_LDAP2/Net_LDAP2_Entry.html#methodreplace Default: true value: True - name: 'password_ldap_lchattr' comment: | LDAP Password Last Change Date Some places use an attribute to store the date of the last password change The date is measured in "days since epoch" (an integer value) Whenever the password is changed, the attribute will be updated if set (e.g. shadowLastChange) value: '' - name: 'password_ldap_samba_pwattr' comment: | LDAP Samba password attribute, e.g. sambaNTPassword Name of the LDAP's Samba attribute used for storing user password value: '' - name: 'password_ldap_samba_lchattr' comment: | LDAP Samba Password Last Change Date attribute, e.g. sambaPwdLastSet Some places use an attribute to store the date of the last password change The date is measured in "seconds since epoch" (an integer value) Whenever the password is changed, the attribute will be updated if set value: '' - name: 'password_ldap_ppolicy_cmd' comment: | LDAP PPolicy Driver options ----------------------------------- LDAP Change password command - filename of the perl script Example: 'change_ldap_pass.pl' value: 'change_ldap_pass.pl' - name: 'password_ldap_ppolicy_uri' comment: | LDAP URI Example: 'ldap://ldap.example.com/ ldaps://ldap2.example.com:636/' value: 'ldap://localhost/' - name: 'password_ldap_ppolicy_basedn' comment: | LDAP base name (root directory) Example: 'dc=example,dc=com' value: 'dc=example,dc=com' - name: 'password_ldap_ppolicy_searchDN' value: 'cn=someuser,dc=example,dc=com' - name: 'password_ldap_ppolicy_searchPW' value: 'secret' - name: 'password_ldap_policy_search_filter' comment: | LDAP search filter Example: '(uid=%login)' Example: '(&(objectClass=posixAccount)(uid=%login))' value: '(uid=%login)' - name: 'password_ldap_ppolicy_cafile' comment: | CA Certificate file if in URI is LDAPS connection value: '/etc/ssl/certs/ca-certificates.crt' - name: 'password_directadmin_host' comment: | DirectAdmin Driver options -------------------------- The host which changes the password Use 'ssl://host' instead of 'tcp://host' when running DirectAdmin over SSL. The host can contain the following macros that will be expanded as follows: %h is replaced with the imap host (from the session info) %d is replaced with the domain part of the username (if the username is an email) value: 'tcp://localhost' - name: 'password_directadmin_port' comment: | TCP port used for DirectAdmin connections value: 2222 - name: 'password_vpopmaild_host' comment: | vpopmaild Driver options ----------------------- The host which changes the password value: 'localhost' - name: 'password_vpopmaild_port' comment: | TCP port used for vpopmaild connections value: 89 - name: 'password_vpopmaild_timeout' comment: | Timeout used for the connection to vpopmaild (in seconds) value: 10 - name: 'password_cpanel_host' comment: | cPanel Driver options -------------------------- The cPanel Host name value: 'host.domain.com' - name: 'password_cpanel_username' comment: | The cPanel admin username value: 'username' - name: 'password_cpanel_password' comment: | The cPanel admin password value: 'password' - name: 'password_cpanel_hash' comment: | The cPanel admin hash If you prefer to use a hash (Remote Access Key) instead of plain password, enter it below. Hash takes precedence over password auth. You can generate a Remote Access Key in WHM -> Clusters -> Remote Access Key value: '' - name: 'password_cpanel_port' comment: | The cPanel port to use value: 2087 - name: 'password_cpanel_webmail_host' comment: | cPanel Webmail Driver options ----------------------------- The cPanel Host name value: 'host.domain.com' - name: 'password_cpanel_webmail_port' comment: | The cPanel port to use value: 2096 - name: 'password_ximss_host' comment: | XIMSS (Communigate server) Driver options ----------------------------------------- Host name of the Communigate server value: 'mail.example.com' - name: 'password_ximss_port' comment: | XIMSS port on Communigate server value: 11024 - name: 'password_chpasswd_cmd' comment: | chpasswd Driver options --------------------- Command to use (see "Sudo setup" in README) value: 'sudo /usr/sbin/chpasswd 2> /dev/null' - name: 'xmail_host' comment: | XMail Driver options --------------------- value: 'localhost' - name: 'xmail_user' value: 'YourXmailControlUser' - name: 'xmail_pass' value: 'YourXmailControlPass' - name: 'xmail_port' value: 6017 - name: 'hmailserver_remote_dcom' comment: | hMail Driver options ----------------------- Remote hMailServer configuration true: HMailserver is on a remote box (php.ini: com.allow_dcom = true) false: Hmailserver is on same box as PHP value: False - name: 'hmailserver_server' comment: 'Windows credentials' array: - Server: 'localhost' - Username: 'administrator' - Password: 'password' - name: 'password_pw_usermod_cmd' comment: | pw_usermod Driver options -------------------------- Use comma delimited exlist to disable password change for users. See "Sudo setup" in README file. value: 'sudo /usr/sbin/pw usermod -h 0 -n' - name: 'password_dbmail_args' comment: | DBMail Driver options ------------------- Additional arguments for the dbmail-users call value: '-p sha512' - name: 'password_expect_bin' comment: | Expect Driver options --------------------- Location of expect binary value: '/usr/bin/expect' - name: 'password_expect_script' comment: | Location of expect script (see helpers/passwd-expect) value: '' - name: 'password_expect_params' comment: | Arguments for the expect script. See the helpers/passwd-expect file for details. This is probably a good starting default: -telent -host localhost -output /tmp/passwd.log -log /tmp/passwd.log value: '' - name: 'password_smb_host' comment: | smb Driver options --------------------- Samba host (default: localhost) Supported replacement variables: %n - hostname ($_SERVER['SERVER_NAME']) %t - hostname without the first part %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) value: 'localhost' - name: 'password_smb_cmd' comment: | Location of smbpasswd binary (default: /usr/bin/smbpasswd) value: '/usr/bin/smbpasswd' - name: 'password_gearman_host' comment: | gearman driver options --------------------- Gearman host (default: localhost) value: 'localhost' - name: 'password_plesk_host' comment: | Plesk/PPA Driver options -------------------- You need to allow RCP for IP of roundcube-server in Plesk/PPA Panel Plesk RCP Host value: '10.0.0.5' - name: 'password_plesk_user' comment: 'Plesk RPC Username' value: 'admin' - name: 'password_plesk_pass' comment: 'Plesk RPC Password' value: 'password' - name: 'password_plesk_rpc_port' comment: 'Plesk RPC Port' value: '8443' - name: 'password_plesk_rpc_path' comment: 'Plesk RPC Path' value: 'enterprise/control/agent.php' - name: 'password_kpasswd_cmd' comment: | kasswd Driver options --------------------- Command to use value: '/usr/bin/kpasswd' - name: 'password_modoboa_api_token' comment: | Modoboa Driver options --------------------- put token number from Modoboa server value: '' - name: 'help' state: 'enabled' options: - name: 'help_source' comment: | Help content iframe source %l will be replaced by the language code resolved using the 'help_language_map' option If you are serving roundcube via https, then change this URL to https also. value: 'https://docs.roundcube.net/doc/help/1.1/%l/' - name: 'help_index_map' comment: | Map task/action combinations to deep-links Use '<task>/<action>' or only '<task>' strings as keys The values will be appended to the 'help_source' URL array: - 'login': 'login.html' 'mail': 'mail/index.html' 'mail/compose': 'mail/compose.html' 'addressbook': 'addressbook/index.html' 'settings': 'settings/index.html' 'settings/preferences': 'settings/preferences.html' 'settings/folders': 'settings/folders.html' 'settings/identities': 'settings/identities.html' - name: 'help_language_map' comment: | Map to translate Roundcube language codes into help document languages The '*' entry will be used as default array: - '*': 'en_US' - name: 'help_about_url' comment: | Enter an absolute URL to a page displaying information about this webmail Alternatively, create a HTML file under <this-plugin-dir>/content/about.html value: null - name: 'help_license_url' comment: | Enter an absolute URL to a page displaying information about this webmail Alternatively, put your license text to <this-plugin-dir>/content/license.html value: null - name: 'help_open_extwin' comment: 'Determine whether to open the elp in a new window' value: False - name: 'help_csrf_info' comment: 'URL to additional information about CSRF protection' value: null - name: 'markasjunk' state: 'enabled' options: - name: 'markasjunk_learning_driver' comment: | Learning driver Use an external process such as sa-learn to learn from spam/ham messages. Default: null. Please see the README for more information value: null - name: 'markasjunk_ham_mbox' comment: | Ham mailbox Mailbox messages should be moved to when they are marked as ham. null = INBOX set to FALSE to disable message moving value: null - name: 'markasjunk_spam_mbox' comment: | Spam mailbox Mailbox messages should be moved to when they are marked as spam. null = the mailbox assigned as the spam folder in Roundcube settings set to FALSE to disable message moving value: null - name: 'markasjunk_read_spam' comment: 'Mark messages as read when reporting them as spam' value: True # original: False - name: 'markasjunk_unread_ham' comment: 'Mark messages as unread when reporting them as ham' value: True # original: False - name: 'markasjunk_spam_flag' comment: | Add flag to messages marked as spam (flag will be removed when marking as ham) If you do not want to use message flags set this to false value: 'Junk' - name: 'markasjunk_ham_flag' comment: | Add flag to messages marked as ham (flag will be removed when marking as spam) If you do not want to use message flags set this to false value: 'NonJunk' - name: 'markasjunk_debug' comment: 'Write output from spam/ham commands to the log for debug' value: False - name: 'markasjunk_toolbar' comment: | The mark as spam/ham icon can either be displayed on the toolbar or as part of the mark messages menu. Set to False to use Mark menu instead of the toolbar. Default: true. value: True - name: 'markasjunk_move_spam' comment: | Learn any message moved to the spam mailbox as spam (not just when the button is pressed) value: True # original: False - name: 'markasjunk_move_ham' comment: | Learn any message moved from the spam mailbox to the ham mailbox as ham (not just when the button is pressed) value: True # original: False - name: 'markasjunk_permanently_remove' comment: | Some drivers create new copies of the target message(s), in this case the original message(s) will be deleted Rather than deleting the message(s) (moving to Trash) setting this option true will cause the original message(s) to be permanently removed value: False - name: 'markasjunk_spam_only' comment: 'Display only a mark as spam button' value: False - name: 'markasjunk_allowed_hosts' comment: | Activate markasjunk for selected mail hosts only. If this is not set all mail hosts are allowed. Example: $config['markasjunk_allowed_hosts'] = array('mail1.domain.tld', 'mail2.domain.tld'); value: null - name: 'markasjunk_host_config' comment: | Load specific config for different mail hosts Example: $config['markasjunk_host_config'] = array( 'mail1.domain.tld' => 'mail1_config.inc.php', 'mail2.domain.tld' => 'mail2_config.inc.php', ); value: null - name: 'markasjunk_spam_cmd' comment: | cmd_learn Driver options ------------------------ The command used to learn that a message is spam The command can contain the following macros that will be expanded as follows: %u is replaced with the username (from the session info) %l is replaced with the local part of the username (if the username is an email address) %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not) %i is replaced with the email address from the user's default identity %s is replaced with the email address the message is from %f is replaced with the path to the message file %h:<header name> is replaced with the content of that header from the message (lower case) eg: %h:x-dspam-signature If you do not want to run the command set this to null value: null - name: 'markasjunk_ham_cmd' comment: | The command used to learn that a message is ham The command can contain the following macros that will be expanded as follows: %u is replaced with the username (from the session info) %l is replaced with the local part of the username (if the username is an email address) %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not) %i is replaced with the email address from the user's default identity %s is replaced with the email address the message is from %f is replaced with the path to the message file %h:<header name> is replaced with the content of that header from the message (lower case) eg: %h:x-dspam-signature If you do not want to run the command set this to null value: null - name: 'markasjunk_spam_dir' comment: | dir_learn Driver options ------------------------ The full path of the directory used to store spam (must be writable by webserver) value: null - name: 'markasjunk_ham_dir' comment: | The full path of the directory used to store ham (must be writable by webserver) value: null - name: 'markasjunk_filename' comment: | The filename prefix The filename can contain the following macros that will be expanded as follows: %u is replaced with the username (from the session info) %l is replaced with the local part of the username (if the username is an email address) %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not) %t is replaced with the type of message (spam/ham) value: null - name: 'markasjunk_email_spam' comment: | email_learn Driver options -------------------------- The email address that spam messages will be sent to The address can contain the following macros that will be expanded as follows: %u is replaced with the username (from the session info) %l is replaced with the local part of the username (if the username is an email address) %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not) %i is replaced with the email address from the user's default identity If you do not want to send an email set this to null value: null - name: 'markasjunk_email_ham' comment: | The email address that ham messages will be sent to The address can contain the following macros that will be expanded as follows: %u is replaced with the username (from the session info) %l is replaced with the local part of the username (if the username is an email address) %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not) %i is replaced with the email address from the user's default identity If you do not want to send an email set this to null value: null - name: 'markasjunk_email_attach' comment: 'Should the spam/ham message be sent as an attachment' value: True - name: 'markasjunk_email_subject' comment: | The email subject (when sending as attachment) The subject can contain the following macros that will be expanded as follows: %u is replaced with the username (from the session info) %l is replaced with the local part of the username (if the username is an email address) %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not) %t is replaced with the type of message (spam/ham) value: 'learn this message as %t' - name: 'markasjunk_sauserprefs_config' comment: | sa_blacklist Driver options --------------------------- Path to SAUserPrefs config file value: '../sauserprefs/config.inc.php' - name: 'markasjunk_amacube_config' comment: | amavis_blacklist Driver options --------------------------- Path to amacube config file value: '../amacube/config.inc.php' - name: 'markasjunk_spam_patterns' comment: | edit_headers Driver options --------------------------- Patterns to match and replace headers for spam messages Replacement method uses preg_replace - http://www.php.net/manual/function.preg-replace.php WARNING: Be sure to match the entire header line, including the name of the header, also use ^ and $ and the 'm' flag see the README for an example TEST CAREFULLY BEFORE USE ON REAL MESSAGES array: - patterns: [] replacements: [] - name: 'markasjunk_ham_patterns' comment: | Patterns to match and replace headers for spam messages Replacement method uses preg_replace - http://www.php.net/manual/function.preg-replace.php WARNING: Be sure to match the entire header line, including the name of the header, also use ^ and $ and the 'm' flag see the README for an example TEST CAREFULLY BEFORE USE ON REAL MESSAGES array: - patterns: [] replacements: [] # This plugin adds additional commands in the header of the message if # Roundcube detects it's a mailing list message. - name: 'listcommands' package: 'cor/listcommands' state: 'enabled' # This plugin provides support for swipe gestures on mobile devices in the # Elastic skin. - name: 'swipe' package: 'johndoh/swipe:0.1.0' state: 'enabled' # This plugin includes additional information in Dovecot connections to # provide better logging capabilities. - name: 'dovecot_ident' package: 'cor/dovecot-ident' state: 'enabled' # This plugin adds support for parsing vCard attachments in e-mail # messages. - name: 'vcard_attachments' state: 'enabled' # This plugin adds support for generating Identicon avatars for contacts # without images. - name: 'identicon' state: 'enabled' - name: 'managesieve' state: 'enabled' options: - name: 'managesieve_host' comment: | managesieve server address, default is localhost. Replacement variables supported in host name: %h - user's IMAP hostname %n - http hostname ($_SERVER['SERVER_NAME']) %d - domain (http hostname without the first part) For example %n = mail.domain.tld, %d = domain.tld value: '{{ roundcube__sieve_server }}' - name: 'managesieve_auth_type' comment: | Authentication method. Can be CRAM-MD5, DIGEST-MD5, PLAIN, LOGIN, EXTERNAL or none. Optional, defaults to best method supported by server. value: null - name: 'managesieve_auth_cid' comment: | Optional managesieve authentication identifier to be used as authorization proxy. Authenticate as a different user but act on behalf of the logged in user. Works with PLAIN and DIGEST-MD5 auth. value: null - name: 'managesieve_auth_pw' comment: | Optional managesieve authentication password to be used for imap_auth_cid value: null - name: 'managesieve_conn_options' comment: | Connection scket context options See https://php.net/manual/en/context.ssl.php The example below enables server certificate validation array: - ssl: - verify_peer: True verify_depth: 3 cafile: '/etc/ssl/certs/ca-certificates.crt' state: 'comment' - name: 'managesieve_default' comment: | A file with default script content (eg. spam filter) value: '/etc/dovecot/sieve/global' - name: 'managesieve_script_name' comment: | The name of the script which will be used when there's no user script value: 'managesieve' - name: 'managesieve_mbox_encoding' comment: | Sieve RFC says that we should use UTF-8 encoding for mailbox names, but some implementations does not convert UTF-8 to modified UTF-7. Defaults to UTF7-IMAP value: 'UTF-8' - name: 'managesieve_replace_delimiter' comment: | I need this because my dovecot (with listescape plugin) uses ':' delimiter, but creates folders with dot delimiter value: '' - name: 'managesieve_disabled_extensions' comment: | Disabled sieve extensions (body, copy, date, editheader, encoded-character, envelope, environment, ereject, fileinto, ihave, imap4flags, index, mailbox, mboxmetadata, regex, reject, relational, servermetadata, spamtest, spamtestplus, subaddress, vacation, variables, virustest, etc. Note: not all extensions are implemented value: [] - name: 'managesieve_debug' comment: | Enables debugging of conversation with sieve server. Logs it into <log_dir>/sieve value: False - name: 'managesieve_kolab_master' comment: | Enables features described in http://wiki.kolab.org/KEP:14 value: False - name: 'managesieve_filename_extension' comment: | Script name extension used for scripts including. Dovecot uses '.sieve', Cyrus uses '.siv'. Doesn't matter if you have managesieve_kolab_master disabled. value: '.sieve' - name: 'managesieve_filename_exceptions' comment: | List of reserved script names (without extension). Scripts listed here will be not presented to the user. value: [] - name: 'managesieve_domains' comment: | List of domains limiting destination emails in redirect action If not empty, user will need to select domain from a list value: [] - name: 'managesieve_default_headers' comment: | Default list of entries in header selector value: [ 'Subject', 'From', 'To' ] - name: 'managesieve_vacation' comment: | Enables separate management interface for vacation responses (out-of-office) 0 - no separate section (default), 1 - add Vacation section, 2 - add Vacation section, but hide Filters section value: 1 - name: 'managesieve_forward' comment: | Enables separate management interface for setting forwards (redirect to and copy to) 0 - no separate section (default), 1 - add Forward section, 2 - add Forward section, but hide Filters section value: 1 - name: 'managesieve_vacation_interval' comment: | Default vacation interval (in days). Note: If server supports vacation-seconds extension it is possible to define interval in seconds here (as a string), e.g. "3600s". value: 0 - name: 'managesieve_vacation_addresses_init' comment: | Some servers require vacation :addresses to be filled with all user addresses (aliases). This option enables automatic filling of these on initial vacation form creation. value: True - name: 'managesieve_vacation_from_init' comment: | Sometimes you want to always reply with mail email address This option enables automatic filling of :from field on initial vacation form creation. value: True - name: 'managesieve_notify_methods' comment: | Supported methods of notify extension. Default: 'mailto' value: [ 'mailto' ] - name: 'managesieve_raw_editor' comment: 'Enables scripts RAW editor feature' value: True - name: 'managesieve_disabled_actions' comment: | Disabled actions Prevent user from performing specific actions: list_sets, enable_disable_set, delete_set, new_set, download_set, new_rule, delete_rule Note: disabling list_sets removes the Filter sets widget from the UI and means the set defined in managesieve_script_name will always be used (and activated) value: [] - name: 'managesieve_allowed_hosts' comment: | List of hosts that support managesieve. Activate managesieve for selected hosts only. If this is not set all hosts are allowed. Example: $config['managesieve_allowed_hosts'] = array('host1.mydomain.com','host2.mydomain.com'); value: null
- roundcube__plugins
List of Roundcube plugins configured on all hosts in the Ansible inventory.
roundcube__plugins: []
- roundcube__group_plugins
List of Roundcube plugins configured on hosts in a specific Ansible inventory group.
roundcube__group_plugins: []
- roundcube__host_plugins
List of Roundcube plugins configured on specific hosts in the Ansible inventory.
roundcube__host_plugins: []
- roundcube__combined_plugins
Varlabie which combines all Roundcube plugin lists and is used in role tasks and templates.
roundcube__combined_plugins: '{{ roundcube__default_plugins + roundcube__plugins + roundcube__group_plugins + roundcube__host_plugins }}'
Skins
Other variables
- roundcube__max_file_size
Maximum upload size, in MB.
roundcube__max_file_size: '30'
Role-dependent configuration
- roundcube__keyring__dependent_gpg_user
The UNIX account which will be used to install additional GPG keys by the debops.keyring role.
roundcube__keyring__dependent_gpg_user: '{{ roundcube__user }}'
- roundcube__keyring__dependent_gpg_keys
GPG key configuration for the debops.keyring Ansible role.
roundcube__keyring__dependent_gpg_keys: - user: '{{ roundcube__user }}' group: '{{ roundcube__group }}' home: '{{ roundcube__home }}' id: '{{ roundcube__git_gpg_key }}' - '{{ roundcube__git_additional_gpg_keys }}'
- roundcube__ldap__dependent_tasks
Configuration for the debops.ldap Ansible role.
roundcube__ldap__dependent_tasks: - name: 'Create roundcube account for {{ roundcube__ldap_device_dn | join(",") }}' dn: '{{ roundcube__ldap_binddn }}' objectClass: '{{ roundcube__ldap_self_object_classes }}' attributes: '{{ roundcube__ldap_self_attributes }}' no_log: '{{ debops__no_log | d(True) }}' state: '{{ "present" if roundcube__ldap_password_enabled and roundcube__ldap_device_dn | d() else "ignore" }}'
- roundcube__nginx__dependent_servers
nginx server configuration managed by the debops.nginx role.
roundcube__nginx__dependent_servers: - name: '{{ roundcube__fqdn }}' filename: 'debops.roundcube' by_role: 'debops.roundcube' type: 'php' root: '{{ roundcube__git_dest }}' webroot_create: False access_policy: '{{ roundcube__nginx_access_policy }}' index: 'index.php' options: | autoindex off; client_max_body_size {{ roundcube__max_file_size }}M; client_body_buffer_size 128k; location_list: - pattern: '/' options: | try_files $uri $uri/ @roundcube; - pattern: '@roundcube' options: | rewrite ^/favicon\.ico$ skins/{{ roundcube__skin_folder }}/images/favicon.ico last; - pattern: '~ ^/?(installer|[A-Z0-9]+$)' options: | deny all; - pattern: '~ ^/?(\.git|\.tx|SQL|bin|config|logs|temp|tests|program\/(include|lib|localization|steps))' options: | deny all; - pattern: '~ /(README\.md|composer\.json-dist|composer\.json|package\.xml|Dockerfile)$' options: | deny all; php_options: | fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; php_upstream: 'php_roundcube'
- roundcube__nginx_access_policy
Name of the "nginx access policy" for Roundcube webpage. See debops.nginx Ansible role for more details.
roundcube__nginx_access_policy: ''
- roundcube__nginx__dependent_upstreams
PHP upstream server configuration managed by the debops.nginx role.
roundcube__nginx__dependent_upstreams: - name: 'php_roundcube' by_role: 'debops.roundcube' enabled: True type: 'php' php_pool: 'roundcube'
- roundcube__php__dependent_packages
List of PHP packages to install using the debops.php role.
roundcube__php__dependent_packages: - '{{ roundcube__base_php_packages }}' - '{{ roundcube__optional_php_packages }}' - '{{ roundcube__custom_php_packages }}'
- roundcube__php__dependent_pools
PHP pools managed by the debops.php role.
roundcube__php__dependent_pools: name: 'roundcube' by_role: 'debops.roundcube' user: '{{ roundcube__user }}' group: '{{ roundcube__group }}' owner: '{{ roundcube__user }}' home: '{{ roundcube__home }}' php_values: ## https://secure.php.net/manual/en/info.configuration.php#ini.upload-max-filesize upload_max_filesize: '{{ roundcube__max_file_size }}M' ## https://secure.php.net/manual/en/ini.core.php#ini.post-max-size post_max_size: '{{ roundcube__max_file_size }}M' ## https://github.com/roundcube/roundcubemail/wiki/Install-Requirements file_uploads: 'on' mbstring.func_overload: 'off' memory_limit: '64M' magic_quotes_runtime: 'off' magic_quotes_sybase: 'off' session.auto_start: 'off' suhosin.session.encrypt: 'off'
- roundcube__nodejs__npm_dependent_packages
Configuration for the debops.nodejs Ansible role.
roundcube__nodejs__npm_dependent_packages: # Dependency for the 'elastic' skin to compile the CSS files - 'less' - 'tslib'