diff --git a/api/Makefile b/api/Makefile new file mode 100644 index 00000000..4471e51c --- /dev/null +++ b/api/Makefile @@ -0,0 +1,26 @@ +# ---------------------------------------------------------------------- +# LICENSE +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License (GPL) +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# To read the license please visit http://www.gnu.org/copyleft/gpl.html +# ---------------------------------------------------------------------- +# Purpose of file: Install the files of alternc-api package +# ---------------------------------------------------------------------- + +install: + install -m 0644 -g root -o root api.conf $(DESTDIR)/etc/alternc/apache-panel.d + install -m 0644 api.sql $(DESTDIR)/usr/share/alternc/ + install -m 0644 -g 1999 -o root panel/* $(DESTDIR)/usr/share/alternc/panel/admin/api/ + install -m 0644 ../lib/Alternc/Api/*.php $(DESTDIR)/usr/share/php/Alternc/Api/ + install -m 0644 ../lib/Alternc/Api/Auth/*.php $(DESTDIR)/usr/share/php/Alternc/Api/Auth/ + install -m 0644 ../lib/Alternc/Api/Object/*.php $(DESTDIR)/usr/share/php/Alternc/Api/Object/ + diff --git a/api/api.conf b/api/api.conf new file mode 100644 index 00000000..7effb8eb --- /dev/null +++ b/api/api.conf @@ -0,0 +1,9 @@ + +# apache configuration to add the API at /api/ in any panel +# put this into /etc/alternc/apache-panel.d + +RewriteEngine On + +RewriteCond %{REQUEST_FILENAME} !-f +RewriteRule /api/(.*) /api/index.php [L] + diff --git a/api/api.sql b/api/api.sql new file mode 100644 index 00000000..52b8bfea --- /dev/null +++ b/api/api.sql @@ -0,0 +1,23 @@ + + +-- used by Alternc_Api_Auth_Sharedsecret + +CREATE TABLE IF NOT EXISTS `sharedsecret` ( + `uid` int(10) unsigned NOT NULL, + `secret` varchar(32) NOT NULL, + `application` varchar(255) NOT NULL, + PRIMARY KEY (`uid`,`secret`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Shared secrets used by Alternc_Api_Auth_Sharedsecret'; + + +-- used by Alternc_Api_Token + +CREATE TABLE IF NOT EXISTS `token` ( + `token` varchar(32) NOT NULL, + `expire` datetime NOT NULL, + `data` text NOT NULL, + PRIMARY KEY (`token`), + KEY `expire` (`expire`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Tokens used by API callers'; + + diff --git a/api/panel/bootstrap.php b/api/panel/bootstrap.php new file mode 100644 index 00000000..c135024f --- /dev/null +++ b/api/panel/bootstrap.php @@ -0,0 +1,91 @@ +Host = $L_MYSQL_HOST; + $this->Database = $L_MYSQL_DATABASE; + $this->User = $L_MYSQL_LOGIN; + $this->Password = $L_MYSQL_PWD; + } +} + +// we do both: +$db= new DB_system(); +$dbh = new PDO("mysql:host=".$L_MYSQL_HOST.";dbname=".$L_MYSQL_DATABASE, $L_MYSQL_LOGIN,$L_MYSQL_PWD, + array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8;") + ); + + +// Current User ID = the user whose commands are made on behalf of. +$cuid=0; + +$classes=array(); +/* CLASSES PHP : automatic include : */ +$c=opendir($root."class/"); +while ($di=readdir($c)) { + if (preg_match("#^m_(.*)\\.php$#",$di,$match)) { // $ + $name1="m_".$match[1]; + $name2=$match[1]; + $classes[]=$name2; + require_once($root."class/".$name1.".php"); + } +} +closedir($c); +/* THE DEFAULT CLASSES ARE : + dom, ftp, mail, quota, bro, admin, mem, mysql, err +*/ + + +/* Language */ +//include_once("../../class/lang_env.php"); + +// Adaptation to BOTH version of the variables managed by AlternC 1/3/4 +if (is_file($root."/class/variables.php")) { + require_once($root."/class/variables.php"); +} else { + $variables=new m_variables(); +} +$mem=new m_mem(); +$err=new m_err(); +$authip=new m_authip(); +$hooks=new m_hooks(); + + +for($i=0;$iobject = the Alternc_Api_Object_ to call + * ->action = the method to call in this class + * ->options = an object passed as it is while calling the method. + * + * Authentication is done by asking for /api/auth/?option1=value1&option2=value2 + * or POSTED data + * a token is returned for this session + * Use /api/auth to know which method you can use and what parameter they expect + * @todo add HTML pages that will self-document this API + */ +// bootstrap AlternC +require_once("bootstrap.php"); + +/** + * Attempts to load a class in multiple path, the PSR-0 or old style way + * + * @staticvar array $srcPathList + * @staticvar boolean $init + * @param string $class_name + * @return boolean + */ +function __autoload($class_name) { + // Contains (Namespace) => directory + static $srcPathList = array(); + static $init = null; + + // Attempts to set include path and directories once + if (is_null($init)) { + + // Sets init flag + $init = true; + + // Sets a contextual directory + $srcPathList["standard"] = "/usr/share/php"; + + // Updates include_path according to this list + $includePathList = explode(PATH_SEPARATOR, get_include_path()); + + foreach ($srcPathList as $path) { + if (!in_array($path, $includePathList)) { + $includePathList[] = $path; + } + } + // Reverses the path for search efficiency + $finalIncludePathList = array_reverse($includePathList); + + // Sets the updated include_path + set_include_path(implode(PATH_SEPARATOR, $finalIncludePathList)); + } + + // Accepts old Foo_Bar namespacing + if (preg_match("/_/", $class_name)) { + $file_name = str_replace('_', DIRECTORY_SEPARATOR, $class_name) . '.php'; + + // Accepts 5.3 Foo\Bar PSR-0 namespacing + } else if (preg_match("/\\/", $class_name)) { + $file_name = str_replace('\\', DIRECTORY_SEPARATOR, ltrim($class_name, '\\')) . '.php'; + + // Accepts non namespaced classes + } else { + $file_name = $class_name . '.php'; + } + + // Attempts to find file in namespace + foreach ($srcPathList as $namespace => $path) { + $file_path = $path . DIRECTORY_SEPARATOR . $file_name; + if (is_file($file_path) && is_readable($file_path)) { + require $file_path; + return true; + } + } + + // Failed to find file + return false; +} + +function apicall($data, $token) { + global $dbh; + $options["databaseAdapter"] = $dbh; + $options["loginAdapterList"] = array("sharedsecret", "login"); + // TODO (no loggerAdapter PSR3-Interface-compliant class as of now) + try { + $data["token_hash"] = $token; + $service = new Alternc_Api_Service($options); + + $response = $service->call( + new Alternc_Api_Request($data) + ); + + header("Content-Type: application/json"); + echo $response->toJson(); + exit(); + } catch (Exception $e) { + // something went wrong, we spit out the exception as an Api_Response + // TODO : Don't do that on production! spit out a generic "fatal error" code and LOG the exception ! + header("Content-Type: application/json"); + $response = new Alternc_Api_Response(array("code" => $e->getCode(), "message" => $e->getMessage())); + echo $response->toJson(); + exit(); + } +} + +function apiauth($data) { + global $dbh; + $options["databaseAdapter"] = $dbh; + // TODO (no loggerAdapter PSR3-Interface-compliant class as of now) + try { + $service = new Alternc_Api_Service($options); + $response = $service->auth($data); + header("Content-Type: application/json"); + echo $response->toJson(); + exit(); + } catch (Exception $e) { + // something went wrong, we spit out the exception as an Api_Response + // TODO : Don't do that on production! spit out a generic "fatal error" code and LOG the exception ! + header("Content-Type: application/json"); + $response = new Alternc_Api_Response(array("code" => $e->code, "message" => $e->message)); + echo $response->toJson(); + exit(); + } +} + +/** + * Main code: either we are authenticating + * or calling one of the APIs + * or asking for some documentation + */ +// Authentication +if (preg_match("#^/api/auth/([^/\?]*)[/\?]?#", $_SERVER["REQUEST_URI"], $mat)) { + if ($_SERVER["REQUEST_METHOD"] == "POST") { + $data = array("options" => $_POST, + "method" => $mat[1]); + apiauth($data); + exit(); + } else { + $data = array("options" => $_GET, + "method" => $mat[1]); + apiauth($data); + exit(); + } +} + +// We support 4 api calls methods: +if ($_SERVER["REQUEST_URI"] == "/api/post") { + // simple ?q or POST of json data + if ($_SERVER["REQUEST_METHOD"] == "POST") { + $data = array("options" => $_POST, + "object" => $_POST["object"], + "action" => $_POST["action"], + ); + $token = $_POST["token"]; + apicall($data, $token); + exit(); + } else { + $data = array("options" => $_GET, + "object" => $_GET["object"], + "action" => $_GET["action"], + ); + $token = $_GET["token"]; + apicall($data, $token); + exit(); + } +} +if (preg_match("#^/api/rest/([^/]*)/([^/\?]*)[/\?]?#", $_SERVER["REQUEST_URI"], $mat)) { + if ($_SERVER["REQUEST_METHOD"] == "POST") { + $data = array("options" => $_POST, + "object" => $mat[1], + "action" => $mat[2] + ); + $token = $_POST["token"]; + apicall($data, $token); + exit(); + } else { + $data = array("options" => $_GET, + "object" => $mat[1], + "action" => $mat[2] + ); + $token = $_GET["token"]; + apicall($data, $token); + exit(); + } +} + +echo "I did nothing. Did you call the api properly?"; diff --git a/debian/alternc-api.dirs b/debian/alternc-api.dirs new file mode 100644 index 00000000..951611cd --- /dev/null +++ b/debian/alternc-api.dirs @@ -0,0 +1,4 @@ +etc/alternc/apache-panel.d +usr/share/alternc/panel/admin/api +usr/share/php/Alternc/Api/Auth +usr/share/php/Alternc/Api/Object diff --git a/debian/alternc-api.postinst b/debian/alternc-api.postinst new file mode 100644 index 00000000..7d9d1d4a --- /dev/null +++ b/debian/alternc-api.postinst @@ -0,0 +1,36 @@ +#!/bin/bash -e + + +case "$1" in + configure) + + echo "Installing mysql table" + mysql --defaults-file=/etc/alternc/my.cnf \ + &2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. +#DEBHELPER# + +# vim: et sw=4 diff --git a/debian/alternc-ssl.cron.d b/debian/alternc-ssl.cron.d new file mode 100644 index 00000000..e520428a --- /dev/null +++ b/debian/alternc-ssl.cron.d @@ -0,0 +1,5 @@ + +@reboot root mkdir -p /var/run/alternc-ssl && chown alterncpanel:alterncpanel /var/run/alternc-ssl + +# in case incron didn't work, fix ssl aliases every hour: +44 * * * * root /usr/lib/alternc/ssl_alias_manager.sh diff --git a/debian/alternc-ssl.dirs b/debian/alternc-ssl.dirs new file mode 100644 index 00000000..3c417eb6 --- /dev/null +++ b/debian/alternc-ssl.dirs @@ -0,0 +1,20 @@ +etc/alternc/templates/apache2/mods-available +etc/apache2/conf.d +usr/lib/alternc/install.d +usr/share/alternc/install +usr/share/doc/alternc-ssl +usr/share/alternc/panel/admin/images +usr/share/alternc/panel/admin/styles +usr/share/alternc/panel/class +usr/share/alternc/panel/locales/en_US/LC_MESSAGES +usr/share/alternc/panel/locales/fr_FR/LC_MESSAGES +usr/share/alternc/panel/locales/it_IT/LC_MESSAGES +usr/share/alternc/panel/locales/nl_NL/LC_MESSAGES +usr/share/alternc/panel/locales/de_DE/LC_MESSAGES +usr/share/alternc/panel/locales/pt_BR/LC_MESSAGES +usr/share/alternc/panel/locales/es_ES/LC_MESSAGES +var/lib/alternc/backups +etc/alternc/functions_hosting +etc/incron.d +usr/share/php/Alternc/Api/Object +var/lib/alternc/ssl/private diff --git a/debian/alternc-ssl.postinst b/debian/alternc-ssl.postinst new file mode 100755 index 00000000..f2eb00d5 --- /dev/null +++ b/debian/alternc-ssl.postinst @@ -0,0 +1,46 @@ +#!/bin/bash -e + +. /usr/share/debconf/confmodule + +CONFIGFILE="/etc/alternc/local.sh" + +case "$1" in + configure) + . "$CONFIGFILE" + + # Then, configure the quota for "ssl" + /usr/lib/alternc/quota_init ssl 0 + + echo "Installing mysql table" + mysql --defaults-file=/etc/alternc/my.cnf -f < /usr/share/alternc/install/ssl.sql || true + + echo "installing required apache modules" + a2enmod ssl + + echo "$2" >/var/lib/alternc/backups/alternc-ssl-lastversion + + echo -e "\033[31m**********************************************" + echo "* *" + echo "* ALTERNC-SSL ACTION REQUESTED *" + echo "* *" + echo "* Please run alternc.install to fully deploy *" + echo "* Then change your quota to activate SSL Cert*" + echo "* *" + echo "**********************************************" + echo -e "\033[0m" + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. +#DEBHELPER# + +# vim: et sw=4 diff --git a/debian/alternc-ssl.postrm b/debian/alternc-ssl.postrm new file mode 100755 index 00000000..f12f38e0 --- /dev/null +++ b/debian/alternc-ssl.postrm @@ -0,0 +1,36 @@ +#!/bin/sh -e + +CONFIGFILE="/etc/alternc/my.cnf" +MENUFILE="/etc/alternc/menulist.txt" + +case "$1" in + remove) + + # TODO : we don't purge *-ssl vhosts or *-ssl templates, they may break the hosting ... + if [ -e "$CONFIGFILE" -a -x "/usr/bin/mysql" ]; then + mysql --defaults-file=${CONFIGFILE} -f -e "DELETE FROM domaines_type WHERE name IN ('vhost-ssl','vhost-mixssl','roundcube-ssl','squirrelmail-ssl','panel-ssl','php52-ssl','php52-mixssl');" + mysql --defaults-file=${CONFIGFILE} -f -e "UPDATE sub_domaines SET web_action='DELETE' WHERE type IN ('vhost-ssl','vhost-mixssl','roundcube-ssl','squirrelmail-ssl','panel-ssl','php52-ssl','php52-mixssl');" + fi + echo -e "\033[31m**********************************************" + echo "* *" + echo "* ALTERNC-SSL ACTION REQUESTED *" + echo "* *" + echo "* Please run alternc.install to fully remove *" + echo "* *" + echo "**********************************************" + echo -e "\033[0m" + +;; + purge) + # Purge the certificate and alias table: + if [ -e "$CONFIGFILE" -a -x "/usr/bin/mysql" ]; then + mysql --defaults-file=${CONFIGFILE} -f -e "DROP TABLE IF EXISTS certificate;" + mysql --defaults-file=${CONFIGFILE} -f -e "DROP TABLE IF EXISTS certif_alias;" + mysql --defaults-file=${CONFIGFILE} -f -e "DROP TABLE IF EXISTS certif_hosts;" + fi + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. +#DEBHELPER# diff --git a/lib/Alternc/Api/Auth/Interface.php b/lib/Alternc/Api/Auth/Interface.php new file mode 100644 index 00000000..b7042bc9 --- /dev/null +++ b/lib/Alternc/Api/Auth/Interface.php @@ -0,0 +1,26 @@ + array("fields to send, required or not"), "description" => "description of this auth") + */ + function instructions(); +} diff --git a/lib/Alternc/Api/Auth/Login.php b/lib/Alternc/Api/Auth/Login.php new file mode 100644 index 00000000..70afde2f --- /dev/null +++ b/lib/Alternc/Api/Auth/Login.php @@ -0,0 +1,72 @@ +db = $service->getDb(); + } + + /** + * Authenticate a user + * + * @param $options options, depending on the auth scheme, including uid for setuid users + * here, login is the AlternC username, and password is the password for this username. + * @return an Alternc_Api_Token + */ + function auth($options) { + + if (!isset($options["login"]) || !is_string($options["login"])) { + throw new \Exception("Missing required parameter login", self::ERR_INVALID_ARGUMENT); + } + if (!isset($options["password"]) || !is_string($options["password"])) { + throw new \Exception("Missing required parameter password", self::ERR_INVALID_ARGUMENT); + } + + if (!preg_match("#^[0-9a-zA-Z-]{1,32}$#", $options["login"])) { // FIXME : normalize this on AlternC !!! + throw new \Exception("Invalid login", self::ERR_INVALID_LOGIN); + } + + $stmt = $db->query("SELECT m.enabled,m.uid,m.login,m.su FROM membres m WHERE m.login=? AND m.password=?;", array($options["login"], $options["password"]), PDO::FETCH_CLASS); + $me = $stmt->fetch(); + if (!$me) + return new Alternc_Api_Response(array("code" => ERR_INVALID_AUTH, "message" => "Invalid login or password")); + if (!$me->enabled) + return new Alternc_Api_Response(array("code" => ERR_DISABLED_ACCOUNT, "message" => "Account is disabled")); + + return Alternc_Api_Token::tokenGenerate( + array("uid" => $me->uid, "isAdmin" => ($me->su != 0)), $this->db + ); + } + + /** + * instructions on how to use this Auth class + * @return array("fields" => array("fields to send, required or not"), "description" => "description of this auth") + */ + function instructions() { + return array("fields" => array("login" => "AlternC user account", "password" => "AlternC's user password stored in membres table."), + "description" => "Authenticate against an AlternC user and password, the same as for the control panel" + ); + } + +} + +// class Alternc_Api_Auth_Login + diff --git a/lib/Alternc/Api/Auth/Sharedsecret.php b/lib/Alternc/Api/Auth/Sharedsecret.php new file mode 100644 index 00000000..1696a377 --- /dev/null +++ b/lib/Alternc/Api/Auth/Sharedsecret.php @@ -0,0 +1,80 @@ +db = $service->getDb(); + } + + /** + * Authenticate a user + * + * @param $options options, depending on the auth scheme, including uid for setuid users + * here, login is the alternc username, and secret is a valid shared secret for this user. + * @return an Alternc_Api_Token + */ + function auth($options) { + + if (!isset($options["login"]) || !is_string($options["login"])) { + throw new \Exception("Missing required parameter login", self::ERR_INVALID_ARGUMENT); + } + if (!isset($options["secret"]) || !is_string($options["secret"])) { + throw new \Exception("Missing required parameter secret", self::ERR_INVALID_ARGUMENT); + } + if (!preg_match("#^[0-9a-zA-Z]{32}$#", $options["secret"])) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_SECRET, "message" => "Invalid shared secret syntax")); + } + + if (!preg_match("#^[0-9a-zA-Z-]{1,32}$#", $options["login"])) { // FIXME : normalize this on AlternC !!! + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_LOGIN, "message" => "Invalid login")); + } + + $stmt = $this->db->prepare("SELECT m.enabled,m.uid,m.login,m.su FROM membres m, sharedsecret s WHERE s.uid=m.uid AND m.login=? AND s.secret=?;"); + $stmt->execute(array($options["login"], $options["secret"])); + $me = $stmt->fetch(PDO::FETCH_OBJ); + if (!$me) + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_AUTH, "message" => "Invalid shared secret")); + if (!$me->enabled) + return new Alternc_Api_Response(array("code" => self::ERR_DISABLED_ACCOUNT, "message" => "Account is disabled")); + + return Alternc_Api_Token::tokenGenerate( + array("uid" => (int) $me->uid, "isAdmin" => ($me->su != 0)), $this->db + ); + } + + /** + * instructions on how to use this Auth class + * @return array("fields" => array("fields to send, required or not"), "description" => "description of this auth") + */ + function instructions() { + return array("fields" => array("login" => "AlternC user account", "secret" => "API Key, Shared secrets, valid for this account, stored in sharedsecret table."), + "description" => "Authenticate against an Api Key, also called SharedSecret. distinct from the account's password, can be plenty and revoked independently" + ); + } + +} + +// class Alternc_Api_Auth_Sharedsecret + diff --git a/lib/Alternc/Api/Legacyobject.php b/lib/Alternc/Api/Legacyobject.php new file mode 100644 index 00000000..2691cced --- /dev/null +++ b/lib/Alternc/Api/Legacyobject.php @@ -0,0 +1,64 @@ +db = $service->db; + $this->cuid = $cuid = $service->token->uid; + $this->isAdmin = $service->token->isAdmin; + // We use the global $admin from AlternC legacy classes + $this->admin = $admin; + // Set the legacy rights: + $this->admin->enabled = $this->isAdmin; + } + + /** return a proper Alternc_Api_Response from an error class and error string + * from AlternC legacy class + */ + protected function alterncLegacyErrorManager() { + global $err; + return new Alternc_Api_Response(array("code" => self::ERR_ALTERNC_FUNCTION, "message" => "[" . $err->clsid . "] " . $err->error)); + } + + /** ensure that offset & count are set properly from $options. + */ + protected function offsetAndCount($options, $max) { + $offset = -1; + $count = -1; + if (isset($options["count"])) + $count = intval($options["count"]); + if (isset($options["offset"])) + $offset = intval($options["offset"]); + if ($offset != -1 || $count != -1) { + if ($offset < 0 || $offset > $max) + $offset = 0; + if ($count < 0 || $count > 1000) + $count = 1000; + } + return array($offset, $count); + } + +} + +// Aternc_Api_Legacyobject + diff --git a/lib/Alternc/Api/Object/Account.php b/lib/Alternc/Api/Object/Account.php new file mode 100644 index 00000000..7d1e4713 --- /dev/null +++ b/lib/Alternc/Api/Object/Account.php @@ -0,0 +1,203 @@ +add_mem() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: login, pass, nom, prenom, mail, + * non-mandatory: canpass, type, duration, notes, force, create_dom, db_server_id + * @return Alternc_Api_Response whose content is the newly created UID + */ + function add($options) { + $mandatory = array("login", "pass", "nom", "prenom", "mail"); + $defaults = array("canpass" => 1, "type" => "default", "duration" => 0, "notes" => "", "force" => 0, "create_dom" => ""); + $missing = ""; + foreach ($mandatory as $key) { + if (!isset($options[$key])) { + $missing.=$key . " "; + } + } + if ($missing) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . $missing)); + } + foreach ($defaults as $key => $value) { + if (!isset($options[$key])) { + $options[$key] = $value; + } + } + if (!isset($options["db_server_id"])) { + $stmt = $this->db->prepare("SELECT MIN(db_servers.id) AS id FROM db_servers;"); + $stmt->execute(); + $me = $stmt->fetch(PDO::FETCH_OBJ); + $options["db_server_id"] = $me->id; + } + $uid = $this->admin->add_mem($options["login"], $options["pass"], $options["nom"], $options["prenom"], $options["mail"], $options["canpass"], $options["type"], $options["duration"], $options["notes"], $options["force"], $options["create_dom"], $options["db_server_id"]); + if (!$uid) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $uid)); + } + } + + /** API Method from legacy class method admin->update_mem() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: nom, prenom, mail, + * non-mandatory: pass, canpass, type, duration, notes, force, create_dom, db_server_id + * @return Alternc_Api_Response whose content is the updated UID + */ + function update($options) { + $defaults = array("nom", "prenom", "mail", "canpass", "enabled", "type", "duration", "notes"); + if (!isset($options["uid"])) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: UID")); + } + $uid = intval($options["uid"]); + $old = $this->admin->get($uid); + if (!$old) { + return new Alternc_Api_Response(array("code" => self::ERR_NOT_FOUND, "message" => "User not found")); + } + + foreach ($defaults as $key) { + if (!isset($options[$key])) { + $options[$key] = $old[$key]; + } + } + if (!isset($options["pass"])) + $options["pass"] = ""; + $uid = $this->admin->update_mem($uid, $options["mail"], $options["nom"], $options["prenom"], $options["pass"], $options["enabled"], $options["canpass"], $options["type"], $options["duration"], $options["notes"]); + if (!$uid) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $uid)); + } + } + + /** API Method from legacy class method admin->del_mem() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: uid + * @return Alternc_Api_Response TRUE if the account has been deleted. + */ + function del($options) { + if (!isset($options["uid"])) { + return new Alternc_Api_Response(array("code" => self::ERR_ALTERNC_FUNCTION, "message" => "Missing or invalid argument: UID")); + } + $result = $this->admin->del_mem(intval($options["uid"])); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => true)); + } + } + + /** API Method from legacy class method admin->lock_mem() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: uid + * @return Alternc_Api_Response TRUE if the account has been locked + */ + function lock($options) { + if (!isset($options["uid"])) { + return new Alternc_Api_Response(array("code" => self::ERR_ALTERNC_FUNCTION, "message" => "Missing or invalid argument: UID")); + } + $result = $this->admin->lock_mem(intval($options["uid"])); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => true)); + } + } + + /** API Method from legacy class method admin->unlock_mem() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: uid + * @return Alternc_Api_Response TRUE if the account has been unlocked + */ + function unlock($options) { + if (!isset($options["uid"])) { + return new Alternc_Api_Response(array("code" => self::ERR_ALTERNC_FUNCTION, "message" => "Missing or invalid argument: UID")); + } + $result = $this->admin->unlock_mem(intval($options["uid"])); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => true)); + } + } + + /** API Method from legacy class method admin->normal2su() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: uid + * @return Alternc_Api_Response TRUE if the account has been set to be an administator + */ + function setAdmin($options) { + if (!isset($options["uid"])) { + return new Alternc_Api_Response(array("code" => self::ERR_ALTERNC_FUNCTION, "message" => "Missing or invalid argument: UID")); + } + $result = $this->admin->normal2su(intval($options["uid"])); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => true)); + } + } + + /** API Method from legacy class method admin->su2normal() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: uid + * @return Alternc_Api_Response TRUE if the account has been set to NOT be an administrator + */ + function unsetAdmin($options) { + if (!isset($options["uid"])) { + return new Alternc_Api_Response(array("code" => self::ERR_ALTERNC_FUNCTION, "message" => "Missing or invalid argument: UID")); + } + $result = $this->admin->su2normal(intval($options["uid"])); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => true)); + } + } + + /** API Method from legacy class method admin->get_list() + * @param $options a hash with parameters transmitted to legacy call + * non-mandatory parameters: ONE OF: + * uid(strict), login(like %%), domain(like %%), creator(strict, by uid), + * Any of: offset(int=0), count(int=+inf) + * @return Alternc_Api_Response An array with all matching users informations as hashes + */ + function find($options) { + $result = false; + if (!$result && isset($options["uid"])) { + $result = $this->admin->get(intval($options["uid"])); + if ($result) + $result = array($result); + } + if (!$result && isset($options["login"])) { + $result = $this->admin->get_list(1/* ALL */, "", $options["login"], "login"); + } + if (!$result && isset($options["domain"])) { + $result = $this->admin->get_list(1/* ALL */, "", $options["domain"], "domaine"); + } + if (!$result && isset($options["creator"])) { + $result = $this->admin->get_list(1/* ALL */, intval($options["creator"])); + } + if (!$result) { // everybody + $result = $this->admin->get_list(1/* ALL */, ""); + } + + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + list($offset, $count) = $this->offsetAndCount($options, count($result)); + if ($offset != -1 || $count != -1) { + $result = array_slice($result, $offset, $count); + } + return new Alternc_Api_Response(array("content" => $result)); + } + } + +} + +// class Alternc_Api_Object_Account \ No newline at end of file diff --git a/lib/Alternc/Api/Object/Domain.php b/lib/Alternc/Api/Object/Domain.php new file mode 100644 index 00000000..1ec98367 --- /dev/null +++ b/lib/Alternc/Api/Object/Domain.php @@ -0,0 +1,142 @@ +dom = $dom; + } + + /** API Method from legacy class method dom->get_domain_list() + * @param $options a hash with parameters transmitted to legacy call + * may be "uid" to only return domains for a specific user-id + * (if you are not admin, this WILL only list YOUR domains anyway) + * may be "offset" and/or "count" to do paging. + * @return Alternc_Api_Response whose content is the list of hosted domains on this server + * (no more details as of now) + */ + function find($options) { + global $cuid; + $sql = ""; + if ($this->isAdmin) { + if (isset($options["uid"])) { + $uid = intval($options["uid"]); + } else { + $uid = -1; + } + } else { + $uid = $cuid; + } + if ($uid != -1) { + $sql = " WHERE compte=$uid "; + } else { + $sql = ""; + } + $stmt = $this->db->prepare("SELECT * FROM domaines $sql ORDER BY domaine"); + $stmt->execute(); + $result = array(); + while ($me = $stmt->fetch(PDO::FETCH_OBJ)) { + $result[$me->domaine] = $me; + } + list($offset,$count)=$this->offsetAndCount($options, count($result)); + if ($offset != -1 || $count != -1) { + $result = array_slice($result, $offset, $count); + } + return new Alternc_Api_Response(array("content" => $result)); + } + + /** API Method from legacy class method dom->add_domain() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: domain(str), dns(bool) + * non-mandatory: noerase(bool, only admins), force(bool, only admins), isslave(bool), slavedom(str) + * @return Alternc_Api_Response whose content is the newly created DOMAIN id + */ + function add($options) { + $mandatory = array("domain", "dns"); + $defaults = array("noerase" => false, "force" => false, "isslave" => false, "slavedom" => ""); + $missing = ""; + foreach ($mandatory as $key) { + if (!isset($options[$key])) { + $missing.=$key . " "; + } + } + if ($missing) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . $missing)); + } + foreach ($defaults as $key => $value) { + if (!isset($options[$key])) { + $options[$key] = $value; + } + } + if (!$this->isAdmin) { // only admin can change the options below: + $options["noerase"] = false; + $options["force"] = false; + } + $did = $this->dom->add_domain($options["domain"], $options["dns"], $options["noerase"], $options["force"], $options["isslave"], $options["slavedom"]); + if (!$did) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $did)); + } + } + + /** API Method from legacy class method dom->edit_domain() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: domain(str), dns(bool) + * non-mandatory: noerase(bool, only admins), force(bool, only admins), isslave(bool), slavedom(str) + * @return Alternc_Api_Response whose content is the newly created DOMAIN id + */ + function update($options) { + $mandatory = array("domain", "dns", "gesmx"); + $defaults = array("force" => false, "ttl" => 86400); + $missing = ""; + foreach ($mandatory as $key) { + if (!isset($options[$key])) { + $missing.=$key . " "; + } + } + if ($missing) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . $missing)); + } + foreach ($defaults as $key => $value) { + if (!isset($options[$key])) { + $options[$key] = $value; + } + } + if (!$this->isAdmin) { // only admin can change the options below: + $options["force"] = false; + } + $did = $this->dom->edit_domain($options["domain"], $options["dns"], $options["gesmx"], $options["force"], $options["ttl"]); + if (!$did) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $did)); + } + } + + /** API Method from legacy class method dom->del_domain() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: domain + * @return Alternc_Api_Response TRUE if the domain has been marked for deletion. + */ + function del($options) { + if (!isset($options["domain"])) { + return new Alternc_Api_Response(array("code" => self::ERR_ALTERNC_FUNCTION, "message" => "Missing or invalid argument: DOMAIN")); + } + $result = $this->dom->del_domain($options["domain"]); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => true)); + } + } + +} + +// class Alternc_Api_Object_Domain diff --git a/lib/Alternc/Api/Object/Ftp.php b/lib/Alternc/Api/Object/Ftp.php new file mode 100644 index 00000000..e224e178 --- /dev/null +++ b/lib/Alternc/Api/Object/Ftp.php @@ -0,0 +1,126 @@ +ftp = $ftp; + } + + /** API Method from legacy class method ftp->add_ftp() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: prefix, login, pass, dir + * @return Alternc_Api_Response whose content is the newly created UID + */ + function add($options) { + $mandatory = array("prefix", "login", "pass", "dir"); + $missing = ""; + foreach ($mandatory as $key) { + if (!isset($options[$key])) { + $missing.=$key . " "; + } + } + if ($missing) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . $missing)); + } + $ftpid = $this->ftp->add_ftp($options["prefix"], $options["login"], $options["pass"], $options["dir"]); + if (!$ftpid) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $ftpid)); + } + } + + /** API Method from legacy class method ftp->put_ftp_details() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: id + * non-mandatory: prefix, login, pass, dir + * @return Alternc_Api_Response whose content is the updated UID + */ + function update($options) { + $defaults = array("prefix", "login", "dir"); + if (!isset($options["id"])) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: ID")); + } + $id = intval($options["id"]); + $old = $this->ftp->get_ftp_details($id); + if (!$old) { + return new Alternc_Api_Response(array("code" => self::ERR_NOT_FOUND, "message" => "FTP Account not found")); + } + foreach ($defaults as $key) { + if (!isset($options[$key])) { + $options[$key] = $old[$key]; + } + } + if (!isset($options["pass"])) + $options["pass"] = ""; + $result = $this->ftp->put_ftp_details($id, $options["prefix"], $options["login"], $options["pass"], $options["dir"]); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $result)); + } + } + + /** API Method from legacy class method ftp->del_ftp() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: id + * @return Alternc_Api_Response TRUE if the FTP account has been deleted. + */ + function del($options) { + if (!isset($options["id"])) { + return new Alternc_Api_Response(array("code" => self::ERR_ALTERNC_FUNCTION, "message" => "Missing or invalid argument: ID")); + } + $result = $this->ftp->delete_ftp(intval($options["id"])); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => true)); + } + } + + /** API Method from legacy class method ftp->get_list() + * @param $options a hash with parameters transmitted to legacy call + * non-mandatory parameters: + * Any of: offset(int=0), count(int=+inf) + * @return Alternc_Api_Response An array with all matching FTP account informations as hashes + */ + function find($options) { + $result = $this->ftp->get_list(); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + list($offset, $count) = $this->offsetAndCount($options, count($result)); + if ($offset != -1 || $count != -1) { + $result = array_slice($result, $offset, $count); + } + return new Alternc_Api_Response(array("content" => $result)); + } + } + + /** API Method from legacy class method ftp->is_ftp() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: DIR + * @return Alternc_Api_Response Integer the ID of the account in this folder, or FALSE + */ + function isFtp($options) { + if (!isset($options["dir"])) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: DIR")); + } + $result = $this->ftp->is_ftp($options["dir"]); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $result)); + } + } + +} + +// class Alternc_Api_Object_Ftp \ No newline at end of file diff --git a/lib/Alternc/Api/Object/Mail.php b/lib/Alternc/Api/Object/Mail.php new file mode 100644 index 00000000..df6e50ed --- /dev/null +++ b/lib/Alternc/Api/Object/Mail.php @@ -0,0 +1,380 @@ +mail = $mail; + } + + /** API Method from legacy class method mail->enum_domains() + * @param $options a hash with parameters transmitted to legacy call + * @return Alternc_Api_Response whose content is the list of hosted domains + * for mails on this server + * (no more details as of now) + */ + function listDomains($options) { + global $cuid; + $sql = ""; + $uid = $cuid; + if ($this->isAdmin && isset($options["uid"])) { + $uid = intval($options["uid"]); + } + + $did = $this->mail->enum_domains($uid); + if (!$did) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $did)); + } + } + + /** API Method from legacy class method mail->available() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: mail(str) + * @return Alternc_Api_Response telling TRUE or FALSE + */ + function isAvailable($options) { + if (!isset($options["mail"])) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . "mail")); + } + $did = $this->mail->available($options["mail"]); + if (!$did) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $did)); + } + } + + /** API Method from legacy class method $mail->enum_domain_mails + * ($dom_id = null, $search="", $offset=0, $count=30, $show_systemmails=false) + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: + * non-mandatory: + * @return Alternc_Api_Response whose content is + */ + function getAll($options) { + $defaults = array("dom_id" => null, "search" => "", "offset" => 0, "count" => 30, "show_systemmails" => false); + foreach ($defaults as $key => $value) { + if (!isset($options[$key])) { + $options[$key] = $value; + } + } + $did = $this->mail->enum_domain_mails($options["dom_id"], $options["search"], $options["offset"], $options["count"], $options["show_systemmails"]); + if (!$did) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $did)); + } + } + + /** API Method from legacy class method $mail->create + * ($dom_id, $mail,$type="",$dontcheck=false){ + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: + * non-mandatory: + * @return Alternc_Api_Response whose content is + */ + function create($options) { + $defaults = array("type" => ""); + $mandatory = array("dom_id", "mail"); + $missing = ""; + foreach ($mandatory as $key) { + if (!isset($options[$key])) { + $missing.=$key . " "; + } + } + if ($missing) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . $missing)); + } + foreach ($defaults as $key => $value) { + if (!isset($options[$key])) { + $options[$key] = $value; + } + } + $did = $this->mail->create($options["dom_id"], $options["mail"], $options["type"]); + if (!$did) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $did)); + } + } + + /** API Method from legacy class method $mail->get_details($mail_id) + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: mail_id + * @return Alternc_Api_Response whose content is + */ + function get($options) { + $mandatory = array("mail_id"); + $missing = ""; + foreach ($mandatory as $key) { + if (!isset($options[$key])) { + $missing.=$key . " "; + } + } + if ($missing) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . $missing)); + } + $did = $this->mail->get_details($options["mail_id"]); + if (!$did) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $did)); + } + } + + /** API Method from legacy class method $mail->get_account_by_mail_id($mail_id) + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: mail_id + * @return Alternc_Api_Response whose content is + */ + function account($options) { + $mandatory = array("mail_id"); + $missing = ""; + foreach ($mandatory as $key) { + if (!isset($options[$key])) { + $missing.=$key . " "; + } + } + if ($missing) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . $missing)); + } + $did = $this->mail->get_account_by_mail_id($options["mail_id"]); + if (!$did) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $did)); + } + } + + /** API Method from legacy class method $mail->delete($mail_id) + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: mail_id + * @return Alternc_Api_Response whose content is + */ + function delete($options) { + $mandatory = array("mail_id"); + $missing = ""; + foreach ($mandatory as $key) { + if (!isset($options[$key])) { + $missing.=$key . " "; + } + } + if ($missing) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . $missing)); + } + $did = $this->mail->delete($options["mail_id"]); + if (!$did) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $did)); + } + } + + /** API Method from legacy class method $mail->undelete($mail_id) + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: mail_id + * @return Alternc_Api_Response whose content is + */ + function undelete($options) { + $mandatory = array("mail_id"); + $missing = ""; + foreach ($mandatory as $key) { + if (!isset($options[$key])) { + $missing.=$key . " "; + } + } + if ($missing) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . $missing)); + } + $did = $this->mail->undelete($options["mail_id"]); + if (!$did) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $did)); + } + } + + /** API Method from legacy class method $mail->delete($mail_id) + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: mail_id, password + * @return Alternc_Api_Response whose content is + */ + function passwd($options) { + $mandatory = array("mail_id", "password"); + $missing = ""; + foreach ($mandatory as $key) { + if (!isset($options[$key])) { + $missing.=$key . " "; + } + } + if ($missing) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . $missing)); + } + $did = $this->mail->set_passwd($options["mail_id"], $options["password"]); + if (!$did) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $did)); + } + } + + /** API Method from legacy class method $mail->enable($mail_id) + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: mail_id + * @return Alternc_Api_Response whose content is + */ + function enable($options) { + $mandatory = array("mail_id"); + $missing = ""; + foreach ($mandatory as $key) { + if (!isset($options[$key])) { + $missing.=$key . " "; + } + } + if ($missing) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . $missing)); + } + $did = $this->mail->enable($options["mail_id"]); + if (!$did) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $did)); + } + } + + /** API Method from legacy class method $mail->disable($mail_id) + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: mail_id + * @return Alternc_Api_Response whose content is + */ + function disable($options) { + $mandatory = array("mail_id"); + $missing = ""; + foreach ($mandatory as $key) { + if (!isset($options[$key])) { + $missing.=$key . " "; + } + } + if ($missing) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . $missing)); + } + $did = $this->mail->disable($options["mail_id"]); + if (!$did) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $did)); + } + } + + /** API Method from legacy class method $mail-> set_details + * ($mail_id, $islocal, $quotamb, $recipients,$delivery="dovecot",$dontcheck=false) + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: + * non-mandatory: + * @return Alternc_Api_Response whose content is + */ + function update($options) { + $defaults = array("delivery" => "dovecot"); + $mandatory = array("mail_id", "islocal", "quotamb", "recipients"); + $missing = ""; + foreach ($mandatory as $key) { + if (!isset($options[$key])) { + $missing.=$key . " "; + } + } + if ($missing) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . $missing)); + } + foreach ($defaults as $key => $value) { + if (!isset($options[$key])) { + $options[$key] = $value; + } + } + $did = $this->mail->set_details($options["mail_id"], $options["islocal"], $options["quotamb"], $options["recipients"], $options["delivery"]); + if (!$did) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $did)); + } + } + + + /** API Method for email authentication + * @param $options a hash with email and password parameters. + * @return Alternc_Api_Response whose content is true / false if the auth + * to this email was successfull. + */ + function login($options) { + global $cuid; + $uid = $cuid; + if ($this->isAdmin && isset($options["uid"])) { + $uid = intval($options["uid"]); + } + if (!isset($options["email"]) || !isset($options["password"])) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing email or password argument")); + } + list($address,$domain)=explode("@",$options["email"],2); + $stmt = $this->db->prepare("SELECT enabled,password FROM domaines d,address a WHERE a.domain_id=d.id AND address=? AND domaine=?;"); + $stmt->execute(array($address,$domain)); + $me = $stmt->fetch(PDO::FETCH_OBJ); + if ($me && $me->enabled) { + // Check password : + return new Alternc_Api_Response(array("content" => $this->check_password($options["password"],$me->password) )); + } else { + return new Alternc_Api_Response(array("content" => false)); + } + } + + + function check_password($password, $hash) { + if ($hash == '') { // no password + return FALSE; + } + + if ($hash{0} != '{') { // plaintext or crypt() password ? + if ($hash{0} == '$' ) { + if (crypt($password,$hash)==$hash) + return TRUE; + } else { // plaintext ? (NOT RECOMMENDED !!!) + if ($password == $hash) + return TRUE; + } + return FALSE; + } + + if (substr($hash,0,7) == '{crypt}') { + if (crypt($password, substr($hash,7)) == substr($hash,7)) + return TRUE; + return FALSE; + } + elseif (substr($hash,0,5) == '{MD5}') { + $encrypted_password = '{MD5}' . base64_encode(md5( $password,TRUE)); + } + elseif (substr($hash,0,6) == '{SHA1}') { + $encrypted_password = '{SHA}' . base64_encode(sha1( $password, TRUE )); + } + elseif (substr($hash,0,6) == '{SSHA}') { + $salt = substr(base64_decode(substr($hash,6)),20); + $encrypted_password = '{SSHA}' . base64_encode(sha1( $password.$salt, TRUE ). $salt); + } else { + echo "Unsupported password hash format"; + return FALSE; + } + + if ($hash == $encrypted_password) + return TRUE; + + return FALSE; + } + +} + +// class Alternc_Api_Object_Mail diff --git a/lib/Alternc/Api/Object/Mysql.php b/lib/Alternc/Api/Object/Mysql.php new file mode 100644 index 00000000..6852c877 --- /dev/null +++ b/lib/Alternc/Api/Object/Mysql.php @@ -0,0 +1,210 @@ +mysql = $mysql; + } + + /** API Method from legacy class method admin->add_mem() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: login, pass, nom, prenom, mail, + * non-mandatory: canpass, type, duration, notes, force, create_dom, db_server_id + * @return Alternc_Api_Response whose content is the newly created UID + */ + function add($options) { + $mandatory = array("login", "pass", "nom", "prenom", "mail"); + $defaults = array("canpass" => 1, "type" => "default", "duration" => 0, "notes" => "", "force" => 0, "create_dom" => ""); + $missing = ""; + foreach ($mandatory as $key) { + if (!isset($options[$key])) { + $missing.=$key . " "; + } + } + if ($missing) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . $missing)); + } + foreach ($defaults as $key => $value) { + if (!isset($options[$key])) { + $options[$key] = $value; + } + } + if (!isset($options["db_server_id"])) { + $stmt = $this->db->prepare("SELECT MIN(db_servers.id) AS id FROM db_servers;"); + $stmt->execute(); + $me = $stmt->fetch(PDO::FETCH_OBJ); + $options["db_server_id"] = $me->id; + } + $uid = $this->admin->add_mem($options["login"], $options["pass"], $options["nom"], $options["prenom"], $options["mail"], $options["canpass"], $options["type"], $options["duration"], $options["notes"], $options["force"], $options["create_dom"], $options["db_server_id"]); + if (!$uid) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $uid)); + } + } + + /** API Method from legacy class method admin->update_mem() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: nom, prenom, mail, + * non-mandatory: pass, canpass, type, duration, notes, force, create_dom, db_server_id + * @return Alternc_Api_Response whose content is the updated UID + */ + function update($options) { + $defaults = array("nom", "prenom", "mail", "canpass", "enabled", "type", "duration", "notes"); + if (!isset($options["uid"])) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: UID")); + } + $uid = intval($options["uid"]); + $old = $this->admin->get($uid); + if (!$old) { + return new Alternc_Api_Response(array("code" => self::ERR_NOT_FOUND, "message" => "User not found")); + } + + foreach ($defaults as $key) { + if (!isset($options[$key])) { + $options[$key] = $old[$key]; + } + } + if (!isset($options["pass"])) + $options["pass"] = ""; + $uid = $this->admin->update_mem($uid, $options["mail"], $options["nom"], $options["prenom"], $options["pass"], $options["enabled"], $options["canpass"], $options["type"], $options["duration"], $options["notes"]); + if (!$uid) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $uid)); + } + } + + /** API Method from legacy class method admin->del_mem() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: uid + * @return Alternc_Api_Response TRUE if the account has been deleted. + */ + function del($options) { + if (!isset($options["uid"])) { + return new Alternc_Api_Response(array("code" => self::ERR_ALTERNC_FUNCTION, "message" => "Missing or invalid argument: UID")); + } + $result = $this->admin->del_mem(intval($options["uid"])); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => true)); + } + } + + /** API Method from legacy class method admin->lock_mem() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: uid + * @return Alternc_Api_Response TRUE if the account has been locked + */ + function lock($options) { + if (!isset($options["uid"])) { + return new Alternc_Api_Response(array("code" => self::ERR_ALTERNC_FUNCTION, "message" => "Missing or invalid argument: UID")); + } + $result = $this->admin->lock_mem(intval($options["uid"])); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => true)); + } + } + + /** API Method from legacy class method admin->unlock_mem() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: uid + * @return Alternc_Api_Response TRUE if the account has been unlocked + */ + function unlock($options) { + if (!isset($options["uid"])) { + return new Alternc_Api_Response(array("code" => self::ERR_ALTERNC_FUNCTION, "message" => "Missing or invalid argument: UID")); + } + $result = $this->admin->unlock_mem(intval($options["uid"])); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => true)); + } + } + + /** API Method from legacy class method admin->normal2su() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: uid + * @return Alternc_Api_Response TRUE if the account has been set to be an administator + */ + function setAdmin($options) { + if (!isset($options["uid"])) { + return new Alternc_Api_Response(array("code" => self::ERR_ALTERNC_FUNCTION, "message" => "Missing or invalid argument: UID")); + } + $result = $this->admin->normal2su(intval($options["uid"])); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => true)); + } + } + + /** API Method from legacy class method admin->su2normal() + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: uid + * @return Alternc_Api_Response TRUE if the account has been set to NOT be an administrator + */ + function unsetAdmin($options) { + if (!isset($options["uid"])) { + return new Alternc_Api_Response(array("code" => self::ERR_ALTERNC_FUNCTION, "message" => "Missing or invalid argument: UID")); + } + $result = $this->admin->su2normal(intval($options["uid"])); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => true)); + } + } + + /** API Method from legacy class method admin->get_list() + * @param $options a hash with parameters transmitted to legacy call + * non-mandatory parameters: ONE OF: + * uid(strict), login(like %%), domain(like %%), creator(strict, by uid), + * Any of: offset(int=0), count(int=+inf) + * @return Alternc_Api_Response An array with all matching users informations as hashes + */ + function find($options) { + $result = false; + if (!$result && isset($options["uid"])) { + $result = $this->admin->get(intval($options["uid"])); + if ($result) + $result = array($result); + } + if (!$result && isset($options["login"])) { + $result = $this->admin->get_list(1/* ALL */, "", $options["login"], "login"); + } + if (!$result && isset($options["domain"])) { + $result = $this->admin->get_list(1/* ALL */, "", $options["domain"], "domaine"); + } + if (!$result && isset($options["creator"])) { + $result = $this->admin->get_list(1/* ALL */, intval($options["creator"])); + } + if (!$result) { // everybody + $result = $this->admin->get_list(1/* ALL */, ""); + } + + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + list($offset, $count) = $this->offsetAndCount($options, count($result)); + if ($offset != -1 || $count != -1) { + $result = array_slice($result, $offset, $count); + } + return new Alternc_Api_Response(array("content" => $result)); + } + } + +} + +// class Alternc_Api_Object_Mysql \ No newline at end of file diff --git a/lib/Alternc/Api/Object/Policy.php b/lib/Alternc/Api/Object/Policy.php new file mode 100644 index 00000000..92c30ecc --- /dev/null +++ b/lib/Alternc/Api/Object/Policy.php @@ -0,0 +1,73 @@ +editPolicy($policy,$minsize,$maxsize,$classcount,$allowlogin) + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: policy minsize maxsize classcount allowlogin + * @return Alternc_Api_Response TRUE if the password policy has been updated + */ + function update($options) { + $mandatory = array("policy", "minsize", "maxsize", "classcount", "allowlogin"); + $missing = ""; + foreach ($mandatory as $key) { + if (!isset($options[$key])) { + $missing.=$key . " "; + } + } + if ($missing) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . $missing)); + } + $result = $this->admin->editPolicy($options["policy"], $options["minsize"], $options["maxsize"], $options["classcount"], $options["allowlogin"]); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => true)); + } + } + + /** API Method from legacy class method admin->listPasswordPolicies() + * @param $options a hash with parameters transmitted to legacy call + * no options is used. + * @return Alternc_Api_Response An array with all password policies + */ + function find($options) { + $result = $this->admin->listPasswordPolicies(); + + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => $result)); + } + } + + /** API Method from legacy class method admin->checkPolicy($policy,$login,$password) + * @param $options a hash with parameters transmitted to legacy call + * mandatory parameters: policy login password + * @return Alternc_Api_Response TRUE if the password match the policy + */ + function check($options) { + $mandatory = array("policy", "login", "password"); + $missing = ""; + foreach ($mandatory as $key) { + if (!isset($options[$key])) { + $missing.=$key . " "; + } + } + if ($missing) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: " . $missing)); + } + $result = $this->admin->checkPolicy($options["policy"], $options["login"], $options["password"]); + if (!$result) { + return $this->alterncLegacyErrorManager(); + } else { + return new Alternc_Api_Response(array("content" => true)); + } + } + +} + +// class Alternc_Api_Object_Account \ No newline at end of file diff --git a/lib/Alternc/Api/Request.php b/lib/Alternc/Api/Request.php new file mode 100644 index 00000000..87bf81cb --- /dev/null +++ b/lib/Alternc/Api/Request.php @@ -0,0 +1,103 @@ +object = $options["object"]; + } else { + throw new \Exception("Missing parameter object", self::ERR_MISSING_PARAMETER); + } + + // Attempts to retrieve action + if (isset($options["action"]) && is_string($options["action"])) { + $this->action = $options["action"]; + } else { + throw new \Exception("Missing parameter action", self::ERR_MISSING_PARAMETER); + } + + // Attempts to retrieve options + if (isset($options["options"])) { + if (is_array($options)) { + $this->options = $options["options"]; + } else { + throw new \Exception("Missing parameter options", self::ERR_MISSING_PARAMETER); + } + } else { + $this->options = array(); + } + + // Attempts to retrieve token + if (isset($options["token"])) { + if (is_a($options["token"], Alternc_Api_Token)) { + $this->token = $options["token"]; + } else { + throw new \Exception("Bad parameter token", self::ERR_MISSING_PARAMETER); + } + } else { + // Attempts to retrieve token_hash then + if (isset($options["token_hash"]) && is_string($options["token_hash"])) { + $this->token_hash = $options["token_hash"]; + } else { + throw new \Exception("Missing parameter token OR token_hash", self::ERR_MISSING_PARAMETER); + } + } + + // Attempts to retrieve metadata (eg: API version) + if (isset($options["metadata"])) { + $this->metadata = $options["metadata"]; + } + } + +} diff --git a/lib/Alternc/Api/Response.php b/lib/Alternc/Api/Response.php new file mode 100644 index 00000000..61facd3e --- /dev/null +++ b/lib/Alternc/Api/Response.php @@ -0,0 +1,67 @@ +$o = $options[$o]; + } + } + + /** + * Formats response to json + * + * @return string + */ + public function toJson() { + return json_encode(get_object_vars($this)); + } + +} + +// class Alternc_Api_Response + diff --git a/lib/Alternc/Api/Service.php b/lib/Alternc/Api/Service.php new file mode 100644 index 00000000..d0aa5385 --- /dev/null +++ b/lib/Alternc/Api/Service.php @@ -0,0 +1,223 @@ +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + if (isset($options["databaseAdapter"]) && $options["databaseAdapter"] instanceof PDO) { + $this->db = $options["databaseAdapter"]; + } else { + throw new \Exception("Missing required parameter databaseAdapter", self::ERR_INVALID_ARGUMENT); + } + + // Which login is allowed? + $this->allowedAuth = array(); + if (isset($options["loginAdapterList"]) && is_array($options["loginAdapterList"])) { + foreach ($options["loginAdapterList"] as $lal) { + $this->allowedAuth[] = (string) $lal; + } + } + + // To which logger(s) shall we log to? + if (isset($options["loggerAdapter"])) { + if (!is_array($options["loggerAdapter"])) + $options["loggerAdapter"] = array($options["loggerAdapter"]); + foreach ($options["loggerAdapter"] as $la) { + if ($la instanceof Psr\Log\LoggerInterface) + $this->loggerList[] = $la; + } + } + } + + /** + * Authenticate into an AlternC server + * @param $auth hash with + * method: string describing the authentication name (in Alternc_Api_Auth_xxx) + * options: array list of parameters for the corresponding auth. + * if 'uid' is set in the option hash, the account MUST be an administrator one + * and as a result, the returned Api_Token will be set to this UID and not the admin one. + * @return Alternc_Api_Token an API Token + */ + function auth($auth) { + if (!isset($auth["method"]) || !is_string($auth["method"])) { + throw new \Exception("Missing required parameter method", self::ERR_INVALID_ARGUMENT); + } + if (!isset($auth["options"]) || !is_array($auth["options"])) { + throw new \Exception("Missing required parameter options", self::ERR_INVALID_ARGUMENT); + } + + if (count($this->allowedAuth) && !in_array($auth["method"], $this->allowedAuth)) { + throw new \Exception("Method not allowed", self::ERR_METHOD_DENIED); + } + if (isset($auth["options"]["uid"]) && !intval($auth["options"]["uid"])) { + throw new \Exception("Invalid UID", self::ERR_INVALID_ARGUMENT); + } + + $adapterName = "Alternc_Api_Auth_" . ucfirst(strtolower($auth["method"])); + + $authAdapter = new $adapterName($this); + + $token = $authAdapter->auth($auth["options"]); + + // something went wrong user-side + if ($token instanceof Alternc_Api_Response) + return $token; + // something went *really* wrong (bad type): + if (!$token instanceof Alternc_Api_Token) + throw new \Exception("Invalid answer from Api_Auth_Interface", self::ERR_INVALID_ANSWER); + + if (isset($auth["options"]["uid"])) { + if (!$token->isAdmin) { + // Non-admin are not allowed to setuid + return new Alternc_Api_Response(array("code" => self::ERR_SETUID_FORBIDDEN, "message" => "This user is not allowed to set his uid")); + } + // Search for the requested user. We allow using *disabled* account here since we are admin + foreach ($this->db->query("SELECT uid FROM membres WHERE uid=" . intval($auth["options"]["uid"])) as $setuid) { + $token->uid = intval($setuid['uid']); + $stmt = $this->db->prepare("UPDATE token SET data=? WHERE token=?"); + $stmt->execute(array($token->toJson(), $token->token)); + return $token; + } + return new Alternc_Api_Response(array("code" => self::ERR_SETUID_USER_NOT_FOUND, "message" => "Can't find the user you want to setuid to")); + } + return $token; + } + + /** + * Manage an API Call + * @param Alternc_Api_Request $request The API call + * the request must have "object" and "action" elements, and a "token" to authenticate + * "options" are sent as it is to the Api Call. + * @return Alternc_Api_Response an API response + */ + function call($request) { + if (!$request instanceof Alternc_Api_Request) + throw new \Exception("request must be an Alternc_Api_Request object", self::ERR_INVALID_ARGUMENT); + + // we set the token in the Service object, so that other classes can use it :) + $this->token = Alternc_Api_Token::tokenGet($request->token_hash, $this->db); + if ($this->token instanceof Alternc_Api_Response) // bad token + return $this->token; + + $className = "Alternc_Api_Object_" . ucfirst(strtolower($request->object)); + if (!class_exists($className)) + return new Alternc_Api_Response(array("code" => self::ERR_OBJECT_NOT_FOUND, "message" => "Object not found in this AlternC's instance")); + + $object = new $className($this); + + $action = $request->action; + + if (strpos($action, "-") !== false) { + // replace - by an uppercase letter: + $action = lcfirst(str_replace(" ", "", implode("", array_map("ucfirst", explode("-", $action))))); + } + if (!method_exists($object, $action)) + return new Alternc_Api_Response(array("code" => self::ERR_ACTION_NOT_FOUND, "message" => "Action not found for this object in this AlternC's instance")); + + $request->token = $this->token; // we receive $request->token_hash as a STRING, but we transmit its object as an Alternc_Api_Token. + // TODO: log this Api Call + return $object->$action($request->options); + } + + /** + * Return documentation of the API, either general (no parameters) + * or for a specific action or auth class + * @param string $element the name of the object for which documentation is requested + * @return array a documentation hash (key/value) + */ + function doc($element) { + if (substr($element, 0, 5) == "auth/") { + $adapterName = "Alternc_Api_Auth_" . ucfirst(strtolower(substr($element, 5))); + if (!class_exists($adapterName)) + return false; + $authAdapter = new $adapterName($this); + return $authAdapter->documentation(); + } else { + list($class, $action) = explode("/", $element); + $className = "Alternc_Api_Object_" . ucfirst(strtolower($class)); + if (!class_exists($className)) + return false; + $object = new $className($this); + if (!$action) { + return $authAdapter->documentation(); + } else { + return $authAdapter->documentation($action); + } + } + } + + /** + * Return documentation of the API, either general (no parameters) + * or for a specific action or auth class + * @param string $element the name of the object for which documentation is requested + * @return array a documentation hash (key/value) + */ + function doc($element) { + if (substr($element, 0, 5) == "auth/") { + $adapterName = "Alternc_Api_Auth_" . ucfirst(strtolower(substr($element, 5))); + if (!class_exists($adapterName)) + return false; + $authAdapter = new $adapterName($this); + return $authAdapter->documentation(); + } else { + list($class, $action) = explode("/", $element); + $className = "Alternc_Api_Object_" . ucfirst(strtolower($class)); + if (!class_exists($className)) + return false; + $object = new $className($this); + if (!$action) { + return $authAdapter->documentation(); + } else { + return $authAdapter->documentation($action); + } + } + } + + /** + * Getter for the databaseAdapter + * (used by authAdapter) + */ + function getDb() { + return $this->db; + } + +} + +// class Alternc_Api_Service diff --git a/lib/Alternc/Api/Token.php b/lib/Alternc/Api/Token.php new file mode 100644 index 00000000..17da89f1 --- /dev/null +++ b/lib/Alternc/Api/Token.php @@ -0,0 +1,132 @@ +uid = $options["uid"]; + + if (isset($options["isAdmin"]) && is_bool($options["isAdmin"])) + $this->isAdmin = $options["isAdmin"]; + } + + /** + * Formats response to json + * + * @return string + */ + public function toJson() { + return json_encode( + array("uid" => $this->uid, + "isAdmin" => $this->isAdmin, + "token" => $this->token) + ); + } + + /** + * Create a new token in the DB for the associated user/admin + * + * @return string the token (32 chars) + */ + public static function tokenGenerate($options, $db) { + if (!($db instanceof PDO)) { + throw new \Exception("No DB Object, can't create", self::ERR_DATABASE_ERROR); + } + if (!isset($options["uid"]) || !isset($options["isAdmin"])) { + throw new \Exception("Missing Arguments (uid,isAdmin)", self::ERR_MISSING_ARGUMENT); + } + + $token = new Alternc_Api_Token($options); + + do { + $token->token = $token->tokenRandom(); + $stmt = $db->prepare("INSERT IGNORE INTO token SET token=?, expire=DATE_ADD(NOW(), INTERVAL ? SECOND), data=?"); + $stmt->execute(array($token->token, $token->tokenDuration, $token->toJson())); + $rows = $stmt->rowCount(); + } while ($rows == 0); // prevent collisions + + return $token; + } + + /** + * Check and return a token + * @param $token string a 32-chars token + * @param $db PDO a PDO object for token table access + * + * @return Alternc_Api_Token object or NULL + */ + public static function tokenGet($token, $db) { + if (!($db instanceof PDO)) { + throw new \Exception("No DB Object, can't create", self::ERR_DATABASE_ERROR); + } + if (!is_string($token) || !preg_match("#^[a-zA-Z0-9]{32}$#", $token)) { + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_TOKEN, "message" => "Invalid token")); + } + $stmt = $db->prepare("SELECT * FROM token WHERE token=?"); + $stmt->execute(array($token)); + if ($tok = $stmt->fetch(PDO::FETCH_OBJ)) { + return new Alternc_Api_Token(json_decode($tok->data, true)); + } + return new Alternc_Api_Response(array("code" => self::ERR_INVALID_TOKEN, "message" => "Invalid token")); + } + + /** + * Generate a new random token + * @return string + */ + public function tokenRandom() { + $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + $s = ""; + for ($i = 0; $i < 32; $i++) + $s.=substr($chars, rand(0, 61), 1); + return $s; + } + +} + +// class Alternc_Api_Response + diff --git a/ssl/Makefile b/ssl/Makefile new file mode 100755 index 00000000..90f4adee --- /dev/null +++ b/ssl/Makefile @@ -0,0 +1,54 @@ +# ---------------------------------------------------------------------- +# LICENSE +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License (GPL) +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# To read the license please visit http://www.gnu.org/copyleft/gpl.html +# ---------------------------------------------------------------------- +# Purpose of file: Install the files of alternc-ssl packages +# ---------------------------------------------------------------------- + +install: + install -m 0644 -g root -o root ssl.sql $(DESTDIR)/usr/share/alternc/install/ + install -m 0755 -g root -o root alternc-ssl.install.php $(DESTDIR)/usr/lib/alternc/install.d/alternc-ssl + install -m 0644 -g root -o root README.txt $(DESTDIR)/var/lib/alternc/ssl/private/ + install -m 0644 -g root -o root apache2.conf $(DESTDIR)/etc/apache2/conf.d/alternc-ssl-alias.conf + +# incron + install -m 0755 -g root -o root ssl_alias_manager.sh $(DESTDIR)/usr/lib/alternc/ + install -m 0644 -g root -o root alternc-ssl.incron.d $(DESTDIR)/etc/incron.d/alternc-ssl + + install -m 0644 -g 1999 -o root panel/class/m_ssl.php $(DESTDIR)/usr/share/alternc/panel/class/ + install -m 0644 -g 1999 -o root panel/admin/*.php $(DESTDIR)/usr/share/alternc/panel/admin/ + install -m 0644 -g 1999 -o root panel/admin/images/* $(DESTDIR)/usr/share/alternc/panel/admin/images/ +# locales + install -m 0644 -g 1999 -o root panel/locales/pt_BR/LC_MESSAGES/ssl.po $(DESTDIR)/usr/share/alternc/panel/locales/pt_BR/LC_MESSAGES/ssl.po + install -m 0644 -g 1999 -o root panel/locales/fr_FR/LC_MESSAGES/ssl.po $(DESTDIR)/usr/share/alternc/panel/locales/fr_FR/LC_MESSAGES/ssl.po + install -m 0644 -g 1999 -o root panel/locales/en_US/LC_MESSAGES/ssl.po $(DESTDIR)/usr/share/alternc/panel/locales/en_US/LC_MESSAGES/ssl.po + install -m 0644 -g 1999 -o root panel/locales/de_DE/LC_MESSAGES/ssl.po $(DESTDIR)/usr/share/alternc/panel/locales/de_DE/LC_MESSAGES/ssl.po + install -m 0644 -g 1999 -o root panel/locales/it_IT/LC_MESSAGES/ssl.po $(DESTDIR)/usr/share/alternc/panel/locales/it_IT/LC_MESSAGES/ssl.po + install -m 0644 -g 1999 -o root panel/locales/nl_NL/LC_MESSAGES/ssl.po $(DESTDIR)/usr/share/alternc/panel/locales/nl_NL/LC_MESSAGES/ssl.po + install -m 0644 -g 1999 -o root panel/locales/es_ES/LC_MESSAGES/ssl.po $(DESTDIR)/usr/share/alternc/panel/locales/es_ES/LC_MESSAGES/ssl.po +# FIXME: how can we do that properly ?? +# install -m 0644 -g 1999 -o root panel/admin/styles/* $(DESTDIR)/usr/share/alternc/panel/admin/styles/ + + install -m 0644 -g 1999 -o root templates/* $(DESTDIR)/etc/alternc/templates/apache2/ + install -m 0644 -g 1999 -o root ssl.conf $(DESTDIR)/etc/alternc/templates/apache2/mods-available/ + install -m 0644 -g 1999 -o root openssl.cnf $(DESTDIR)/etc/alternc/ + install -m 0755 -g 1999 -o root hosting_vhost-ssl.sh $(DESTDIR)/etc/alternc/functions_hosting/ + ln -s hosting_vhost-ssl.sh $(DESTDIR)/etc/alternc/functions_hosting/hosting_panel-ssl.sh + ln -s hosting_vhost-ssl.sh $(DESTDIR)/etc/alternc/functions_hosting/hosting_vhost-mixssl.sh + ln -s hosting_vhost-ssl.sh $(DESTDIR)/etc/alternc/functions_hosting/hosting_roundcube-ssl.sh + ln -s hosting_vhost-ssl.sh $(DESTDIR)/etc/alternc/functions_hosting/hosting_squirrelmail-ssl.sh + ln -s hosting_vhost-ssl.sh $(DESTDIR)/etc/alternc/functions_hosting/hosting_php52-ssl.sh + ln -s hosting_vhost-ssl.sh $(DESTDIR)/etc/alternc/functions_hosting/hosting_php52-mixssl.sh +# api + install -m 0644 -g root -o root api/Ssl.php $(DESTDIR)/usr/share/php/Alternc/Api/Object/ diff --git a/ssl/README.txt b/ssl/README.txt new file mode 100644 index 00000000..fdcd94bb --- /dev/null +++ b/ssl/README.txt @@ -0,0 +1,4 @@ + +This folder will contains the SSL certificates, +chained certificates and private keys of VHOSTS +used by Apache to serve HTTPS pages. diff --git a/ssl/alternc-ssl.incron.d b/ssl/alternc-ssl.incron.d new file mode 100644 index 00000000..a5617ce4 --- /dev/null +++ b/ssl/alternc-ssl.incron.d @@ -0,0 +1 @@ +/var/run/alternc-ssl IN_CREATE,IN_ATTRIB,IN_NO_LOOP /usr/lib/alternc/ssl_alias_manager.sh diff --git a/ssl/alternc-ssl.install.php b/ssl/alternc-ssl.install.php new file mode 100644 index 00000000..1aa88112 --- /dev/null +++ b/ssl/alternc-ssl.install.php @@ -0,0 +1,83 @@ +#!/usr/bin/php +query("INSERT IGNORE INTO `domaines_type` (name, description, target, entry, compatibility, enable, only_dns, need_dns, advanced ) VALUES + ('vhost-ssl', 'Locally hosted forcing HTTPS', 'DIRECTORY', '%SUB% IN A @@PUBLIC_IP@@', 'vhost,url,txt,defmx,defmx2,mx,mx2', 'ALL', 0, 0, 0);"); + + $db->query("INSERT IGNORE INTO `domaines_type` (name, description, target, entry, compatibility, enable, only_dns, need_dns, advanced ) VALUES + ('vhost-mixssl', 'Locally hosted HTTP and HTTPS', 'DIRECTORY', '%SUB% IN A @@PUBLIC_IP@@', 'vhost,url,txt,defmx,defmx2,mx,mx2', 'ALL', 0, 0, 1);"); + + $db->query("INSERT IGNORE INTO `domaines_type` (name, description, target, entry, compatibility, enable, only_dns, need_dns, advanced ) VALUES + ('panel-ssl', 'HTTPS AlternC panel access', 'NONE', '%SUB% IN A @@PUBLIC_IP@@', 'ip,ipv6,cname,txt,mx,mx2,defmx,defmx2', 'ALL', 0, 0, 1);"); + + $db->query("SELECT * FROM domaines_type WHERE name='roundcube';"); + if ($db->next_record()) { + $db->query("INSERT IGNORE INTO `domaines_type` (name, description, target, entry, compatibility, enable, only_dns, need_dns, advanced ) VALUES + ('roundcube-ssl', 'HTTPS Roundcube Webmail', 'NONE', '%SUB% IN A @@PUBLIC_IP@@', 'mx,mx2,defmx,defmx2,txt', 'ALL', 0, 0, 1;"); + } else { + $db->query("DELETE FROM domaines_type WHERE name='roundcube-ssl';"); + $db->query("UPDATE sub_domaines SET web_action='DELETE' WHERE type='roundcube-ssl';"); + } + + $db->query("SELECT * FROM domaines_type WHERE name='squirrelmail';"); + if ($db->next_record()) { + $db->query("INSERT IGNORE INTO `domaines_type` (name, description, target, entry, compatibility, enable, only_dns, need_dns, advanced ) VALUES + ('squirrelmail-ssl', 'HTTPS Squirrelmail Webmail', 'NONE', '%SUB% IN A @@PUBLIC_IP@@', 'mx,mx2,defmx,defmx2,txt', 'ALL', 0, 0, 1);"); + } else { + $db->query("DELETE FROM domaines_type WHERE name='squirrelmail-ssl';"); + $db->query("UPDATE sub_domaines SET web_action='DELETE' WHERE type='squirrelmail-ssl';"); + } + + $db->query("SELECT * FROM domaines_type WHERE name='php52';"); + if ($db->next_record()) { + $db->query("INSERT IGNORE INTO `domaines_type` (name, description, target, entry, compatibility, enable, only_dns, need_dns, advanced ) VALUES + ('php52-ssl', 'php52 forcing HTTPS', 'DIRECTORY', '%SUB% IN A @@PUBLIC_IP@@', 'vhost,url,txt,defmx,defmx2,mx,mx2', 'ALL', 0, 0, 0);"); + $db->query("INSERT IGNORE INTO `domaines_type` (name, description, target, entry, compatibility, enable, only_dns, need_dns, advanced ) VALUES + ('php52-mixssl', 'php52 HTTP and HTTPS', 'DIRECTORY', '%SUB% IN A @@PUBLIC_IP@@', 'vhost,url,txt,defmx,defmx2,mx,mx2', 'ALL', 0, 0, 0);"); + } else { + $db->query("DELETE FROM domaines_type WHERE name='php52-ssl';"); + $db->query("UPDATE sub_domaines SET web_action='DELETE' WHERE type='php52-ssl';"); + $db->query("DELETE FROM domaines_type WHERE name='php52-mixssl';"); + $db->query("UPDATE sub_domaines SET web_action='DELETE' WHERE type='php52-mixssl';"); + } + + // Enable name-based virtual hosts in Apache2 : + $f = fopen("/etc/apache2/ports.conf", "rb"); + if (!$f) { + echo "FATAL: there is no /etc/apache2/ports.conf ! I can't configure name-based virtual hosts\n"; + } else { + $found = false; + while ($s = fgets($f, 1024)) { + if (preg_match(":^[^#]*NameVirtualHost.*443:", $s)) { + $found = true; + break; + } + } + fclose($f); + if (!$found) { + $f = fopen("/etc/apache2/ports.conf", "ab"); + fputs($f, "\n\n NameVirtualHost *:443\n\n\n"); + fclose($f); + } + } +} // before-reload diff --git a/ssl/apache2.conf b/ssl/apache2.conf new file mode 100644 index 00000000..a72b00b1 --- /dev/null +++ b/ssl/apache2.conf @@ -0,0 +1,5 @@ + + + allow from all + + diff --git a/ssl/api/Ssl.php b/ssl/api/Ssl.php new file mode 100644 index 00000000..be7a0ac6 --- /dev/null +++ b/ssl/api/Ssl.php @@ -0,0 +1,187 @@ +ssl=$ssl; + } + + /** API Method from legacy class get_list() + * @param $options a hash with parameters transmitted to legacy call + * filter = the kind of ssl certificates to show or not show + * @return Alternc_Api_Response whose content is an array of hashes containing all corresponding certificates informations + */ + function getList($options) { + if (isset($options["filter"]) && intval($options["filter"])) { + $filter=intval($options["filter"]); + } else { + $filter=null; + } + $ssllist=$this->ssl->get_list($filter); + return new Alternc_Api_Response( array("content" => $ssllist) ); + } + + + /** API Method from legacy class new_csr() + * @param $options a hash with parameters transmitted to legacy call + * fqdn = the DNS name to create a CSR to + * @return Alternc_Api_Response whose content is the CSR ID in the certificate database + */ + function newCsr($options) { + if (!isset($options["fqdn"]) || !is_string($options["fqdn"])) { + return new Alternc_Api_Response( array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: FQDN") ); + } + $certid=$this->ssl->new_csr($options["fqdn"]); + if ($certid===false) { + return $this->alterncLegacyErrorManager(); + } + return new Alternc_Api_Response( array("content" => $certid) ); + } + + + /** API Method from legacy class get_certificate() + * @param $options a hash with parameters transmitted to legacy call + * id = the ID of the certificate in the certifiate table to get + * @return Alternc_Api_Response whose content is a hash with all informations for that certificate + */ + function getCertificate($options) { + if (!isset($options["id"]) || !intval($options["id"])) { + return new Alternc_Api_Response( array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: ID") ); + } + $certinfo=$this->ssl->get_certificate(intval($options["id"])); + if ($certinfo===false) { + return $this->alterncLegacyErrorManager(); + } + return new Alternc_Api_Response( array("content" => $certinfo) ); + } + + + /** API Method from legacy class share() + * @param $options a hash with parameters transmitted to legacy call + * id = the ID of the certificate to share or unshare + * action = boolean telling to share(true) or unshare(false) this certificate + * @return Alternc_Api_Response true. + */ + function share($options) { + if (!isset($options["id"]) || !intval($options["id"])) { + return new Alternc_Api_Response( array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: ID") ); + } + if (!isset($options["action"]) ) { + return new Alternc_Api_Response( array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: ACTION") ); + } + $isok=$this->ssl->share(intval($options["id"]), (intval($options["action"]))? true : false ); + if ($isok===false) { + return $this->alterncLegacyErrorManager(); + } + return new Alternc_Api_Response( array("content" => $isok) ); + } + + + /** API Method from legacy class import_cert() + * @param $options a hash with parameters transmitted to legacy call + * key, crt, chain = key and crt (both mandatory) and chain (not mandatory) to import + * @return Alternc_Api_Response the ID of the newly created certificate in the table. + */ + function importCert($options) { + if (!isset($options["key"]) || !is_string($options["key"])) { + return new Alternc_Api_Response( array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: KEY") ); + } + if (!isset($options["crt"]) || !is_string($options["crt"])) { + return new Alternc_Api_Response( array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: CRT") ); + } + if (isset($options["chain"])) { + if (!is_string($options["chain"])) { + return new Alternc_Api_Response( array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Invalid argument: CHAIN") ); + } + } else { + $options["chain"]=""; + } + + $certid=$this->ssl->import_cert($options["key"],$options["crt"],$options["chain"]); + if ($certid===false) { + return $this->alterncLegacyErrorManager(); + } + return new Alternc_Api_Response( array("content" => $certid) ); + } + + + /** API Method from legacy class finalize() + * @param $options a hash with parameters transmitted to legacy call + * second part of the new_csr() call, finalize a certificate creation + * id = ID of the certificate to finalize in the table. + * crt = Certificate data + * chain = Chained Certificate date (not mandatory) + * @return Alternc_Api_Response the ID of the updated certificate in the table. + */ + function finalize($options) { + if (!isset($options["id"]) || !intval($options["id"])) { + return new Alternc_Api_Response( array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: ID") ); + } + if (!isset($options["crt"]) || !is_string($options["crt"])) { + return new Alternc_Api_Response( array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: CRT") ); + } + if (isset($options["chain"])) { + if (!is_string($options["chain"])) { + return new Alternc_Api_Response( array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Invalid argument: CHAIN") ); + } + } else { + $options["chain"]=""; + } + + $certid=$this->ssl->finalize(intval($options["id"]),$options["crt"],$options["chain"]); + if ($certid===false) { + return $this->alterncLegacyErrorManager(); + } + return new Alternc_Api_Response( array("content" => $certid) ); + } + + + /** API Method from legacy class alias_add() + * @param $options a hash with parameters transmitted to legacy call + * add the alias 'name' with the content value 'value' in the global apache configuration + * @return Alternc_Api_Response true + */ + function aliasAdd($options) { + if (!isset($options["name"]) || !is_string($options["name"])) { + return new Alternc_Api_Response( array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: NAME") ); + } + if (!isset($options["content"]) || !is_string($options["content"])) { + return new Alternc_Api_Response( array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: CONTENT") ); + } + + $isok=$this->ssl->alias_add($options["name"],$options["content"]); + if ($isok===false) { + return $this->alterncLegacyErrorManager(); + } + return new Alternc_Api_Response( array("content" => $isok) ); + } + + + /** API Method from legacy class alias_del() + * @param $options a hash with parameters transmitted to legacy call + * del the alias 'name' in the global apache configuration + * @return Alternc_Api_Response true + */ + function aliasDel($options) { + if (!isset($options["name"]) || !is_string($options["name"])) { + return new Alternc_Api_Response( array("code" => self::ERR_INVALID_ARGUMENT, "message" => "Missing or invalid argument: NAME") ); + } + + $isok=$this->ssl->alias_del($options["name"]); + if ($isok===false) { + return $this->alterncLegacyErrorManager(); + } + return new Alternc_Api_Response( array("content" => $isok) ); + } + + + +} // class Alternc_Api_Object_Ssl \ No newline at end of file diff --git a/ssl/gen-ssl-templates.sh b/ssl/gen-ssl-templates.sh new file mode 100755 index 00000000..14336765 --- /dev/null +++ b/ssl/gen-ssl-templates.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# this script regenerate the SSL-* templates from the ORIGINAL non-ssl in parent folder +# launch it if you know that some templates has been changed in parent folder. + +function convert { + src=$1 + dst=$2 + (cat ../etc/alternc/templates/apache2/url.conf | sed -e 's#%%redirect%%#https://%%fqdn%%#' + cat $src | + sed -e 's#:80#:443#' \ + -e "s## SSLEngine On\n SSLCertificateFile %%CRT%%\n SSLCertificateKeyFile %%KEY%%\n %%CHAINLINE%%\n\n#i" \ + ) >$dst +} + +# Those 3 are redirects from http://%%fqdn%% to https://%%fqdn%% PLUS the https://%%fqdn%% VHOST +convert "../roundcube/templates/apache2/roundcube.conf" "templates/roundcube-ssl.conf" +convert "../squirrelmail/templates/apache2/squirrelmail.conf" "templates/squirrelmail-ssl.conf" +convert "../etc/alternc/templates/apache2/panel.conf" "templates/panel-ssl.conf" +convert "../etc/alternc/templates/apache2/vhost.conf" "templates/vhost-ssl.conf" + +# manual case : BOTH http and https are normal vhosts pointing to the same DocumentRoot +(cat ../etc/alternc/templates/apache2/vhost.conf + cat ../etc/alternc/templates/apache2/vhost.conf | + sed -e 's#:80#:443#' \ + -e "s## SSLEngine On\n SSLCertificateFile %%CRT%%\n SSLCertificateKeyFile %%KEY%%\n %%CHAINLINE%%\n\n#i" +) >templates/vhost-mixssl.conf + + + diff --git a/ssl/hosting_vhost-ssl.sh b/ssl/hosting_vhost-ssl.sh new file mode 100755 index 00000000..9680d90d --- /dev/null +++ b/ssl/hosting_vhost-ssl.sh @@ -0,0 +1,54 @@ +#!/usr/bin/php +updateDomain($argv[1], $argv[2], $argv[3], $argv[4]); + exit(); +} +if ( ($argv[1]=="enable" || $argv[1]=="disable") ) { + if (count($argv)<4) { + echo "FATAL: enable/disable need 3 parameters: type domain value\n"; + print_r($argv); + exit(); + } + $ssl->updateDomain($argv[1], $argv[2], $argv[3] ); + exit(); +} + +echo "FATAL: action unknown, must be launched from functions_hosting.sh !\n"; +print_r($argv); +exit(); + diff --git a/ssl/openssl.cnf b/ssl/openssl.cnf new file mode 100644 index 00000000..17cff1ad --- /dev/null +++ b/ssl/openssl.cnf @@ -0,0 +1,16 @@ +HOME = . +RANDFILE = $ENV::HOME/.rnd +oid_section = new_oids +[ new_oids ] +[ req ] +default_md = sha256 +default_bits = 2048 +default_keyfile = privkey.pem +distinguished_name = req_distinguished_name +attributes = req_attributes +string_mask = nombstr + +[ req_distinguished_name ] +commonName = Your domain name +commonName_max = 256 +[ req_attributes ] diff --git a/ssl/panel/admin/images/ssl.png b/ssl/panel/admin/images/ssl.png new file mode 100644 index 00000000..c6d26f96 Binary files /dev/null and b/ssl/panel/admin/images/ssl.png differ diff --git a/ssl/panel/admin/ssl_delete.php b/ssl/panel/admin/ssl_delete.php new file mode 100644 index 00000000..5a040ab3 --- /dev/null +++ b/ssl/panel/admin/ssl_delete.php @@ -0,0 +1,48 @@ + array("post", "integer", ""), + "delete" => array("post", "string", ""), + "confirm" => array("post", "string", ""), +); +getFields($fields); + +if (!isset($delete)) { + require_once("ssl_list.php"); + exit(); +} + +$ok = $ssl->del_certificate($id); + +if ($ok) $info=_("Your SSL Certificate has been deleted"); + +$error = $err->errstr(); + +require_once("ssl_list.php"); + diff --git a/ssl/panel/admin/ssl_doimport.php b/ssl/panel/admin/ssl_doimport.php new file mode 100644 index 00000000..49abb14a --- /dev/null +++ b/ssl/panel/admin/ssl_doimport.php @@ -0,0 +1,53 @@ + array("post", "string", ""), + "crt" => array("post", "string", ""), + "chain" => array("post", "string", ""), + ); + getFields($fields); +} + +if (!$key && !$crt) { + $error = _("Please enter an ssl key and a certificate"); + require_once("ssl_new.php"); + exit(); +} + +$id = $ssl->import_cert($key, $crt, $chain); +$error = $err->errstr(); +if ($error) { + require_once("ssl_new.php"); + exit(); +} + +header("Location: /ssl_view.php?id=" . $id); + + diff --git a/ssl/panel/admin/ssl_donew.php b/ssl/panel/admin/ssl_donew.php new file mode 100644 index 00000000..598ea859 --- /dev/null +++ b/ssl/panel/admin/ssl_donew.php @@ -0,0 +1,57 @@ + array("request", "string", ""), + "fqdnt" => array("request", "string", ""), + ); + getFields($fields); +} + +if (!$fqdn && !$fqdnt) { + $error = _("Please enter a proper domain name"); + require_once("ssl_new.php"); + exit(); +} + +if ($fqdnt) + $d = $fqdnt; +if ($fqdn) + $d = $fqdn; + +$id = $ssl->new_csr($d); +$error = $err->errstr(); +if ($error) { + require_once("ssl_new.php"); + exit(); +} + +$is_include = true; +require_once("ssl_view.php"); + diff --git a/ssl/panel/admin/ssl_finalize.php b/ssl/panel/admin/ssl_finalize.php new file mode 100644 index 00000000..33471983 --- /dev/null +++ b/ssl/panel/admin/ssl_finalize.php @@ -0,0 +1,51 @@ + array("post", "integer", ""), + "crt" => array("post", "string", ""), + "chain" => array("post", "string", ""), + "delete" => array("post","string",""), +); +getFields($fields); + +if ($delete!="") { + require_once("ssl_delete.php"); + exit(); +} + +$cert = $ssl->finalize($id, $crt, $chain); + +$error = $err->errstr(); +if ($error) { + require_once("ssl_list.php"); + exit(); +} +$info = _("Your ssl certificate has been imported successfully"); + +require_once("ssl_view.php"); diff --git a/ssl/panel/admin/ssl_list.php b/ssl/panel/admin/ssl_list.php new file mode 100644 index 00000000..b88f736a --- /dev/null +++ b/ssl/panel/admin/ssl_list.php @@ -0,0 +1,144 @@ + array("request", "integer", null), + "filter1" => array("request", "integer", 0), + "filter2" => array("request", "integer", 0), + "filter4" => array("request", "integer", 0), + "filter8" => array("request", "integer", 0), + ); + getFields($fields); +} + +if (isset($filter1) && isset($filter2) && isset($filter4) && isset($filter8)) { + $filter = $filter1 + $filter2 + $filter4 + $filter8; + if ($filter == 0) + $filter = null; +} + +$r = $ssl->get_list($filter); + +if (!$error) + $error.=$err->errstr(); + +$astatus = array( + $ssl::STATUS_PENDING => _("Pending Certificate"), + $ssl::STATUS_OK => _("Valid"), + $ssl::STATUS_EXPIRED => "" . _("Expired") . "", +); + +$vhosts = $ssl->get_vhosts(); +foreach ($vhosts as $v) { + if ($v["certif"] == 0) { + $info=_("Some of your hosting are using a self-signed certificate.
Your browser will not let you surf those domains properly
To fix this, buy a properly signed certificate")."
".$info; + } +} +include_once("head.php"); + +if ($error) { + echo "

$error

"; +} +if ($info) { + echo "

$info

"; +} +?> +

+ +

+
+


+ + + +
+ +     + "/> +

+ + + + + + + + + + + + + + + + "; + echo ""; + echo ""; + echo ""; + } + } + ?> + +
" . _("(shared)") . ""; + ?>
+ "; + echo format_date(_('%3$d-%2$d-%1$d %4$d:%5$d'), date("Y-m-d H:i:s", $val["validendts"])); + if ($val["validendts"] < (time() + 86400 * 31)) + echo ""; + ?>

+
" . $v["fqdn"] . "
\n"; + } + } + ?>
" . _("This hosting has no valid certificate
a self-signed one has been created") . "
" . $v["fqdn"] . "
+

 

+

+ +

+ + + diff --git a/ssl/panel/admin/ssl_new.php b/ssl/panel/admin/ssl_new.php new file mode 100644 index 00000000..9780d1fd --- /dev/null +++ b/ssl/panel/admin/ssl_new.php @@ -0,0 +1,164 @@ + array("request", "string", ""), + "key" => array("request", "string", ""), + "crt" => array("request", "string", ""), + "chain" => array("request", "string", ""), + ); + getFields($fields); +} + +$advice = $ssl->get_new_advice(); +?> + +

+ +$error

"; +} +?> +

+ +

+

+ Certificate Request (CSR) and a RSA Key (KEY) here, then give the CSR to the Certificate Authority, which will give you a certificate (CRT) and also often a chained certificate (CHAIN)."); ?> +

+

+ +

+ + +
+
+ +
    +
  • +
  • +
+ +
+

+ +

Certificate Request file (CSR) and a RSA Key file (KEY) for a given domain name"); ?>

+ + + +
+ + + + + + +
+ +
+ + type="text" class="int" name="fqdnt" id="fqdnt" value="" size="40" maxlength="64" /> type="button" id="relist" name="relist" value=" list v " onclick="switchlist()" /> +
+

+ "/>   + " onclick="document.location = 'ssl_list.php'"/> +

+
+ +
+

www.example.com is NOT valid for intranet.example.com or intranet.www.example.com !"); ?>
(If you want to get a valid certificate for all the subdomains of a domain, use a wildcard notation (eg: *.example.com). Please note that a wildcard certificate is usually more expensive than normal one.)"); ?>

+
+ +
+ + +
+

+ +

+

+ +
+ + + + + + + + + + + + + +
+

+ "/>   + " onclick="document.location = 'ssl_list.php'"/> +

+
+
+ +
+
+ + diff --git a/ssl/panel/admin/ssl_share.php b/ssl/panel/admin/ssl_share.php new file mode 100644 index 00000000..c17e7716 --- /dev/null +++ b/ssl/panel/admin/ssl_share.php @@ -0,0 +1,45 @@ +enabled) { + __("This page is restricted to authorized staff"); + exit(); +} + +$fields = array( + "id" => array("request", "integer", 0), + "action" => array("request", "integer", 0), +); +getFields($fields); + +if ($ssl->share($id, $action)) { + require_once("ssl_view.php"); +} else { + require_once("ssl_list.php"); +} + diff --git a/ssl/panel/admin/ssl_view.php b/ssl/panel/admin/ssl_view.php new file mode 100644 index 00000000..35b76716 --- /dev/null +++ b/ssl/panel/admin/ssl_view.php @@ -0,0 +1,224 @@ + array("request", "integer", ""), + ); + getFields($fields); +} + +$cert = $ssl->get_certificate($id); +$error = $err->errstr(); +if ($error) { + require_once("ssl_list.php"); + exit(); +} + +include_once("head.php"); + +if ($info) { + echo "

$info

"; +} + +if ($cert["status"] == $ssl::STATUS_PENDING) { + ?> +

+ +

Certificate Request File (CSR) has been created, along with its private RSA Key (KEY). Please find below the CSR you must send to your SSL Certificate provider."); ?>

+ +

Certificate File (CRT) and a Chained Certificate File (CHAIN), please paste them here to finish the enrollment."); ?>

+ +
+ "/> + + + + + + + + + + + + + + + + + + + + + +
+

+ "/>   + " onclick="document.location = 'ssl_list.php'"/> +

+ " onclick="return confirm('');"/> + +

+
+ + +

+

+ + +

+

+ + +

+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ enabled) { + ?> +

(This is only useful for wildcard or multi-domain certificates)."); ?>

+

+ shared"); + if ($cert["uid"] == $cuid) { + ?> +

+
+ "/> + + " /> +
+ +

+ NOT shared"); + if ($cert["uid"] == $cuid) { + ?> +

+
+ "/> + + " /> +
+ +

+ +

+ " onclick="return confirm('');"/> + +

+ + + + + diff --git a/ssl/panel/admin/styles/style.css b/ssl/panel/admin/styles/style.css new file mode 100644 index 00000000..1770c4e4 --- /dev/null +++ b/ssl/panel/admin/styles/style.css @@ -0,0 +1,1072 @@ +html, body { + margin: 0px; + padding: 0px; +} + +body { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + color: #000000; + background-color: #B2CFE4; +} + +body.light { + background-color: #F0F0F4; +} + +.hlp { + font-family: Helvetica, Tahoma, sans-serif; + font-size: 11px; + color: #202020; +} + +table { + border-collapse: collapse; +} + +td { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + color: #000000; + padding-right: 6px; +} + +th { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + color: black; + background: #B2CFE4; + font-weight: normal; + text-align: left; +} + +h3 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 23px; + font-weight: normal; + color: #444; + text-align: left; + padding: 11px; + padding-left: 0; + margin: 0px; + word-wrap: break-word; +} + +.trbtn { + text-align: right; +} + +h4 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 16px; + font-weight: bold; + color: #007777 +} + +hr { + /*color: #007799;*/ + height: 1px; + /*border: 1px solid #007799;*/ + border: 1px solid #555; + border-width: 1px 0 0 0; +} + +a { + text-decoration: none; + color: #0D5689; +} + +a:hover { + text-decoration: underline; + color: #000000; +} + +fieldset { + border: 1px solid #555; +} + +pre { + overflow: auto; + background-color: #ddd; + padding: 10px; + border: solid 1px #999; + border-radius: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; +} + +.inp { + /* Should not be use anymore !!! */ + border-color: blue; + border-width: 5px; + background-color: #500000; + color: white; +} + +.inc, .inl { + border: 1px solid black; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + border-style: none; + color: black; + background: white; +} + +.inb { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + border: 1px solid #999; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + padding: 4px 6px; + color: black; + background-color: #CFE3F1; + cursor: pointer; + margin-right: 4px; + height: 25px; + vertical-align: middle; +} +.inb:hover { + background-color: #BFD3E1; +} +.ina a, .ina a:hover, .inb a, .inb a:hover { + color: #000; + text-decoration: none; + vertical-align: middle; + line-height: 15px; +} + +span.inb { + display: inline-block; + height: 15px; + padding: 4px 6px; +} + +input.ina, input.inav { + border: 1px solid #999; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + padding: 2px 4px 2px 4px; + color: black; + cursor: pointer; + /*float: right;*/ +} + +input.ina:hover, input.ina, input.inav, input.inav:hover { + border: 1px solid #999; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + color: black; + cursor: pointer; + /*float: right;*/ +} + +input.ina, .ina a { + background-color: #F1F8FD; +} +input.ina:hover, .ina a:hover, +input.inav, .inav a { + background-color: #CFE3F1; +} +input.inav:hover, .inav a:hover, a.inav:hover { + background-color: #F1F8FD; +} + +.ina-active a, a.ina-active, input.ina-active { + background-color: #C1FFCD; +} + +.ina a, a.ina, .inav a, a.inav { + color: black; + white-space: nowrap; + border: 1px solid #999; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + padding: 4px 10px; + color: black; + cursor: pointer; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + display: inline-block; + vertical-align: middle; + line-height: 15px; + height: 15px; +} + +.inb a, a.inb { + padding: 4px 10px; +} + +input[type=button], +input[type=submit] { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + height: 25px; +} +.ina a:hover, a.ina:hover, .inav a:hover, a.inav:hover { + text-decoration: none; + color: black; +} + +.ina img, .ina img { + vertical-align: middle; + padding: 0 2px 0 0; + float: left; +} +.bff { + border: 1px solid #999; + background-color: #F1F8FD; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 10px; + padding-left: 2px; + padding-right: 4px; + color: black; + cursor: pointer; +} +.int { + border: 1px dotted black; + background-color: white; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 11px; + padding: 2px; +} +.intleft { + border-right: 0px; + padding-right: 0px; +} +.intright { + border-left: 0px; + padding-left: 0px; +} + +.lst2 { + /*background-color: #F1F8FD;*/ + background-color: #E7F0F9; +} +.lst1 { + background-color: #CFE3F1; +} + +.lst:nth-child(even) { background:#E7F0F9; } +.lst:nth-child(odd) { background:#CFE3F1; } + +.dlogin { + text-align: center; +} + +.login { + margin-left: auto; + margin-right: auto; +} + +img { + border: 0px; + vertical-align: middle; +} + +/* Alerts */ +.alert { + border: 1px solid transparent; + border-radius: 4px 4px 4px 4px; + margin-bottom: 20px; + padding: 15px; +} +.alert h4 { + color: inherit; + margin-top: 0; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, .alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable { + padding-right: 35px; +} +.alert-dismissable .close { + color: inherit; + position: relative; + right: -21px; + top: -2px; +} +.alert-success { + background-color: #DFF0D8; + border-color: #D6E9C6; + color: #356635; +} +.alert-success hr { + border-top-color: #C9E2B3; +} +.alert-success .alert-link, +.alert-success a{ + color: #234323; +} +.alert-info { + background-color: #D9EDF7; + border-color: #BCE8F1; + color: #2D6987;} +.alert-info hr { + border-top-color: #A6E1EC; +} +.alert-info .alert-link, +.alert-info a +{ + color: #193B4D; +} +.alert-warning { + background-color: #FCF8E3; + border-color: #FBEED5; + color: #A47E3C; +} +.alert-warning hr { + border-top-color: #F8E5BE; +} +.alert-warning .alert-link, +.alert-warning a { + color: #6C5228; +} +.alert-danger { + background-color: #F2DEDE; + border-color: #EED3D7; + color: #953B39; +} +.alert-danger hr { + border-top-color: #E6C1C7; +} +.alert-danger .alert-link, +.alert-danger a{ + color: #6F2B2A; +} + +/* Alert icons */ +#content .alert { + background-position: 12px 10px; + background-repeat: no-repeat; + padding-left: 48px; +} +#content .alert-danger { + background-image: url("../images/danger.png"); +} +#content .alert-info{ + background-image: url("../images/info.png"); +} +#content .alert-success { + background-image: url("../images/success.png"); +} +#content .alert-warning { + background-image: url("../images/warning.png"); +} + + +.alerte { + color: #A00; + font-style: italic; +} + +/* Over quota class */ +.over { + color: red; +} + +.code { + font-size: 16px; + font-family: Courier New, Fixed; + font-weight: bold; + text-align: center; +} + +#global { + display: block; + margin-left: auto; + margin-right: auto; + margin-top: 20px; + margin-bottom: 20px; + width: 1020px; + border: 1px solid #888; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + box-shadow: 1px 1px 15px #555; + background-color: #F0F0F4; +} + +/* Main container */ + +#menu { + display: block; + border-right: 1px solid #888; + padding: 0; +} + +#content { + display: block; + width: 770px; + float: right; + margin-left: 10px; + padding-right: 10px; + vertical-align: top; +} + +.clearfix:after { + visibility: hidden; + display: block; + content: ""; + clear: both; + height: 0; + } + +/* Menu */ + +#menu { + display: block; + float: left; + padding: 0px; + margin: 0px; + width: 200px; + padding-right: 10px; + padding-bottom: 10px; + padding-left: 10px; + border-radius: 10px 0 0 10px; + -webkit-border-radius: 10px 0 0 10px; + -moz-border-radius: 10px 0 0 10px; +} + +.menu-box { + margin-bottom: 10px; + font-size: 11px; + background-color: #F4F4FA; + border: 1px solid #888; + box-shadow: 1px 1px 5px #888; + border-radius: 4px 4px 0 0; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; +} + +.menu-box .menu-title { + display: block; + color: #000000; + border-bottom: 2px solid #AAA; + background-color: #CFE3F1; + padding: 3px; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.menu-box a .menu-title { + min-height: 16px; +} + +.menu-box .menu-conmargin { + margin: 0 5px 5px 5px; +} + +.menu-box ul { + margin: 0px; + padding: 5px 0 5px 0; + list-style-type: none; +} + +.menu-box li { +} + +.menu-box a { + text-decoration: none; + color: #0D5689; +} + +.menu-box a:hover, +.menu-box a:hover .menu-title { + text-decoration: none; + background-color: #DFEEF8; +} + +.menu-box li a { + display: block; + padding: 5px 5px 5px 10px; + color: #0D5689; + text-decoration: none; + border: 1px solid transparent; + border-width: 1px 0; + line-height: 0.75em; + height: 10px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; /* Opera 9*/ + outline:none; +} + +.menu-box li a img { + float: left; + width: 16px; + height: 16px; + margin: 0px; + padding: 0px; + top: -3px; + position: relative; +} + +.menu-box li a:hover { + color: #000000; + border: 1px solid #C1D8E9; + border-width: 1px 0; + text-decoration: none; + background-color: #DFEEF8; +} + +.menu-box .full { + color: red; +} + +/* Bars */ + +.barempty { + background-color: white; + border: 1px solid black; + height: 8px; + -webkit-border-radius:4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.barfill { + float: left; + background-color: red; + height: 8px; +} + +/* Infos */ +#recap table { + text-align: center; + margin-left: auto; + margin-right: auto; +} + +table.searchtable { + width: 700px; + border: 1px dotted #99f; + margin: 20px 0 20px 0px; +} + +table.searchtable td { + padding: 5px; +} + +/* Others */ +.center { + text-align: center; + margin-left: auto; + margin-right: auto; +} + +.border { + border: 1px solid #C0DCF0; +} + +.bold { + font-weight: bold; +} + + +#sendthisfile { + margin-top: 6px; +} + +.breadcrumb { + font-size: 12px; + +} + +#newdomwww, #sub, #usernpfx, #dbnpfx { + border-right: 0; + padding-right: 0; +} +#newdomain, #newsubname, #usern, #dbn { + border-left: 0; + padding-left: 0; +} + +#create_dom_list_pfx { + border-right: 0; + padding: 3px; +} +#create_dom_list { + border-left: 0; + padding-left: 0; +} + + + +input#email { + border-right: 0; + padding-right: 0; + text-align: right; +} + +span#emaildom { + border-left: 0; + padding-left: 2px; +} + +.tedit { + border: 1px solid #aaa; + padding: 6px; + margin: 0; + border-collapse: collapse; + } +.tedit td, .tedit th { + border: 1px solid #aaa; + padding: 10px; + margin: 0; +} + +.formcell { + vertical-align: top; + border: 1px solid #aaa; + padding: 10px; +} + +.tlist, .tlist td, .tlist th, +.tlist2, .tlist2 td, .tlist2 th { + padding: 4px; + margin: 0; + border-collapse: collapse; +} + +.tlist { + width: 100%; + border: 1px solid #C1D8E9; +} + +.tlistb, .tlistb td, .tlistb th { + padding: 4px; + margin: 0; + border-collapse: collapse; +} + +table.tlistb, .tlistb tr { + border: solid 1px #C1D8E9; +} + +.tlist tr:hover, .tlist2 tr:hover { + background-color: #F1D5CF; +} + +.tlist th, .tlist2 th { + font-size: 125%; +} + +input#dir, input#sub_local { + width: 200px; +} + +.tab-ok { + background-color: lightgreen; +} +.tab-err { + background-color: red; +} +.tab-warn { + background-color: coral; +} + +.warningmsg { + width: 500px; +} + +#mx { + width: 300px; +} + +#admlistbtn { + padding-bottom: 6px; +} + +.advdom { + padding-top: 6px; +} + +.grey, .grey td { + color: #999; +} + +.retour-auto { + max-width:220px; + word-wrap:break-word; +} + +.menutoplogo { + margin: 10px 0 0 5px; + width: 190px; +} + +.currentuser { + margin: 5px 5px 10px 5px; + color:#444; +} + +.adminmenu { + color: #800; +} + +.menu-quota dd { + margin: 5px 5px 5px 10px; +} + +.menu-quota div.progress-bar { + width: 180px; + background: #fff; + border: solid 1px #AAA; + margin-left: 10px; +} + +div.progress-bar { + position: relative; + width: 100%; + height: 20px; + background-color: #fff; + border: solid 1px #aaa; + overflow: hidden; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +div.progress-bar div.barre { + position: absolute; + top: 0; + left: 0; + height: 20px; + background-color: #CCC; + border: none; +} + +div.progress-bar div.txt { + position: absolute; + top: 3px; + left: 0; + width: 100%; + text-align:center; +} + +.ombrage { + border: 1px solid #888; + box-shadow: 1px 1px 15px #555; +} + +.petit, +.petit p, +.petit th, +.petit td { + font-size:95%; +} + +#adm_panel li, #adm_panel_root li { + padding: 4px 0 4px 0; +} +#adm_panel li:hover, #adm_panel_root li:hover { + background-color: #BFD3E1; +} + +.edit a, a.edit, input.edit { + background-image: url(../images/edit.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.view a, a.view, input.view { + background-image: url(../images/code.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.delete a, a.delete, input.delete { + background-image: url(../icon/delete.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.lock a, a.lock, input.lock { + background-image: url(../icon/encrypted.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.settings a, a.settings, input.settings { + background-image: url(../icon/settings.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.ok a, a.ok, input.ok { + background-image: url(../icon/ok.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.cancel a, a.cancel, input.cancel { + background-image: url(../icon/cancel.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.add a, a.add, input.add { + background-image: url(../icon/add.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.configure a, a.configure, input.configure { + background-image: url(../icon/configure.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.edit a, a.edit, input.edit { + background-image: url(../icon/edit.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.save a, a.save, input.save { + background-image: url(../icon/save.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.down a, a.down, input.down { + background-image: url(../icon/save.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.up a, a.up, input.up { + background-image: url(../icon/up.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.back a, a.back, input.back { + background-image: url(../icon/back.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.admin a, a.admin, input.admin, .admin-menu .menu-title { + background-image: url(../images/admin.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.home a, a.home, input.home, .home-menu .menu-title { + background-image: url(../images/home.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.dom a, a.dom, input.dom, .dom-menu .menu-title { + background-image: url(../images/dom.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.mail a, a.mail, input.mail, .mail-menu .menu-title { + background-image: url(../images/mail.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.bro a, a.bro, input.bro, .bro-menu .menu-title { + background-image: url(../images/folder.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.hta a, a.hta, input.hta, .hta-menu .menu-title { + background-image: url(../images/password.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.ftp a, a.ftp, input.ftp, .ftp-menu .menu-title { + background-image: url(../images/ftp.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.cron a, a.cron, input.cron, .cron-menu .menu-title { + background-image: url(../images/schedule.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.lxc a, a.lxc, input.lxc, .lxc-menu .menu-title { + background-image: url(../images/ssh.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.mysql a, a.mysql, input.mysql, .mysql-menu .menu-title { + background-image: url(../images/mysql.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.quota a, a.quota, input.quota, .quota-menu .menu-title { + background-image: url(../images/quota.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.authip a, a.authip, input.authip, .authip-menu .menu-title { + background-image: url(../images/ip.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.log a, a.log, input.log, .log-menu .menu-title { + background-image: url(../images/logs.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.help a, a.help, input.help, .help-menu .menu-title { + background-image: url(../images/help.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.lang a, a.lang, input.lang, .lang-menu .menu-title { + background-image: url(../images/lang.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.mem a, a.mem, input.mem, .mem-menu .menu-title { + background-image: url(../images/settings.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.logout a, a.logout, input.logout, .logout-menu .menu-title { + background-image: url(../images/exit.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.ssl a, a.ssl, input.ssl, .ssl-menu .menu-title { + background-image: url(../images/ssl.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +.filter a, a.edit, input.filter { + background-image: url(../icon/filter.png); + background-repeat: no-repeat; + background-position: 8px 3px; + padding-left: 30px; +} + +/* Jquery-ui */ + +body .ui-widget-content { +/* margin-top: 15px; */ +} + +body .ui-widget-header { + background: #CFE3F1; +} + +body .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { + color: #0D5689; +} + +body .ui-state-default, body .ui-widget-content .ui-state-default, body .ui-widget-header .ui-state-default { + background: #F0F0F4; +} + +body .ui-state-active, body .ui-widget-content, body .ui-state-active, body .ui-widget-header .ui-state-active { + background: #F0F0F4; +} + +body .ui-state-active a, body .ui-state-active a:link { + color: black; +} + +body .ui-tabs .ui-tabs-panel { + background: #F0F0F4; +} + +body .ui-tabs .ui-tabs-nav li a { + padding: .5em 1em .5em 30px; +} + +body .ui-state-active, body .ui-widget-content .ui-state-active, body .ui-widget-header .ui-state-active, +body ui-state-hover, body .ui-widget-content .ui-state-hover, body .ui-widget-header .ui-state-hover, body .ui-state-focus, body .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus, +body .ui-state-default, body .ui-widget-content .ui-state-default, body .ui-widget-header .ui-state-default { + font-weight: normal; +} + +body .ui-dialog .ui-dialog-title { + color: black; +} + +body .ui-widget-content a { + color: #0D5689; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-tabs-loading a { + outline:none; +} + +.ui-tabs .ui-tabs-nav li a, .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { + outline:none; +} + +textarea.cert { + font-family: Courier New, Courier, monospace, fixed; + font-size: 12px; +} +textarea[readonly='readonly'] { + background-color: #ddd; +} diff --git a/ssl/panel/class/m_ssl.php b/ssl/panel/class/m_ssl.php new file mode 100644 index 00000000..74efc1b8 --- /dev/null +++ b/ssl/panel/class/m_ssl.php @@ -0,0 +1,819 @@ +getquota("ssl"); + $obj = null; + if ($q['t'] > 0) { + $obj = array( + 'title' => _("SSL Certificates"), + 'ico' => 'images/ssl.png', + 'link' => 'toggle', + 'pos' => 130, + 'links' => array(), + ); + + if ($quota->cancreate("ssl")) { + $obj['links'][] = array( + 'ico' => 'images/new.png', + 'txt' => _("New SSL certificate"), + 'url' => "ssl_new.php", + 'class' => '', + ); + } + + // or admin shared >0 ! + $db->query("SELECT COUNT(*) AS cnt FROM certificates WHERE uid='$cuid' OR shared=1"); + $used = $q['u']; + if ($db->next_record()) { + $used = $db->f("cnt"); + } + if ($used > 0) { // if there are some SSL certificates + $obj['links'][] = array( + 'txt' => _("List SSL Certificates"), + 'url' => "ssl_list.php" + ); + } + } + return $obj; + } + + // ----------------------------------------------------------------- + /** Return all the SSL certificates for an account (or the searched one) + * @param $filter an integer telling which certificate we want to see (see FILTER_* constants above) + * the default is showing all certificate, but only Pending and OK certificates, not expired or shared one + * when there is more than 10. + * @return array all the ssl certificate this user can use + * (each array is the content of the certificates table) + */ + function get_list(&$filter = null) { + global $db, $err, $cuid; + $err->log("ssl", "get_list"); + // Expire expired certificates: + $db->query("UPDATE certificates SET status=".self::STATUS_EXPIRED." WHERE status=".self::STATUS_OK." AND validendquery("SELECT count(*) AS cnt FROM certificates WHERE uid='$cuid' OR shared=1;"); + $db->next_record(); + if ($db->f("cnt") > 10) { + $filter = (self::FILTER_PENDING | self::FILTER_OK); + } else { + $filter = (self::FILTER_PENDING | self::FILTER_OK | self::FILTER_EXPIRED | self::FILTER_SHARED); + } + } + // filter the filter values :) + $filter = ($filter & (self::FILTER_PENDING | self::FILTER_OK | self::FILTER_EXPIRED | self::FILTER_SHARED)); + // Here filter can't be null (and will be returned to the caller !) + $sql = ""; + if ($filter & self::FILTER_SHARED) { + $sql = " (uid='$cuid' OR shared=1) "; + } else { + $sql = " uid='$cuid' "; + } + $sql.=" AND status IN (-1"; + if ($filter & self::FILTER_PENDING) { + $sql.="," . self::STATUS_PENDING; + } + if ($filter & self::FILTER_OK) { + $sql.="," . self::STATUS_OK; + } + if ($filter & self::FILTER_EXPIRED) { + $sql.="," . self::STATUS_EXPIRED; + } + $sql.=") "; + $db->query("SELECT *, UNIX_TIMESTAMP(validstart) AS validstartts, UNIX_TIMESTAMP(validend) AS validendts FROM certificates WHERE $sql ORDER BY shared, fqdn;"); + if ($db->num_rows()) { + while ($db->next_record()) { + $r[] = $db->Record; + } + return $r; + } else { + $err->raise("ssl", _("No SSL certificates available")); + return array(); + } + } + + // ----------------------------------------------------------------- + /** Return all the Vhosts of this user using SSL certificates + * @return array all the ssl certificate and hosts of this user + */ + function get_vhosts() { + global $db, $err, $cuid; + $err->log("ssl", "get_vhosts"); + $r=array(); + $db->query("SELECT ch.*, UNIX_TIMESTAMP(c.validstart) AS validstartts, UNIX_TIMESTAMP(c.validend) AS validendts, sd.domaine, sd.sub " + . "FROM certif_hosts ch LEFT JOIN certificates c ON ch.certif=c.id " + . ", sub_domaines sd WHERE sd.id=ch.sub AND ch.uid=$cuid " + . "ORDER BY sd.domaine, sd.sub;"); + if ($db->num_rows()) { + while ($db->next_record()) { + $r[] = $db->Record; + } + return $r; + } else { + $err->raise("ssl", _("You currently have no hosting using SSL certificate")); + return array(); + } + } + + // ----------------------------------------------------------------- + /** Generate a new CSR, a new Private RSA Key, for FQDN. + * @param $fqdn string the FQDN of the domain name for which we want a CSR. + * a wildcard certificate must start by *. + * @return integer the Certificate ID created in the MySQL database + * or false if an error occurred + */ + function new_csr($fqdn) { + global $db, $err, $cuid; + $err->log("ssl", "new_csr"); + if (substr($fqdn, 0, 2) == "*.") { + $f = substr($fqdn, 2); + } else { + $f = $fqdn; + } + if (checkfqdn($f)) { + $err->raise("ssl", _("Bad FQDN domain name")); + return false; + } + putenv("OPENSSL_CONF=/etc/alternc/openssl.cnf"); + $pkey = openssl_pkey_new(); + if (!$pkey) { + $err->raise("ssl", _("Can't generate a private key (1)")); + return false; + } + $privKey = ""; + if (!openssl_pkey_export($pkey, $privKey)) { + $err->raise("ssl", _("Can't generate a private key (2)")); + return false; + } + $dn = array("commonName" => $fqdn); + // override the (not taken from openssl.cnf) digest to use SHA-2 / SHA256 and not SHA-1 or MD5 : + $config = array("digest_alg" => "sha256"); + $csr = openssl_csr_new($dn, $pkey, $config); + $csrout = ""; + openssl_csr_export($csr, $csrout); + $db->query("INSERT INTO certificates SET uid='$cuid', status=" . self::STATUS_PENDING . ", shared=0, fqdn='" . addslashes($fqdn) . "', altnames='', validstart=NOW(), sslcsr='" . addslashes($csrout) . "', sslkey='" . addslashes($privKey) . "';"); + if (!($id = $db->lastid())) { + $err->raise("ssl", _("Can't generate a CSR")); + return false; + } + return $id; + } + + // ----------------------------------------------------------------- + /** Return all informations of a given certificate for the current user. + * @return array all the informations of the current certificate as a hash. + */ + function get_certificate($id) { + global $db, $err, $cuid; + $err->log("ssl", "get_certificate"); + $id = intval($id); + $db->query("SELECT *, UNIX_TIMESTAMP(validstart) AS validstartts, UNIX_TIMESTAMP(validend) AS validendts FROM certificates WHERE (uid='$cuid' OR (shared=1 AND status=" . self::STATUS_OK . ") ) AND id='$id';"); + if (!$db->next_record()) { + $err->raise("ssl", _("Can't find this Certificate")); + return false; + } + return $db->Record; + } + + // ----------------------------------------------------------------- + /** Delete a Certificate for the current user. + * @return boolean TRUE if the certificate has been deleted successfully. + */ + function del_certificate($id) { + global $db, $err, $cuid; + $err->log("ssl", "del_certificate"); + $id = intval($id); + $db->query("SELECT * FROM certificates WHERE uid='$cuid' AND id='$id';"); + if (!$db->next_record()) { + $err->raise("ssl", _("Can't find this Certificate")); + return false; + } + $fqdn = $db->Record["fqdn"]; + $altnames = $db->Record["altnames"]; + $db->query("DELETE FROM certificates WHERE uid='$cuid' AND id='$id';"); + // Update any existing VHOST using this cert/key + $this->updateTrigger($fqdn, $altnames); + return true; + } + + // ----------------------------------------------------------------- + /** Share (or unshare) an ssl certificate + * @param $id integer the id of the certificate in the table. + * @param $action integer share (1) or unshare (0) this certificate + * @return boolean + */ + function share($id, $action = 1) { + global $db, $err, $cuid; + $err->log("ssl", "share"); + $id = intval($id); + $db->query("SELECT * FROM certificates WHERE uid='$cuid' AND status=" . self::STATUS_OK . " AND id='$id';"); + if (!$db->next_record()) { + $err->raise("ssl", _("Can't find this Certificate")); + return false; + } + if ($action) { + $action = 1; + $this->updateTrigger($db->Record["fqdn"], $db->Record["altnames"]); + } else { + $action = 0; + } + $db->query("UPDATE certificates SET shared=$action WHERE id='$id';"); + return true; + } + + // ----------------------------------------------------------------- + /** Return all the subdomains that can be ssl-enabled for the current account. + * @return array of strings : all the subdomains. + * Excludes the one for which a cert is already available + */ + function get_new_advice() { + global $db, $err, $cuid; + $err->log("ssl", "get_new_advice"); + $r = array(); + // my certificates, either OK or PENDING (not expired) or the SHARED one (only OK then) + $db->query("SELECT fqdn FROM certificates WHERE + (uid='$cuid' AND status IN (" . self::STATUS_PENDING . "," . self::STATUS_OK . ") ) + OR (shared=1 AND status=" . self::STATUS_OK . ") + ORDER BY shared, fqdn;"); + $r = array(); + while ($db->next_record()) { + $r[] = $db->f("fqdn"); + } + // Now we get all our subdomains for certain domaines_types + $db->query("SELECT sub,domaine FROM sub_domaines WHERE compte='$cuid' AND type IN ('vhost', 'url', 'roundcube', 'squirrelmail', 'panel', 'php52');"); + $advice = array(); + while ($db->next_record()) { + $me = $db->f("sub"); + if ($me) { + $me.="."; + } + $me.=$db->f("domaine"); + if (!in_array($me, $r) && !in_array($me, $advice)) { + $advice[] = $me; + } + if (!in_array("*." . $db->f("domaine"), $r) && !in_array("*." . $db->f("domaine"), $advice)) { + $advice[] = "*." . $db->f("domaine"); + } + } + sort($advice); + return($advice); + } + + // ----------------------------------------------------------------- + /** Import an existing ssl Key, Certificate and (maybe) a Chained Cert + * @param $key string the X.509 PEM-encoded RSA key + * @param $crt string the X.509 PEM-encoded certificate, which *must* + * be the one signinf the private RSA key in $key + * @param $chain string the X.509 PEM-encoded list of SSL Certificate chain if intermediate authorities + * @return integer the ID of the newly created certificate in the table + * or false if an error occurred + */ + function import_cert($key, $crt, $chain = "") { + global $cuid, $err, $db; + $err->log("ssl", "import_cert"); + + $result = $this->check_cert($crt, $chain, $key); + if ($result === false) { + $err->raise("ssl", $this->error); + return false; + } + list($crt, $chain, $key, $crtdata) = $result; + + $validstart = $crtdata['validFrom_time_t']; + $validend = $crtdata['validTo_time_t']; + $fqdn = $crtdata["subject"]["CN"]; + $altnames = $this->parseAltNames($crtdata["extensions"]["subjectAltName"]); + + // Everything is PERFECT and has been thoroughly checked, let's insert those in the DB ! + $sql = "INSERT INTO certificates SET uid='$cuid', status=" . self::STATUS_OK . ", shared=0, fqdn='" . addslashes($fqdn) . "', altnames='" . addslashes($altnames) . "', validstart=FROM_UNIXTIME(" . intval($validstart) . "), validend=FROM_UNIXTIME(" . intval($validend) . "), sslkey='" . addslashes($key) . "', sslcrt='" . addslashes($crt) . "', sslchain='" . addslashes($chain) . "';"; + $db->query($sql); + if (!($id = $db->lastid())) { + $err->raise("ssl", _("Can't save the Key/Crt/Chain now. Please try later.")); + return false; + } + $this->updateTrigger($fqdn, $altnames); + return $id; + } + + // ----------------------------------------------------------------- + /** Import an ssl certificate into an existing certificate entry in the DB. + * (finalize an enrollment process) + * @param $certid integer the ID in the database of the SSL Certificate + * @param $crt string the X.509 PEM-encoded certificate, which *must* + * be the one signing the private RSA key in certificate $certid + * @param $chain string the X.509 PEM-encoded list of SSL Certificate chain if intermediate authorities + * @return integer the ID of the updated certificate in the table + * or false if an error occurred + */ + function finalize($certid, $crt, $chain) { + global $cuid, $err, $db; + $err->log("ssl", "finalize"); + + $certid = intval($certid); + $result = $this->check_cert($crt, $chain, "", $certid); + if ($result === false) { + $err->raise("ssl", $this->error); + return false; + } + list($crt, $chain, $key, $crtdata) = $result; + + $validstart = $crtdata['validFrom_time_t']; + $validend = $crtdata['validTo_time_t']; + $fqdn = $crtdata["subject"]["CN"]; + $altnames = $this->parseAltNames($crtdata["extensions"]["subjectAltName"]); + + // Everything is PERFECT and has been thoroughly checked, let's insert those in the DB ! + $sql = "UPDATE certificates SET status=" . self::STATUS_OK . ", shared=0, fqdn='" . addslashes($fqdn) . "', altnames='" . addslashes($altnames) . "', validstart=FROM_UNIXTIME(" . intval($validstart) . "), validend=FROM_UNIXTIME(" . intval($validend) . "), sslcrt='" . addslashes($crt) . "', sslchain='" . addslashes($chain) . "' WHERE id='$certid' ;"; + if (!$db->query($sql)) { + $err->raise("ssl", _("Can't save the Crt/Chain now. Please try later.")); + return false; + } + $this->updateTrigger($fqdn, $altnames); + return $certid; + } + + // ----------------------------------------------------------------- + /** Function called by a hook when an AlternC member is deleted. + * @access private + * TODO: delete unused ssl certificates ?? > do this in the crontab. + */ + function alternc_del_member() { + global $db, $err, $cuid; + $err->log("ssl", "alternc_del_member"); + $db->query("UPDATE certificates SET ssl_action='DELETE' WHERE uid='$cuid'"); + return true; + } + + // ----------------------------------------------------------------- + /** Hook which returns the used quota for the $name service for the current user. + * @param $name string name of the quota + * @return integer the number of service used or false if an error occured + * @access private + */ + function hook_quota_get() { + global $db, $err, $cuid; + $err->log("ssl", "getquota"); + $q = Array("name" => "ssl", "description" => _("SSL Certificates"), "used" => 0); + $db->query("SELECT COUNT(*) AS cnt FROM certificates WHERE uid='$cuid' AND status!=" . self::STATUS_EXPIRED); + if ($db->next_record()) { + $q['used'] = $db->f("cnt"); + } + return $q; + } + + // ----------------------------------------------------------------- + /** Launched by functions in this class + * when a certificate is validated, expired or shared. + * so that existing vhost using expired or self-signed certificates + * may have the chance to use a proper one automagically + * @param string $fqdn the FQDN of the certificate + * @param string $altnames any alternative names this certificate may have. + */ + public function updateTrigger($fqdn, $altnames = "") { + global $db; + $fqdns = array($fqdn); + $an = explode("\n", $altnames); + foreach ($an as $a) + if (trim($a)) + $fqdns[] = trim($a); + $db->query("UPDATE sub_domaines SET web_action='UPDATE' WHERE " + . "if(LENGTH(sub)>0,CONCAT(sub,'.',domaine),domaine) IN ('" . implode("','", $fqdns) . "') " + . "AND type LIKE '%ssl';"); + } + + // ----------------------------------------------------------------- + /** Launched by hosting_functions.sh launched by update_domaines.sh + * Action may be create/postinst/delete/enable/disable + * Change the template for this domain name to have the proper CERTIFICATE + * An algorithm determine the best possible certificate, which may be a BAD one + * (like a generic admin-shared or self-signed for localhost as a last chance) + */ + public function updateDomain($action, $type, $fqdn, $mail = 0, $value = "") { + global $db, $err; + $err->log("ssl", "update_domain($action,$type,$fqdn)"); + if (!in_array($type, $this->myDomainesTypes)) { + return; // nothing to do : the type is not our to start with ;) + } + if ($action == "postinst") { + $err->log("ssl", "update_domain:CREATE($action,$type,$fqdn)"); + $offset = 0; + $found = false; + do { // try each subdomain (strtok-style) and search them in sub_domaines table: + $db->query("SELECT * FROM sub_domaines WHERE " + . "sub='" . substr($fqdn, 0, $offset) . "' AND domaine='" . substr($fqdn, $offset + ($offset != 0)) . "' " + . "AND web_action NOT IN ('','OK') AND type='" . $type . "';"); + if ($db->next_record()) { + $found = true; + break; + } + $offset = strpos($fqdn, ".", $offset); + } while (true); + if (!$found) { + echo "FATAL: didn't found fqdn $fqdn in sub_domaines table !\n"; + return; + } + // found and $db point to it: + $subdom = $db->Record; + $TARGET_FILE = "/var/lib/alternc/apache-vhost/" . substr($subdom["compte"], -1) . "/" . $subdom["compte"] . "/" . $fqdn . ".conf"; + $cert = $this->searchBestCert($subdom["compte"], $fqdn); + // DEBUG echo "Return from searchBestCert(" . $subdom["compte"] . "," . $fqdn . ") is "; print_r($cert); + // Save crt/key/chain into KEY_REPOSITORY + $CRTDIR = self::KEY_REPOSITORY . "/" . $subdom["compte"]; + @mkdir($CRTDIR); + // Don't *overwrite* existing self-signed certificates in KEY_REPOSITORY + if (isset($cert["selfsigned"]) && + file_exists($CRTDIR . "/" . $fqdn . ".crt") && + file_exists($CRTDIR . "/" . $fqdn . ".key")) { + echo "Self-Signed certificate reused...\n"; + } else { + file_put_contents($CRTDIR . "/" . $fqdn . ".crt", $cert["sslcrt"]); + file_put_contents($CRTDIR . "/" . $fqdn . ".key", $cert["sslkey"]); + if (isset($cert["sslchain"]) && $cert["sslchain"]) { + file_put_contents($CRTDIR . "/" . $fqdn . ".chain", $cert["sslchain"]); + } + } + // edit apache conf file to set the certificate: + $s = file_get_contents($TARGET_FILE); + $s = str_replace("%%CRT%%", $CRTDIR . "/" . $fqdn . ".crt", $s); + $s = str_replace("%%KEY%%", $CRTDIR . "/" . $fqdn . ".key", $s); + if (isset($cert["sslchain"]) && $cert["sslchain"]) { + $s = str_replace("%%CHAINLINE%%", "SSLCertificateChainFile " . $CRTDIR . "/" . $fqdn . ".chain", $s); + } else { + $s = str_replace("%%CHAINLINE%%", "", $s); + } + file_put_contents($TARGET_FILE, $s); + // Edit certif_hosts: + $db->query("DELETE FROM certif_hosts WHERE sub=" . $subdom["id"] . ";"); + $db->query("INSERT INTO certif_hosts SET " + . "sub=" . intval($subdom["id"]) . ", " + . "certif=" . intval($cert["id"]) . ", " + . "uid=" . intval($subdom["compte"]) . ";"); + } // action==create + if ($action == "delete") { + $err->log("ssl", "update_domain:DELETE($action,$type,$fqdn)"); + $offset = 0; + $found = false; + do { // try each subdomain (strtok-style) and search them in sub_domaines table: + $db->query("SELECT * FROM sub_domaines WHERE " + . "sub='" . substr($fqdn, 0, $offset) . "' AND domaine='" . substr($fqdn, $offset + ($offset != 0)) . "' " + . "AND web_action NOT IN ('','OK') AND type='" . $type . "';"); + if ($db->next_record()) { + $found = true; + break; + } + $offset = strpos($fqdn, ".", $offset); + } while (true); + if (!$found) { + echo "FATAL: didn't found fqdn $fqdn in sub_domaines table !\n"; + return; + } + // found and $db point to it: + $subdom = $db->Record; + $db->query("DELETE FROM certif_hosts WHERE sub=" . $subdom["id"] . ";"); + } + } + + // ---------------------------------------------------------------- + /** Search for the best certificate for a user and a fqdn + * Return a hash with sslcrt, sslkey and maybe sslchain. + * return ANYWAY : if necessary, return a newly created (and stored in KEY_REPOSITORY localhost self-signed certificate... + */ + public function searchBestCert($uid, $fqdn) { + global $db; + $uid = intval($uid); + // 1st search for a valid certificate in my account or shared by the admin: + // the ORDER BY make it so that we try VALID then EXPIRED one (sad) + $wildcard = "*." . substr($fqdn, strpos($fqdn, ".") + 1); + $db->query("SELECT * FROM certificates WHERE (status=".self::STATUS_OK." OR status=".self::STATUS_EXPIRED.") " + . "AND (uid=" . $uid . " OR shared=1) " + . "AND (fqdn='" . $fqdn . "' OR fqdn='" . $wildcard . "' OR altnames LIKE '%" . $fqdn . "%') " + . "ORDER BY (validstart<=NOW() AND validend>=NOW()) DESC, validstart DESC "); + while ($db->next_record()) { + // name + if ($db->Record["fqdn"] == $fqdn) { + return $db->Record; + } + // or alternative names + $altnames = explode("\n", $db->Record["altnames"]); + foreach ($altnames as $altname) { + if (trim($altname) == $fqdn) { + return $db->Record; + } + } + // or wildcard + if ($db->Record["fqdn"] == $wildcard) { + return $db->Record; + } + } + // not found, we generate a one-time self-signed certificate for this host. + $crt = $this->selfSigned($fqdn); + $crt["uid"] = $uid; + return $crt; + } + + // ----------------------------------------------------------------- + /** Export every information for an AlternC's account + * @access private + * EXPERIMENTAL 'sid' function ;) + */ + function alternc_export_conf() { + global $db, $err, $cuid; + $err->log("ssl", "export"); + $str = " "; + $db->query("SELECT COUNT(*) AS cnt FROM certificates WHERE uid='$cuid' AND status!=" . self::STATUS_EXPIRED); + while ($db->next_record()) { + $str.=" " . ($db->Record["id"]) . "\n"; + $str.=" " . ($db->Record["sslcsr"]) . "\n"; + $str.=" " . ($db->Record["sslkey"]) . "\n"; + $str.=" " . ($db->Record["sslcrt"]) . "\n"; + $str.=" " . ($db->Record["sslchain"]) . "\n"; + } + $str.=" \n"; + return $str; + } + + // ----------------------------------------------------------------- + /** Returns the list of alternate names of an X.509 SSL Certificate + * from the attribute list. + * @param $str string the $crtdata["extensions"]["subjectAltName"] from openssl + * @return array an array of FQDNs + */ + function parseAltNames($str) { + $mat = array(); + if (preg_match_all("#DNS:([^,]*)#", $str, $mat, PREG_PATTERN_ORDER)) { + return implode("\n", $mat[1]); + } else { + return ""; + } + } + + // ----------------------------------------------------------------- + /** Add (immediately) a global alias to the HTTP + * certif_alias table and add it to apache configuration + * by launching a incron action. + * name is the name of the alias, starting by / + * content is the content of the filename stored at this location + * If an alias with the same name already exists, return false. + * if the alias has been properly defined, return true. + * @return boolean + */ + function alias_add($name, $content) { + global $err, $cuid, $db; + $db->query("SELECT name FROM certif_alias WHERE name='" . addslashes($name) . "';"); + if ($db->next_record()) { + $err->raise("ssl", _("Alias already exists")); + return false; + } + $db->query("INSERT INTO certif_alias SET name='" . addslashes($name) . "', content='" . addslashes($content) . "', uid=" . intval($cuid) . ";"); + touch(self::SSL_INCRON_FILE); + return true; + } + + // ----------------------------------------------------------------- + /** Removes (immediately) a global alias to the HTTP + * certif_alias table and add it to apache configuration + * by launching a incron action. + * name is the name of the alias, starting by / + * @return boolean + */ + function alias_del($name) { + global $err, $cuid, $db; + $db->query("SELECT name FROM certif_alias WHERE name='" . addslashes($name) . "' AND uid=" . intval($cuid) . ";"); + if (!$db->next_record()) { + $err->raise("ssl", _("Alias not found")); + return false; + } + $db->query("DELETE FROM certif_alias WHERE name='" . addslashes($name) . "' AND uid=" . intval($cuid) . ";"); + touch(self::SSL_INCRON_FILE); + return true; + } + + // ----------------------------------------------------------------- + /** Check that a crt is a proper certificate + * @param $crt string an SSL Certificate + * @param $chain string is a list of certificates + * @param $key string is a rsa key associated with certificate + * @param $certid if no key is specified, use it from this certificate ID in the table + * @return array the crt, chain, key, crtdata(array) after a proper reformatting + * or false if an error occurred (in that case $this->error is filled) + */ + function check_cert($crt, $chain, $key = "", $certid = null) { + global $db; + // Check that the key crt and chain are really SSL certificates and keys + $crt = trim(str_replace("\r\n", "\n", $crt)) . "\n"; + $key = trim(str_replace("\r\n", "\n", $key)) . "\n"; + $chain = trim(str_replace("\r\n", "\n", $chain)) . "\n"; + + $this->error = ""; + if (trim($key) == "" && !is_null($certid)) { + // find it in the DB : + $db->query("SELECT sslkey FROM certificates WHERE id=" . intval($certid) . ";"); + if (!$db->next_record()) { + $this->error.=_("Can't find the private key in the certificate table, please check your form."); + return false; + } + $key = $db->f("sslkey"); + $key = trim(str_replace("\r\n", "\n", $key)) . "\n"; + } + + if (substr($crt, 0, 28) != "-----BEGIN CERTIFICATE-----\n" || + substr($crt, -26, 26) != "-----END CERTIFICATE-----\n") { + $this->error.=_("The certificate must begin by BEGIN CERTIFICATE and end by END CERTIFICATE lines. Please check you pasted it in PEM form.") . "
\n"; + } + if ($chain && + (substr($chain, 0, 28) != "-----BEGIN CERTIFICATE-----\n" || + substr($chain, -26, 26) != "-----END CERTIFICATE-----\n")) { + $this->error.=_("The chained certificate must begin by BEGIN CERTIFICATE and end by END CERTIFICATE lines. Please check you pasted it in PEM form.") . "
\n"; + } + if ((substr($key, 0, 32) != "-----BEGIN RSA PRIVATE KEY-----\n" || + substr($key, -30, 30) != "-----END RSA PRIVATE KEY-----\n") && + (substr($key, 0, 28) != "-----BEGIN PRIVATE KEY-----\n" || + substr($key, -26, 26) != "-----END PRIVATE KEY-----\n")) { + $this->error.=_("The private key must begin by BEGIN (RSA )PRIVATE KEY and end by END (RSA )PRIVATE KEY lines. Please check you pasted it in PEM form.") . "
\n"; + } + if ($this->error) { + return false; + } + + // We split the chained certificates in individuals certificates : + $chains = array(); + $status = 0; + $new = ""; + $lines = explode("\n", $chain); + foreach ($lines as $line) { + if ($line == "-----BEGIN CERTIFICATE-----" && $status == 0) { + $status = 1; + $new = $line . "\n"; + continue; + } + if ($line == "-----END CERTIFICATE-----" && $status == 1) { + $status = 0; + $new.=$line . "\n"; + $chains[] = $new; + $new = ""; + continue; + } + if ($status == 1) { + $new.=$line . "\n"; + } + } + // here chains contains all the ssl certificates in the chained certs. + // Now we check those using Openssl functions (real check :) ) + $rchains = array(); + $i = 0; + foreach ($chains as $tmpcert) { + $i++; + $tmpr = openssl_x509_read($tmpcert); + if ($tmpr === false) { + $this->error.=sprintf(_("The %d-th certificate in the chain is invalid"), $i) . "
\n"; + } else { + $rchains[] = $tmpr; + } + } + $rcrt = openssl_x509_read($crt); + $crtdata = openssl_x509_parse($crt); + if ($rcrt === false || $crtdata === false) { + $this->error.=_("The certificate is invalid.") . "
\n"; + } + + $rkey = openssl_pkey_get_private($key); + if ($rkey === false) { + $this->error.=_("The private key is invalid.") . "
\n"; + } + if (!$this->error) { + // check that the private key and the certificates are matching : + if (!openssl_x509_check_private_key($rcrt, $rkey)) { + $this->error.=_("The private key is not the one signed inside the certificate.") . "
\n"; + } + } + if (!$this->error) { + // Everything is fine, let's recreate crt, chain, key from our internal OpenSSL structures: + if (!openssl_x509_export($rcrt, $crt)) { + $this->error.=_("Can't export your certificate as a string, please check its syntax.") . "
\n"; + } + $chain = ""; + foreach ($rchains as $r) { + if (!openssl_x509_export($r, $tmp)) { + $this->error.=_("Can't export one of your chained certificates as a string, please check its syntax.") . "
\n"; + } else { + $chain.=$tmp; + } + } + if (!openssl_pkey_export($rkey, $key)) { + $this->error.=_("Can't export your private key as a string, please check its syntax.") . "
\n"; + } + } + return array($crt, $chain, $key, $crtdata); + } + + // ----------------------------------------------------------------- + /** Generate a self-signed certificate + * + * @param string $fqdn the fully qualified domain name to set as commonName for the certificate + * @return hash an array similar to a certificate DB row containing everything (sslcrt, sslcsr, sslkey, sslchain) + */ + private function selfSigned($fqdn) { + global $err; + putenv("OPENSSL_CONF=/etc/alternc/openssl.cnf"); + $pkey = openssl_pkey_new(); + if (!$pkey) { + $err->raise("ssl", _("Can't generate a private key (1)")); + return false; + } + $privKey = ""; + if (!openssl_pkey_export($pkey, $privKey)) { + $err->raise("ssl", _("Can't generate a private key (2)")); + return false; + } + $dn = array("commonName" => $fqdn); + // override the (not taken from openssl.cnf) digest to use SHA-2 / SHA256 and not SHA-1 or MD5 : + $config = array("digest_alg" => "sha256"); + $csr = openssl_csr_new($dn, $pkey, $config); + $csrout = ""; + openssl_csr_export($csr, $csrout); + $crt = openssl_csr_sign($csr, null, $pkey, 3650, $config); + $crtout = ""; + openssl_x509_export($crt, $crtout); + return array("id" => 0, "status" => 1, "shared" => 0, "fqdn" => $fqdn, "altnames" => "", + "validstart" => date("Y-m-d H:i:s"), "validend" => date("Y-m-d H:i:s", time() + 86400 * 10 * 365.249), + "sslcsr" => $csrout, "sslcrt" => $crtout, "sslkey" => $privKey, "sslchain" => "", + "selfsigned" => true, + ); + } + + + function dummy() { + _("Locally hosted forcing HTTPS"); + _("Locally hosted HTTP and HTTPS"); + _("HTTPS AlternC panel access"); + _("HTTPS Roundcube Webmail"); + _("HTTPS Squirrelmail Webmail"); + _("php52 forcing HTTPS"); + _("php52 HTTP and HTTPS"); + } + +} + +/* Class m_ssl */ diff --git a/ssl/panel/index.php b/ssl/panel/index.php new file mode 100644 index 00000000..7f93307b --- /dev/null +++ b/ssl/panel/index.php @@ -0,0 +1,3 @@ + diff --git a/ssl/panel/locales/Makefile b/ssl/panel/locales/Makefile new file mode 100644 index 00000000..26554b44 --- /dev/null +++ b/ssl/panel/locales/Makefile @@ -0,0 +1,8 @@ +all: ssl.pot */LC_MESSAGES/ssl.po + +ssl.pot: ../*/*.php + [ -r $@ ] || touch $@ + xgettext --copyright-holder="AlternC Team" --package-name="AlternC" --package-version="2.0" --msgid-bugs-address="i18n@alternc.org" --force-po -o $@ --keyword=__ --keyword=_ -L PHP -F --from-code UTF-8 $^ + +%/LC_MESSAGES/ssl.po: ssl.pot + msgmerge -v -U $@ $^ diff --git a/ssl/panel/locales/README b/ssl/panel/locales/README new file mode 100644 index 00000000..ab6f871a --- /dev/null +++ b/ssl/panel/locales/README @@ -0,0 +1,46 @@ +Le systme de langue fonctionne ainsi : + +dans bureau/locales/ on trouve un DOSSIER par langue sous la forme +major_minor/ +exemple : fr_FR en_US ... +dans lequel on a un sous-dossier LC_MESSAGES +dans lequel on a des fichiers .po en vrac (normalement 1 ou 2 fichiers .po par module d'AlternC.) + +Le fichier alternc.mo est donc construit partir de TOUS les fichiers .po d'une mme langue. + +Pour mettre a jour les fichiers .po a partir des sources : + +cd bureau/locales +make + +puis allez voir les fichiers .po pour les mettre a jour (cherchez les fuzzy et les msgstr vide a remplir) + +une fois les modifications effectuees, lancer svn commit pour valider vos modifications dans les sources officielles d'AlternC. + +Howto translate AlternC in a new language +========================================= + +This folder contains po and pot files, who are templates that allows you +to translate AlternC in any language. + +1. How to add a language : +- create a folder with your iso language code (ex: de_DE for + German from Germany see `dpkg-reconfigure locales` for available codes.) +- create a subfolder LC_MESSAGES in this folder +- copy .po and .pot files and rename .pot to .po +- Translate them ;) +- Send them to us so that we can add them to the next release or as a language pack. + +2. How to update language files. + +When the programm is updated, the po files in locales/ are changed to +reflect the new developped features. + +You can just call the makefile to have the files regenerated: + +cd bureau/locales +make + +from "locales/" to update your language po files. New strings will have +an empty "msgstr" value, and obsoletes one will be commented out with +#~ diff --git a/ssl/panel/locales/de_DE/LC_MESSAGES/ssl.po b/ssl/panel/locales/de_DE/LC_MESSAGES/ssl.po new file mode 100644 index 00000000..752773d7 --- /dev/null +++ b/ssl/panel/locales/de_DE/LC_MESSAGES/ssl.po @@ -0,0 +1,833 @@ +# translation of alternc.po to Espagnol +# This file is distributed under the same license as the PACKAGE package. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. +# Bruno Marmier , 2004. +# +msgid "" +msgstr "" +"Project-Id-Version: alternc\n" +"Report-Msgid-Bugs-To: i18n@alternc.org\n" +"POT-Creation-Date: 2015-02-13 18:04+0100\n" +"PO-Revision-Date: 2004-02-14 19:53-0400\n" +"Last-Translator: Bruno Marmier \n" +"Language-Team: Espagnol \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.0.2\n" + +#: ../admin/ssl_delete.php:43 +msgid "Your SSL Certificate has been deleted" +msgstr "" + +#: ../admin/ssl_doimport.php:39 +msgid "Please enter an ssl key and a certificate" +msgstr "" + +#: ../admin/ssl_donew.php:38 +msgid "Please enter a proper domain name" +msgstr "" + +#: ../admin/ssl_finalize.php:49 +msgid "Your ssl certificate has been imported successfully" +msgstr "" + +#: ../admin/ssl_list.php:51 ../admin/ssl_view.php:50 +msgid "Pending Certificate" +msgstr "" + +#: ../admin/ssl_list.php:52 +msgid "Valid" +msgstr "" + +#: ../admin/ssl_list.php:53 +msgid "Expired" +msgstr "" + +#: ../admin/ssl_list.php:59 +msgid "" +"Some of your hosting are using a self-signed certificate.
Your " +"browser will not let you surf those domains properly
To fix this, buy a " +"properly signed certificate" +msgstr "" + +#: ../admin/ssl_list.php:71 +msgid "Your Certificates" +msgstr "" + +#: ../admin/ssl_list.php:73 +msgid "" +"Please find below your SSL Certificates. Some may be provided by the " +"administrator of the server, some may be Expired or Pending (waiting for a " +"CRT from your Certificate Provider)" +msgstr "" + +#: ../admin/ssl_list.php:75 +msgid "Only show the following certificates:" +msgstr "" + +#: ../admin/ssl_list.php:76 +msgid "Pending Certificates" +msgstr "" + +#: ../admin/ssl_list.php:77 +msgid "Valid Certificates" +msgstr "" + +#: ../admin/ssl_list.php:78 +msgid "Expired Certificates" +msgstr "" + +#: ../admin/ssl_list.php:80 +msgid "Certificates Shared by the Administrator" +msgstr "" + +#: ../admin/ssl_list.php:82 +msgid "Filter" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Domain Name" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Status" +msgstr "" + +#: ../admin/ssl_list.php:85 +#, fuzzy +msgid "Used by" +msgstr "Benützt" + +#: ../admin/ssl_list.php:85 +msgid "Validity period" +msgstr "" + +#: ../admin/ssl_list.php:91 +msgid "Details" +msgstr "" + +#: ../admin/ssl_list.php:97 +msgid "(shared)" +msgstr "" + +#: ../admin/ssl_list.php:102 ../admin/ssl_list.php:106 +#: ../admin/ssl_list.php:112 ../admin/ssl_view.php:65 +#: ../admin/ssl_view.php:119 ../admin/ssl_view.php:133 +#, php-format +msgid "%3$d-%2$d-%1$d %4$d:%5$d" +msgstr "" + +#: ../admin/ssl_list.php:111 +msgid "Requested on: " +msgstr "" + +#: ../admin/ssl_list.php:129 +#, fuzzy +msgid "Create one" +msgstr "Miglied '%s' existiert nicht" + +#: ../admin/ssl_list.php:130 +msgid "" +"This hosting has no valid certificate
a self-signed one has been created" +msgstr "" + +#: ../admin/ssl_list.php:140 +msgid "Create or Import a new SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:42 +msgid "New SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:50 +msgid "" +"An SSL certificate is a file which must be obtained from a Certificate " +"Authority, and allow you to enable HTTPS encryption on a domain name." +msgstr "" + +#: ../admin/ssl_new.php:53 +msgid "" +"To obtain one, you need to generate a Certificate Request (CSR) and a " +"RSA Key (KEY) here, then give the CSR to the Certificate Authority, " +"which will give you a certificate (CRT) and also often a chained certificate " +"(CHAIN)." +msgstr "" + +#: ../admin/ssl_new.php:56 +msgid "" +"If you already know what it is and already have all those files (CRT/KEY/" +"CHAIN) You can import them here too." +msgstr "" + +#: ../admin/ssl_new.php:64 +msgid "Create a CSR/KEY" +msgstr "" + +#: ../admin/ssl_new.php:65 +msgid "Import existing files" +msgstr "" + +#: ../admin/ssl_new.php:69 +msgid "Create a CSR/KEY for a given domain name" +msgstr "" + +#: ../admin/ssl_new.php:71 +msgid "" +"Use this form to generate a Certificate Request file (CSR) and a " +"RSA Key file (KEY) for a given domain name" +msgstr "" + +#: ../admin/ssl_new.php:98 +msgid "" +"Please choose the domain name for which you want a SSL Certificate, or enter " +"it manually" +msgstr "" + +#: ../admin/ssl_new.php:101 ../admin/ssl_view.php:60 +msgid "Fully Qualified Domain Name" +msgstr "" + +#: ../admin/ssl_new.php:104 +msgid "--- Choose here ---" +msgstr "" + +#: ../admin/ssl_new.php:110 +msgid "... or click here to enter it manually" +msgstr "" + +#: ../admin/ssl_new.php:117 ../admin/ssl_new.php:151 ../admin/ssl_view.php:82 +msgid "Save" +msgstr "Speichern" + +#: ../admin/ssl_new.php:118 ../admin/ssl_new.php:152 ../admin/ssl_view.php:83 +msgid "Cancel" +msgstr "" + +#: ../admin/ssl_new.php:123 +msgid "" +"(If you want to get a valid certificate for all the subdomains of a " +"domain, use a wildcard notation (eg: *.example.com). Please note that a " +"wildcard certificate is usually more expensive than normal one.)" +msgstr "" + +#: ../admin/ssl_new.php:123 +msgid "" +"Please note that a SSL Certificate is only valid for one fully qualified " +"domain name. As a result, a certificate for www.example.com is " +"NOT valid for intranet.example.com or intranet.www." +"example.com !" +msgstr "" + +#: ../admin/ssl_new.php:130 +msgid "Import existing Key Certificate and Chain files" +msgstr "" + +#: ../admin/ssl_new.php:132 +msgid "" +"If you already have a RSA Key file, a Certificate for this key and (maybe) a " +"Chained certificate, please paste their content here." +msgstr "" + +#: ../admin/ssl_new.php:133 +msgid "" +"We will verify the content of those files and add them in your certificate " +"repository" +msgstr "" + +#: ../admin/ssl_new.php:138 +msgid "RSA Key" +msgstr "" + +#: ../admin/ssl_new.php:142 ../admin/ssl_view.php:73 ../admin/ssl_view.php:159 +msgid "SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:146 ../admin/ssl_view.php:77 ../admin/ssl_view.php:164 +msgid "Chained Certificate
(not mandatory)" +msgstr "" + +#: ../admin/ssl_share.php:30 +msgid "This page is restricted to authorized staff" +msgstr "" + +#: ../admin/ssl_view.php:52 +msgid "" +"Your Certificate Request File (CSR) has been created, along with its " +"private RSA Key (KEY). Please find below the CSR you must send to " +"your SSL Certificate provider." +msgstr "" + +#: ../admin/ssl_view.php:54 +msgid "" +"Once you'll have your Certificate File (CRT) and a Chained " +"Certificate File (CHAIN), please paste them here to finish the " +"enrollment." +msgstr "" + +#: ../admin/ssl_view.php:64 +msgid "Date of the request" +msgstr "" + +#: ../admin/ssl_view.php:68 ../admin/ssl_view.php:154 +msgid "Certificate Request File" +msgstr "" + +#: ../admin/ssl_view.php:85 ../admin/ssl_view.php:213 +msgid "Delete" +msgstr "" + +#: ../admin/ssl_view.php:86 +msgid "" +"Please confirm that you want to delete this certificate request AND ITS " +"PRIVATE KEY!" +msgstr "" + +#: ../admin/ssl_view.php:97 +msgid "Valid Certificate" +msgstr "" + +#: ../admin/ssl_view.php:98 +msgid "Please find below your valid certificate data." +msgstr "" + +#: ../admin/ssl_view.php:104 +msgid "EXPIRED Certificate" +msgstr "" + +#: ../admin/ssl_view.php:105 +msgid "" +"Your certificate is EXPIRED. You should not use it for any purpose. Please " +"find below its data." +msgstr "" + +#: ../admin/ssl_view.php:113 +msgid "Back to my SSL Certificates" +msgstr "" + +#: ../admin/ssl_view.php:117 +msgid "Valid From:" +msgstr "" + +#: ../admin/ssl_view.php:123 +#, php-format +msgid "(%d days ago)" +msgstr "" + +#: ../admin/ssl_view.php:126 +#, php-format +msgid "(%d month ago)" +msgstr "" + +#: ../admin/ssl_view.php:131 +msgid "Valid Until:" +msgstr "" + +#: ../admin/ssl_view.php:137 +#, php-format +msgid "(%d days from now)" +msgstr "" + +#: ../admin/ssl_view.php:140 +#, php-format +msgid "(%d month from now)" +msgstr "" + +#: ../admin/ssl_view.php:145 +msgid "FQDN:" +msgstr "" + +#: ../admin/ssl_view.php:149 +msgid "Other Valid FQDN:" +msgstr "" + +#: ../admin/ssl_view.php:173 +msgid "" +"As an administrator you can allow any account on this server to use this " +"certificate to host his services.
(This is only useful for wildcard or " +"multi-domain certificates)." +msgstr "" + +#: ../admin/ssl_view.php:177 +msgid "This certificate is currently shared" +msgstr "" + +#: ../admin/ssl_view.php:184 +msgid "Click here to stop sharing this certificate" +msgstr "" + +#: ../admin/ssl_view.php:189 ../admin/ssl_view.php:205 +msgid "" +"You are not the owner of this certificate, only its owner can share/unshare " +"this certificate." +msgstr "" + +#: ../admin/ssl_view.php:193 +msgid "This certificate is currently NOT shared" +msgstr "" + +#: ../admin/ssl_view.php:200 +msgid "Click here to share this certificate" +msgstr "" + +#: ../admin/ssl_view.php:214 +msgid "" +"Please confirm that you want to delete this certificate AND ITS PRIVATE KEY!" +msgstr "" + +#: ../class/m_ssl.php:69 ../class/m_ssl.php:418 +msgid "SSL Certificates" +msgstr "" + +#: ../class/m_ssl.php:79 +msgid "New SSL certificate" +msgstr "" + +#: ../class/m_ssl.php:93 +msgid "List SSL Certificates" +msgstr "" + +#: ../class/m_ssl.php:152 +msgid "No SSL certificates available" +msgstr "" + +#: ../class/m_ssl.php:175 +msgid "You currently have no hosting using SSL certificate" +msgstr "" + +#: ../class/m_ssl.php:196 +msgid "Bad FQDN domain name" +msgstr "" + +#: ../class/m_ssl.php:202 ../class/m_ssl.php:774 +msgid "Can't generate a private key (1)" +msgstr "" + +#: ../class/m_ssl.php:207 ../class/m_ssl.php:779 +msgid "Can't generate a private key (2)" +msgstr "" + +#: ../class/m_ssl.php:218 +msgid "Can't generate a CSR" +msgstr "" + +#: ../class/m_ssl.php:234 ../class/m_ssl.php:250 ../class/m_ssl.php:273 +msgid "Can't find this Certificate" +msgstr "" + +#: ../class/m_ssl.php:353 +msgid "Can't save the Key/Crt/Chain now. Please try later." +msgstr "" + +#: ../class/m_ssl.php:390 +msgid "Can't save the Crt/Chain now. Please try later." +msgstr "" + +#: ../class/m_ssl.php:618 +#, fuzzy +msgid "Alias already exists" +msgstr "Miglied '%s' existiert nicht" + +#: ../class/m_ssl.php:637 +#, fuzzy +msgid "Alias not found" +msgstr "Miglied '%s' existiert nicht" + +#: ../class/m_ssl.php:666 +msgid "" +"Can't find the private key in the certificate table, please check your form." +msgstr "" + +#: ../class/m_ssl.php:675 +msgid "" +"The certificate must begin by BEGIN CERTIFICATE and end by END CERTIFICATE " +"lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:680 +msgid "" +"The chained certificate must begin by BEGIN CERTIFICATE and end by END " +"CERTIFICATE lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:686 +msgid "" +"The private key must begin by BEGIN (RSA )PRIVATE KEY and end by END (RSA )" +"PRIVATE KEY lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:722 +#, php-format +msgid "The %d-th certificate in the chain is invalid" +msgstr "" + +#: ../class/m_ssl.php:730 +msgid "The certificate is invalid." +msgstr "" + +#: ../class/m_ssl.php:735 +msgid "The private key is invalid." +msgstr "" + +#: ../class/m_ssl.php:740 +msgid "The private key is not the one signed inside the certificate." +msgstr "" + +#: ../class/m_ssl.php:746 +msgid "Can't export your certificate as a string, please check its syntax." +msgstr "" + +#: ../class/m_ssl.php:751 +msgid "" +"Can't export one of your chained certificates as a string, please check its " +"syntax." +msgstr "" + +#: ../class/m_ssl.php:757 +msgid "Can't export your private key as a string, please check its syntax." +msgstr "" + +#: ../class/m_ssl.php:800 +msgid "Locally hosted forcing HTTPS" +msgstr "" + +#: ../class/m_ssl.php:801 +msgid "Locally hosted HTTP and HTTPS" +msgstr "" + +#: ../class/m_ssl.php:802 +msgid "HTTPS AlternC panel access" +msgstr "" + +#: ../class/m_ssl.php:803 +msgid "HTTPS Roundcube Webmail" +msgstr "" + +#: ../class/m_ssl.php:804 +msgid "HTTPS Squirrelmail Webmail" +msgstr "" + +#: ../class/m_ssl.php:805 +msgid "php52 forcing HTTPS" +msgstr "" + +#: ../class/m_ssl.php:806 +msgid "php52 HTTP and HTTPS" +msgstr "" + +#, fuzzy +#~ msgid "Old Password:" +#~ msgstr "Passwört" + +#, fuzzy +#~ msgid "New Password:" +#~ msgstr "Passwört" + +#, fuzzy +#~ msgid "Change Password" +#~ msgstr "Passwört" + +#, fuzzy +#~ msgid "Help: " +#~ msgstr "Hilfe" + +#~ msgid "No" +#~ msgstr "Nein" + +#~ msgid "Yes" +#~ msgstr "Ja" + +#, fuzzy +#~ msgid "Notes" +#~ msgstr "Bytes" + +#~ msgid "First Name" +#~ msgstr "Vorname" + +#~ msgid "Surname" +#~ msgstr "Name" + +#, fuzzy +#~ msgid "Name" +#~ msgstr "Neuer Mitglied" + +#, fuzzy +#~ msgid "Users" +#~ msgstr "Benützt" + +#, fuzzy +#~ msgid "User does not exist" +#~ msgstr "Miglied '%s' existiert nicht" + +#~ msgid "Quotas" +#~ msgstr "Quotas" + +#~ msgid "Member '%s' does not exist" +#~ msgstr "Miglied '%s' existiert nicht" + +#~ msgid "Password" +#~ msgstr "Passwört" + +#, fuzzy +#~ msgid "Password change allowed?" +#~ msgstr "Passwört" + +#, fuzzy +#~ msgid "Password Policies" +#~ msgstr "Passwört" + +#, fuzzy +#~ msgid "Password Kind" +#~ msgstr "Passwört" + +#, fuzzy +#~ msgid "Password Policy" +#~ msgstr "Passwört" + +#, fuzzy +#~ msgid "failed" +#~ msgstr "Datei" + +#~ msgid "File browser" +#~ msgstr "Dateimanager" + +#~ msgid "File" +#~ msgstr "Datei" + +#, fuzzy +#~ msgid "Filename" +#~ msgstr "Datei" + +#, fuzzy +#~ msgid "File Type" +#~ msgstr "Datei" + +#, fuzzy +#~ msgid "The domain field seems to be empty" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "Enter the domain name you want to import" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "Password do not match" +#~ msgstr "Passwört" + +#, fuzzy +#~ msgid "Server:" +#~ msgstr "Datei" + +#, fuzzy +#~ msgid "User/password:" +#~ msgstr "Passwört" + +#, fuzzy +#~ msgid "Enter a POP/IMAP password" +#~ msgstr "Passwört" + +#, fuzzy +#~ msgid "Server name: " +#~ msgstr "Datei" + +#, fuzzy +#~ msgid "Normal password" +#~ msgstr "Passwört" + +#, fuzzy +#~ msgid "Normal Password" +#~ msgstr "Passwört" + +#~ msgid "Help" +#~ msgstr "Hilfe" + +#, fuzzy +#~ msgid "Site name" +#~ msgstr "Datei" + +#, fuzzy +#~ msgid "This right does not exist" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "quota_web" +#~ msgstr "quota_" + +#, fuzzy +#~ msgid "Quotas status" +#~ msgstr "Quotas" + +#~ msgid "Bytes" +#~ msgstr "Bytes" + +#~ msgid "Byte" +#~ msgstr "Byte" + +#~ msgid "Kb" +#~ msgstr "Kb" + +#~ msgid "Mb" +#~ msgstr "Mb" + +#~ msgid "Gb" +#~ msgstr "Gb" + +#~ msgid "Tb" +#~ msgstr "Tb" + +#, fuzzy +#~ msgid "years" +#~ msgstr "Bytes" + +#, fuzzy +#~ msgid "User Quotas" +#~ msgstr "Quotas" + +#, fuzzy +#~ msgid "This TLD does not exist" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "This directory do not exist" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "The domain already exist" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "The sub-domain does not exist" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "The folder you entered is incorrect or does not exist" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "The name you entered is incorrect" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "The TXT value you entered is incorrect" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "The domain name %s does not exist" +#~ msgstr "Miglied '%s' existiert nicht" + +#~ msgid "err_" +#~ msgstr "err_" + +#, fuzzy +#~ msgid "This account do not exist or is not of this account" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "No FTP account found" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "This FTP account does not exist" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "FTP login is incorrect" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "This FTP account already exists" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "Password can't be empty" +#~ msgstr "Passwört" + +#, fuzzy +#~ msgid "The folder '%s' does not exist" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "This email address already exists" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "The slave MX account was not found" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "Missing password" +#~ msgstr "Passwört" + +#, fuzzy +#~ msgid "Directory does not exist" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "The password is mandatory" +#~ msgstr "Passwört" + +#, fuzzy +#~ msgid "Database user not found" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "The database user already exists" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "The passwords do not match" +#~ msgstr "Passwört" + +#, fuzzy +#~ msgid "The username was not found" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "Piwik Users" +#~ msgstr "Benützt" + +#~ msgid "quota_" +#~ msgstr "quota_" + +#, fuzzy +#~ msgid "The database user was not found" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "Password does not match" +#~ msgstr "Miglied '%s' existiert nicht" + +#, fuzzy +#~ msgid "Password match" +#~ msgstr "Passwört" + +#~ msgid "New member" +#~ msgstr "Neuer Mitglied" + +#~ msgid "Member" +#~ msgstr "Mitglied" + +#~ msgid "mode" +#~ msgstr "mode" + +#, fuzzy +#~ msgid "You can use a different language: " +#~ msgstr "Für eine andere Sprache, click über die Fahne" + +#, fuzzy +#~ msgid "Front page" +#~ msgstr "Vorname" + +#~ msgid "_" +#~ msgstr "_" + +#, fuzzy +#~ msgid "New Name:" +#~ msgstr "Neuer Mitglied" + +#~ msgid "If you want to use a different language, click on the flag below" +#~ msgstr "Für eine andere Sprache, click über die Fahne" + +#~ msgid "lang" +#~ msgstr "lang" diff --git a/ssl/panel/locales/en_GB b/ssl/panel/locales/en_GB new file mode 120000 index 00000000..75882c4f --- /dev/null +++ b/ssl/panel/locales/en_GB @@ -0,0 +1 @@ +/en_US \ No newline at end of file diff --git a/ssl/panel/locales/en_US/LC_MESSAGES/ssl.po b/ssl/panel/locales/en_US/LC_MESSAGES/ssl.po new file mode 100644 index 00000000..368a0c5f --- /dev/null +++ b/ssl/panel/locales/en_US/LC_MESSAGES/ssl.po @@ -0,0 +1,513 @@ +# English AlternC Translation +# Copyright (c) 2008 the AlternC Development Team +# +# $Id: admin.po,v 1.10 2004/11/01 15:55:44 anonymous Exp $ +msgid "" +msgstr "" +"Project-Id-Version: $Id: admin.po,v 1.10 2004/11/01 15:55:44 anonymous Exp " +"$\n" +"Report-Msgid-Bugs-To: i18n@alternc.org\n" +"POT-Creation-Date: 2015-02-13 18:04+0100\n" +"PO-Revision-Date: 2002-06-16 13:50CEST\n" +"Last-Translator: Benjamin Sonntag \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Emacs 21\n" + +#: ../admin/ssl_delete.php:43 +msgid "Your SSL Certificate has been deleted" +msgstr "" + +#: ../admin/ssl_doimport.php:39 +msgid "Please enter an ssl key and a certificate" +msgstr "" + +#: ../admin/ssl_donew.php:38 +msgid "Please enter a proper domain name" +msgstr "" + +#: ../admin/ssl_finalize.php:49 +msgid "Your ssl certificate has been imported successfully" +msgstr "" + +#: ../admin/ssl_list.php:51 ../admin/ssl_view.php:50 +msgid "Pending Certificate" +msgstr "" + +#: ../admin/ssl_list.php:52 +msgid "Valid" +msgstr "" + +#: ../admin/ssl_list.php:53 +msgid "Expired" +msgstr "" + +#: ../admin/ssl_list.php:59 +msgid "" +"Some of your hosting are using a self-signed certificate.
Your " +"browser will not let you surf those domains properly
To fix this, buy a " +"properly signed certificate" +msgstr "" + +#: ../admin/ssl_list.php:71 +msgid "Your Certificates" +msgstr "" + +#: ../admin/ssl_list.php:73 +msgid "" +"Please find below your SSL Certificates. Some may be provided by the " +"administrator of the server, some may be Expired or Pending (waiting for a " +"CRT from your Certificate Provider)" +msgstr "" + +#: ../admin/ssl_list.php:75 +msgid "Only show the following certificates:" +msgstr "" + +#: ../admin/ssl_list.php:76 +msgid "Pending Certificates" +msgstr "" + +#: ../admin/ssl_list.php:77 +msgid "Valid Certificates" +msgstr "" + +#: ../admin/ssl_list.php:78 +msgid "Expired Certificates" +msgstr "" + +#: ../admin/ssl_list.php:80 +msgid "Certificates Shared by the Administrator" +msgstr "" + +#: ../admin/ssl_list.php:82 +msgid "Filter" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Domain Name" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Status" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Used by" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Validity period" +msgstr "" + +#: ../admin/ssl_list.php:91 +msgid "Details" +msgstr "" + +#: ../admin/ssl_list.php:97 +msgid "(shared)" +msgstr "" + +#: ../admin/ssl_list.php:102 ../admin/ssl_list.php:106 +#: ../admin/ssl_list.php:112 ../admin/ssl_view.php:65 +#: ../admin/ssl_view.php:119 ../admin/ssl_view.php:133 +#, php-format +msgid "%3$d-%2$d-%1$d %4$d:%5$d" +msgstr "" + +#: ../admin/ssl_list.php:111 +msgid "Requested on: " +msgstr "" + +#: ../admin/ssl_list.php:129 +msgid "Create one" +msgstr "" + +#: ../admin/ssl_list.php:130 +msgid "" +"This hosting has no valid certificate
a self-signed one has been created" +msgstr "" + +#: ../admin/ssl_list.php:140 +msgid "Create or Import a new SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:42 +msgid "New SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:50 +msgid "" +"An SSL certificate is a file which must be obtained from a Certificate " +"Authority, and allow you to enable HTTPS encryption on a domain name." +msgstr "" + +#: ../admin/ssl_new.php:53 +msgid "" +"To obtain one, you need to generate a Certificate Request (CSR) and a " +"RSA Key (KEY) here, then give the CSR to the Certificate Authority, " +"which will give you a certificate (CRT) and also often a chained certificate " +"(CHAIN)." +msgstr "" + +#: ../admin/ssl_new.php:56 +msgid "" +"If you already know what it is and already have all those files (CRT/KEY/" +"CHAIN) You can import them here too." +msgstr "" + +#: ../admin/ssl_new.php:64 +msgid "Create a CSR/KEY" +msgstr "" + +#: ../admin/ssl_new.php:65 +msgid "Import existing files" +msgstr "" + +#: ../admin/ssl_new.php:69 +msgid "Create a CSR/KEY for a given domain name" +msgstr "" + +#: ../admin/ssl_new.php:71 +msgid "" +"Use this form to generate a Certificate Request file (CSR) and a " +"RSA Key file (KEY) for a given domain name" +msgstr "" + +#: ../admin/ssl_new.php:98 +msgid "" +"Please choose the domain name for which you want a SSL Certificate, or enter " +"it manually" +msgstr "" + +#: ../admin/ssl_new.php:101 ../admin/ssl_view.php:60 +msgid "Fully Qualified Domain Name" +msgstr "" + +#: ../admin/ssl_new.php:104 +msgid "--- Choose here ---" +msgstr "" + +#: ../admin/ssl_new.php:110 +msgid "... or click here to enter it manually" +msgstr "" + +#: ../admin/ssl_new.php:117 ../admin/ssl_new.php:151 ../admin/ssl_view.php:82 +msgid "Save" +msgstr "" + +#: ../admin/ssl_new.php:118 ../admin/ssl_new.php:152 ../admin/ssl_view.php:83 +msgid "Cancel" +msgstr "" + +#: ../admin/ssl_new.php:123 +msgid "" +"(If you want to get a valid certificate for all the subdomains of a " +"domain, use a wildcard notation (eg: *.example.com). Please note that a " +"wildcard certificate is usually more expensive than normal one.)" +msgstr "" + +#: ../admin/ssl_new.php:123 +msgid "" +"Please note that a SSL Certificate is only valid for one fully qualified " +"domain name. As a result, a certificate for www.example.com is " +"NOT valid for intranet.example.com or intranet.www." +"example.com !" +msgstr "" + +#: ../admin/ssl_new.php:130 +msgid "Import existing Key Certificate and Chain files" +msgstr "" + +#: ../admin/ssl_new.php:132 +msgid "" +"If you already have a RSA Key file, a Certificate for this key and (maybe) a " +"Chained certificate, please paste their content here." +msgstr "" + +#: ../admin/ssl_new.php:133 +msgid "" +"We will verify the content of those files and add them in your certificate " +"repository" +msgstr "" + +#: ../admin/ssl_new.php:138 +msgid "RSA Key" +msgstr "" + +#: ../admin/ssl_new.php:142 ../admin/ssl_view.php:73 ../admin/ssl_view.php:159 +msgid "SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:146 ../admin/ssl_view.php:77 ../admin/ssl_view.php:164 +msgid "Chained Certificate
(not mandatory)" +msgstr "" + +#: ../admin/ssl_share.php:30 +msgid "This page is restricted to authorized staff" +msgstr "" + +#: ../admin/ssl_view.php:52 +msgid "" +"Your Certificate Request File (CSR) has been created, along with its " +"private RSA Key (KEY). Please find below the CSR you must send to " +"your SSL Certificate provider." +msgstr "" + +#: ../admin/ssl_view.php:54 +msgid "" +"Once you'll have your Certificate File (CRT) and a Chained " +"Certificate File (CHAIN), please paste them here to finish the " +"enrollment." +msgstr "" + +#: ../admin/ssl_view.php:64 +msgid "Date of the request" +msgstr "" + +#: ../admin/ssl_view.php:68 ../admin/ssl_view.php:154 +msgid "Certificate Request File" +msgstr "" + +#: ../admin/ssl_view.php:85 ../admin/ssl_view.php:213 +msgid "Delete" +msgstr "" + +#: ../admin/ssl_view.php:86 +msgid "" +"Please confirm that you want to delete this certificate request AND ITS " +"PRIVATE KEY!" +msgstr "" + +#: ../admin/ssl_view.php:97 +msgid "Valid Certificate" +msgstr "" + +#: ../admin/ssl_view.php:98 +msgid "Please find below your valid certificate data." +msgstr "" + +#: ../admin/ssl_view.php:104 +msgid "EXPIRED Certificate" +msgstr "" + +#: ../admin/ssl_view.php:105 +msgid "" +"Your certificate is EXPIRED. You should not use it for any purpose. Please " +"find below its data." +msgstr "" + +#: ../admin/ssl_view.php:113 +msgid "Back to my SSL Certificates" +msgstr "" + +#: ../admin/ssl_view.php:117 +msgid "Valid From:" +msgstr "" + +#: ../admin/ssl_view.php:123 +#, php-format +msgid "(%d days ago)" +msgstr "" + +#: ../admin/ssl_view.php:126 +#, php-format +msgid "(%d month ago)" +msgstr "" + +#: ../admin/ssl_view.php:131 +msgid "Valid Until:" +msgstr "" + +#: ../admin/ssl_view.php:137 +#, php-format +msgid "(%d days from now)" +msgstr "" + +#: ../admin/ssl_view.php:140 +#, php-format +msgid "(%d month from now)" +msgstr "" + +#: ../admin/ssl_view.php:145 +msgid "FQDN:" +msgstr "" + +#: ../admin/ssl_view.php:149 +msgid "Other Valid FQDN:" +msgstr "" + +#: ../admin/ssl_view.php:173 +msgid "" +"As an administrator you can allow any account on this server to use this " +"certificate to host his services.
(This is only useful for wildcard or " +"multi-domain certificates)." +msgstr "" + +#: ../admin/ssl_view.php:177 +msgid "This certificate is currently shared" +msgstr "" + +#: ../admin/ssl_view.php:184 +msgid "Click here to stop sharing this certificate" +msgstr "" + +#: ../admin/ssl_view.php:189 ../admin/ssl_view.php:205 +msgid "" +"You are not the owner of this certificate, only its owner can share/unshare " +"this certificate." +msgstr "" + +#: ../admin/ssl_view.php:193 +msgid "This certificate is currently NOT shared" +msgstr "" + +#: ../admin/ssl_view.php:200 +msgid "Click here to share this certificate" +msgstr "" + +#: ../admin/ssl_view.php:214 +msgid "" +"Please confirm that you want to delete this certificate AND ITS PRIVATE KEY!" +msgstr "" + +#: ../class/m_ssl.php:69 ../class/m_ssl.php:418 +msgid "SSL Certificates" +msgstr "" + +#: ../class/m_ssl.php:79 +msgid "New SSL certificate" +msgstr "" + +#: ../class/m_ssl.php:93 +msgid "List SSL Certificates" +msgstr "" + +#: ../class/m_ssl.php:152 +msgid "No SSL certificates available" +msgstr "" + +#: ../class/m_ssl.php:175 +msgid "You currently have no hosting using SSL certificate" +msgstr "" + +#: ../class/m_ssl.php:196 +msgid "Bad FQDN domain name" +msgstr "" + +#: ../class/m_ssl.php:202 ../class/m_ssl.php:774 +msgid "Can't generate a private key (1)" +msgstr "" + +#: ../class/m_ssl.php:207 ../class/m_ssl.php:779 +msgid "Can't generate a private key (2)" +msgstr "" + +#: ../class/m_ssl.php:218 +msgid "Can't generate a CSR" +msgstr "" + +#: ../class/m_ssl.php:234 ../class/m_ssl.php:250 ../class/m_ssl.php:273 +msgid "Can't find this Certificate" +msgstr "" + +#: ../class/m_ssl.php:353 +msgid "Can't save the Key/Crt/Chain now. Please try later." +msgstr "" + +#: ../class/m_ssl.php:390 +msgid "Can't save the Crt/Chain now. Please try later." +msgstr "" + +#: ../class/m_ssl.php:618 +msgid "Alias already exists" +msgstr "" + +#: ../class/m_ssl.php:637 +msgid "Alias not found" +msgstr "" + +#: ../class/m_ssl.php:666 +msgid "" +"Can't find the private key in the certificate table, please check your form." +msgstr "" + +#: ../class/m_ssl.php:675 +msgid "" +"The certificate must begin by BEGIN CERTIFICATE and end by END CERTIFICATE " +"lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:680 +msgid "" +"The chained certificate must begin by BEGIN CERTIFICATE and end by END " +"CERTIFICATE lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:686 +msgid "" +"The private key must begin by BEGIN (RSA )PRIVATE KEY and end by END (RSA )" +"PRIVATE KEY lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:722 +#, php-format +msgid "The %d-th certificate in the chain is invalid" +msgstr "" + +#: ../class/m_ssl.php:730 +msgid "The certificate is invalid." +msgstr "" + +#: ../class/m_ssl.php:735 +msgid "The private key is invalid." +msgstr "" + +#: ../class/m_ssl.php:740 +msgid "The private key is not the one signed inside the certificate." +msgstr "" + +#: ../class/m_ssl.php:746 +msgid "Can't export your certificate as a string, please check its syntax." +msgstr "" + +#: ../class/m_ssl.php:751 +msgid "" +"Can't export one of your chained certificates as a string, please check its " +"syntax." +msgstr "" + +#: ../class/m_ssl.php:757 +msgid "Can't export your private key as a string, please check its syntax." +msgstr "" + +#: ../class/m_ssl.php:800 +msgid "Locally hosted forcing HTTPS" +msgstr "" + +#: ../class/m_ssl.php:801 +msgid "Locally hosted HTTP and HTTPS" +msgstr "" + +#: ../class/m_ssl.php:802 +msgid "HTTPS AlternC panel access" +msgstr "" + +#: ../class/m_ssl.php:803 +msgid "HTTPS Roundcube Webmail" +msgstr "" + +#: ../class/m_ssl.php:804 +msgid "HTTPS Squirrelmail Webmail" +msgstr "" + +#: ../class/m_ssl.php:805 +msgid "php52 forcing HTTPS" +msgstr "" + +#: ../class/m_ssl.php:806 +msgid "php52 HTTP and HTTPS" +msgstr "" diff --git a/ssl/panel/locales/es_ES/LC_MESSAGES/ssl.po b/ssl/panel/locales/es_ES/LC_MESSAGES/ssl.po new file mode 100644 index 00000000..99049dc0 --- /dev/null +++ b/ssl/panel/locales/es_ES/LC_MESSAGES/ssl.po @@ -0,0 +1,3571 @@ +# translation of messages.po to +# translation of admin2.po to +# Spanish AlternC Translation +# Copyright (c) 2002 the AlternC Development Team +# +# +# Bruno Marmier , 2003, 2004. +# Daniel Viñar Ulriksen , 2008. +msgid "" +msgstr "" +"Project-Id-Version: messages\n" +"Report-Msgid-Bugs-To: i18n@alternc.org\n" +"POT-Creation-Date: 2015-02-13 18:04+0100\n" +"PO-Revision-Date: 2008-09-05 16:50+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#: ../admin/ssl_delete.php:43 +#, fuzzy +msgid "Your SSL Certificate has been deleted" +msgstr "Los parámetros de ayuda han sido modificados." + +#: ../admin/ssl_doimport.php:39 +#, fuzzy +msgid "Please enter an ssl key and a certificate" +msgstr "Por favor, entra una contraseña" + +#: ../admin/ssl_donew.php:38 +#, fuzzy +msgid "Please enter a proper domain name" +msgstr "Por favor, entra una contraseña" + +#: ../admin/ssl_finalize.php:49 +#, fuzzy +msgid "Your ssl certificate has been imported successfully" +msgstr "Tu nuevo dominio %s fue instalado con éxito" + +#: ../admin/ssl_list.php:51 ../admin/ssl_view.php:50 +msgid "Pending Certificate" +msgstr "" + +#: ../admin/ssl_list.php:52 +msgid "Valid" +msgstr "" + +#: ../admin/ssl_list.php:53 +#, fuzzy +msgid "Expired" +msgstr "Expiración" + +#: ../admin/ssl_list.php:59 +msgid "" +"Some of your hosting are using a self-signed certificate.
Your " +"browser will not let you surf those domains properly
To fix this, buy a " +"properly signed certificate" +msgstr "" + +#: ../admin/ssl_list.php:71 +msgid "Your Certificates" +msgstr "" + +#: ../admin/ssl_list.php:73 +msgid "" +"Please find below your SSL Certificates. Some may be provided by the " +"administrator of the server, some may be Expired or Pending (waiting for a " +"CRT from your Certificate Provider)" +msgstr "" + +#: ../admin/ssl_list.php:75 +msgid "Only show the following certificates:" +msgstr "" + +#: ../admin/ssl_list.php:76 +msgid "Pending Certificates" +msgstr "" + +#: ../admin/ssl_list.php:77 +msgid "Valid Certificates" +msgstr "" + +#: ../admin/ssl_list.php:78 +msgid "Expired Certificates" +msgstr "" + +#: ../admin/ssl_list.php:80 +msgid "Certificates Shared by the Administrator" +msgstr "" + +#: ../admin/ssl_list.php:82 +#, fuzzy +msgid "Filter" +msgstr "Lista de cuentas FTP" + +#: ../admin/ssl_list.php:85 +#, fuzzy +msgid "Domain Name" +msgstr "Nombre de dominio" + +#: ../admin/ssl_list.php:85 +msgid "Status" +msgstr "" + +#: ../admin/ssl_list.php:85 +#, fuzzy +msgid "Used by" +msgstr "Usado" + +#: ../admin/ssl_list.php:85 +msgid "Validity period" +msgstr "" + +#: ../admin/ssl_list.php:91 +#, fuzzy +msgid "Details" +msgstr "Buzones de correo" + +#: ../admin/ssl_list.php:97 +msgid "(shared)" +msgstr "" + +#: ../admin/ssl_list.php:102 ../admin/ssl_list.php:106 +#: ../admin/ssl_list.php:112 ../admin/ssl_view.php:65 +#: ../admin/ssl_view.php:119 ../admin/ssl_view.php:133 +#, php-format +msgid "%3$d-%2$d-%1$d %4$d:%5$d" +msgstr "" + +#: ../admin/ssl_list.php:111 +msgid "Requested on: " +msgstr "" + +#: ../admin/ssl_list.php:129 +#, fuzzy +msgid "Create one" +msgstr "Crear" + +#: ../admin/ssl_list.php:130 +msgid "" +"This hosting has no valid certificate
a self-signed one has been created" +msgstr "" + +#: ../admin/ssl_list.php:140 +msgid "Create or Import a new SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:42 +msgid "New SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:50 +msgid "" +"An SSL certificate is a file which must be obtained from a Certificate " +"Authority, and allow you to enable HTTPS encryption on a domain name." +msgstr "" + +#: ../admin/ssl_new.php:53 +msgid "" +"To obtain one, you need to generate a Certificate Request (CSR) and a " +"RSA Key (KEY) here, then give the CSR to the Certificate Authority, " +"which will give you a certificate (CRT) and also often a chained certificate " +"(CHAIN)." +msgstr "" + +#: ../admin/ssl_new.php:56 +msgid "" +"If you already know what it is and already have all those files (CRT/KEY/" +"CHAIN) You can import them here too." +msgstr "" + +#: ../admin/ssl_new.php:64 +msgid "Create a CSR/KEY" +msgstr "" + +#: ../admin/ssl_new.php:65 +#, fuzzy +msgid "Import existing files" +msgstr "Importar este archivo" + +#: ../admin/ssl_new.php:69 +msgid "Create a CSR/KEY for a given domain name" +msgstr "" + +#: ../admin/ssl_new.php:71 +msgid "" +"Use this form to generate a Certificate Request file (CSR) and a " +"RSA Key file (KEY) for a given domain name" +msgstr "" + +#: ../admin/ssl_new.php:98 +msgid "" +"Please choose the domain name for which you want a SSL Certificate, or enter " +"it manually" +msgstr "" + +#: ../admin/ssl_new.php:101 ../admin/ssl_view.php:60 +msgid "Fully Qualified Domain Name" +msgstr "" + +#: ../admin/ssl_new.php:104 +msgid "--- Choose here ---" +msgstr "" + +#: ../admin/ssl_new.php:110 +#, fuzzy +msgid "... or click here to enter it manually" +msgstr "Presiona aquí para seguir" + +#: ../admin/ssl_new.php:117 ../admin/ssl_new.php:151 ../admin/ssl_view.php:82 +msgid "Save" +msgstr "Guardar" + +#: ../admin/ssl_new.php:118 ../admin/ssl_new.php:152 ../admin/ssl_view.php:83 +msgid "Cancel" +msgstr "Cancelar" + +#: ../admin/ssl_new.php:123 +msgid "" +"(If you want to get a valid certificate for all the subdomains of a " +"domain, use a wildcard notation (eg: *.example.com). Please note that a " +"wildcard certificate is usually more expensive than normal one.)" +msgstr "" + +#: ../admin/ssl_new.php:123 +msgid "" +"Please note that a SSL Certificate is only valid for one fully qualified " +"domain name. As a result, a certificate for www.example.com is " +"NOT valid for intranet.example.com or intranet.www." +"example.com !" +msgstr "" + +#: ../admin/ssl_new.php:130 +msgid "Import existing Key Certificate and Chain files" +msgstr "" + +#: ../admin/ssl_new.php:132 +msgid "" +"If you already have a RSA Key file, a Certificate for this key and (maybe) a " +"Chained certificate, please paste their content here." +msgstr "" + +#: ../admin/ssl_new.php:133 +msgid "" +"We will verify the content of those files and add them in your certificate " +"repository" +msgstr "" + +#: ../admin/ssl_new.php:138 +msgid "RSA Key" +msgstr "" + +#: ../admin/ssl_new.php:142 ../admin/ssl_view.php:73 ../admin/ssl_view.php:159 +msgid "SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:146 ../admin/ssl_view.php:77 ../admin/ssl_view.php:164 +msgid "Chained Certificate
(not mandatory)" +msgstr "" + +#: ../admin/ssl_share.php:30 +msgid "This page is restricted to authorized staff" +msgstr "Esta página está reservada a los administradores" + +#: ../admin/ssl_view.php:52 +msgid "" +"Your Certificate Request File (CSR) has been created, along with its " +"private RSA Key (KEY). Please find below the CSR you must send to " +"your SSL Certificate provider." +msgstr "" + +#: ../admin/ssl_view.php:54 +msgid "" +"Once you'll have your Certificate File (CRT) and a Chained " +"Certificate File (CHAIN), please paste them here to finish the " +"enrollment." +msgstr "" + +#: ../admin/ssl_view.php:64 +msgid "Date of the request" +msgstr "" + +#: ../admin/ssl_view.php:68 ../admin/ssl_view.php:154 +msgid "Certificate Request File" +msgstr "" + +#: ../admin/ssl_view.php:85 ../admin/ssl_view.php:213 +msgid "Delete" +msgstr "Borrar" + +#: ../admin/ssl_view.php:86 +msgid "" +"Please confirm that you want to delete this certificate request AND ITS " +"PRIVATE KEY!" +msgstr "" + +#: ../admin/ssl_view.php:97 +msgid "Valid Certificate" +msgstr "" + +#: ../admin/ssl_view.php:98 +msgid "Please find below your valid certificate data." +msgstr "" + +#: ../admin/ssl_view.php:104 +msgid "EXPIRED Certificate" +msgstr "" + +#: ../admin/ssl_view.php:105 +msgid "" +"Your certificate is EXPIRED. You should not use it for any purpose. Please " +"find below its data." +msgstr "" + +#: ../admin/ssl_view.php:113 +msgid "Back to my SSL Certificates" +msgstr "" + +#: ../admin/ssl_view.php:117 +msgid "Valid From:" +msgstr "" + +#: ../admin/ssl_view.php:123 +#, php-format +msgid "(%d days ago)" +msgstr "" + +#: ../admin/ssl_view.php:126 +#, php-format +msgid "(%d month ago)" +msgstr "" + +#: ../admin/ssl_view.php:131 +msgid "Valid Until:" +msgstr "" + +#: ../admin/ssl_view.php:137 +#, php-format +msgid "(%d days from now)" +msgstr "" + +#: ../admin/ssl_view.php:140 +#, php-format +msgid "(%d month from now)" +msgstr "" + +#: ../admin/ssl_view.php:145 +msgid "FQDN:" +msgstr "" + +#: ../admin/ssl_view.php:149 +msgid "Other Valid FQDN:" +msgstr "" + +#: ../admin/ssl_view.php:173 +msgid "" +"As an administrator you can allow any account on this server to use this " +"certificate to host his services.
(This is only useful for wildcard or " +"multi-domain certificates)." +msgstr "" + +#: ../admin/ssl_view.php:177 +msgid "This certificate is currently shared" +msgstr "" + +#: ../admin/ssl_view.php:184 +#, fuzzy +msgid "Click here to stop sharing this certificate" +msgstr "Presiona aquí para seguir" + +#: ../admin/ssl_view.php:189 ../admin/ssl_view.php:205 +msgid "" +"You are not the owner of this certificate, only its owner can share/unshare " +"this certificate." +msgstr "" + +#: ../admin/ssl_view.php:193 +msgid "This certificate is currently NOT shared" +msgstr "" + +#: ../admin/ssl_view.php:200 +#, fuzzy +msgid "Click here to share this certificate" +msgstr "Presiona aquí para modificar esta cuenta FTP." + +#: ../admin/ssl_view.php:214 +msgid "" +"Please confirm that you want to delete this certificate AND ITS PRIVATE KEY!" +msgstr "" + +#: ../class/m_ssl.php:69 ../class/m_ssl.php:418 +msgid "SSL Certificates" +msgstr "" + +#: ../class/m_ssl.php:79 +msgid "New SSL certificate" +msgstr "" + +#: ../class/m_ssl.php:93 +msgid "List SSL Certificates" +msgstr "" + +#: ../class/m_ssl.php:152 +msgid "No SSL certificates available" +msgstr "" + +#: ../class/m_ssl.php:175 +#, fuzzy +msgid "You currently have no hosting using SSL certificate" +msgstr "No tienes ninguna base de datos definida" + +#: ../class/m_ssl.php:196 +#, fuzzy +msgid "Bad FQDN domain name" +msgstr "Nombre de dominio" + +#: ../class/m_ssl.php:202 ../class/m_ssl.php:774 +msgid "Can't generate a private key (1)" +msgstr "" + +#: ../class/m_ssl.php:207 ../class/m_ssl.php:779 +msgid "Can't generate a private key (2)" +msgstr "" + +#: ../class/m_ssl.php:218 +msgid "Can't generate a CSR" +msgstr "" + +#: ../class/m_ssl.php:234 ../class/m_ssl.php:250 ../class/m_ssl.php:273 +#, fuzzy +msgid "Can't find this Certificate" +msgstr "Presiona aquí para modificar esta cuenta FTP." + +#: ../class/m_ssl.php:353 +msgid "Can't save the Key/Crt/Chain now. Please try later." +msgstr "" + +#: ../class/m_ssl.php:390 +msgid "Can't save the Crt/Chain now. Please try later." +msgstr "" + +#: ../class/m_ssl.php:618 +#, fuzzy +msgid "Alias already exists" +msgstr "Editar archivo" + +#: ../class/m_ssl.php:637 +#, fuzzy +msgid "Alias not found" +msgstr "Dominio %s borrado" + +#: ../class/m_ssl.php:666 +msgid "" +"Can't find the private key in the certificate table, please check your form." +msgstr "" + +#: ../class/m_ssl.php:675 +msgid "" +"The certificate must begin by BEGIN CERTIFICATE and end by END CERTIFICATE " +"lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:680 +msgid "" +"The chained certificate must begin by BEGIN CERTIFICATE and end by END " +"CERTIFICATE lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:686 +msgid "" +"The private key must begin by BEGIN (RSA )PRIVATE KEY and end by END (RSA )" +"PRIVATE KEY lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:722 +#, php-format +msgid "The %d-th certificate in the chain is invalid" +msgstr "" + +#: ../class/m_ssl.php:730 +#, fuzzy +msgid "The certificate is invalid." +msgstr "Lista de las buzones de correo del dominio %s" + +#: ../class/m_ssl.php:735 +#, fuzzy +msgid "The private key is invalid." +msgstr "Lista de las buzones de correo del dominio %s" + +#: ../class/m_ssl.php:740 +msgid "The private key is not the one signed inside the certificate." +msgstr "" + +#: ../class/m_ssl.php:746 +msgid "Can't export your certificate as a string, please check its syntax." +msgstr "" + +#: ../class/m_ssl.php:751 +msgid "" +"Can't export one of your chained certificates as a string, please check its " +"syntax." +msgstr "" + +#: ../class/m_ssl.php:757 +msgid "Can't export your private key as a string, please check its syntax." +msgstr "" + +#: ../class/m_ssl.php:800 +#, fuzzy +msgid "Locally hosted forcing HTTPS" +msgstr "Administrar localmente" + +#: ../class/m_ssl.php:801 +#, fuzzy +msgid "Locally hosted HTTP and HTTPS" +msgstr "Administrar localmente" + +#: ../class/m_ssl.php:802 +#, fuzzy +msgid "HTTPS AlternC panel access" +msgstr "Lista de cuentas FTP" + +#: ../class/m_ssl.php:803 +#, fuzzy +msgid "HTTPS Roundcube Webmail" +msgstr "Acceso Webmail" + +#: ../class/m_ssl.php:804 +#, fuzzy +msgid "HTTPS Squirrelmail Webmail" +msgstr "Acceso Webmail" + +#: ../class/m_ssl.php:805 +msgid "php52 forcing HTTPS" +msgstr "" + +#: ../class/m_ssl.php:806 +msgid "php52 HTTP and HTTPS" +msgstr "" + +#, fuzzy +#~ msgid "Changing your mail password" +#~ msgstr "Modificar contraseña" + +#, fuzzy +#~ msgid "Old Password:" +#~ msgstr "Antigua contraseña" + +#, fuzzy +#~ msgid "New Password:" +#~ msgstr "Nueva contraseña" + +#, fuzzy +#~ msgid "Verify New Password:" +#~ msgstr "Nueva contraseña" + +# msgid "New password" +# msgstr "Nueva contraseña" +#, fuzzy +#~ msgid "Change my mail password" +#~ msgstr "Cambiar mi contraseña" + +# msgid "New password" +# msgstr "Nueva contraseña" +#, fuzzy +#~ msgid "Change Password" +#~ msgstr "Cambiar mi contraseña" + +#, fuzzy +#~ msgid "Change the password of your email account." +#~ msgstr "Cambiar la dirección de correo de la cuenta" + +#, fuzzy +#~ msgid "Hosting control panel" +#~ msgstr "Panel Administrador" + +#, fuzzy +#~ msgid "Help: " +#~ msgstr "Ayuda" + +#, fuzzy +#~ msgid "You are currently using AlternC " +#~ msgstr "Los parámetros actuales son" + +#, fuzzy +#~ msgid "New AlternC account" +#~ msgstr "Suprimir este tipo de cuenta" + +#~ msgid "Username" +#~ msgstr "Nombre de usuario" + +#~ msgid "Initial password" +#~ msgstr "Contraseña inicial" + +# msgid "New password" +# msgstr "Nueva contraseña" +#~ msgid "Confirm password" +#~ msgstr "Confirmar contraseña" + +#~ msgid "Can he change its password" +#~ msgstr "¿Puede cambiar su contraseña?" + +#~ msgid "No" +#~ msgstr "No" + +#~ msgid "Yes" +#~ msgstr "Sí" + +#, fuzzy +#~ msgid "Notes" +#~ msgstr "Nombres" + +#~ msgid "First Name" +#~ msgstr "Nombre" + +#~ msgid "Surname" +#~ msgstr "Apellido" + +#~ msgid "Email address" +#~ msgstr "Dirección de correo" + +#~ msgid "Account type" +#~ msgstr "Tipo de cuenta" + +#, fuzzy +#~ msgid "Install the domain" +#~ msgstr "Administración de los dominios instalados" + +#, fuzzy +#~ msgid "Create this AlternC account" +#~ msgstr "Crear la cuenta FTP." + +#, fuzzy +#~ msgid "Add an IP" +#~ msgstr "Añadir un nuevo TLD" + +#, fuzzy +#~ msgid "Cancel edit" +#~ msgstr "Cancelar" + +#, fuzzy +#~ msgid "Add a comment" +#~ msgstr "Hospedar un dominio" + +#~ msgid "Edit" +#~ msgstr "Modificar" + +#, fuzzy +#~ msgid "Here the list of the available databases servers." +#~ msgstr "He aquí la lista de miembros hospedados" + +#, fuzzy +#~ msgid "Name" +#~ msgstr "Nombres" + +#, fuzzy +#~ msgid "Hostname" +#~ msgstr "Nombre de usuario" + +#~ msgid "Login" +#~ msgstr "Nombre de usuario" + +#, fuzzy +#~ msgid "Users" +#~ msgstr "Usuario" + +#, fuzzy +#~ msgid "Account not found" +#~ msgstr "Tipo de cuenta" + +#~ msgid "User does not exist" +#~ msgstr "El usuario no existe" + +# msgid "New password" +# msgstr "Nueva contraseña" +#~ msgid "Confirm" +#~ msgstr "Confirmar" + +#~ msgid "WARNING: experimental feature, use at your own risk" +#~ msgstr "CUIDADO: funcionalidad experimental, úsala a tus propios riesgos" + +#~ msgid "" +#~ "The following domains will be deactivated and redirected to the URL " +#~ "entered in the following box. A backup of the domain configuration will " +#~ "be displayed as a serie of SQL request that you can run to restore the " +#~ "current configuration if you want. Click confirm if you are sure you want " +#~ "to deactivate all this user's domains." +#~ msgstr "" +#~ "Los dominios siguientes serán desactivados y redirigidos hacia la URL " +#~ "ingresada en el cuadro a continuación. Se mostrará un respaldo de tu " +#~ "configuración como una serie de solicitudes SQL que podrás volver a " +#~ "cargar para recuperar tu configuración actual. Confirma si estás seguro " +#~ "de desactivar todos los dominios de este usuario. " + +#~ msgid "Redirection URL:" +#~ msgstr "Redirección hacía la URL:" + +#~ msgid "Domains of user: " +#~ msgstr "Dominio del usuario:" + +#~ msgid "Missing redirect url." +#~ msgstr "Falta la URL de redirección" + +#~ msgid "-- Redirecting all domains and subdomains of the user %s to %s\n" +#~ msgstr "" +#~ "-- Redirigir todos los dominios y subdominios del usuario %s hacia %s\n" + +#~ msgid "Change the default quotas" +#~ msgstr "Modificar las cuotas por omisión" + +#~ msgid "Add account type" +#~ msgstr "Agregar este tipo de cuenta" + +#~ msgid "Delete account type" +#~ msgstr "Suprimir este tipo de cuenta" + +#~ msgid "" +#~ "Here is the list of the quotas on the server for the new accounts. If you " +#~ "want to change them, enter new values" +#~ msgstr "" +#~ "He aquí la lista de cuotas por omisión en este servidor para las nuevas " +#~ "cuentas." + +#~ msgid "Accounts of type" +#~ msgstr "Tipo de cuentas" + +#~ msgid "Default Value" +#~ msgstr "Valores por omisión" + +#~ msgid "Quotas" +#~ msgstr "Cuotas" + +#~ msgid "Edit the default quotas" +#~ msgstr "Modificar las cuotas por omisión" + +#, fuzzy +#~ msgid "Uid" +#~ msgstr "uid" + +#, fuzzy +#~ msgid "Account" +#~ msgstr "Tipo de cuenta" + +#~ msgid "Value" +#~ msgstr "Valor" + +#~ msgid "Passwords do not match" +#~ msgstr "Las contraseñas no corresponden" + +#~ msgid "The new member has been successfully created" +#~ msgstr "El nuevo miembro fue creado con éxito" + +#~ msgid "added" +#~ msgstr "añadido" + +#~ msgid "could not be added" +#~ msgstr "no pudo ser añadido" + +#~ msgid "deleted" +#~ msgstr "borrado" + +#~ msgid "could not be deleted" +#~ msgstr "no pudo ser borrado" + +#~ msgid "Deleting quota %s" +#~ msgstr "Supresión de la cuota %s" + +#, fuzzy +#~ msgid "WARNING: Confirm the deletion of the quota" +#~ msgstr "ADVERTENCIA : Confirma la supresión de la cuota" + +#, fuzzy +#~ msgid "Yes, delete this default quota" +#~ msgstr "Modificar las cuotas por omisión" + +#, fuzzy +#~ msgid "No, don't delete this default quota" +#~ msgstr "no pudo ser borrado" + +#~ msgid "Default quotas successfully changed" +#~ msgstr "Cuotas por omisión modificadas con éxito" + +#~ msgid "Default quotas could not be set." +#~ msgstr "No se pudieron modificar las cuotas por omisión" + +#~ msgid "Member '%s' does not exist" +#~ msgstr "El miembro '%s' no existe" + +#~ msgid "Member %s successfully deleted" +#~ msgstr "El miembro %s fue borrado con éxito" + +#, fuzzy +#~ msgid "Please check the accounts you want to delete" +#~ msgstr "" +#~ "Elige el archivo que contiene los datos SQL por restaurar en la base." + +#~ msgid "Deleting users" +#~ msgstr "Suprimir un usuario" + +#~ msgid "WARNING : Confirm the deletion of the users" +#~ msgstr "ADVERTENCIA : Confirma la supresión de este usuario" + +#, fuzzy +#~ msgid "Yes, delete those accounts" +#~ msgstr "Suprimir las cuentas marcadas" + +#, fuzzy +#~ msgid "No, don't delete those accounts" +#~ msgstr "Suprimir las cuentas marcadas" + +#~ msgid "The member has been successfully edited" +#~ msgstr "La cuenta fue modificada con éxito" + +#~ msgid "Manage installed domains" +#~ msgstr "Administración de los dominios instalados" + +#~ msgid "" +#~ "Here is the list of the domains installed on this server. You can remove " +#~ "a domain if it does not exist or does not point to our server anymore. " +#~ "You can also set the 'Lock' flag on a domain so that the user will not be " +#~ "able to change any DNS parameter or delete this domain from his account." +#~ msgstr "" +#~ "He aquí la lista de dominios instalados en este servidor. Puedes suprimir " +#~ "un dominio si ya no existe o si ya no apunta a este servidor. También " +#~ "puedes bloquear un dominio para que el usuario ya no pueda modificar sus " +#~ "parámetros DNS o borrarlo." + +#~ msgid "Action" +#~ msgstr "Acción" + +#~ msgid "Connect as" +#~ msgstr "Conectarse como" + +#, fuzzy +#~ msgid "Creator" +#~ msgstr "Crear" + +#~ msgid "Domain" +#~ msgstr "Dominio" + +#, fuzzy +#~ msgid "OK?" +#~ msgstr "OK" + +#~ msgid "Locked Domain" +#~ msgstr "Dominio bloqueado" + +#~ msgid "Lock" +#~ msgstr "Bloquear" + +#~ msgid "Unlock" +#~ msgstr "Desbloquear" + +#, fuzzy +#~ msgid "Manage defaults domains type" +#~ msgstr "Administración de los dominios instalados" + +#, fuzzy +#~ msgid "%%DOMAIN%% : the Domain name" +#~ msgstr "Nombre de dominio" + +#, fuzzy +#~ msgid "%%SUB%% : The subdomain name" +#~ msgstr "Nombre de dominio" + +#, fuzzy +#~ msgid "Activation" +#~ msgstr "Acción" + +#, fuzzy +#~ msgid "settings" +#~ msgstr "Configuración" + +#, fuzzy +#~ msgid "Manage domains type" +#~ msgstr "Administración de los dominios instalados" + +#, fuzzy +#~ msgid "Here is the list of domain types." +#~ msgstr "He aquí la lista de miembros hospedados" + +#, fuzzy +#~ msgid "Create a domain type" +#~ msgstr "Creación de un subdominio:" + +#, fuzzy +#~ msgid "Enabled?" +#~ msgstr "¿Cuenta activa?" + +#, fuzzy +#~ msgid "Edit a domain type" +#~ msgstr "Modificar dominio %s" + +#, fuzzy +#~ msgid "Change this domain type" +#~ msgstr "Modificar este buzón" + +#, fuzzy +#~ msgid "This account is now a normal account" +#~ msgstr "Esta cuenta es un cuenta de administrador" + +#~ msgid "The member has been successfully renewed" +#~ msgstr "La cuenta fue renovada con éxito" + +#, fuzzy +#~ msgid "This account is now an administrator account" +#~ msgstr "Esta cuenta es un cuenta de administrador" + +#~ msgid "Member Edition" +#~ msgstr "Modificar miembro" + +#, fuzzy +#~ msgid "Account Enabled?" +#~ msgstr "¿Cuenta activa?" + +#, fuzzy +#~ msgid "You cannot disable your own account." +#~ msgstr "No estás autorizado a cambiar tu contraseña" + +#~ msgid "Password" +#~ msgstr "Contraseña" + +#, fuzzy +#~ msgid "Password change allowed?" +#~ msgstr "Cambio de contraseña" + +#, fuzzy +#~ msgid "Reset quotas to default?" +#~ msgstr "¿Reincializar las cuotas al valor por omisión?" + +#~ msgid "Period" +#~ msgstr "Periodicidad de facturación" + +#~ msgid "Edit this account" +#~ msgstr "Modificar cuenta" + +#~ msgid "Renew for" +#~ msgstr "Renovar por" + +#~ msgid "period(s)" +#~ msgstr "período(s)" + +#~ msgid "Renew" +#~ msgstr "Renovar" + +#~ msgid "This account is a super-admin account" +#~ msgstr "Esta cuenta es un cuenta de administrador" + +#~ msgid "" +#~ "There is only one administrator account, you cannot turn this account " +#~ "back to normal" +#~ msgstr "" +#~ "Sólo queda una cuenta de administrador, no se puede transformar esta " +#~ "cuenta de administrador en cuenta corriente." + +#~ msgid "Turn this account back to normal" +#~ msgstr "Transformar esta cuenta de Administrador en cuenta corriente" + +#~ msgid "Make this account a super admin one" +#~ msgstr "Transformar esta cuenta en cuenta de administrador" + +#~ msgid "Account created by %s" +#~ msgstr "Cuenta creada por %s" + +#, fuzzy +#~ msgid "The email was successfully sent" +#~ msgstr "La cuenta fue modificada con éxito" + +#, fuzzy +#~ msgid "Mail" +#~ msgstr "Buzones de correo" + +#~ msgid "Send" +#~ msgstr "Mandar" + +#, fuzzy +#~ msgid "AlternC account list" +#~ msgstr "Lista de cuentas FTP" + +#, fuzzy +#~ msgid "Complete view" +#~ msgstr "Vista reducida" + +#, fuzzy +#~ msgid "Search for a Login" +#~ msgstr "Búsqueda de una carpeta" + +#, fuzzy +#~ msgid "Search for a Domain" +#~ msgstr "Búsqueda de una carpeta" + +#, fuzzy +#~ msgid "List all AlternC accounts" +#~ msgstr "Listar todas las cuentas" + +#, fuzzy +#~ msgid "Or only the accounts of:" +#~ msgstr "Listar todas las cuentas" + +#~ msgid "List only my accounts" +#~ msgstr "Listar sólo mis cuentas" + +#~ msgid "%s accounts" +#~ msgstr "%s cuentas" + +#, fuzzy +#~ msgid "Here is the list of hosted AlternC accounts" +#~ msgstr "He aquí la lista de miembros hospedados" + +#, fuzzy +#~ msgid "Create a new AlternC account" +#~ msgstr "Crear una nueva cuenta FTP" + +#~ msgid "No account defined for now" +#~ msgstr "No existe ninguna cuenta por el momento" + +#~ msgid "Delete checked accounts" +#~ msgstr "Suprimir las cuentas marcadas" + +#, fuzzy +#~ msgid "Created by" +#~ msgstr "Crear" + +#~ msgid "Last login" +#~ msgstr "Última conexión" + +#~ msgid "Last ip" +#~ msgstr "Última IP" + +#~ msgid "C" +#~ msgstr "C" + +#~ msgid "E" +#~ msgstr "M" + +#~ msgid "Q" +#~ msgstr "Q" + +#, fuzzy +#~ msgid "Creator: %s" +#~ msgstr "Crear" + +#~ msgid "Member login" +#~ msgstr "Nombre de usuario del miembro" + +#~ msgid "The requested account has been deleted. It is now denied." +#~ msgstr "La cuenta esclava fue borrada. Ahora se la rechaza." + +#~ msgid "The requested account address has been created. It is now allowed." +#~ msgstr "La cuenta esclava fue creada. Ahora está autorizada." + +#~ msgid "Manage allowed accounts for secondary mx" +#~ msgstr "Manejar las cuentas autorizadas para los MX secundarios" + +#~ msgid "" +#~ "Here is the list of the allowed accounts for secondary mx management. You " +#~ "can configure the alternc-secondarymx package on your secondary mx server " +#~ "and give him the login/pass that will grant him access to your server's " +#~ "mx-hosted domain list. " +#~ msgstr "" +#~ "He aquí la lista de cuentas que pueden sincronizar la lista de dominios " +#~ "cuyos mails se hospedan aquí. Puedes utilizar el paquete alternc-" +#~ "secondarymx en tu servidor de mx secundario dándole un login/password con " +#~ "acceso a este servidor." + +#~ msgid "" +#~ "If you want to allow a new server to access your mx-hosted domain list, " +#~ "give him an account." +#~ msgstr "" +#~ "Si quieres autorizar un nuevo servidor a sincronizar la lista de dominios " +#~ "cuyo mail se hospeda aquí, créale una cuenta." + +#~ msgid "Add this account to the allowed list" +#~ msgstr "Añadir esta cuenta a la lista de aquellas autorizadas." + +#~ msgid "Admin Control Panel" +#~ msgstr "Panel Administrador" + +#~ msgid "Manage allowed domains (TLD)" +#~ msgstr "Administración de los dominios autorizados (TLD)" + +#, fuzzy +#~ msgid "Password Policies" +#~ msgstr "Cambio de contraseña" + +#, fuzzy +#~ msgid "Manage IP whitelist" +#~ msgstr "Administrar miembros" + +#~ msgid "Configure AlternC variables" +#~ msgstr "Configurar las variables de AlternC" + +#, fuzzy +#~ msgid "Manage databases servers" +#~ msgstr "Crear mi base de datos principal" + +#~ msgid "Account creation statistics" +#~ msgstr "Estadísticas de creación de cuentas" + +#, fuzzy +#~ msgid "Click here to lock the panel and force logout of all the user." +#~ msgstr "Presiona aquí para crear una cuenta FTP en esta carpeta." + +# msgid "New password" +# msgstr "Nueva contraseña" +#, fuzzy +#~ msgid "Manage Password Policy" +#~ msgstr "Cambiar mi contraseña" + +#, fuzzy +#~ msgid "Policy changed" +#~ msgstr "Cambio de contraseña" + +#, fuzzy +#~ msgid "Cancel and go back to the policy list" +#~ msgstr "No borrar nada, volver a la lista de buzones de correo" + +#, fuzzy +#~ msgid "Password Kind" +#~ msgstr "Contraseña" + +#, fuzzy +#~ msgid "Password Policy" +#~ msgstr "Contraseña" + +#, fuzzy +#~ msgid "Min Size" +#~ msgstr "Tamaño" + +#, fuzzy +#~ msgid "Max Size" +#~ msgstr "Tamaño" + +#~ msgid "The quotas has been successfully edited" +#~ msgstr "Cuotas modificadas con éxito" + +#~ msgid "Editing the quotas of a member" +#~ msgstr "Modificar cuotas del miembro" + +#~ msgid "Quota" +#~ msgstr "Cuota" + +#~ msgid "Total" +#~ msgstr "Total" + +#~ msgid "Edit the quotas" +#~ msgstr "Modificar cuotas" + +#~ msgid "" +#~ "The requested ip address has been deleted. It will be denied in one hour." +#~ msgstr "" +#~ "La dirección IP seleccionada fue borrada. El acceso será denegado en una " +#~ "hora, a más tardar." + +#~ msgid "" +#~ "The requested ip address has been added to the list. It will be allowed " +#~ "in one hour." +#~ msgstr "" +#~ "La dirección IP fue añadida. El acceso le será permitido en una hora a " +#~ "más tardar." + +#~ msgid "Manage allowed ip for slave zone transfers" +#~ msgstr "" +#~ "Manejar las IP autorizadas a hacer transferencias de zona DNS esclava" + +#~ msgid "" +#~ "Here is the list of the allowed ip or ip class for slave dns zone " +#~ "transfer requests (AXFR). You must add the ip address of all the slave " +#~ "DNS you have so that those slaves will be allowed to transfer the zone " +#~ "files. There is also some defaults ip from DNS checks made by some third-" +#~ "party technical offices such as afnic (for .fr domains)" +#~ msgstr "" +#~ "He aquí la lista de IPs o clases de IPs autorizadas a efectuar " +#~ "transferencias de zonas (AXFR). Tienes que agregar aquí las direcciones " +#~ "IP de los DNS esclavos de manera a que puedan sincronizar sus zonas. " +#~ "También hay algunas IPs por omisión que corresponden a organismos " +#~ "técnicos oficiales (como las del afnic para los dominios .fr)" + +#~ msgid "IP Address" +#~ msgstr "Dirección IP" + +#~ msgid "" +#~ "If you want to allow an ip address or class to connect to your dns " +#~ "server, enter it here. Choose 32 as a prefix for single ip address." +#~ msgstr "" +#~ "Si quieres autorizar una dirección IP o una clase de direcciones IP a " +#~ "conectarse a tu servidor DNS, ingrésala aquí. Elige un prefijo de 32 si " +#~ "se trata de una sola dirección IP." + +#~ msgid "Prefix" +#~ msgstr "Prefijo" + +#~ msgid "Add this ip to the slave list" +#~ msgstr "Agregar esta IP o clase a la lista de los DNS esclavos" + +#~ msgid "Manage allowed accounts for slave zone transfers" +#~ msgstr "" +#~ "Manejar las cuentas autorizadas para las transferencias de zonas DNS " +#~ "esclavos" + +#~ msgid "" +#~ "Here is the list of the allowed accounts for slave dns synchronization. " +#~ "You can configure the alternc-slavedns package on your slave server and " +#~ "give him the login/pass that will grant him access to your server's " +#~ "domain list. " +#~ msgstr "" +#~ "He aquí la lista de cuentas autorizadas a sincronizar la lista de " +#~ "dominios hspedados. Puedes utilizar el paquete alternc-slavedns en tu " +#~ "servidor esclavo, dándole un login/contraseña con acceso a este servidor." + +#~ msgid "" +#~ "If you want to allow a new server to access your domain list, give him an " +#~ "account." +#~ msgstr "" +#~ "Si quieres autorizar un nuevo servidor a acceder la lista de tus " +#~ "dominios, créale una cuenta." + +#~ msgid "Some TLD cannot be deleted..." +#~ msgstr "Algunos TLD no pueden ser borrados..." + +#~ msgid "The requested TLD has been deleted" +#~ msgstr "El TLD fue borrado" + +#~ msgid "" +#~ "Here is the list of the TLD allowed on this server. Each TLD can be " +#~ "allowed or denied after some checks (whois, ns, domain exists...)" +#~ msgstr "" +#~ "Aquí esta la lista de los TLD autorizados en este servidor. Cada TLD " +#~ "puede ser autorizado o prohibido según ciertos criterios (whois, ns, " +#~ "dominio existe...)" + +#~ msgid "Add a new TLD" +#~ msgstr "Añadir un nuevo TLD" + +#~ msgid "Allowed Mode" +#~ msgstr "Control efectuado" + +#~ msgid "TLD" +#~ msgstr "TLD" + +#~ msgid "Delete the checked TLD" +#~ msgstr "Suprimir los TLD marcados" + +#~ msgid "" +#~ "Enter the new TLD (without the first dot) and choose what check should be " +#~ "done." +#~ msgstr "" +#~ "Ingresa el nuevo TLD (sin el punto inicial) y escoge que control se " +#~ "debeefectuar." + +#~ msgid "" +#~ "Warning : only some final tld are known in the whois function of AlternC, " +#~ "please check m_dom.php accordingly." +#~ msgstr "" +#~ "ADVERTENCIA: sólo algunos TLD son conocidos en la función whois de " +#~ "AlternC, por favor, verifica el archivo m_dom.php." + +#~ msgid "The TLD has been successfully added" +#~ msgstr "El nuevo TLD fue añadido" + +#~ msgid "The TLD has been successfully edited" +#~ msgstr "El TLD fue modificado con éxito" + +#~ msgid "Edit a TLD" +#~ msgstr "Modificar un TLD" + +#~ msgid "Edit this TLD" +#~ msgstr "Modificar este TLD" + +#~ msgid "" +#~ "Here are the internal AlternC variables that are currently being used." +#~ msgstr "He aquí las variables internas confirgurables de AlternC." + +#~ msgid "Comment" +#~ msgstr "Comentario" + +#~ msgid "Names" +#~ msgstr "Nombres" + +#~ msgid "Save variables" +#~ msgstr "Guardar la configuración" + +#~ msgid "Your file %s has been saved" +#~ msgstr "Tu archivo %s fue guardado" + +#~ msgid "File editing" +#~ msgstr "Editar archivo" + +#~ msgid "Save & Quit" +#~ msgstr "Guardar y Salir" + +#~ msgid "Quit" +#~ msgstr "Salir" + +#~ msgid "Deleting files and/or directories" +#~ msgstr "Borrar archivos y/o carpetas" + +#~ msgid "WARNING: Confirm the deletion of this files" +#~ msgstr "ADVERTENCIA : Confirma la supresión de estos archivos" + +#, fuzzy +#~ msgid "Yes, delete those files/folders" +#~ msgstr "Suprimir las cuentas marcadas" + +#~ msgid "extracting..." +#~ msgstr "extrayendo..." + +#~ msgid "failed" +#~ msgstr "fallado" + +#~ msgid "done" +#~ msgstr "hecho" + +#~ msgid "File browser" +#~ msgstr "Manejador de archivos" + +#, fuzzy +#~ msgid "Send this file" +#~ msgstr "Importar este archivo" + +#, fuzzy +#~ msgid "New file or folder:" +#~ msgstr "No hay ningún archivo en esta carpeta" + +#~ msgid "Create" +#~ msgstr "Crear" + +#~ msgid "File" +#~ msgstr "Archivo" + +#~ msgid "Folder" +#~ msgstr "Carpeta" + +#~ msgid "Rename" +#~ msgstr "Cambiar nombre" + +#~ msgid "Permissions" +#~ msgstr "Permisos" + +#~ msgid "Change permissions" +#~ msgstr "Modificar preferencias" + +#, fuzzy +#~ msgid "Copy" +#~ msgstr "Copiar a" + +#~ msgid "Move" +#~ msgstr "Mover" + +#, fuzzy +#~ msgid "Filename" +#~ msgstr "Cambiar nombre" + +#~ msgid "Size" +#~ msgstr "Tamaño" + +#, fuzzy +#~ msgid "Last modification" +#~ msgstr "Último fracaso de conexión" + +#, fuzzy +#~ msgid "File Type" +#~ msgstr "Archivo" + +#~ msgid "View" +#~ msgstr "Ver" + +#~ msgid "Extract" +#~ msgstr "Extraer" + +#, fuzzy +#~ msgid "Restore SQL" +#~ msgstr "Restauración" + +#, fuzzy +#~ msgid "In which database to you want to restore this dump?" +#~ msgstr "¿Dónde se almacenan las copias de respaldo?" + +#, fuzzy +#~ msgid "Restore it" +#~ msgstr "Restauración" + +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "No files in this folder" +#~ msgstr "No hay ningún archivo en esta carpeta" + +#, fuzzy +#~ msgid "Show size of directories" +#~ msgstr "Archivos y carpetas" + +#~ msgid "Protect this folder" +#~ msgstr "Proteger esta carpeta" + +#, fuzzy +#~ msgid "with a login and a password" +#~ msgstr "Contraseña inicial" + +#, fuzzy +#~ msgid "Download this folder" +#~ msgstr "Proteger esta carpeta" + +#, fuzzy +#~ msgid "Edit the ftp account" +#~ msgstr "Modificar cuenta" + +#, fuzzy +#~ msgid "that exists in this folder" +#~ msgstr "No hay ningún archivo en esta carpeta" + +#, fuzzy +#~ msgid "Create an ftp account in this folder" +#~ msgstr "Existe una cuenta FTP en esta carpeta" + +#, fuzzy +#~ msgid "Configure the file editor" +#~ msgstr "Configurar el manejador de archivos" + +#~ msgid "Your preferences have been updated." +#~ msgstr "Tus preferencias fueron actualizadas" + +#~ msgid "File browser preferences" +#~ msgstr "Preferencias del manejador de archivos" + +#~ msgid "Horizontal window size" +#~ msgstr "Tamaño horizontal de la ventana" + +#~ msgid "Vertical window size" +#~ msgstr "Tamaño vertical de la ventana" + +#~ msgid "File editor font name" +#~ msgstr "Fuente de caracteres del editor de archivos" + +#~ msgid "File editor font size" +#~ msgstr "Tamaño de los caracteres del editor de archivos" + +#~ msgid "File list view" +#~ msgstr "Modo de visualización de los archivos" + +#~ msgid "Downloading file format" +#~ msgstr "¿Formato de descarga de archivo?" + +#~ msgid "What to do after creating a file" +#~ msgstr "Que hacer después de la creación de un archivo" + +#~ msgid "Show icons?" +#~ msgstr "¿Mostrar iconos?" + +#~ msgid "Show file types?" +#~ msgstr "¿Mostrar tipos de archivos?" + +#~ msgid "Remember last visited directory?" +#~ msgstr "¿Regresar a la última carpeta visitada?" + +#~ msgid "Change my settings" +#~ msgstr "Modificar mis preferencias" + +#~ msgid "Searching for a folder" +#~ msgstr "Búsqueda de una carpeta" + +#~ msgid "Error, cannot find this folder" +#~ msgstr "Error, no se puede conseguir esta carpeta" + +#~ msgid "Back to the root folder" +#~ msgstr "Regresar al directorio raíz" + +#~ msgid "Select" +#~ msgstr "Seleccionar" + +#~ msgid "User" +#~ msgstr "Usuario" + +#, fuzzy +#~ msgid "Email report" +#~ msgstr "Dirección de correo" + +#, fuzzy +#~ msgid "Period:" +#~ msgstr "Periodicidad de facturación" + +#, fuzzy +#~ msgid "HTTP password (optional)" +#~ msgstr "Dirección de correo" + +#, fuzzy +#~ msgid "Mail address (optional)" +#~ msgstr "Dirección de correo" + +#, fuzzy +#~ msgid "Apply the modifications" +#~ msgstr "Último fracaso de conexión" + +#~ msgid "Domain hosting" +#~ msgstr "Hospedaje de dominio" + +#~ msgid "Contact your administrator for more information." +#~ msgstr "Contacta el administrador para obtener más información." + +#~ msgid "You cannot add any new domain, your quota is over." +#~ msgstr "No puedes hospedar más dominio, tu cuota alcanzó su limite." + +#~ msgid "host my dns here" +#~ msgstr "Hospedar el DNS en el servidor" + +#~ msgid "Add this domain" +#~ msgstr "Añadir este dominio" + +#~ msgid "" +#~ "If you don't want to host in our server the DNS of your domain, don't " +#~ "check the box 'host my dns here'. If you don't know what it mean, leave " +#~ "it checked." +#~ msgstr "" +#~ "Si no deseas que el DNS del dominio esté hospedado aquí, quita la " +#~ "selección 'Hospedar el DNS en el servidor'. Si no entiendes, deja la " +#~ "selección tal cual." + +#~ msgid "Whois result on the domain" +#~ msgstr "Resultado de la búsqueda Whois sobre el dominio" + +#~ msgid "Add a domain" +#~ msgstr "Hospedar un dominio" + +#~ msgid "Your new domain %s has been successfully installed" +#~ msgstr "Tu nuevo dominio %s fue instalado con éxito" + +#, fuzzy +#~ msgid "Deletion have been successfully cancelled" +#~ msgstr "Se cambió con éxito la dirección de correo." + +#~ msgid "Confirm the deletion of domain %s" +#~ msgstr "Confirmar la supresión del dominio %s" + +#~ msgid "WARNING" +#~ msgstr "ADVERTENCIA" + +#~ msgid "This will delete the related sub-domains too." +#~ msgstr "" +#~ "Esto va a suprimir todos los emails y los subdominios correspondientes.." + +#, fuzzy +#~ msgid "Yes, delete this domain name" +#~ msgstr "Instalar el dominio login.%s" + +#, fuzzy +#~ msgid "No, don't delete this domain name" +#~ msgstr "Instalar el dominio login.%s" + +#~ msgid "Domain %s deleted" +#~ msgstr "Dominio %s borrado" + +#~ msgid "The domain %s has been successfully deleted." +#~ msgstr "El dominio %s fue borrado." + +#, fuzzy +#~ msgid "Edit a subdomain:" +#~ msgstr "Modificar dominio %s" + +#~ msgid "Create a subdomain:" +#~ msgstr "Creación de un subdominio:" + +#, fuzzy +#~ msgid "(enter a TXT content for this domain)" +#~ msgstr "Añadir una cuenta de correo para el dominio %s" + +#, fuzzy +#~ msgid "Edit this subdomain" +#~ msgstr "Añadir este dominio" + +#, fuzzy +#~ msgid "Add this subdomain" +#~ msgstr "Añadir este dominio" + +#, fuzzy +#~ msgid "Missing value for this sub-domain" +#~ msgstr "Añadir una cuenta de correo para el dominio %s" + +#, fuzzy +#~ msgid "Manage %s" +#~ msgstr "Administrar miembros" + +#, fuzzy +#~ msgid "You requested deletion of domain %s." +#~ msgstr "Confirmar la supresión del dominio %s" + +#, fuzzy +#~ msgid "Edit subdomains" +#~ msgstr "Modificar dominio %s" + +#, fuzzy +#~ msgid "Add subdomains" +#~ msgstr "Añadir un subdominio" + +#~ msgid "Settings" +#~ msgstr "Configuración" + +#, fuzzy +#~ msgid "Editing subdomains of %s" +#~ msgstr "Modificar dominio %s" + +#, fuzzy +#~ msgid "Subdomain" +#~ msgstr "Subdominios" + +#, fuzzy +#~ msgid "Directory not found" +#~ msgstr "Dominio %s borrado" + +#, fuzzy +#~ msgid "Desactivation pending" +#~ msgstr "Desactivar" + +#, fuzzy +#~ msgid "Update pending" +#~ msgstr "Volver a cargar esta página" + +#, fuzzy +#~ msgid "Deletion pending" +#~ msgstr "Suprimir un usuario" + +#, fuzzy +#~ msgid "Add a subdomains to %s" +#~ msgstr "Añadir un subdominio" + +#, fuzzy +#~ msgid "DNS & Email parameters" +#~ msgstr "Parámetros DNS" + +#~ msgid "Manage the DNS on the server ?" +#~ msgstr "¿Administrar el DNS de este dominio?" + +#, fuzzy +#~ msgid "Manage the Emails Addresses of this domain on the server?" +#~ msgstr "¿Administrar el DNS de este dominio?" + +#~ msgid "Submit the changes" +#~ msgstr "Validar cambios" + +#, fuzzy +#~ msgid "Click here to view the dump" +#~ msgstr "Presiona aquí para seguir" + +#, fuzzy +#~ msgid "Domain removal" +#~ msgstr "Nombre de dominio" + +#~ msgid "Editing domain %s" +#~ msgstr "Modificar dominio %s" + +#~ msgid "The domain %s has been changed." +#~ msgstr "El dominio %s fue modificado." + +#~ msgid "The modifications will take effect at %time. Server time is %now." +#~ msgstr "" +#~ "Las modificaciones serán efectivas a las %time. La hora del servidor es " +#~ "acutalmente %now." + +#, fuzzy +#~ msgid "The domain field seems to be empty" +#~ msgstr "¡El buzón %s no existe!" + +#, fuzzy +#~ msgid "Working on %s" +#~ msgstr "Modificar dominio %s" + +#~ msgid "OK" +#~ msgstr "OK" + +#, fuzzy +#~ msgid "Enter the domain name you want to import" +#~ msgstr "¡El buzón %s no existe!" + +#, fuzzy +#~ msgid "Do you want to detect the redirection?" +#~ msgstr "¿Quieres ver los textos de ayuda y los enlaces en cada página?" + +#, fuzzy +#~ msgid "Submit" +#~ msgstr "Permisos" + +#~ msgid "Deleting subdomain %s" +#~ msgstr "Suprimir subdominio %s" + +#~ msgid "WARNING : Confirm the deletion of the subdomain" +#~ msgstr "ADVERTENCIA : Confirma la supresión del subdominio siguiente" + +#~ msgid "Deleting the subdomain %s:" +#~ msgstr "Suprimesión del subdominio %s:" + +#~ msgid "The modifications will take effect at %time. Server time is %now." +#~ msgstr "" +#~ "Las modificaciones serán efectivas a las %time. La hora del servidor es " +#~ "acutalmente %now." + +#, fuzzy +#~ msgid "Editing subdomain" +#~ msgstr "Modificar dominio %s" + +#~ msgid "The ftp account %s has been successfully deleted" +#~ msgstr "La cuenta FTP %s fue borrada" + +#, fuzzy +#~ msgid "Confirm the FTP accounts deletion" +#~ msgstr "Confirmar la supresión del dominio %s" + +#, fuzzy +#~ msgid "Create a FTP account" +#~ msgstr "Crear la cuenta FTP." + +#, fuzzy +#~ msgid "The ftp account has been successfully saved" +#~ msgstr "La cuenta FTP fue modificada" + +#, fuzzy +#~ msgid "Editing a FTP account" +#~ msgstr "Modificación de una cuenta FTP" + +#, fuzzy +#~ msgid "Click here if you want to edit password" +#~ msgstr "Por favor, entra una contraseña" + +#, fuzzy +#~ msgid "Password do not match" +#~ msgstr "Las contraseñas no corresponden" + +#~ msgid "Please enter a password" +#~ msgstr "Por favor, entra una contraseña" + +#~ msgid "FTP accounts list" +#~ msgstr "Lista de cuentas FTP" + +#~ msgid "Create a new ftp account" +#~ msgstr "Crear una nueva cuenta FTP" + +#, fuzzy +#~ msgid "Server:" +#~ msgstr "Servidor SQL" + +#, fuzzy +#~ msgid "User/password:" +#~ msgstr "Nueva contraseña" + +#, fuzzy +#~ msgid "AlternC Control Panel" +#~ msgstr "Panel Administrador" + +#~ msgid "Protect a folder" +#~ msgstr "Proteger una carpeta" + +#~ msgid "Adding a username in %s" +#~ msgstr "Añadir un usuario autorizado en %s" + +#~ msgid "Add this user" +#~ msgstr "Añadir el usuario" + +#~ msgid "The protected folder %s has been successfully unprotected" +#~ msgstr "La carpeta protegida %s fue desprotegida" + +#, fuzzy +#~ msgid "Authorized user deletion confirm" +#~ msgstr "Ningún usuario autorizado en %s" + +#~ msgid "Change the user %s in the protected folder %s" +#~ msgstr "Modificar usuario %s en la carpeta protegida %s" + +#~ msgid "The password of the user %s has been successfully changed" +#~ msgstr "La contraseña del usuario %s fue modificada con éxito" + +#~ msgid "No folder selected!" +#~ msgstr "¡Ninguna carpeta seleccionada!" + +#~ msgid "List of authorized user in folder %s" +#~ msgstr "Lista de los usuarios autorizados en la carpeta %s" + +#~ msgid "No authorized user in %s" +#~ msgstr "Ningún usuario autorizado en %s" + +#, fuzzy +#~ msgid "Change this user's password" +#~ msgstr "Modificar contraseña" + +#~ msgid "Delete the checked users" +#~ msgstr "Suprimir los usuarios marcados" + +#, fuzzy +#~ msgid "Adding an authorized user" +#~ msgstr "Ningún usuario autorizado en %s" + +#~ msgid "Editing user %s in the protected folder %s" +#~ msgstr "Modificar usuario %s en la carpeta protegida %s" + +#~ msgid "New password" +#~ msgstr "Nueva contraseña" + +#~ msgid "Change the password" +#~ msgstr "Modificar contraseña" + +#~ msgid "Protected folders list" +#~ msgstr "Lista de carpetas protegidas" + +#, fuzzy +#~ msgid "Edit login and passwords" +#~ msgstr "Contraseña inicial" + +#~ msgid "Unprotect the checked folders" +#~ msgstr "Quitar protección a las carpetas marcadas" + +#, fuzzy +#~ msgid "Web Hosting Control Panel" +#~ msgstr "Panel Administrador" + +#, fuzzy +#~ msgid "AlternC access" +#~ msgstr "Lista de cuentas FTP" + +#~ msgid "Enter" +#~ msgstr "Entrar" + +#~ msgid "You must accept the session cookie to log-in" +#~ msgstr "Debe aceptar el cookie de sesión para poder conectarte" + +#, fuzzy +#~ msgid "Need a login and a password" +#~ msgstr "Contraseña inicial" + +#, fuzzy +#~ msgid "Enabled rules" +#~ msgstr "¿Cuenta activa?" + +#, fuzzy +#~ msgid "Access type" +#~ msgstr "Tipo de cuenta" + +#, fuzzy +#~ msgid "Add a new rule" +#~ msgstr "Añadir un nuevo TLD" + +#, fuzzy +#~ msgid "Creation Date" +#~ msgstr "Crear" + +#, fuzzy +#~ msgid "Download link" +#~ msgstr "Bajar" + +#~ msgid "Download" +#~ msgstr "Bajar" + +#~ msgid "Deleting mail accounts" +#~ msgstr "Supresión de buzones de correo" + +#~ msgid "Please confirm the deletion of the following mail accounts:" +#~ msgstr "Confirmar la supresión de los buzones de correo siguientes:" + +#, fuzzy +#~ msgid "Confirm the deletion" +#~ msgstr "Confirmar la supresión del dominio %s" + +#, fuzzy +#~ msgid "Don't delete anything and go back to the email list" +#~ msgstr "No borrar nada, volver a la lista de buzones de correo" + +#, fuzzy +#~ msgid "Editing the email %s" +#~ msgstr "Modificar el buzón %s" + +#, fuzzy +#~ msgid "Is it a POP/IMAP account?" +#~ msgstr "¿Cuenta POP?" + +#, fuzzy +#~ msgid "Click here to edit the existing password" +#~ msgstr "Por favor, entra una contraseña" + +#, fuzzy +#~ msgid "Enter a POP/IMAP password" +#~ msgstr "Contraseña POP" + +#, fuzzy +#~ msgid "" +#~ "WARNING: turning POP/IMAP off will DELETE the stored messages in this " +#~ "email address." +#~ msgstr "" +#~ "CUIDADO: desactivar el POP BORRARÁ la casilla de correo y su contenido" + +#, fuzzy +#~ msgid "Is it a redirection to other email addresses?" +#~ msgstr "Borrar las bases de datos seleccionadas" + +#, fuzzy +#~ msgid "one recipient per line" +#~ msgstr "una cuenta de correo por línea" + +#, fuzzy +#~ msgid "Change this email address" +#~ msgstr "Modificar este buzón" + +#, fuzzy +#~ msgid "Create a new mail account" +#~ msgstr "Crear una nueva cuenta FTP" + +#, fuzzy +#~ msgid "Can't have empty mail." +#~ msgstr "Cambiar mi dirección email" + +#, fuzzy +#~ msgid "Create this email address" +#~ msgstr "Añadir este buzón" + +#, fuzzy +#~ msgid "Manage Catch-all for this domain" +#~ msgstr "Añadir una cuenta de correo para el dominio %s" + +#, fuzzy +#~ msgid "Email addresses of the domain %s" +#~ msgstr "Lista de las buzones de correo del dominio %s" + +#, fuzzy +#~ msgid "No mails for this domain." +#~ msgstr "Añadir una cuenta de correo para el dominio %s" + +#, fuzzy +#~ msgid "Show system emails" +#~ msgstr "Nombre de dominio" + +#, fuzzy +#~ msgid "Address" +#~ msgstr "Dirección IP" + +#, fuzzy +#~ msgid "Last login time" +#~ msgstr "Última conexión" + +#~ msgid "Other recipients" +#~ msgstr "Otros destinatarios" + +#, fuzzy +#~ msgid "Deleting..." +#~ msgstr "extrayendo..." + +#, fuzzy +#~ msgid "Undelete" +#~ msgstr "borrado" + +#, fuzzy +#~ msgid "Delete the checked email addresses" +#~ msgstr "Borrar las bases de datos seleccionadas" + +#, fuzzy +#~ msgid "Submission" +#~ msgstr "Permisos" + +#, fuzzy +#~ msgid "Server name: " +#~ msgstr "Cambiar nombre" + +#, fuzzy +#~ msgid "Username: " +#~ msgstr "Nombre de usuario" + +# msgid "New password" +# msgstr "Nueva contraseña" +#, fuzzy +#~ msgid "Normal password" +#~ msgstr "Confirmar contraseña" + +#, fuzzy +#~ msgid "Connection security:" +#~ msgstr "Conectarse como" + +# msgid "New password" +# msgstr "Nueva contraseña" +#, fuzzy +#~ msgid "Normal Password" +#~ msgstr "Confirmar contraseña" + +#, fuzzy +#~ msgid "Catchall successfully deleted" +#~ msgstr "El miembro %s fue borrado con éxito" + +#, fuzzy +#~ msgid "Catchall successfully updated" +#~ msgstr "El juego de estadísticas fue creado" + +#, fuzzy +#~ msgid "No catch-all for this domain." +#~ msgstr "Añadir una cuenta de correo para el dominio %s" + +#, fuzzy +#~ msgid "Enter the 'target' domain" +#~ msgstr "Administración de los dominios instalados" + +#, fuzzy +#~ msgid "Missing POST of the mail address" +#~ msgstr "Modificar este buzón" + +#~ msgid "Last Login: " +#~ msgstr "Última conexión: " + +#~ msgid "from: %1$s " +#~ msgstr "desde %1$s " + +#~ msgid "%1$d login failed since last login" +#~ msgstr "%1$d intentos fallidos desde la última conexión" + +#~ msgid "Expired or about to expire accounts" +#~ msgstr "Cuentas que expiraron o que expiran pronto" + +#~ msgid "Last name, surname" +#~ msgstr "Nombre, Apellido" + +#~ msgid "uid" +#~ msgstr "uid" + +#~ msgid "Your administrator preferences has been successfully changed." +#~ msgstr "Tus preferencias de administrador fueron modificadas." + +#~ msgid "Admin preferences" +#~ msgstr "Preferencias de administrador" + +#~ msgid "Change the email of the account" +#~ msgstr "Cambiar la dirección de correo de la cuenta" + +#~ msgid "help_mem_chgmail %s" +#~ msgstr "" +#~ "Se mandó un mensaje a la dirección email %s para " +#~ "confirmación.
Este mensaje contiene un enlace que podrás visitar para " +#~ "validar la modificación.
Ahí se te pedirá la siguiente clave:
" + +#~ msgid "" +#~ "Enter the key you got when you requested the mailbox change, then click " +#~ "the OK button." +#~ msgstr "" +#~ "Entra la clave que te fue enviada para confirmar el cambio de dirección " +#~ "de correo y presiona en OK." + +#~ msgid "Key" +#~ msgstr "Clave" + +#~ msgid "The mailbox has been successfully changed." +#~ msgstr "Se cambió con éxito la dirección de correo." + +#~ msgid "Disconnected" +#~ msgstr "Desconectado" + +#~ msgid "You have been logged out of your administration desktop." +#~ msgstr "Fuiste desconectado de la interfaz de administración." + +#~ msgid "Click here to log in" +#~ msgstr "Presiona aquí para volver a conectarte" + +#~ msgid "Settings of your account" +#~ msgstr "Parámetros de tu cuenta" + +#~ msgid "Help" +#~ msgstr "Ayuda" + +#, fuzzy +#~ msgid "Administrator" +#~ msgstr "Administración" + +#~ msgid "Password change" +#~ msgstr "Cambio de contraseña" + +#~ msgid "You cannot change your password" +#~ msgstr "No estás autorizado a cambiar tu contraseña" + +#~ msgid "help_chg_passwd" +#~ msgstr "" +#~ "Aquí puedes modificar la contraseña que te permite acceder a la interfaz. " +#~ "¡No la pierdas!
Entra aquí la contraseña actual, y luego la nueva " +#~ "contraseña (dos veces, por seguridad), y presiona en 'Cambiar la " +#~ "contraseña''" + +#~ msgid "Old password" +#~ msgstr "Antigua contraseña" + +# msgid "New password" +# msgstr "Nueva contraseña" +#~ msgid "Change my password" +#~ msgstr "Cambiar mi contraseña" + +#~ msgid "help_chg_mail" +#~ msgstr "" +#~ "Aquí puedes modificar la dirección de correo relacionada con tu cuenta." +#~ "
Ingresa a continuación la nueva dirección. Un mensaje será enviado a " +#~ "esta dirección para confirmación." + +#~ msgid "Current mailbox" +#~ msgstr "Dirección actual" + +#~ msgid "New mailbox" +#~ msgstr "Nueva dirección" + +#, fuzzy +#~ msgid "Change my email address" +#~ msgstr "Cambiar mi dirección email" + +#~ msgid "Online help settings" +#~ msgstr "Parámetros de la ayuda en línea" + +#~ msgid "help_help_settings" +#~ msgstr "" +#~ "Cada página de la interfaz presenta información de ayuda resumida, " +#~ "acompañada por un enlace hacia la ayuda en línea
Para ver esta ayuda " +#~ "de manera automática, márcalo aquí." + +#~ msgid "Do you want to see the help texts and links on each page?" +#~ msgstr "¿Quieres ver los textos de ayuda y los enlaces en cada página?" + +#~ msgid "Change these settings" +#~ msgstr "Modificar estos parámetros" + +#~ msgid "Members list view" +#~ msgstr "Vista de la lista de miembros" + +#~ msgid "Large view" +#~ msgstr "Vista amplia" + +#~ msgid "Short view" +#~ msgstr "Vista reducida" + +#~ msgid "Change my admin preferences" +#~ msgstr "Modificar mis preferencias de administrador" + +#~ msgid "Your password has been successfully changed." +#~ msgstr "La contraseña fue cambiada." + +#, fuzzy +#~ msgid "Welcome %s" +#~ msgstr "Borrar %s" + +#, fuzzy +#~ msgid "You cannot add any new Piwik account, your quota is over." +#~ msgstr "Tu cuota de cuentas FTP alcanzó su limite, no se pueden crear más." + +#, fuzzy +#~ msgid "Creation of Piwik account \"%s\"" +#~ msgstr "Crear una nueva cuenta FTP" + +#, fuzzy +#~ msgid "Site successfully deleted" +#~ msgstr "El miembro %s fue borrado con éxito" + +#, fuzzy +#~ msgid "Piwik site deletion confirm" +#~ msgstr "Lista de cuentas FTP" + +#, fuzzy +#~ msgid "Add a new website" +#~ msgstr "Añadir un nuevo TLD" + +#, fuzzy +#~ msgid "No existing Piwik websites" +#~ msgstr "Modificación de una cuenta FTP" + +#, fuzzy +#~ msgid "Site name" +#~ msgstr "Cambiar nombre" + +#, fuzzy +#~ msgid "No piwik user specified" +#~ msgstr "¡Ninguna carpeta seleccionada!" + +#, fuzzy +#~ msgid "This right does not exist" +#~ msgstr "El usuario no existe" + +#, fuzzy +#~ msgid "Rights for user" +#~ msgstr "Derechos MySQL para %s" + +#, fuzzy +#~ msgid "Add rights to user" +#~ msgstr "Añadir el usuario" + +#, fuzzy +#~ msgid "noacces" +#~ msgstr "Lista de cuentas FTP" + +#, fuzzy +#~ msgid "Create a new piwik account" +#~ msgstr "Crear una nueva cuenta FTP" + +#, fuzzy +#~ msgid "Existing Piwik accounts" +#~ msgstr "Modificación de una cuenta FTP" + +#, fuzzy +#~ msgid "Connect" +#~ msgstr "Conectarse como" + +#~ msgid "Account's quotas" +#~ msgstr "Cuotas de la cuenta" + +#~ msgid "No quotas for this account, or quotas currently unavailable!" +#~ msgstr "¡No hay cuota para esta cuenta, o imposible obtener cuota!" + +#, fuzzy +#~ msgid "%s account" +#~ msgstr "%s cuentas" + +#, fuzzy +#~ msgid "quota_web" +#~ msgstr "quota_" + +#~ msgid "Domains" +#~ msgstr "Dominios" + +#, fuzzy +#~ msgid "Emails" +#~ msgstr "Dirección de correo" + +#, fuzzy +#~ msgid "Databases:" +#~ msgstr "Bases de datos" + +#, fuzzy +#~ msgid "Quotas status" +#~ msgstr "Cuotas" + +#, fuzzy +#~ msgid "Administration -> Manage the Alternc accounts" +#~ msgstr "Cambiar la dirección de correo de la cuenta" + +#, fuzzy +#~ msgid "Show the domain names" +#~ msgstr "Nombre de dominio" + +#, fuzzy +#~ msgid "Hide the domain names" +#~ msgstr "Instalar el dominio login.%s" + +#, fuzzy +#~ msgid "All accounts" +#~ msgstr "%s cuentas" + +#, fuzzy +#~ msgid "Email addresses" +#~ msgstr "Dirección de correo" + +# msgid "General SQL Admin" +# msgstr "Admin general SQL " +#~ msgid "MySQL Databases" +#~ msgstr "Base de datos MySQL" + +#, fuzzy +#~ msgid "Dom" +#~ msgstr "Dominio" + +# msgid "General SQL Admin" +# msgstr "Admin general SQL " +#, fuzzy +#~ msgid "MySQL Databases - Configure backups" +#~ msgstr "Base de datos MySQL" + +#~ msgid "Manage the SQL backup for database %s" +#~ msgstr "Manejar el respaldo de la base %s" + +#, fuzzy +#~ msgid "Do MySQL backup?" +#~ msgstr "¿Respaldar la base SQL?" + +#~ msgid "No backup" +#~ msgstr "Sin respaldo" + +#~ msgid "Weekly backup" +#~ msgstr "Copia de respaldo semanal" + +#~ msgid "Daily backup" +#~ msgstr "Copia de respaldo diaria" + +#, fuzzy +#~ msgid "How many backups should be kept?" +#~ msgstr "¿Cuantas copias de respaldo hay que conservar?" + +#~ msgid "Compress the backups? (gzip)" +#~ msgstr "¿Comprimir las copias de respaldo? (gzip)" + +#~ msgid "In which folder do you want to store the backups?" +#~ msgstr "¿Dónde se almacenan las copias de respaldo?" + +#, fuzzy +#~ msgid "Change the MySQL backup parameters" +#~ msgstr "Cambiar los parámetros de resplados SQL" + +#~ msgid "The database %s has been successfully deleted" +#~ msgstr "Tu base de datos %s fue borrada" + +#~ msgid "Confirm the deletion of the following SQL databases" +#~ msgstr "Confirmar la supresión de las bases de datos SQL siguientes" + +#~ msgid "This will delete all the tables currently in those db." +#~ msgstr "Esto borrará todas las tablas contenidas dentro de estas bases." + +#, fuzzy +#~ msgid "No, don't delete the database" +#~ msgstr "Borrar las bases de datos seleccionadas" + +#, fuzzy +#~ msgid "Yes, delete the database" +#~ msgstr "Borrar las bases de datos seleccionadas" + +#, fuzzy +#~ msgid "Can't create a database: your quota is over" +#~ msgstr "No puedes crear más estadísticas, alcanzaste el limite de tu cuota." + +#~ msgid "Your backup parameters has been successfully changed." +#~ msgstr "Tus parámetros de respaldos fueron cambiados." + +#~ msgid "Restore a SQL backup" +#~ msgstr "Restaurar una copia de resplado SQL" + +#~ msgid "" +#~ "Your database has been restored, check out the previous text for error " +#~ "messages." +#~ msgstr "Tu base fue restaurada, verifica los posibles errores en el texto." + +#, fuzzy +#~ msgid "Your current connection settings are" +#~ msgstr "Los parámetros actuales son" + +#, fuzzy +#~ msgid "Mysql Server" +#~ msgstr "Servidor SQL" + +#~ msgid "Database" +#~ msgstr "Base de datos" + +#, fuzzy +#~ msgid "Web interface PhpMyAdmin" +#~ msgstr "Admin SQL general" + +#, fuzzy +#~ msgid "Back to the MySQL database list" +#~ msgstr "Regresar a la lista de cuentas" + +#~ msgid "Backup" +#~ msgstr "Respaldos" + +#~ msgid "Restore" +#~ msgstr "Restauración" + +#, fuzzy +#~ msgid "Show Settings" +#~ msgstr "Configuración" + +#~ msgid "Delete the checked databases" +#~ msgstr "Borrar las bases de datos seleccionadas" + +# ################################################################# +#, fuzzy +#~ msgid "Create a new MySQL database" +#~ msgstr "Crear una nueva base de datos" + +# msgid "General SQL Admin" +# msgstr "Admin general SQL " +#, fuzzy +#~ msgid "MySQL Database" +#~ msgstr "Base de datos MySQL" + +#, fuzzy +#~ msgid "Create this new MySQL database." +#~ msgstr "Crear esta nueva base de datos" + +#~ msgid "SQL Admin" +#~ msgstr "Admin SQL" + +#, fuzzy +#~ msgid "Restore a MySQL backup for database %s" +#~ msgstr "Restaurar una copia de respaldo de la base de datos SQL %s" + +#, fuzzy +#~ msgid "" +#~ "Please enter the path and the filename containing SQL data to be restored." +#~ msgstr "" +#~ "Entra el nombre del archivo que contiene los datos SQL por restaurar en " +#~ "la base." + +#~ msgid "Restore my database" +#~ msgstr "Restaurar mi base de datos" + +#~ msgid "Note: If the filename ends with .gz, it will be uncompressed before." +#~ msgstr "" +#~ "Nota: Si el nombre del archivo termina por .gz, primero será " +#~ "descomprimido." + +#~ msgid "Create a new MySQL user" +#~ msgstr "Crear un nuevo usuario MySQL" + +#, fuzzy +#~ msgid "Create this new MySQL user" +#~ msgstr "Crear un nuevo usuario MySQL" + +#~ msgid "The user %s has been successfully deleted" +#~ msgstr "Tu usuario %s fue borrado" + +# msgid "General SQL Admin" +# msgstr "Admin general SQL " +#~ msgid "MySQL users" +#~ msgstr "Usuarios MySQL" + +#~ msgid "Confirm the deletion of the following MySQL users" +#~ msgstr "Confirmar la supresión de los usuarios MySQL siguientes" + +#, fuzzy +#~ msgid "No, don't delete the MySQL user" +#~ msgstr "Crear un nuevo usuario MySQL" + +#, fuzzy +#~ msgid "Yes, delete the MySQL user" +#~ msgstr "Crear un nuevo usuario MySQL" + +#~ msgid "The rights has been successfully applied to the user" +#~ msgstr "Los derechos fueron correctamente aplicados al usuario" + +# msgid "General SQL Admin" +# msgstr "Admin general SQL " +#~ msgid "MySQL Users" +#~ msgstr "Usuarios MySQL" + +#~ msgid "Rights" +#~ msgstr "Derechos" + +#, fuzzy +#~ msgid "Manage the rights" +#~ msgstr "Administrar miembros" + +#, fuzzy +#~ msgid "Change user password" +#~ msgstr "Modificar contraseña" + +#~ msgid "MySQL Rights for %s" +#~ msgstr "Derechos MySQL para %s" + +#~ msgid "Apply" +#~ msgstr "Aplicar" + +#, fuzzy +#~ msgid "" +#~ "Image_Graph not installed. use 'aptitude install php-pear' then 'pear " +#~ "install --alldeps Image_Graph-devel' to see the graph." +#~ msgstr "" +#~ "Image_Graph no está instalado. Ejecuta 'aptitude install php-pear' en un " +#~ "terminal del servidor, y luego 'pear --alldeps install Image_Graph-devel' " +#~ "para poder ver el gráfico." + +#~ msgid "Account creation per month" +#~ msgstr "Cuentas creadas por mes" + +#~ msgid "before the month" +#~ msgstr "antes de el mes" + +#~ msgid "during the month" +#~ msgstr "durante el mes" + +#, fuzzy +#~ msgid "Console access" +#~ msgstr "Lista de cuentas FTP" + +#, fuzzy +#~ msgid "Click here to start a virtual machine." +#~ msgstr "Presiona aquí para seguir" + +# Variables used in functions.php3 +#~ msgid "Bytes" +#~ msgstr "Octetos" + +#~ msgid "Byte" +#~ msgstr "Octeto" + +#~ msgid "Kb" +#~ msgstr "Kb" + +#~ msgid "Mb" +#~ msgstr "Mb" + +#~ msgid "Gb" +#~ msgstr "Gb" + +#~ msgid "Tb" +#~ msgstr "Tb" + +#~ msgid "year" +#~ msgstr "año" + +# Variables used in functions.php3 +#~ msgid "years" +#~ msgstr "años" + +#~ msgid "month" +#~ msgstr "mes" + +#~ msgid "months" +#~ msgstr "meses" + +#~ msgid "Not managed" +#~ msgstr "No manejado" + +#, fuzzy +#~ msgid "Clic here to generate a password" +#~ msgstr "Por favor, entra una contraseña" + +#, fuzzy +#~ msgid "Choose a folder..." +#~ msgstr "Proteger una carpeta" + +#, fuzzy +#~ msgid "Error selecting old actions" +#~ msgstr "Parámetros de tu cuenta" + +#~ msgid "This TLD is forbidden" +#~ msgstr "Este TLD está prohibido" + +#~ msgid "primary DNS is checked in WHOIS db" +#~ msgstr "verificar el DNS primario en la base WHOIS" + +#~ msgid "primary & secondary DNS are checked in WHOIS db" +#~ msgstr "verificar los DNS primario y segundario en la base WHOIS" + +#~ msgid "Domain must exist, but don't do any DNS check" +#~ msgstr "El dominio debe existir, pero no hacer ninguna verificación de DNS" + +#~ msgid "Domain can be installed, no check at all" +#~ msgstr "Se puede instalar el dominio, ninguna verificación" + +#, fuzzy +#~ msgid "Domain can be installed, force NO DNS hosting" +#~ msgstr "El dominio puede ser instalado (pero no se maneja el DNS)" + +#~ msgid "Administration" +#~ msgstr "Administración" + +#, fuzzy +#~ msgid "Manage AlternC accounts" +#~ msgstr "Cambiar la dirección de correo de la cuenta" + +#, fuzzy +#~ msgid "User Quotas" +#~ msgstr "Cuotas" + +#, fuzzy +#~ msgid "Applying..." +#~ msgstr "extrayendo..." + +#, fuzzy +#~ msgid "Apply changes" +#~ msgstr "Cambio de contraseña" + +#, fuzzy +#~ msgid "You don't seem to be allowed to delegate this domain" +#~ msgstr "Confirmar la supresión del dominio %s" + +#, fuzzy +#~ msgid "Please enter a valid email address" +#~ msgstr "Añadir este buzón" + +#, fuzzy +#~ msgid "This account is ALREADY an administrator account" +#~ msgstr "Esta cuenta es un cuenta de administrador" + +#, fuzzy +#~ msgid "This account is NOT an administrator account!" +#~ msgstr "Esta cuenta es un cuenta de administrador" + +#, fuzzy +#~ msgid "Domain '%s' not found." +#~ msgstr "Dominio %s borrado" + +#, fuzzy +#~ msgid "This TLD does not exist" +#~ msgstr "El usuario no existe" + +#, fuzzy +#~ msgid "Please enter a login" +#~ msgstr "Por favor, entra una contraseña" + +#, fuzzy +#~ msgid "Go back to the file manager" +#~ msgstr "Regresar al manejador de archivos" + +#, fuzzy +#~ msgid "This directory do not exist" +#~ msgstr "El usuario no existe" + +#, fuzzy +#~ msgid "File not in authorized directory" +#~ msgstr "Ningún usuario autorizado en %s" + +#, fuzzy +#~ msgid "Email address is not valid" +#~ msgstr "Lista de las buzones de correo del dominio %s" + +#, fuzzy +#~ msgid "Missing domain name" +#~ msgstr "Modificar dominio %s" + +#, fuzzy +#~ msgid "The domain already exist" +#~ msgstr "Editar archivo" + +#, fuzzy +#~ msgid "Domain '%s' not found" +#~ msgstr "Dominio %s borrado" + +#, fuzzy +#~ msgid "Could not delete default type" +#~ msgstr "no pudo ser borrado" + +#, fuzzy +#~ msgid "The sub-domain does not exist" +#~ msgstr "¡El buzón %s no existe!" + +#, fuzzy +#~ msgid "The folder you entered is incorrect or does not exist" +#~ msgstr "El miembro '%s' no existe" + +#, fuzzy +#~ msgid "The name you entered is incorrect" +#~ msgstr "El miembro '%s' no existe" + +#, fuzzy +#~ msgid "The TXT value you entered is incorrect" +#~ msgstr "El miembro '%s' no existe" + +#, fuzzy +#~ msgid "The domain name %s does not exist" +#~ msgstr "¡El buzón %s no existe!" + +#, fuzzy +#~ msgid "No change has been requested..." +#~ msgstr "Los parámetros de ayuda han sido modificados." + +#, fuzzy +#~ msgid "This domain is not installed in your account" +#~ msgstr "Esta cuenta es un cuenta de administrador" + +#, fuzzy +#~ msgid "URL redirection" +#~ msgstr "Dirigir hacia una URL" + +#~ msgid "Webmail access" +#~ msgstr "Acceso Webmail" + +#, fuzzy +#~ msgid "Default mail server" +#~ msgstr "Valores por omisión" + +#~ msgid "err_" +#~ msgstr "err_" + +#~ msgid "FTP accounts" +#~ msgstr "Cuentas FTP" + +#, fuzzy +#~ msgid "This account do not exist or is not of this account" +#~ msgstr "Esta cuenta es un cuenta de administrador" + +#, fuzzy +#~ msgid "No FTP account found" +#~ msgstr "No existe ninguna cuenta por el momento" + +#, fuzzy +#~ msgid "This FTP account does not exist" +#~ msgstr "El usuario no existe" + +#, fuzzy +#~ msgid "FTP login is incorrect" +#~ msgstr "El miembro '%s' no existe" + +#, fuzzy +#~ msgid "This FTP account already exists" +#~ msgstr "¡El buzón %s no existe!" + +#, fuzzy +#~ msgid "The directory cannot be created" +#~ msgstr "no pudo ser borrado" + +#, fuzzy +#~ msgid "Password can't be empty" +#~ msgstr "Cambio de contraseña" + +#~ msgid "Protected folders" +#~ msgstr "Carpetas protegidas" + +#, fuzzy +#~ msgid "The folder '%s' does not exist" +#~ msgstr "El miembro '%s' no existe" + +#, fuzzy +#~ msgid "No protected folder" +#~ msgstr "Carpetas protegidas" + +#, fuzzy +#~ msgid "Please enter a user" +#~ msgstr "Por favor, entra una contraseña" + +#, fuzzy +#~ msgid "The user '%s' already exist for this folder" +#~ msgstr "No hay ningún archivo en esta carpeta" + +#, fuzzy +#~ msgid "An incompatible .htaccess file exists in this folder" +#~ msgstr "No hay ningún archivo en esta carpeta" + +#, fuzzy +#~ msgid "VM already started" +#~ msgstr "Desactivar" + +#, fuzzy +#~ msgid "Email Addresses" +#~ msgstr "Dirección de correo" + +#, fuzzy +#~ msgid "Email account password" +#~ msgstr "Contraseña inicial" + +#, fuzzy +#~ msgid "No email found for this query" +#~ msgstr "Añadir una cuenta de correo para el dominio %s" + +#, fuzzy +#~ msgid "You cannot create email addresses: your quota is over" +#~ msgstr "No puedes crear más estadísticas, alcanzaste el limite de tu cuota." + +#, fuzzy +#~ msgid "This email address already exists" +#~ msgstr "¡El buzón %s no existe!" + +#, fuzzy +#~ msgid "The email %s does not exist, it can't be deleted" +#~ msgstr "¡El buzón %s no existe!" + +#, fuzzy +#~ msgid "The email %s has been marked for deletion" +#~ msgstr "El dominio %s fue borrado." + +#, fuzzy +#~ msgid "The email %s has been successfully deleted" +#~ msgstr "El dominio %s fue borrado." + +#, fuzzy +#~ msgid "The email %s has been undeleted" +#~ msgstr "¡El buzón %s fue borrado!" + +#, fuzzy +#~ msgid "The slave MX account was not found" +#~ msgstr "Tipo de cuenta" + +#, fuzzy +#~ msgid "This account is locked, contact the administrator" +#~ msgstr "Esta cuenta es un cuenta de administrador" + +#, fuzzy +#~ msgid "Missing password" +#~ msgstr "Contraseña inicial" + +#, fuzzy +#~ msgid "Cookie incorrect, please accept the session cookie" +#~ msgstr "Debe aceptar el cookie de sesión para poder conectarte" + +#, fuzzy +#~ msgid "You are not allowed to change your password." +#~ msgstr "No estás autorizado a cambiar tu contraseña" + +#, fuzzy +#~ msgid "This account is locked, contact the administrator." +#~ msgstr "Esta cuenta es un cuenta de administrador" + +#~ msgid "Logout" +#~ msgstr "Salir" + +#~ msgid "Online help" +#~ msgstr "Ayuda en línea" + +#~ msgid "Languages" +#~ msgstr "Idiomas" + +# msgid "General SQL Admin" +# msgstr "Admin general SQL " +#, fuzzy +#~ msgid "MySQL" +#~ msgstr "Usuarios MySQL" + +#~ msgid "Databases" +#~ msgstr "Bases de datos" + +#, fuzzy +#~ msgid "Database %s not found" +#~ msgstr "Dominio %s borrado" + +#, fuzzy +#~ msgid "Database %s already exists" +#~ msgstr "Editar archivo" + +#, fuzzy +#~ msgid "An error occured. The database could not be created" +#~ msgstr "no pudo ser borrado" + +#, fuzzy +#~ msgid "The database was not found. I can't delete it" +#~ msgstr "Tu base de datos %s fue borrada" + +#, fuzzy +#~ msgid "User aren't allowed to configure their backups" +#~ msgstr "No estás autorizado a cambiar tu contraseña" + +#, fuzzy +#~ msgid "Directory does not exist" +#~ msgstr "El usuario no existe" + +#, fuzzy +#~ msgid "Database not found" +#~ msgstr "Dominio %s borrado" + +#, fuzzy +#~ msgid "The password is mandatory" +#~ msgstr "Las contraseñas no corresponden" + +#, fuzzy +#~ msgid "Database user not found" +#~ msgstr "Dominio %s borrado" + +#, fuzzy +#~ msgid "No file specified" +#~ msgstr "¡Ninguna carpeta seleccionada!" + +#, fuzzy +#~ msgid "The database user already exists" +#~ msgstr "Editar archivo" + +#, fuzzy +#~ msgid "The passwords do not match" +#~ msgstr "Las contraseñas no corresponden" + +#, fuzzy +#~ msgid "The username was not found" +#~ msgstr "Tipo de cuenta" + +#, fuzzy +#~ msgid "This user does not exist in the MySQL/User database" +#~ msgstr "¡El buzón %s no existe!" + +#, fuzzy +#~ msgid "The directory could not be created" +#~ msgstr "no pudo ser borrado" + +#, fuzzy +#~ msgid "Piwik statistics" +#~ msgstr "Estadísticas Web" + +#, fuzzy +#~ msgid "Piwik Users" +#~ msgstr "Usuarios" + +#~ msgid "Show my quotas" +#~ msgstr "Mostrar cuotas" + +#~ msgid "quota_" +#~ msgstr "quota_" + +#, fuzzy +#~ msgid "Error writing the quota entry!" +#~ msgstr "Modificar cuotas del miembro" + +#~ msgid "CSS Stylesheet" +#~ msgstr "Hoja de estilo CSS" + +#~ msgid "Comma Separated Values data" +#~ msgstr "Datos separados por una coma" + +#~ msgid "DIA Diagram" +#~ msgstr "Diagrama DIA" + +#~ msgid "Word Document" +#~ msgstr "Documento Word" + +#~ msgid "Word Document Template" +#~ msgstr "Modelo de documento Word" + +#~ msgid "Encapsulated Postscript" +#~ msgstr "Postscript encapsulado" + +#~ msgid "GIF Image" +#~ msgstr "Imagen GIF" + +#~ msgid "Macintosh Executable" +#~ msgstr "Ejecutable Macintosh" + +#~ msgid "HTML Document" +#~ msgstr "Documento HTML" + +#~ msgid "JPEG Image" +#~ msgstr "Imagen JPEG" + +#~ msgid "Music Playlist" +#~ msgstr "Lista de pistas musicales" + +#~ msgid "MP3 Music File" +#~ msgstr "Archivo de música MP3" + +#~ msgid "Ogg Music File" +#~ msgstr "Archivo de música Ogg" + +#~ msgid "Acrobat PDF" +#~ msgstr "Documento PDF" + +#~ msgid "PHP Source" +#~ msgstr "Fuente PHP" + +#~ msgid "PNG Image" +#~ msgstr "Imagen PNG" + +#~ msgid "Powerpoint Slideshow" +#~ msgstr "Presentación Powerpoint" + +#~ msgid "Postscript Document" +#~ msgstr "Documento Postscript" + +#~ msgid "Photoshop Image" +#~ msgstr "Imagen Photoshop" + +#~ msgid "Rar Compressed Files" +#~ msgstr "Archivos comprimidos RAR" + +#~ msgid "Rich Text Document" +#~ msgstr "Documento enriquezido RTF" + +#~ msgid "OpenOffice Spreadsheet" +#~ msgstr "Hoja de cálculo OpenOffice" + +#~ msgid "OpenOffice Drawing" +#~ msgstr "Dibujo OpenOffice" + +#~ msgid "OpenOffice Presentation" +#~ msgstr "Presentación OpenOffice" + +#~ msgid "OpenOffice Writer" +#~ msgstr "Texto OpenOffice" + +#~ msgid "TIFF Image" +#~ msgstr "Imagen TIFF" + +#~ msgid "Text Document" +#~ msgstr "Documento Texto" + +#~ msgid "Virtual Card" +#~ msgstr "Tarjeta de visita" + +#~ msgid "Gimp Image" +#~ msgstr "Imagen GIMP" + +#~ msgid "Excel Spreadsheet" +#~ msgstr "Hoja de Cálculo Excel" + +#~ msgid "Zip Compressed Files" +#~ msgstr "Archivos comprimidos ZIP" + +#~ msgid "Flash Animation" +#~ msgstr "Animación Flash" + +#~ msgid "Real Media File" +#~ msgstr "Archivo Real Media" + +#, fuzzy +#~ msgid "Click here to do so." +#~ msgstr "Presiona aquí para volver a conectarte" + +#, fuzzy +#~ msgid "Web Statistics" +#~ msgstr "Estadísticas web en bruto" + +#, fuzzy +#~ msgid "Menu currently activated" +#~ msgstr "Desactivar" + +#, fuzzy +#~ msgid "Menu available but not activated" +#~ msgstr "Desactivar" + +#~ msgid "help_domain_del %s" +#~ msgstr "" +#~ "Si quieres suprimir el dominio %s, presiona en el botón de aquí arriba. " +#~ "¡Cuidado, esto suprimirá también todas las cuentas FTP, buzones correo, " +#~ "listas de correos, etc de este dominio, así como todos los subdominios " +#~ "relacionados!" + +#, fuzzy +#~ msgid "Add %s mail to the domain %s" +#~ msgstr "Añadir una cuenta de correo para el dominio %s" + +#, fuzzy +#~ msgid "Mailboxes size:" +#~ msgstr "Buzones de correo" + +#, fuzzy +#~ msgid "You want it to be deleted in" +#~ msgstr "no pudo ser borrado" + +#~ msgid "Missing uid" +#~ msgstr "Usuario faltante" + +#, fuzzy +#~ msgid "General PhpMyAdmin" +#~ msgstr "Admin SQL general" + +#~ msgid "Editing an FTP account" +#~ msgstr "Modificación de una cuenta FTP" + +#~ msgid "help_hta_list" +#~ msgstr "He aquí está la lista de carpetas protegidas de tu cuenta" + +#, fuzzy +#~ msgid "IP address" +#~ msgstr "Dirección IP" + +#~ msgid "You cannot add any new ftp account, your quota is over." +#~ msgstr "Tu cuota de cuentas FTP alcanzó su limite, no se pueden crear más." + +#~ msgid "The FTP account has been successfully created" +#~ msgstr "Se creó correctamente la cuenta FTP" + +#~ msgid "No account selected!" +#~ msgstr "¡Ninguna cuenta seleccionada!" + +#~ msgid "Change this FTP account" +#~ msgstr "Modificar cuenta FTP." + +#, fuzzy +#~ msgid "The database user was not found" +#~ msgstr "Tu base de datos %s fue borrada" + +#, fuzzy +#~ msgid "Edition of %s" +#~ msgstr "Añadir un buzón en %s" + +#, fuzzy +#~ msgid "You have to set a new password." +#~ msgstr "No estás autorizado a cambiar tu contraseña" + +#, fuzzy +#~ msgid "You have to input a password." +#~ msgstr "No estás autorizado a cambiar tu contraseña" + +#, fuzzy +#~ msgid "Create this alias" +#~ msgstr "Crear" + +#, fuzzy +#~ msgid "Set a passowrd:" +#~ msgstr "Nueva contraseña" + +#, fuzzy +#~ msgid "Change your password:" +#~ msgstr "Modificar contraseña" + +#, fuzzy +#~ msgid "Password does not match" +#~ msgstr "Las contraseñas no corresponden" + +#, fuzzy +#~ msgid "Password match" +#~ msgstr "Las contraseñas no corresponden" + +#, fuzzy +#~ msgid "Already disactivated" +#~ msgstr "Desactivar" + +#, fuzzy +#~ msgid "Clear all redirections" +#~ msgstr "Dirigir hacia una dirección IP" + +#, fuzzy +#~ msgid "This allow you to change your mail password." +#~ msgstr "No estás autorizado a cambiar tu contraseña" + +#, fuzzy +#~ msgid "Menu actually activated" +#~ msgstr "Desactivar" + +#, fuzzy +#~ msgid "Webmail Access" +#~ msgstr "Acceso Webmail" + +#, fuzzy +#~ msgid "Email Address" +#~ msgstr "Dirección de correo" + +#, fuzzy +#~ msgid "Active" +#~ msgstr "Acción" + +#~ msgid "Latest news" +#~ msgstr "Últimas noticias" + +#, fuzzy +#~ msgid "Langues" +#~ msgstr "Idiomas" + +#~ msgid "Raw web statistics" +#~ msgstr "Estadísticas web en bruto" + +#~ msgid "err_mysql_1" +#~ msgstr "Alcanzaste tu cuota de bases MySQL, ya no puedes crear una más." + +#~ msgid "Your database has been successfully created" +#~ msgstr "Tu base de datos fue creada" + +#~ msgid "Your current settings are" +#~ msgstr "Los parámetros actuales son" + +#, fuzzy +#~ msgid "MySQL Server" +#~ msgstr "Servidor SQL" + +#, fuzzy +#~ msgid "" +#~ "Enter the new password of your MySQL database and click 'change the " +#~ "password' to change it" +#~ msgstr "" +#~ "Entra la nueva contraseña para la base de datos SQL y presiona en " +#~ "'Cambiar contraseña'" + +#, fuzzy +#~ msgid "err_mysql_13" +#~ msgstr "Alcanzaste tu cuota de bases MySQL, ya no puedes crear una más." + +#~ msgid "You cannot add any new statistics, your quota is over." +#~ msgstr "No puedes crear más estadísticas, alcanzaste el limite de tu cuota." + +#~ msgid "New Raw Statistics (apache)" +#~ msgstr "Nuevo juego de estadísticas en bruto (apache)" + +#, fuzzy +#~ msgid "Domain name:" +#~ msgstr "Nombre de dominio" + +#~ msgid "Create those raw statistics" +#~ msgstr "Crear estas estadísticas en bruto" + +#~ msgid "" +#~ "The statistics %s has been successfully deleted (the stats files must be " +#~ "manually deleted)" +#~ msgstr "" +#~ "El juego de estadísticas %s fue borrado (los archivos de estadísticas " +#~ "deben ser borrados a mano)" + +#~ msgid "No Statistics selected!" +#~ msgstr "¡Ningún juego seleccionado!" + +#~ msgid "The Statistics has been successfully changed" +#~ msgstr "El juego de estadísticas fue modificado" + +#~ msgid "Change the Raw Statistics" +#~ msgstr "Modificar estadísticas en bruto" + +#~ msgid "Change those Raw Statistics." +#~ msgstr "Modificar estas estadísticas en bruto." + +#, fuzzy +#~ msgid "Raw Statistics List" +#~ msgstr "Lista de juegos de estadísticas" + +#~ msgid "Create new Raw Statistics (apache)" +#~ msgstr "Crear un nuevo juego de estadísticas en bruto (apache)" + +#~ msgid "Delete the checked Raw Statistics (apache)" +#~ msgstr "Suprimir los juegos de estadísticas en bruto (apache) seleccionados" + +#, fuzzy +#~ msgid "The email %s is special, it can't be deleted" +#~ msgstr "¡El buzón %s fue borrado!" + +#, fuzzy +#~ msgid "Local mailbox" +#~ msgstr "Nueva dirección" + +#~ msgid "Add a mail to the domain %s" +#~ msgstr "Añadir una cuenta de correo para el dominio %s" + +#, fuzzy +#~ msgid "Redirections
Other recipients:" +#~ msgstr "Otros destinatarios" + +#, fuzzy +#~ msgid "Is it a temporary mail account?" +#~ msgstr "Modificar cuenta FTP." + +#~ msgid "help_mail_add" +#~ msgstr "" +#~ "- Para crear este buzón de correo
Si quieres almacenar los mensajes " +#~ "recibidos y acceder al buzón con un programa de corre o por webmail, " +#~ "marca 'Cuenta POP'. En este caso, tienes que ingresar una contraseña para " +#~ "la cuenta POP.
Si quieres redirigir esta dirección hacia otras, " +#~ "ingresa la lista de las direcciones correspondientes, una dirección por " +#~ "línea (con el @ en todo caso).
Nota: tienes que escoger una de las " +#~ "dos cosas, o ambas
Para acceder a la lectura del correo, se debe usar " +#~ "la dirección http://sudominio/webmail/ o un subdominio de tipo 'Acceso a " +#~ "Webmail'
El nombre de cada usuario es login_sudominio o " +#~ "su login@sudominio y sa contraseña es la que acabas de " +#~ "ingesar en este formulario." + +#, fuzzy +#~ msgid "The email address %s has been successfully created" +#~ msgstr "El buzón %s fue creado con éxito" + +#, fuzzy +#~ msgid "The email address %s has been successfully changed" +#~ msgstr "Se modificó correctamente el buzón %s" + +#, fuzzy +#~ msgid "Edit an email address of the domain %s" +#~ msgstr "Modificar un buzón del dominio %s" + +#, fuzzy +#~ msgid "Edit the email address %s" +#~ msgstr "Modificar el buzón %s" + +#~ msgid "help_mail_edit" +#~ msgstr "" +#~ "- Para modificar este buzón de correo
Si quieres almacenar los " +#~ "mensajes recibidos y acceder al buzón con un programa de corre o por " +#~ "webmail, marca 'Cuenta POP'. En este caso, tienes que ingresar una " +#~ "contraseña para la cuenta POP.
Si quieres redirigir esta dirección " +#~ "hacia otras, ingresa la lista de las direcciones correspondientes, una " +#~ "dirección por línea (con el @ en todo caso).
Nota: tienes que escoger " +#~ "una de las dos cosas, o ambas
Para acceder a la lectura del correo, " +#~ "se debe usar la dirección http://sudominio/webmail/ o un subdominio de " +#~ "tipo 'Acceso a Webmail'
El nombre de cada usuario es " +#~ "login_sudominio o su login@sudominio y sa " +#~ "contraseña es la que acabas de ingesar en este formulario." + +#~ msgid "Add a mailbox on %s" +#~ msgstr "Añadir un buzón en %s" + +#~ msgid "Add many mailboxes on %s" +#~ msgstr "Añadir varios buzones en %s" + +#~ msgid "All" +#~ msgstr "Todo" + +#, fuzzy +#~ msgid "This account will be deleted on" +#~ msgstr "no pudo ser borrado" + +#~ msgid "help_sql_list_ok" +#~ msgstr "" +#~ "Tienes una o más bases de datos.
Presiona en 'Admin SQL' en el menú " +#~ "para administrarlas
o utiliza el menú aquí abajo para administrar las " +#~ "copias de respaldo,
las restauraciones o para borrar las bases:" + +#, fuzzy +#~ msgid "Change the MySQL password" +#~ msgstr "Cambiar contraseña SQL" + +#, fuzzy +#~ msgid "Get the current MySQL parameters" +#~ msgstr "Mostrar los parámetros SQL actuales" + +#~ msgid "help_sql_list_no" +#~ msgstr "" +#~ "Tu base de datos principal no existe, ingresa aquí una contraseña para " +#~ "crearla" + +#~ msgid "Create my main database" +#~ msgstr "Crear mi base de datos principal" + +#~ msgid "help_sql_users_list_ok" +#~ msgstr "Utiliza el cuadro aquí abajo para manejar tus usuarios MySQL:" + +#~ msgid "help_sql_users_rights_ok" +#~ msgstr "" +#~ "Selecciona en cada base los derechos que quieres atribuirle al usuario:" + +#~ msgid "New member" +#~ msgstr "Añadir nuevo miembro" + +#~ msgid "Create the domain username.%s" +#~ msgstr "Instalar el dominio login.%s" + +#~ msgid "Create a new member" +#~ msgstr "Crear un nuevo miembro" + +#~ msgid "Member" +#~ msgstr "Miembro" + +#~ msgid "Account Enabled ?" +#~ msgstr "¿Cuenta activa?" + +#~ msgid "Reset quotas to default ?" +#~ msgstr "¿Reincializar las cuotas al valor por omisión?" + +#~ msgid "Back to the account list" +#~ msgstr "Regresar a la lista de cuentas" + +#~ msgid "Member list" +#~ msgstr "Lista de miembros" + +#~ msgid "List all the accounts" +#~ msgstr "Listar todas las cuentas" + +#~ msgid "Last fail" +#~ msgstr "Último fracaso de conexión" + +#~ msgid "Locked Account" +#~ msgstr "Cuenta bloqueada" + +#~ msgid "AlternC Desktop" +#~ msgstr "Escritorio AlternC" + +#~ msgid "Show all quotas" +#~ msgstr "Mostrar todas las cuotas" + +#~ msgid "mode" +#~ msgstr "modo" + +#~ msgid "all/none" +#~ msgstr "todos/ninguno" + +#~ msgid "There is an ftp account in this folder" +#~ msgstr "Existe una cuenta FTP en esta carpeta" + +#~ msgid "This folder has restricted access" +#~ msgstr "La carpeta está protegida" + +#~ msgid "Click here to protect this folder with login/password" +#~ msgstr "Presiona aquí para proteger esta carpeta con un login / contaseña" + +#~ msgid "this folder and its subfolders as a compressed file" +#~ msgstr "esta carpeta y sus sub-carpetas como archivo comprimido" + +#~ msgid "Configure the file browser" +#~ msgstr "Configurar el manejador de archivos" + +#~ msgid "File editor preferences" +#~ msgstr "Preferencias del editor de archivos" + +#~ msgid "" +#~ "The domain %s has been changed. The modifications will take effect in 5 " +#~ "minutes." +#~ msgstr "" +#~ "Tu dominio %s fue modificado. Las modificaciones serán efectivas dentro " +#~ "de 5 minutos." + +#~ msgid "Subdomains" +#~ msgstr "Subdominios" + +#~ msgid "DNS parameters" +#~ msgstr "Parámetros DNS" + +#~ msgid "help_dns_mx %s %s" +#~ msgstr "" +#~ "Si este servidor maneja el DNS de este dominio:
Si quieres, puedes " +#~ "manejar sus buzones de correo en otro lado (campo MX).
Ingresa " +#~ "%s en este campo si tus buzones deben ser manejados " +#~ "por %s
o ingresa la dirección IP o el nombre del servidor de mail " +#~ "utilizado para tus buzones Cuidado: si no pones nada en este " +#~ "campo, tus direcciones de correo estarán indisponibles." + +#~ msgid "MX Field" +#~ msgstr "Campo MX" + +#~ msgid "help_dns_mail" +#~ msgstr "" +#~ "Si este servidor no maneja el DNS de este dominio
¿maneja sus " +#~ "buzones de correo?" + +#~ msgid "The modifications will take effect in 5 minutes." +#~ msgstr "Las modificaciones serán efectivas dentro de 5 minutos." + +#~ msgid "The folder must exists." +#~ msgstr "La carpeta debe existir." + +#~ msgid "Add a username" +#~ msgstr "Añadir un usuario" + +#~ msgid "Administration of" +#~ msgstr "Administración de" + +#~ msgid "Enter your username and password to connect to the virtual desktop" +#~ msgstr "" +#~ "Ingresa tu nombre de usuario y tu contraseña para conectarte a la " +#~ "interfaz de administración" + +#~ msgid "Restrict this session to my ip address" +#~ msgstr "Restringir esta sesión a mi dirección IP" + +#~ msgid "You can use a different language: " +#~ msgstr "Puedes utilizar un idioma diferente:" + +#~ msgid "AlternC, Opensource hosting control panel" +#~ msgstr "" +#~ "AlternC, software libre para un panel de control de hospedaje compartido" + +#~ msgid "Is it a POP account?" +#~ msgstr "¿Cuenta POP?" + +#~ msgid "POP password" +#~ msgstr "Contraseña POP" + +#~ msgid "One email per line" +#~ msgstr "una cuenta de correo por línea" + +#~ msgid "Create this mailbox" +#~ msgstr "Añadir este buzón" + +#~ msgid "Delete the selected mailboxes" +#~ msgstr "Borrar los buzones de correo marcados" + +#~ msgid "Don't delete accounts and go back to the mail list" +#~ msgstr "No borrar nada, volver a la lista de buzones de correo" + +#~ msgid "The mailbox %s has been successfully created" +#~ msgstr "El buzón %s fue creado con éxito" + +#~ msgid "Back to the mail account list" +#~ msgstr "Regresar a la lista de buziones de correo" + +#~ msgid "The mailbox %s has been successfully changed" +#~ msgstr "Se modificó correctamente el buzón %s" + +#~ msgid "Edit a mailbox of the domain %s" +#~ msgstr "Modificar un buzón del dominio %s" + +#~ msgid "Change this mailbox" +#~ msgstr "Modificar este buzón" + +#~ msgid "Mailbox list of the domain %s" +#~ msgstr "Lista de las buzones de correo del dominio %s" + +#~ msgid "General SQL Admin" +#~ msgstr "Admin SQL general" + +#~ msgid "Front page" +#~ msgstr "Portada" + +# ################################################################# +#~ msgid "Create a new database" +#~ msgstr "Crear una nueva base de datos" + +#~ msgid "Create this new database." +#~ msgstr "Crear esta nueva base de datos" + +#~ msgid "Do sql backup?" +#~ msgstr "¿Respaldar la base SQL?" + +#~ msgid "How many backup should be kept?" +#~ msgstr "¿Cuantas copias de respaldo hay que conservar?" + +#~ msgid "Change the SQL backup parameters" +#~ msgstr "Cambiar los parámetros de resplados SQL" + +#~ msgid "Change the SQL password" +#~ msgstr "Cambiar contraseña SQL" + +#~ msgid "Get the current SQL parameters" +#~ msgstr "Mostrar los parámetros SQL actuales" + +#~ msgid "" +#~ "Enter the new password of your SQL database and click 'change the " +#~ "password' to change it" +#~ msgstr "" +#~ "Entra la nueva contraseña para la base de datos SQL y presiona en " +#~ "'Cambiar contraseña'" + +#~ msgid "Restore a SQL backup for database %s" +#~ msgstr "Restaurar una copia de respaldo de la base de datos SQL %s" + +#~ msgid "Please enter the filename containing SQL data to be restored." +#~ msgstr "" +#~ "Entra el nombre del archivo que contiene los datos SQL por restaurar en " +#~ "la base." + +#~ msgid "err_mysql_20" +#~ msgstr "Alcanzaste tu cuota de usuarios MySQL, ya no puedes crear uno más." + +#~ msgid "Create this new user" +#~ msgstr "Crear este nuevo uruario" + +#~ msgid "Statistics List" +#~ msgstr "Lista de juegos de estadísticas" + +#~ msgid "_" +#~ msgstr "_" + +#~ msgid "Update this page" +#~ msgstr "Volver a cargar esta página" + +#~ msgid "WARNING : Confirm the deletion of this files" +#~ msgstr "ADVERTENCIA : Confirma la supresión de estos archivos" + +#~ msgid "Please choose the filename containing SQL data to be restored." +#~ msgstr "" +#~ "Elige el archivo que contiene los datos SQL por restaurar en la base." + +#~ msgid "OR" +#~ msgstr "O" + +#~ msgid "" +#~ "Image_Graph not installed. pear install Image_Graph-devel to see the " +#~ "graph." +#~ msgstr "" +#~ "Image_Graph no está instalado. pear install Image_Graph-devel es " +#~ "necesario para vr este gráfico." + +#~ msgid "Old Name:" +#~ msgstr "Antiguo nombre:" + +#~ msgid "New Name:" +#~ msgstr "Nuevo nombre:" + +#~ msgid "Move to" +#~ msgstr "Mover a" + +#~ msgid "" +#~ "The subdomain has been deleted. Changes will take place in 5 minutes." +#~ msgstr "" +#~ "El sub-dominio fue borrado, las modificaciones serán efectivas dentro de " +#~ "5 minutos." + +#~ msgid "" +#~ "Image_Graph not installed. use 'aptitude install php-pear' then 'pear --" +#~ "alldeps install Image_Graph-devel' to see the graph." +#~ msgstr "" +#~ "Image_Graph no está instalado. Ejecuta 'aptitude install php-pear' en un " +#~ "terminal del servidor, y luego 'pear --alldeps install Image_Graph-devel' " +#~ "para poder ver el gráfico." + +#~ msgid "Copy to" +#~ msgstr "Copiar a" + +#~ msgid "AlternC configuration" +#~ msgstr "Configuración del AlternC" + +#~ msgid "Files and directories" +#~ msgstr "Archivos y carpetas" + +#~ msgid "Other" +#~ msgstr "Otro" + +#~ msgid "Messages" +#~ msgstr "Mensajes " + +#, fuzzy +#~ msgid "Sub-domain" +#~ msgstr "Subdominios" + +#, fuzzy +#~ msgid "Validate this change" +#~ msgstr "Volver a cargar esta página" + +#, fuzzy +#~ msgid "Actions" +#~ msgstr "Acción" + +#, fuzzy +#~ msgid "Manage this temporary account" +#~ msgstr "Modificar cuenta FTP." + +#, fuzzy +#~ msgid "Manage the Emails of this domain on the server ?" +#~ msgstr "¿Administrar el DNS de este dominio?" + +#~ msgid "Edition du sous-domaine" +#~ msgstr "Edición del sub-dominio" + +#~ msgid "Sous-domaine" +#~ msgstr "Sub-dominio" diff --git a/ssl/panel/locales/fr_CA b/ssl/panel/locales/fr_CA new file mode 120000 index 00000000..a9e3d124 --- /dev/null +++ b/ssl/panel/locales/fr_CA @@ -0,0 +1 @@ +/fr_FR \ No newline at end of file diff --git a/ssl/panel/locales/fr_FR/LC_MESSAGES/ssl.po b/ssl/panel/locales/fr_FR/LC_MESSAGES/ssl.po new file mode 100644 index 00000000..6951d7c8 --- /dev/null +++ b/ssl/panel/locales/fr_FR/LC_MESSAGES/ssl.po @@ -0,0 +1,583 @@ +# French AlternC Translation +# Copyright (c) 2002 the AlternC Development Team +# +# $Id: admin.po,v 1.10 2004/11/01 15:55:44 anonymous Exp $ +# Benjamin Sonntag , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: $Id: admin.po,v 1.10 2004/11/01 15:55:44 anonymous Exp " +"$\n" +"Report-Msgid-Bugs-To: i18n@alternc.org\n" +"POT-Creation-Date: 2015-02-13 18:04+0100\n" +"PO-Revision-Date: 2012-10-17 09:52+0200\n" +"Last-Translator: Benjamin Sonntag \n" +"Language-Team: français \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bits\n" +"X-Generator: Emacs 21\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +#: ../admin/ssl_delete.php:43 +msgid "Your SSL Certificate has been deleted" +msgstr "Votre certificat SSL a été effacé" + +#: ../admin/ssl_doimport.php:39 +msgid "Please enter an ssl key and a certificate" +msgstr "Veuillez entrer une clé ssl et un certificat" + +#: ../admin/ssl_donew.php:38 +msgid "Please enter a proper domain name" +msgstr "Veuillez entrer un nom de domaine" + +#: ../admin/ssl_finalize.php:49 +msgid "Your ssl certificate has been imported successfully" +msgstr "Votre certificat ssl a été importé avec succès" + +#: ../admin/ssl_list.php:51 ../admin/ssl_view.php:50 +msgid "Pending Certificate" +msgstr "Certificats en attente" + +#: ../admin/ssl_list.php:52 +msgid "Valid" +msgstr "Valide" + +#: ../admin/ssl_list.php:53 +msgid "Expired" +msgstr "Expiré" + +#: ../admin/ssl_list.php:59 +msgid "" +"Some of your hosting are using a self-signed certificate.
Your " +"browser will not let you surf those domains properly
To fix this, buy a " +"properly signed certificate" +msgstr "" +"Certains de vos hébergements utilisent un certificat autosigné." +"
Votre navigateur ne vous laissera pas surfer sur ces domaines
Pour " +"corriger cela, achetez un certificat signé auprès d'une autorité." + +#: ../admin/ssl_list.php:71 +msgid "Your Certificates" +msgstr "Vos certificats" + +#: ../admin/ssl_list.php:73 +msgid "" +"Please find below your SSL Certificates. Some may be provided by the " +"administrator of the server, some may be Expired or Pending (waiting for a " +"CRT from your Certificate Provider)" +msgstr "" +"Vous trouverez ci-dessous vos certificats SSL. Certains peuvent être fournis " +"par l'administrateur de votre serveur, ou peuvent être expirés ou en attente " +"(attente du CRT de votre fournisseur de certificats)" + +#: ../admin/ssl_list.php:75 +msgid "Only show the following certificates:" +msgstr "Ne montrer que les certificats :" + +#: ../admin/ssl_list.php:76 +msgid "Pending Certificates" +msgstr "En attente" + +#: ../admin/ssl_list.php:77 +msgid "Valid Certificates" +msgstr "Valide" + +#: ../admin/ssl_list.php:78 +msgid "Expired Certificates" +msgstr "Expiré" + +#: ../admin/ssl_list.php:80 +msgid "Certificates Shared by the Administrator" +msgstr "Partagés par l'administrateur" + +#: ../admin/ssl_list.php:82 +msgid "Filter" +msgstr "Filtrer" + +#: ../admin/ssl_list.php:85 +msgid "Domain Name" +msgstr "Nom de domaine" + +#: ../admin/ssl_list.php:85 +msgid "Status" +msgstr "État" + +#: ../admin/ssl_list.php:85 +msgid "Used by" +msgstr "Utilisé par" + +#: ../admin/ssl_list.php:85 +msgid "Validity period" +msgstr "Pếriode de validité" + +#: ../admin/ssl_list.php:91 +msgid "Details" +msgstr "Détails" + +#: ../admin/ssl_list.php:97 +msgid "(shared)" +msgstr "(partagé)" + +#: ../admin/ssl_list.php:102 ../admin/ssl_list.php:106 +#: ../admin/ssl_list.php:112 ../admin/ssl_view.php:65 +#: ../admin/ssl_view.php:119 ../admin/ssl_view.php:133 +#, php-format +msgid "%3$d-%2$d-%1$d %4$d:%5$d" +msgstr "%1$d/%2$d/%3$d %4$dh%5$d" + +#: ../admin/ssl_list.php:111 +msgid "Requested on: " +msgstr "Demandé le :" + +#: ../admin/ssl_list.php:129 +msgid "Create one" +msgstr "En créer un" + +#: ../admin/ssl_list.php:130 +msgid "" +"This hosting has no valid certificate
a self-signed one has been created" +msgstr "" +"Cet hébergement n'a pas de certificat valide
Un certificat autosigné a été " +"créé" + +#: ../admin/ssl_list.php:140 +msgid "Create or Import a new SSL Certificate" +msgstr "Créer ou Importer un nouveau certificat SSL" + +#: ../admin/ssl_new.php:42 +msgid "New SSL Certificate" +msgstr "Nouveau certificat SSL" + +#: ../admin/ssl_new.php:50 +msgid "" +"An SSL certificate is a file which must be obtained from a Certificate " +"Authority, and allow you to enable HTTPS encryption on a domain name." +msgstr "" +"Un certificat SSL est un fichier qui peut être obtenu auprès d'une autorité " +"de certification, et permet d'activer HTTPS sur un nom de domaine" + +#: ../admin/ssl_new.php:53 +msgid "" +"To obtain one, you need to generate a Certificate Request (CSR) and a " +"RSA Key (KEY) here, then give the CSR to the Certificate Authority, " +"which will give you a certificate (CRT) and also often a chained certificate " +"(CHAIN)." +msgstr "" +"pour obtenir un certificat, vous devez générer une Requête de certificat (CSR) et une Clé RSA (KEY) ici, et fournir la CSR à l'autorité de " +"certification, qui vous renverra un certificat (CRT), souvent accompagné " +"d'un certificat chaîné (CHAIN)." + +#: ../admin/ssl_new.php:56 +msgid "" +"If you already know what it is and already have all those files (CRT/KEY/" +"CHAIN) You can import them here too." +msgstr "" +"Si vous savez déjà de quoi il s'agit et disposez déjà des fichiers (CRT/KEY/" +"CHAIN) vous pouvez les importer ici aussi." + +#: ../admin/ssl_new.php:64 +msgid "Create a CSR/KEY" +msgstr "Créer une CSR/KEY" + +#: ../admin/ssl_new.php:65 +msgid "Import existing files" +msgstr "Importer des fichiers existants" + +#: ../admin/ssl_new.php:69 +msgid "Create a CSR/KEY for a given domain name" +msgstr "Créer une CSR/KEY pour ce nom de domaine" + +#: ../admin/ssl_new.php:71 +msgid "" +"Use this form to generate a Certificate Request file (CSR) and a " +"RSA Key file (KEY) for a given domain name" +msgstr "" +"Utilisez ce formulaire pour générer une Requête de certificat (CSR) " +"et une Clé RSA (KEY) pour ce nom de domaine" + +#: ../admin/ssl_new.php:98 +msgid "" +"Please choose the domain name for which you want a SSL Certificate, or enter " +"it manually" +msgstr "" +"Merci de choisir le nom de domaine pour lequel vous souhaitez un certificat " +"SSL, ou entrez-le manuellement" + +#: ../admin/ssl_new.php:101 ../admin/ssl_view.php:60 +msgid "Fully Qualified Domain Name" +msgstr "Nom de domaine complet" + +#: ../admin/ssl_new.php:104 +msgid "--- Choose here ---" +msgstr "--- Choisir ici ---" + +#: ../admin/ssl_new.php:110 +msgid "... or click here to enter it manually" +msgstr "... ou cliquez ici pour en entrer un manuellement" + +#: ../admin/ssl_new.php:117 ../admin/ssl_new.php:151 ../admin/ssl_view.php:82 +msgid "Save" +msgstr "Enregistrer" + +#: ../admin/ssl_new.php:118 ../admin/ssl_new.php:152 ../admin/ssl_view.php:83 +msgid "Cancel" +msgstr "Annuler" + +#: ../admin/ssl_new.php:123 +msgid "" +"(If you want to get a valid certificate for all the subdomains of a " +"domain, use a wildcard notation (eg: *.example.com). Please note that a " +"wildcard certificate is usually more expensive than normal one.)" +msgstr "" +"(Si vous voulez obtenir un certificat pour tous les sous-domaines de " +"premier niveau d'un nom de domaine, utilisez la notation 'wildcard' (ex: *." +"example.com). Notez que les certificats wildcard sont généralement plus " +"chers que les normaux)" + +#: ../admin/ssl_new.php:123 +msgid "" +"Please note that a SSL Certificate is only valid for one fully qualified " +"domain name. As a result, a certificate for www.example.com is " +"NOT valid for intranet.example.com or intranet.www." +"example.com !" +msgstr "" +"Notez qu'un certificat SSL n'est valide que pour le nom de domaine complet " +"seul. Par conséquent, un certificat valable pour www.example.com ne l'est PAS pour intranet.example.com ou intranet." +"www.example.com !" + +#: ../admin/ssl_new.php:130 +msgid "Import existing Key Certificate and Chain files" +msgstr "Importer une Clé, un Certificat et une Chaîne existants" + +#: ../admin/ssl_new.php:132 +msgid "" +"If you already have a RSA Key file, a Certificate for this key and (maybe) a " +"Chained certificate, please paste their content here." +msgstr "" +"Si vous disposez déjà d'une clé RSA, d'un Certificat et (peut-être) d'un " +"Certificat Chaîné, collez leur contenu ici." + +#: ../admin/ssl_new.php:133 +msgid "" +"We will verify the content of those files and add them in your certificate " +"repository" +msgstr "" +"Nous vérifierons le contenu de ces fichiers et les ajouteront à vos " +"certificats" + +#: ../admin/ssl_new.php:138 +msgid "RSA Key" +msgstr "Clé RSA" + +#: ../admin/ssl_new.php:142 ../admin/ssl_view.php:73 ../admin/ssl_view.php:159 +msgid "SSL Certificate" +msgstr "Certificat SSL" + +#: ../admin/ssl_new.php:146 ../admin/ssl_view.php:77 ../admin/ssl_view.php:164 +msgid "Chained Certificate
(not mandatory)" +msgstr "Certificat Chaîné
(facultatif)" + +#: ../admin/ssl_share.php:30 +msgid "This page is restricted to authorized staff" +msgstr "Cette page est réservée aux administrateurs" + +#: ../admin/ssl_view.php:52 +msgid "" +"Your Certificate Request File (CSR) has been created, along with its " +"private RSA Key (KEY). Please find below the CSR you must send to " +"your SSL Certificate provider." +msgstr "" +"Votre Requête de certificat (CSR) a été créée, accompagnée de sa " +"Clé privée RSA (KEY). Vous trouverez ci-dessous la CSR que vous " +"pourrez envoyer à votre fournisseur de certificat." + +#: ../admin/ssl_view.php:54 +msgid "" +"Once you'll have your Certificate File (CRT) and a Chained " +"Certificate File (CHAIN), please paste them here to finish the " +"enrollment." +msgstr "" +"Une fois que vous aurez obtenu votre Fichier Certificat (CRT) et un " +"Certificat Chaîné (CHAIN), collez-les ici pour valider votre " +"certificat." + +#: ../admin/ssl_view.php:64 +msgid "Date of the request" +msgstr "Date de la requête" + +#: ../admin/ssl_view.php:68 ../admin/ssl_view.php:154 +msgid "Certificate Request File" +msgstr "Fichier requête de Certificat" + +#: ../admin/ssl_view.php:85 ../admin/ssl_view.php:213 +msgid "Delete" +msgstr "Effacer" + +#: ../admin/ssl_view.php:86 +msgid "" +"Please confirm that you want to delete this certificate request AND ITS " +"PRIVATE KEY!" +msgstr "" +"Merci de confirmer que vous voulez effacer cette requête de certificat AINSI " +"QUE SA CLÉ PRIVÉE !" + +#: ../admin/ssl_view.php:97 +msgid "Valid Certificate" +msgstr "Certificat Valide" + +#: ../admin/ssl_view.php:98 +msgid "Please find below your valid certificate data." +msgstr "Voici les données de votre certificat." + +#: ../admin/ssl_view.php:104 +msgid "EXPIRED Certificate" +msgstr "Certificat EXPIRÉ" + +#: ../admin/ssl_view.php:105 +msgid "" +"Your certificate is EXPIRED. You should not use it for any purpose. Please " +"find below its data." +msgstr "" +"Votre certificat est EXPIRÉ. Vous ne devriez pas l'utiliser. Voici ses " +"données." + +#: ../admin/ssl_view.php:113 +msgid "Back to my SSL Certificates" +msgstr "Retour à mes certificats SSL" + +#: ../admin/ssl_view.php:117 +msgid "Valid From:" +msgstr "Valid du :" + +#: ../admin/ssl_view.php:123 +#, php-format +msgid "(%d days ago)" +msgstr "(il y a %d jours)" + +#: ../admin/ssl_view.php:126 +#, php-format +msgid "(%d month ago)" +msgstr "(il y a %d mois)" + +#: ../admin/ssl_view.php:131 +msgid "Valid Until:" +msgstr "Valid jusqu'au :" + +#: ../admin/ssl_view.php:137 +#, php-format +msgid "(%d days from now)" +msgstr "(dans %d jours)" + +#: ../admin/ssl_view.php:140 +#, php-format +msgid "(%d month from now)" +msgstr "(dans %d mois)" + +#: ../admin/ssl_view.php:145 +msgid "FQDN:" +msgstr "FQDN:" + +#: ../admin/ssl_view.php:149 +msgid "Other Valid FQDN:" +msgstr "Autres FQDN valides:" + +#: ../admin/ssl_view.php:173 +msgid "" +"As an administrator you can allow any account on this server to use this " +"certificate to host his services.
(This is only useful for wildcard or " +"multi-domain certificates)." +msgstr "" +"En tant qu'administrateur, vous pouvez autoriser n'importe quel compte de ce " +"serveur à utiliser votre certificat pour héberger ses services
(Cela " +"n'est utile généralement que pour les certificats wildcard ou multidomaines)." + +#: ../admin/ssl_view.php:177 +msgid "This certificate is currently shared" +msgstr "Ce certificat est partagé" + +#: ../admin/ssl_view.php:184 +msgid "Click here to stop sharing this certificate" +msgstr "Cliquez ici pour ne plus partager ce certificat" + +#: ../admin/ssl_view.php:189 ../admin/ssl_view.php:205 +msgid "" +"You are not the owner of this certificate, only its owner can share/unshare " +"this certificate." +msgstr "" +"Vous n'êtes pas le propriétaire de ce certificat, seul son propriétaire peut " +"le partager" + +#: ../admin/ssl_view.php:193 +msgid "This certificate is currently NOT shared" +msgstr "Ce certificat n'est pas partagé" + +#: ../admin/ssl_view.php:200 +msgid "Click here to share this certificate" +msgstr "Cliquez ici pour partager ce certificat." + +#: ../admin/ssl_view.php:214 +msgid "" +"Please confirm that you want to delete this certificate AND ITS PRIVATE KEY!" +msgstr "" +"Merci de confirmer que vous souhaitez effacer ce certificat ET SA CLÉ " +"PRIVÉE !" + +#: ../class/m_ssl.php:69 ../class/m_ssl.php:418 +msgid "SSL Certificates" +msgstr "Certificats SSL" + +#: ../class/m_ssl.php:79 +msgid "New SSL certificate" +msgstr "Nouveau Certificat SSL" + +#: ../class/m_ssl.php:93 +msgid "List SSL Certificates" +msgstr "Liste des Certificats SSL" + +#: ../class/m_ssl.php:152 +msgid "No SSL certificates available" +msgstr "Aucun Certificat SSL" + +#: ../class/m_ssl.php:175 +msgid "You currently have no hosting using SSL certificate" +msgstr "Vous n'avez pas d'hébergement utilisant des certificats SSL" + +#: ../class/m_ssl.php:196 +msgid "Bad FQDN domain name" +msgstr "Mauvais Nom de domaine" + +#: ../class/m_ssl.php:202 ../class/m_ssl.php:774 +msgid "Can't generate a private key (1)" +msgstr "Impossible de générer une clé privée (1)" + +#: ../class/m_ssl.php:207 ../class/m_ssl.php:779 +msgid "Can't generate a private key (2)" +msgstr "Impossible de générer une clé privée (2)" + +#: ../class/m_ssl.php:218 +msgid "Can't generate a CSR" +msgstr "Impossible de générer une CSR" + +#: ../class/m_ssl.php:234 ../class/m_ssl.php:250 ../class/m_ssl.php:273 +msgid "Can't find this Certificate" +msgstr "Impossible de trouver ce Certificat" + +#: ../class/m_ssl.php:353 +msgid "Can't save the Key/Crt/Chain now. Please try later." +msgstr "" +"Impossible de sauver les Key/Crt/Chain pour l'instant. Merci de réessayer " +"ultérieurement." + +#: ../class/m_ssl.php:390 +msgid "Can't save the Crt/Chain now. Please try later." +msgstr "" +"Impossible de sauver les Crt/Chain pour l'instant. Merci de réessayer " +"ultérieurement." + +#: ../class/m_ssl.php:618 +msgid "Alias already exists" +msgstr "Cet alias existe déjà" + +#: ../class/m_ssl.php:637 +msgid "Alias not found" +msgstr "Alias non trouvé" + +#: ../class/m_ssl.php:666 +msgid "" +"Can't find the private key in the certificate table, please check your form." +msgstr "" +"Impossible de trouver la clé privée dans la table des certificats, merci de " +"vérifier votre formulaire." + +#: ../class/m_ssl.php:675 +msgid "" +"The certificate must begin by BEGIN CERTIFICATE and end by END CERTIFICATE " +"lines. Please check you pasted it in PEM form." +msgstr "" +"Ce certificat doit commencer par BEGIN CERTIFICATE et terminer par END " +"CERTIFICATE. Merci de vérifier que vous avez bien collé un fichier PEM" + +#: ../class/m_ssl.php:680 +msgid "" +"The chained certificate must begin by BEGIN CERTIFICATE and end by END " +"CERTIFICATE lines. Please check you pasted it in PEM form." +msgstr "" +"Ce certificat Chaîné doit commencer par BEGIN CERTIFICATE et terminer par " +"END CERTIFICATE. Merci de vérifier que vous avez bien collé un fichier PEM" + +#: ../class/m_ssl.php:686 +msgid "" +"The private key must begin by BEGIN (RSA )PRIVATE KEY and end by END (RSA )" +"PRIVATE KEY lines. Please check you pasted it in PEM form." +msgstr "" +"La clé privée doit commencer par BEGIN (RSA )PRIVATE KEY et terminer par END " +"(RSA ) PRIVATE KEY. Merci de vérifier que vous avez bien collé un fichier PEM" + +#: ../class/m_ssl.php:722 +#, php-format +msgid "The %d-th certificate in the chain is invalid" +msgstr "Le %dième certificat dans la chaîne est invalide" + +#: ../class/m_ssl.php:730 +msgid "The certificate is invalid." +msgstr "Le certificat est invalide." + +#: ../class/m_ssl.php:735 +msgid "The private key is invalid." +msgstr "La clé privée est invalide." + +#: ../class/m_ssl.php:740 +msgid "The private key is not the one signed inside the certificate." +msgstr "La clé privée n'est pas celle correspondant au certificat." + +#: ../class/m_ssl.php:746 +msgid "Can't export your certificate as a string, please check its syntax." +msgstr "" +"Impossible d'exporter votre certificat sous forme de chaîne, merci de " +"vérifier sa syntaxe." + +#: ../class/m_ssl.php:751 +msgid "" +"Can't export one of your chained certificates as a string, please check its " +"syntax." +msgstr "" +"Impossible d'exporter votre certificat chaîné sous forme de chaîne, merci de " +"vérifier sa syntaxe." + +#: ../class/m_ssl.php:757 +msgid "Can't export your private key as a string, please check its syntax." +msgstr "" +"Impossible d'exporter votre clé privée sous forme de chaîne, merci de " +"vérifier sa syntaxe." + +#: ../class/m_ssl.php:800 +msgid "Locally hosted forcing HTTPS" +msgstr "Hébergement local HTTPS obligatoire" + +#: ../class/m_ssl.php:801 +msgid "Locally hosted HTTP and HTTPS" +msgstr "Hébergement local HTTP et HTTPS" + +#: ../class/m_ssl.php:802 +msgid "HTTPS AlternC panel access" +msgstr "Accès au panel AlternC via HTTPS" + +#: ../class/m_ssl.php:803 +msgid "HTTPS Roundcube Webmail" +msgstr "Webmail Roundcube avec HTTPS" + +#: ../class/m_ssl.php:804 +msgid "HTTPS Squirrelmail Webmail" +msgstr "Webmail Squirrelmail avec HTTPS" + +#: ../class/m_ssl.php:805 +msgid "php52 forcing HTTPS" +msgstr "php5.2 HTTPS obligatoire" + +#: ../class/m_ssl.php:806 +msgid "php52 HTTP and HTTPS" +msgstr "php5.2 HTTP et HTTPS" diff --git a/ssl/panel/locales/it_IT/LC_MESSAGES/ssl.po b/ssl/panel/locales/it_IT/LC_MESSAGES/ssl.po new file mode 100644 index 00000000..d0061f29 --- /dev/null +++ b/ssl/panel/locales/it_IT/LC_MESSAGES/ssl.po @@ -0,0 +1,513 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR AlternC Team +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: AlternC 2.0\n" +"Report-Msgid-Bugs-To: i18n@alternc.org\n" +"POT-Creation-Date: 2015-02-13 18:04+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: it_IT\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../admin/ssl_delete.php:43 +msgid "Your SSL Certificate has been deleted" +msgstr "" + +#: ../admin/ssl_doimport.php:39 +msgid "Please enter an ssl key and a certificate" +msgstr "" + +#: ../admin/ssl_donew.php:38 +msgid "Please enter a proper domain name" +msgstr "" + +#: ../admin/ssl_finalize.php:49 +msgid "Your ssl certificate has been imported successfully" +msgstr "" + +#: ../admin/ssl_list.php:51 ../admin/ssl_view.php:50 +msgid "Pending Certificate" +msgstr "" + +#: ../admin/ssl_list.php:52 +msgid "Valid" +msgstr "" + +#: ../admin/ssl_list.php:53 +msgid "Expired" +msgstr "" + +#: ../admin/ssl_list.php:59 +msgid "" +"Some of your hosting are using a self-signed certificate.
Your " +"browser will not let you surf those domains properly
To fix this, buy a " +"properly signed certificate" +msgstr "" + +#: ../admin/ssl_list.php:71 +msgid "Your Certificates" +msgstr "" + +#: ../admin/ssl_list.php:73 +msgid "" +"Please find below your SSL Certificates. Some may be provided by the " +"administrator of the server, some may be Expired or Pending (waiting for a " +"CRT from your Certificate Provider)" +msgstr "" + +#: ../admin/ssl_list.php:75 +msgid "Only show the following certificates:" +msgstr "" + +#: ../admin/ssl_list.php:76 +msgid "Pending Certificates" +msgstr "" + +#: ../admin/ssl_list.php:77 +msgid "Valid Certificates" +msgstr "" + +#: ../admin/ssl_list.php:78 +msgid "Expired Certificates" +msgstr "" + +#: ../admin/ssl_list.php:80 +msgid "Certificates Shared by the Administrator" +msgstr "" + +#: ../admin/ssl_list.php:82 +msgid "Filter" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Domain Name" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Status" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Used by" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Validity period" +msgstr "" + +#: ../admin/ssl_list.php:91 +msgid "Details" +msgstr "" + +#: ../admin/ssl_list.php:97 +msgid "(shared)" +msgstr "" + +#: ../admin/ssl_list.php:102 ../admin/ssl_list.php:106 +#: ../admin/ssl_list.php:112 ../admin/ssl_view.php:65 +#: ../admin/ssl_view.php:119 ../admin/ssl_view.php:133 +#, php-format +msgid "%3$d-%2$d-%1$d %4$d:%5$d" +msgstr "" + +#: ../admin/ssl_list.php:111 +msgid "Requested on: " +msgstr "" + +#: ../admin/ssl_list.php:129 +msgid "Create one" +msgstr "" + +#: ../admin/ssl_list.php:130 +msgid "" +"This hosting has no valid certificate
a self-signed one has been created" +msgstr "" + +#: ../admin/ssl_list.php:140 +msgid "Create or Import a new SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:42 +msgid "New SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:50 +msgid "" +"An SSL certificate is a file which must be obtained from a Certificate " +"Authority, and allow you to enable HTTPS encryption on a domain name." +msgstr "" + +#: ../admin/ssl_new.php:53 +msgid "" +"To obtain one, you need to generate a Certificate Request (CSR) and a " +"RSA Key (KEY) here, then give the CSR to the Certificate Authority, " +"which will give you a certificate (CRT) and also often a chained certificate " +"(CHAIN)." +msgstr "" + +#: ../admin/ssl_new.php:56 +msgid "" +"If you already know what it is and already have all those files (CRT/KEY/" +"CHAIN) You can import them here too." +msgstr "" + +#: ../admin/ssl_new.php:64 +msgid "Create a CSR/KEY" +msgstr "" + +#: ../admin/ssl_new.php:65 +msgid "Import existing files" +msgstr "" + +#: ../admin/ssl_new.php:69 +msgid "Create a CSR/KEY for a given domain name" +msgstr "" + +#: ../admin/ssl_new.php:71 +msgid "" +"Use this form to generate a Certificate Request file (CSR) and a " +"RSA Key file (KEY) for a given domain name" +msgstr "" + +#: ../admin/ssl_new.php:98 +msgid "" +"Please choose the domain name for which you want a SSL Certificate, or enter " +"it manually" +msgstr "" + +#: ../admin/ssl_new.php:101 ../admin/ssl_view.php:60 +msgid "Fully Qualified Domain Name" +msgstr "" + +#: ../admin/ssl_new.php:104 +msgid "--- Choose here ---" +msgstr "" + +#: ../admin/ssl_new.php:110 +msgid "... or click here to enter it manually" +msgstr "" + +#: ../admin/ssl_new.php:117 ../admin/ssl_new.php:151 ../admin/ssl_view.php:82 +msgid "Save" +msgstr "" + +#: ../admin/ssl_new.php:118 ../admin/ssl_new.php:152 ../admin/ssl_view.php:83 +msgid "Cancel" +msgstr "" + +#: ../admin/ssl_new.php:123 +msgid "" +"(If you want to get a valid certificate for all the subdomains of a " +"domain, use a wildcard notation (eg: *.example.com). Please note that a " +"wildcard certificate is usually more expensive than normal one.)" +msgstr "" + +#: ../admin/ssl_new.php:123 +msgid "" +"Please note that a SSL Certificate is only valid for one fully qualified " +"domain name. As a result, a certificate for www.example.com is " +"NOT valid for intranet.example.com or intranet.www." +"example.com !" +msgstr "" + +#: ../admin/ssl_new.php:130 +msgid "Import existing Key Certificate and Chain files" +msgstr "" + +#: ../admin/ssl_new.php:132 +msgid "" +"If you already have a RSA Key file, a Certificate for this key and (maybe) a " +"Chained certificate, please paste their content here." +msgstr "" + +#: ../admin/ssl_new.php:133 +msgid "" +"We will verify the content of those files and add them in your certificate " +"repository" +msgstr "" + +#: ../admin/ssl_new.php:138 +msgid "RSA Key" +msgstr "" + +#: ../admin/ssl_new.php:142 ../admin/ssl_view.php:73 ../admin/ssl_view.php:159 +msgid "SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:146 ../admin/ssl_view.php:77 ../admin/ssl_view.php:164 +msgid "Chained Certificate
(not mandatory)" +msgstr "" + +#: ../admin/ssl_share.php:30 +msgid "This page is restricted to authorized staff" +msgstr "" + +#: ../admin/ssl_view.php:52 +msgid "" +"Your Certificate Request File (CSR) has been created, along with its " +"private RSA Key (KEY). Please find below the CSR you must send to " +"your SSL Certificate provider." +msgstr "" + +#: ../admin/ssl_view.php:54 +msgid "" +"Once you'll have your Certificate File (CRT) and a Chained " +"Certificate File (CHAIN), please paste them here to finish the " +"enrollment." +msgstr "" + +#: ../admin/ssl_view.php:64 +msgid "Date of the request" +msgstr "" + +#: ../admin/ssl_view.php:68 ../admin/ssl_view.php:154 +msgid "Certificate Request File" +msgstr "" + +#: ../admin/ssl_view.php:85 ../admin/ssl_view.php:213 +msgid "Delete" +msgstr "" + +#: ../admin/ssl_view.php:86 +msgid "" +"Please confirm that you want to delete this certificate request AND ITS " +"PRIVATE KEY!" +msgstr "" + +#: ../admin/ssl_view.php:97 +msgid "Valid Certificate" +msgstr "" + +#: ../admin/ssl_view.php:98 +msgid "Please find below your valid certificate data." +msgstr "" + +#: ../admin/ssl_view.php:104 +msgid "EXPIRED Certificate" +msgstr "" + +#: ../admin/ssl_view.php:105 +msgid "" +"Your certificate is EXPIRED. You should not use it for any purpose. Please " +"find below its data." +msgstr "" + +#: ../admin/ssl_view.php:113 +msgid "Back to my SSL Certificates" +msgstr "" + +#: ../admin/ssl_view.php:117 +msgid "Valid From:" +msgstr "" + +#: ../admin/ssl_view.php:123 +#, php-format +msgid "(%d days ago)" +msgstr "" + +#: ../admin/ssl_view.php:126 +#, php-format +msgid "(%d month ago)" +msgstr "" + +#: ../admin/ssl_view.php:131 +msgid "Valid Until:" +msgstr "" + +#: ../admin/ssl_view.php:137 +#, php-format +msgid "(%d days from now)" +msgstr "" + +#: ../admin/ssl_view.php:140 +#, php-format +msgid "(%d month from now)" +msgstr "" + +#: ../admin/ssl_view.php:145 +msgid "FQDN:" +msgstr "" + +#: ../admin/ssl_view.php:149 +msgid "Other Valid FQDN:" +msgstr "" + +#: ../admin/ssl_view.php:173 +msgid "" +"As an administrator you can allow any account on this server to use this " +"certificate to host his services.
(This is only useful for wildcard or " +"multi-domain certificates)." +msgstr "" + +#: ../admin/ssl_view.php:177 +msgid "This certificate is currently shared" +msgstr "" + +#: ../admin/ssl_view.php:184 +msgid "Click here to stop sharing this certificate" +msgstr "" + +#: ../admin/ssl_view.php:189 ../admin/ssl_view.php:205 +msgid "" +"You are not the owner of this certificate, only its owner can share/unshare " +"this certificate." +msgstr "" + +#: ../admin/ssl_view.php:193 +msgid "This certificate is currently NOT shared" +msgstr "" + +#: ../admin/ssl_view.php:200 +msgid "Click here to share this certificate" +msgstr "" + +#: ../admin/ssl_view.php:214 +msgid "" +"Please confirm that you want to delete this certificate AND ITS PRIVATE KEY!" +msgstr "" + +#: ../class/m_ssl.php:69 ../class/m_ssl.php:418 +msgid "SSL Certificates" +msgstr "" + +#: ../class/m_ssl.php:79 +msgid "New SSL certificate" +msgstr "" + +#: ../class/m_ssl.php:93 +msgid "List SSL Certificates" +msgstr "" + +#: ../class/m_ssl.php:152 +msgid "No SSL certificates available" +msgstr "" + +#: ../class/m_ssl.php:175 +msgid "You currently have no hosting using SSL certificate" +msgstr "" + +#: ../class/m_ssl.php:196 +msgid "Bad FQDN domain name" +msgstr "" + +#: ../class/m_ssl.php:202 ../class/m_ssl.php:774 +msgid "Can't generate a private key (1)" +msgstr "" + +#: ../class/m_ssl.php:207 ../class/m_ssl.php:779 +msgid "Can't generate a private key (2)" +msgstr "" + +#: ../class/m_ssl.php:218 +msgid "Can't generate a CSR" +msgstr "" + +#: ../class/m_ssl.php:234 ../class/m_ssl.php:250 ../class/m_ssl.php:273 +msgid "Can't find this Certificate" +msgstr "" + +#: ../class/m_ssl.php:353 +msgid "Can't save the Key/Crt/Chain now. Please try later." +msgstr "" + +#: ../class/m_ssl.php:390 +msgid "Can't save the Crt/Chain now. Please try later." +msgstr "" + +#: ../class/m_ssl.php:618 +msgid "Alias already exists" +msgstr "" + +#: ../class/m_ssl.php:637 +msgid "Alias not found" +msgstr "" + +#: ../class/m_ssl.php:666 +msgid "" +"Can't find the private key in the certificate table, please check your form." +msgstr "" + +#: ../class/m_ssl.php:675 +msgid "" +"The certificate must begin by BEGIN CERTIFICATE and end by END CERTIFICATE " +"lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:680 +msgid "" +"The chained certificate must begin by BEGIN CERTIFICATE and end by END " +"CERTIFICATE lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:686 +msgid "" +"The private key must begin by BEGIN (RSA )PRIVATE KEY and end by END (RSA )" +"PRIVATE KEY lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:722 +#, php-format +msgid "The %d-th certificate in the chain is invalid" +msgstr "" + +#: ../class/m_ssl.php:730 +msgid "The certificate is invalid." +msgstr "" + +#: ../class/m_ssl.php:735 +msgid "The private key is invalid." +msgstr "" + +#: ../class/m_ssl.php:740 +msgid "The private key is not the one signed inside the certificate." +msgstr "" + +#: ../class/m_ssl.php:746 +msgid "Can't export your certificate as a string, please check its syntax." +msgstr "" + +#: ../class/m_ssl.php:751 +msgid "" +"Can't export one of your chained certificates as a string, please check its " +"syntax." +msgstr "" + +#: ../class/m_ssl.php:757 +msgid "Can't export your private key as a string, please check its syntax." +msgstr "" + +#: ../class/m_ssl.php:800 +msgid "Locally hosted forcing HTTPS" +msgstr "" + +#: ../class/m_ssl.php:801 +msgid "Locally hosted HTTP and HTTPS" +msgstr "" + +#: ../class/m_ssl.php:802 +msgid "HTTPS AlternC panel access" +msgstr "" + +#: ../class/m_ssl.php:803 +msgid "HTTPS Roundcube Webmail" +msgstr "" + +#: ../class/m_ssl.php:804 +msgid "HTTPS Squirrelmail Webmail" +msgstr "" + +#: ../class/m_ssl.php:805 +msgid "php52 forcing HTTPS" +msgstr "" + +#: ../class/m_ssl.php:806 +msgid "php52 HTTP and HTTPS" +msgstr "" diff --git a/ssl/panel/locales/nl_NL/LC_MESSAGES/ssl.po b/ssl/panel/locales/nl_NL/LC_MESSAGES/ssl.po new file mode 100644 index 00000000..ca2759b2 --- /dev/null +++ b/ssl/panel/locales/nl_NL/LC_MESSAGES/ssl.po @@ -0,0 +1,513 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR AlternC Team +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Report-Msgid-Bugs-To: i18n@alternc.org\n" +"POT-Creation-Date: 2015-02-13 18:04+0100\n" +"PO-Revision-Date: 2012-10-17 09:52+0200\n" +"Last-Translator: Benjamin Sonntag \n" +"Language-Team: Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bits\n" +"X-Generator: Emacs 21\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" + +#: ../admin/ssl_delete.php:43 +msgid "Your SSL Certificate has been deleted" +msgstr "" + +#: ../admin/ssl_doimport.php:39 +msgid "Please enter an ssl key and a certificate" +msgstr "" + +#: ../admin/ssl_donew.php:38 +msgid "Please enter a proper domain name" +msgstr "" + +#: ../admin/ssl_finalize.php:49 +msgid "Your ssl certificate has been imported successfully" +msgstr "" + +#: ../admin/ssl_list.php:51 ../admin/ssl_view.php:50 +msgid "Pending Certificate" +msgstr "" + +#: ../admin/ssl_list.php:52 +msgid "Valid" +msgstr "" + +#: ../admin/ssl_list.php:53 +msgid "Expired" +msgstr "" + +#: ../admin/ssl_list.php:59 +msgid "" +"Some of your hosting are using a self-signed certificate.
Your " +"browser will not let you surf those domains properly
To fix this, buy a " +"properly signed certificate" +msgstr "" + +#: ../admin/ssl_list.php:71 +msgid "Your Certificates" +msgstr "" + +#: ../admin/ssl_list.php:73 +msgid "" +"Please find below your SSL Certificates. Some may be provided by the " +"administrator of the server, some may be Expired or Pending (waiting for a " +"CRT from your Certificate Provider)" +msgstr "" + +#: ../admin/ssl_list.php:75 +msgid "Only show the following certificates:" +msgstr "" + +#: ../admin/ssl_list.php:76 +msgid "Pending Certificates" +msgstr "" + +#: ../admin/ssl_list.php:77 +msgid "Valid Certificates" +msgstr "" + +#: ../admin/ssl_list.php:78 +msgid "Expired Certificates" +msgstr "" + +#: ../admin/ssl_list.php:80 +msgid "Certificates Shared by the Administrator" +msgstr "" + +#: ../admin/ssl_list.php:82 +msgid "Filter" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Domain Name" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Status" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Used by" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Validity period" +msgstr "" + +#: ../admin/ssl_list.php:91 +msgid "Details" +msgstr "" + +#: ../admin/ssl_list.php:97 +msgid "(shared)" +msgstr "" + +#: ../admin/ssl_list.php:102 ../admin/ssl_list.php:106 +#: ../admin/ssl_list.php:112 ../admin/ssl_view.php:65 +#: ../admin/ssl_view.php:119 ../admin/ssl_view.php:133 +#, php-format +msgid "%3$d-%2$d-%1$d %4$d:%5$d" +msgstr "" + +#: ../admin/ssl_list.php:111 +msgid "Requested on: " +msgstr "" + +#: ../admin/ssl_list.php:129 +msgid "Create one" +msgstr "" + +#: ../admin/ssl_list.php:130 +msgid "" +"This hosting has no valid certificate
a self-signed one has been created" +msgstr "" + +#: ../admin/ssl_list.php:140 +msgid "Create or Import a new SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:42 +msgid "New SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:50 +msgid "" +"An SSL certificate is a file which must be obtained from a Certificate " +"Authority, and allow you to enable HTTPS encryption on a domain name." +msgstr "" + +#: ../admin/ssl_new.php:53 +msgid "" +"To obtain one, you need to generate a Certificate Request (CSR) and a " +"RSA Key (KEY) here, then give the CSR to the Certificate Authority, " +"which will give you a certificate (CRT) and also often a chained certificate " +"(CHAIN)." +msgstr "" + +#: ../admin/ssl_new.php:56 +msgid "" +"If you already know what it is and already have all those files (CRT/KEY/" +"CHAIN) You can import them here too." +msgstr "" + +#: ../admin/ssl_new.php:64 +msgid "Create a CSR/KEY" +msgstr "" + +#: ../admin/ssl_new.php:65 +msgid "Import existing files" +msgstr "" + +#: ../admin/ssl_new.php:69 +msgid "Create a CSR/KEY for a given domain name" +msgstr "" + +#: ../admin/ssl_new.php:71 +msgid "" +"Use this form to generate a Certificate Request file (CSR) and a " +"RSA Key file (KEY) for a given domain name" +msgstr "" + +#: ../admin/ssl_new.php:98 +msgid "" +"Please choose the domain name for which you want a SSL Certificate, or enter " +"it manually" +msgstr "" + +#: ../admin/ssl_new.php:101 ../admin/ssl_view.php:60 +msgid "Fully Qualified Domain Name" +msgstr "" + +#: ../admin/ssl_new.php:104 +msgid "--- Choose here ---" +msgstr "" + +#: ../admin/ssl_new.php:110 +msgid "... or click here to enter it manually" +msgstr "" + +#: ../admin/ssl_new.php:117 ../admin/ssl_new.php:151 ../admin/ssl_view.php:82 +msgid "Save" +msgstr "" + +#: ../admin/ssl_new.php:118 ../admin/ssl_new.php:152 ../admin/ssl_view.php:83 +msgid "Cancel" +msgstr "" + +#: ../admin/ssl_new.php:123 +msgid "" +"(If you want to get a valid certificate for all the subdomains of a " +"domain, use a wildcard notation (eg: *.example.com). Please note that a " +"wildcard certificate is usually more expensive than normal one.)" +msgstr "" + +#: ../admin/ssl_new.php:123 +msgid "" +"Please note that a SSL Certificate is only valid for one fully qualified " +"domain name. As a result, a certificate for www.example.com is " +"NOT valid for intranet.example.com or intranet.www." +"example.com !" +msgstr "" + +#: ../admin/ssl_new.php:130 +msgid "Import existing Key Certificate and Chain files" +msgstr "" + +#: ../admin/ssl_new.php:132 +msgid "" +"If you already have a RSA Key file, a Certificate for this key and (maybe) a " +"Chained certificate, please paste their content here." +msgstr "" + +#: ../admin/ssl_new.php:133 +msgid "" +"We will verify the content of those files and add them in your certificate " +"repository" +msgstr "" + +#: ../admin/ssl_new.php:138 +msgid "RSA Key" +msgstr "" + +#: ../admin/ssl_new.php:142 ../admin/ssl_view.php:73 ../admin/ssl_view.php:159 +msgid "SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:146 ../admin/ssl_view.php:77 ../admin/ssl_view.php:164 +msgid "Chained Certificate
(not mandatory)" +msgstr "" + +#: ../admin/ssl_share.php:30 +msgid "This page is restricted to authorized staff" +msgstr "" + +#: ../admin/ssl_view.php:52 +msgid "" +"Your Certificate Request File (CSR) has been created, along with its " +"private RSA Key (KEY). Please find below the CSR you must send to " +"your SSL Certificate provider." +msgstr "" + +#: ../admin/ssl_view.php:54 +msgid "" +"Once you'll have your Certificate File (CRT) and a Chained " +"Certificate File (CHAIN), please paste them here to finish the " +"enrollment." +msgstr "" + +#: ../admin/ssl_view.php:64 +msgid "Date of the request" +msgstr "" + +#: ../admin/ssl_view.php:68 ../admin/ssl_view.php:154 +msgid "Certificate Request File" +msgstr "" + +#: ../admin/ssl_view.php:85 ../admin/ssl_view.php:213 +msgid "Delete" +msgstr "" + +#: ../admin/ssl_view.php:86 +msgid "" +"Please confirm that you want to delete this certificate request AND ITS " +"PRIVATE KEY!" +msgstr "" + +#: ../admin/ssl_view.php:97 +msgid "Valid Certificate" +msgstr "" + +#: ../admin/ssl_view.php:98 +msgid "Please find below your valid certificate data." +msgstr "" + +#: ../admin/ssl_view.php:104 +msgid "EXPIRED Certificate" +msgstr "" + +#: ../admin/ssl_view.php:105 +msgid "" +"Your certificate is EXPIRED. You should not use it for any purpose. Please " +"find below its data." +msgstr "" + +#: ../admin/ssl_view.php:113 +msgid "Back to my SSL Certificates" +msgstr "" + +#: ../admin/ssl_view.php:117 +msgid "Valid From:" +msgstr "" + +#: ../admin/ssl_view.php:123 +#, php-format +msgid "(%d days ago)" +msgstr "" + +#: ../admin/ssl_view.php:126 +#, php-format +msgid "(%d month ago)" +msgstr "" + +#: ../admin/ssl_view.php:131 +msgid "Valid Until:" +msgstr "" + +#: ../admin/ssl_view.php:137 +#, php-format +msgid "(%d days from now)" +msgstr "" + +#: ../admin/ssl_view.php:140 +#, php-format +msgid "(%d month from now)" +msgstr "" + +#: ../admin/ssl_view.php:145 +msgid "FQDN:" +msgstr "" + +#: ../admin/ssl_view.php:149 +msgid "Other Valid FQDN:" +msgstr "" + +#: ../admin/ssl_view.php:173 +msgid "" +"As an administrator you can allow any account on this server to use this " +"certificate to host his services.
(This is only useful for wildcard or " +"multi-domain certificates)." +msgstr "" + +#: ../admin/ssl_view.php:177 +msgid "This certificate is currently shared" +msgstr "" + +#: ../admin/ssl_view.php:184 +msgid "Click here to stop sharing this certificate" +msgstr "" + +#: ../admin/ssl_view.php:189 ../admin/ssl_view.php:205 +msgid "" +"You are not the owner of this certificate, only its owner can share/unshare " +"this certificate." +msgstr "" + +#: ../admin/ssl_view.php:193 +msgid "This certificate is currently NOT shared" +msgstr "" + +#: ../admin/ssl_view.php:200 +msgid "Click here to share this certificate" +msgstr "" + +#: ../admin/ssl_view.php:214 +msgid "" +"Please confirm that you want to delete this certificate AND ITS PRIVATE KEY!" +msgstr "" + +#: ../class/m_ssl.php:69 ../class/m_ssl.php:418 +msgid "SSL Certificates" +msgstr "" + +#: ../class/m_ssl.php:79 +msgid "New SSL certificate" +msgstr "" + +#: ../class/m_ssl.php:93 +msgid "List SSL Certificates" +msgstr "" + +#: ../class/m_ssl.php:152 +msgid "No SSL certificates available" +msgstr "" + +#: ../class/m_ssl.php:175 +msgid "You currently have no hosting using SSL certificate" +msgstr "" + +#: ../class/m_ssl.php:196 +msgid "Bad FQDN domain name" +msgstr "" + +#: ../class/m_ssl.php:202 ../class/m_ssl.php:774 +msgid "Can't generate a private key (1)" +msgstr "" + +#: ../class/m_ssl.php:207 ../class/m_ssl.php:779 +msgid "Can't generate a private key (2)" +msgstr "" + +#: ../class/m_ssl.php:218 +msgid "Can't generate a CSR" +msgstr "" + +#: ../class/m_ssl.php:234 ../class/m_ssl.php:250 ../class/m_ssl.php:273 +msgid "Can't find this Certificate" +msgstr "" + +#: ../class/m_ssl.php:353 +msgid "Can't save the Key/Crt/Chain now. Please try later." +msgstr "" + +#: ../class/m_ssl.php:390 +msgid "Can't save the Crt/Chain now. Please try later." +msgstr "" + +#: ../class/m_ssl.php:618 +msgid "Alias already exists" +msgstr "" + +#: ../class/m_ssl.php:637 +msgid "Alias not found" +msgstr "" + +#: ../class/m_ssl.php:666 +msgid "" +"Can't find the private key in the certificate table, please check your form." +msgstr "" + +#: ../class/m_ssl.php:675 +msgid "" +"The certificate must begin by BEGIN CERTIFICATE and end by END CERTIFICATE " +"lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:680 +msgid "" +"The chained certificate must begin by BEGIN CERTIFICATE and end by END " +"CERTIFICATE lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:686 +msgid "" +"The private key must begin by BEGIN (RSA )PRIVATE KEY and end by END (RSA )" +"PRIVATE KEY lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:722 +#, php-format +msgid "The %d-th certificate in the chain is invalid" +msgstr "" + +#: ../class/m_ssl.php:730 +msgid "The certificate is invalid." +msgstr "" + +#: ../class/m_ssl.php:735 +msgid "The private key is invalid." +msgstr "" + +#: ../class/m_ssl.php:740 +msgid "The private key is not the one signed inside the certificate." +msgstr "" + +#: ../class/m_ssl.php:746 +msgid "Can't export your certificate as a string, please check its syntax." +msgstr "" + +#: ../class/m_ssl.php:751 +msgid "" +"Can't export one of your chained certificates as a string, please check its " +"syntax." +msgstr "" + +#: ../class/m_ssl.php:757 +msgid "Can't export your private key as a string, please check its syntax." +msgstr "" + +#: ../class/m_ssl.php:800 +msgid "Locally hosted forcing HTTPS" +msgstr "" + +#: ../class/m_ssl.php:801 +msgid "Locally hosted HTTP and HTTPS" +msgstr "" + +#: ../class/m_ssl.php:802 +msgid "HTTPS AlternC panel access" +msgstr "" + +#: ../class/m_ssl.php:803 +msgid "HTTPS Roundcube Webmail" +msgstr "" + +#: ../class/m_ssl.php:804 +msgid "HTTPS Squirrelmail Webmail" +msgstr "" + +#: ../class/m_ssl.php:805 +msgid "php52 forcing HTTPS" +msgstr "" + +#: ../class/m_ssl.php:806 +msgid "php52 HTTP and HTTPS" +msgstr "" diff --git a/ssl/panel/locales/pt_BR/LC_MESSAGES/ssl.po b/ssl/panel/locales/pt_BR/LC_MESSAGES/ssl.po new file mode 100644 index 00000000..05a15830 --- /dev/null +++ b/ssl/panel/locales/pt_BR/LC_MESSAGES/ssl.po @@ -0,0 +1,3425 @@ +# Portugese AlternC Translation +# Copyright (c) 2007 the AlternC Development Team +# +# $Id: admin.po,v 1.2 2003/06/09 14:36:08 root Exp $ +msgid "" +msgstr "" +"Project-Id-Version: $Id: admin.po,v 1.2 2003/06/09 14:36:08 root Exp $\n" +"Report-Msgid-Bugs-To: i18n@alternc.org\n" +"POT-Creation-Date: 2015-02-13 18:04+0100\n" +"PO-Revision-Date: 2007-10-25 23:50-0400\n" +"Last-Translator: Benjamin Sonntag \n" +"Language-Team: English \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Emacs 21\n" + +#: ../admin/ssl_delete.php:43 +#, fuzzy +msgid "Your SSL Certificate has been deleted" +msgstr "Suas preferências foram atualizadas." + +#: ../admin/ssl_doimport.php:39 +#, fuzzy +msgid "Please enter an ssl key and a certificate" +msgstr "Please enter a password" + +#: ../admin/ssl_donew.php:38 +#, fuzzy +msgid "Please enter a proper domain name" +msgstr "Please enter a password" + +#: ../admin/ssl_finalize.php:49 +#, fuzzy +msgid "Your ssl certificate has been imported successfully" +msgstr "Seu domínio %s foi instalado com sucesso" + +#: ../admin/ssl_list.php:51 ../admin/ssl_view.php:50 +msgid "Pending Certificate" +msgstr "" + +#: ../admin/ssl_list.php:52 +msgid "Valid" +msgstr "" + +#: ../admin/ssl_list.php:53 +msgid "Expired" +msgstr "" + +#: ../admin/ssl_list.php:59 +msgid "" +"Some of your hosting are using a self-signed certificate.
Your " +"browser will not let you surf those domains properly
To fix this, buy a " +"properly signed certificate" +msgstr "" + +#: ../admin/ssl_list.php:71 +msgid "Your Certificates" +msgstr "" + +#: ../admin/ssl_list.php:73 +msgid "" +"Please find below your SSL Certificates. Some may be provided by the " +"administrator of the server, some may be Expired or Pending (waiting for a " +"CRT from your Certificate Provider)" +msgstr "" + +#: ../admin/ssl_list.php:75 +msgid "Only show the following certificates:" +msgstr "" + +#: ../admin/ssl_list.php:76 +msgid "Pending Certificates" +msgstr "" + +#: ../admin/ssl_list.php:77 +msgid "Valid Certificates" +msgstr "" + +#: ../admin/ssl_list.php:78 +msgid "Expired Certificates" +msgstr "" + +#: ../admin/ssl_list.php:80 +msgid "Certificates Shared by the Administrator" +msgstr "" + +#: ../admin/ssl_list.php:82 +#, fuzzy +msgid "Filter" +msgstr "Lista de contas FTP" + +#: ../admin/ssl_list.php:85 +#, fuzzy +msgid "Domain Name" +msgstr "Nome do Domínio" + +#: ../admin/ssl_list.php:85 +msgid "Status" +msgstr "" + +#: ../admin/ssl_list.php:85 +#, fuzzy +msgid "Used by" +msgstr "Usado(s)" + +#: ../admin/ssl_list.php:85 +msgid "Validity period" +msgstr "" + +#: ../admin/ssl_list.php:91 +#, fuzzy +msgid "Details" +msgstr "Caixas e email" + +#: ../admin/ssl_list.php:97 +msgid "(shared)" +msgstr "" + +#: ../admin/ssl_list.php:102 ../admin/ssl_list.php:106 +#: ../admin/ssl_list.php:112 ../admin/ssl_view.php:65 +#: ../admin/ssl_view.php:119 ../admin/ssl_view.php:133 +#, fuzzy, php-format +msgid "%3$d-%2$d-%1$d %4$d:%5$d" +msgstr "%3$d/%1$d/%2$d, à %6$d:%5$d %7$s" + +#: ../admin/ssl_list.php:111 +msgid "Requested on: " +msgstr "" + +#: ../admin/ssl_list.php:129 +#, fuzzy +msgid "Create one" +msgstr "Criar" + +#: ../admin/ssl_list.php:130 +msgid "" +"This hosting has no valid certificate
a self-signed one has been created" +msgstr "" + +#: ../admin/ssl_list.php:140 +msgid "Create or Import a new SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:42 +msgid "New SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:50 +msgid "" +"An SSL certificate is a file which must be obtained from a Certificate " +"Authority, and allow you to enable HTTPS encryption on a domain name." +msgstr "" + +#: ../admin/ssl_new.php:53 +msgid "" +"To obtain one, you need to generate a Certificate Request (CSR) and a " +"RSA Key (KEY) here, then give the CSR to the Certificate Authority, " +"which will give you a certificate (CRT) and also often a chained certificate " +"(CHAIN)." +msgstr "" + +#: ../admin/ssl_new.php:56 +msgid "" +"If you already know what it is and already have all those files (CRT/KEY/" +"CHAIN) You can import them here too." +msgstr "" + +#: ../admin/ssl_new.php:64 +msgid "Create a CSR/KEY" +msgstr "" + +#: ../admin/ssl_new.php:65 +#, fuzzy +msgid "Import existing files" +msgstr "Importar este arquivo" + +#: ../admin/ssl_new.php:69 +msgid "Create a CSR/KEY for a given domain name" +msgstr "" + +#: ../admin/ssl_new.php:71 +msgid "" +"Use this form to generate a Certificate Request file (CSR) and a " +"RSA Key file (KEY) for a given domain name" +msgstr "" + +#: ../admin/ssl_new.php:98 +msgid "" +"Please choose the domain name for which you want a SSL Certificate, or enter " +"it manually" +msgstr "" + +#: ../admin/ssl_new.php:101 ../admin/ssl_view.php:60 +msgid "Fully Qualified Domain Name" +msgstr "" + +#: ../admin/ssl_new.php:104 +msgid "--- Choose here ---" +msgstr "" + +#: ../admin/ssl_new.php:110 +#, fuzzy +msgid "... or click here to enter it manually" +msgstr "Clicar aqui para continuar" + +#: ../admin/ssl_new.php:117 ../admin/ssl_new.php:151 ../admin/ssl_view.php:82 +msgid "Save" +msgstr "Salvar" + +#: ../admin/ssl_new.php:118 ../admin/ssl_new.php:152 ../admin/ssl_view.php:83 +msgid "Cancel" +msgstr "" + +#: ../admin/ssl_new.php:123 +msgid "" +"(If you want to get a valid certificate for all the subdomains of a " +"domain, use a wildcard notation (eg: *.example.com). Please note that a " +"wildcard certificate is usually more expensive than normal one.)" +msgstr "" + +#: ../admin/ssl_new.php:123 +msgid "" +"Please note that a SSL Certificate is only valid for one fully qualified " +"domain name. As a result, a certificate for www.example.com is " +"NOT valid for intranet.example.com or intranet.www." +"example.com !" +msgstr "" + +#: ../admin/ssl_new.php:130 +msgid "Import existing Key Certificate and Chain files" +msgstr "" + +#: ../admin/ssl_new.php:132 +msgid "" +"If you already have a RSA Key file, a Certificate for this key and (maybe) a " +"Chained certificate, please paste their content here." +msgstr "" + +#: ../admin/ssl_new.php:133 +msgid "" +"We will verify the content of those files and add them in your certificate " +"repository" +msgstr "" + +#: ../admin/ssl_new.php:138 +msgid "RSA Key" +msgstr "" + +#: ../admin/ssl_new.php:142 ../admin/ssl_view.php:73 ../admin/ssl_view.php:159 +msgid "SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:146 ../admin/ssl_view.php:77 ../admin/ssl_view.php:164 +msgid "Chained Certificate
(not mandatory)" +msgstr "" + +#: ../admin/ssl_share.php:30 +msgid "This page is restricted to authorized staff" +msgstr "Esta página é restringida à equipe de funcionários autorizada" + +#: ../admin/ssl_view.php:52 +msgid "" +"Your Certificate Request File (CSR) has been created, along with its " +"private RSA Key (KEY). Please find below the CSR you must send to " +"your SSL Certificate provider." +msgstr "" + +#: ../admin/ssl_view.php:54 +msgid "" +"Once you'll have your Certificate File (CRT) and a Chained " +"Certificate File (CHAIN), please paste them here to finish the " +"enrollment." +msgstr "" + +#: ../admin/ssl_view.php:64 +msgid "Date of the request" +msgstr "" + +#: ../admin/ssl_view.php:68 ../admin/ssl_view.php:154 +msgid "Certificate Request File" +msgstr "" + +#: ../admin/ssl_view.php:85 ../admin/ssl_view.php:213 +msgid "Delete" +msgstr "Suprimir" + +#: ../admin/ssl_view.php:86 +msgid "" +"Please confirm that you want to delete this certificate request AND ITS " +"PRIVATE KEY!" +msgstr "" + +#: ../admin/ssl_view.php:97 +msgid "Valid Certificate" +msgstr "" + +#: ../admin/ssl_view.php:98 +msgid "Please find below your valid certificate data." +msgstr "" + +#: ../admin/ssl_view.php:104 +msgid "EXPIRED Certificate" +msgstr "" + +#: ../admin/ssl_view.php:105 +msgid "" +"Your certificate is EXPIRED. You should not use it for any purpose. Please " +"find below its data." +msgstr "" + +#: ../admin/ssl_view.php:113 +msgid "Back to my SSL Certificates" +msgstr "" + +#: ../admin/ssl_view.php:117 +msgid "Valid From:" +msgstr "" + +#: ../admin/ssl_view.php:123 +#, php-format +msgid "(%d days ago)" +msgstr "" + +#: ../admin/ssl_view.php:126 +#, php-format +msgid "(%d month ago)" +msgstr "" + +#: ../admin/ssl_view.php:131 +msgid "Valid Until:" +msgstr "" + +#: ../admin/ssl_view.php:137 +#, php-format +msgid "(%d days from now)" +msgstr "" + +#: ../admin/ssl_view.php:140 +#, php-format +msgid "(%d month from now)" +msgstr "" + +#: ../admin/ssl_view.php:145 +msgid "FQDN:" +msgstr "" + +#: ../admin/ssl_view.php:149 +msgid "Other Valid FQDN:" +msgstr "" + +#: ../admin/ssl_view.php:173 +msgid "" +"As an administrator you can allow any account on this server to use this " +"certificate to host his services.
(This is only useful for wildcard or " +"multi-domain certificates)." +msgstr "" + +#: ../admin/ssl_view.php:177 +msgid "This certificate is currently shared" +msgstr "" + +#: ../admin/ssl_view.php:184 +#, fuzzy +msgid "Click here to stop sharing this certificate" +msgstr "Clicar aqui para continuar" + +#: ../admin/ssl_view.php:189 ../admin/ssl_view.php:205 +msgid "" +"You are not the owner of this certificate, only its owner can share/unshare " +"this certificate." +msgstr "" + +#: ../admin/ssl_view.php:193 +msgid "This certificate is currently NOT shared" +msgstr "" + +#: ../admin/ssl_view.php:200 +#, fuzzy +msgid "Click here to share this certificate" +msgstr "clica aqui para editar esta conta ftp" + +#: ../admin/ssl_view.php:214 +msgid "" +"Please confirm that you want to delete this certificate AND ITS PRIVATE KEY!" +msgstr "" + +#: ../class/m_ssl.php:69 ../class/m_ssl.php:418 +msgid "SSL Certificates" +msgstr "" + +#: ../class/m_ssl.php:79 +msgid "New SSL certificate" +msgstr "" + +#: ../class/m_ssl.php:93 +msgid "List SSL Certificates" +msgstr "" + +#: ../class/m_ssl.php:152 +msgid "No SSL certificates available" +msgstr "" + +#: ../class/m_ssl.php:175 +#, fuzzy +msgid "You currently have no hosting using SSL certificate" +msgstr "Você não tem nenhuma base de dados definida" + +#: ../class/m_ssl.php:196 +#, fuzzy +msgid "Bad FQDN domain name" +msgstr "Nome do Domínio" + +#: ../class/m_ssl.php:202 ../class/m_ssl.php:774 +msgid "Can't generate a private key (1)" +msgstr "" + +#: ../class/m_ssl.php:207 ../class/m_ssl.php:779 +msgid "Can't generate a private key (2)" +msgstr "" + +#: ../class/m_ssl.php:218 +msgid "Can't generate a CSR" +msgstr "" + +#: ../class/m_ssl.php:234 ../class/m_ssl.php:250 ../class/m_ssl.php:273 +#, fuzzy +msgid "Can't find this Certificate" +msgstr "clica aqui para editar esta conta ftp" + +#: ../class/m_ssl.php:353 +msgid "Can't save the Key/Crt/Chain now. Please try later." +msgstr "" + +#: ../class/m_ssl.php:390 +msgid "Can't save the Crt/Chain now. Please try later." +msgstr "" + +#: ../class/m_ssl.php:618 +#, fuzzy +msgid "Alias already exists" +msgstr "Edição de arquivo" + +#: ../class/m_ssl.php:637 +#, fuzzy +msgid "Alias not found" +msgstr "Domínio %s suprimido" + +#: ../class/m_ssl.php:666 +msgid "" +"Can't find the private key in the certificate table, please check your form." +msgstr "" + +#: ../class/m_ssl.php:675 +msgid "" +"The certificate must begin by BEGIN CERTIFICATE and end by END CERTIFICATE " +"lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:680 +msgid "" +"The chained certificate must begin by BEGIN CERTIFICATE and end by END " +"CERTIFICATE lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:686 +msgid "" +"The private key must begin by BEGIN (RSA )PRIVATE KEY and end by END (RSA )" +"PRIVATE KEY lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:722 +#, php-format +msgid "The %d-th certificate in the chain is invalid" +msgstr "" + +#: ../class/m_ssl.php:730 +#, fuzzy +msgid "The certificate is invalid." +msgstr "Lista de caixas de email do domínio %s" + +#: ../class/m_ssl.php:735 +#, fuzzy +msgid "The private key is invalid." +msgstr "Lista de caixas de email do domínio %s" + +#: ../class/m_ssl.php:740 +msgid "The private key is not the one signed inside the certificate." +msgstr "" + +#: ../class/m_ssl.php:746 +msgid "Can't export your certificate as a string, please check its syntax." +msgstr "" + +#: ../class/m_ssl.php:751 +msgid "" +"Can't export one of your chained certificates as a string, please check its " +"syntax." +msgstr "" + +#: ../class/m_ssl.php:757 +msgid "Can't export your private key as a string, please check its syntax." +msgstr "" + +#: ../class/m_ssl.php:800 +#, fuzzy +msgid "Locally hosted forcing HTTPS" +msgstr "Controlado localemente" + +#: ../class/m_ssl.php:801 +#, fuzzy +msgid "Locally hosted HTTP and HTTPS" +msgstr "Controlado localemente" + +#: ../class/m_ssl.php:802 +#, fuzzy +msgid "HTTPS AlternC panel access" +msgstr "Lista de contas FTP" + +#: ../class/m_ssl.php:803 +#, fuzzy +msgid "HTTPS Roundcube Webmail" +msgstr "Acesso Webmail" + +#: ../class/m_ssl.php:804 +#, fuzzy +msgid "HTTPS Squirrelmail Webmail" +msgstr "Acesso Webmail" + +#: ../class/m_ssl.php:805 +msgid "php52 forcing HTTPS" +msgstr "" + +#: ../class/m_ssl.php:806 +msgid "php52 HTTP and HTTPS" +msgstr "" + +#, fuzzy +#~ msgid "Changing your mail password" +#~ msgstr "Mudança da senha SQL" + +#, fuzzy +#~ msgid "Old Password:" +#~ msgstr "Senha POP" + +#, fuzzy +#~ msgid "New Password:" +#~ msgstr "New password" + +#, fuzzy +#~ msgid "Verify New Password:" +#~ msgstr "New password" + +#, fuzzy +#~ msgid "Change my mail password" +#~ msgstr "Mudança da senha SQL" + +#, fuzzy +#~ msgid "Change Password" +#~ msgstr "Mudança da senha SQL" + +#, fuzzy +#~ msgid "Change the password of your email account." +#~ msgstr "Mudar o email da sua conta" + +#, fuzzy +#~ msgid "Hosting control panel" +#~ msgstr "Painel de controle do Administrador" + +#, fuzzy +#~ msgid "Help: " +#~ msgstr "Ajuda" + +#, fuzzy +#~ msgid "You are currently using AlternC " +#~ msgstr "Aqui seus parâmetros atuaís" + +#, fuzzy +#~ msgid "New AlternC account" +#~ msgstr "Deletar as contas selecionadas" + +#, fuzzy +#~ msgid "Username" +#~ msgstr "Nome de usúario" + +#~ msgid "Initial password" +#~ msgstr "Senha inicial" + +#, fuzzy +#~ msgid "Confirm password" +#~ msgstr "Senha inicial" + +#~ msgid "Can he change its password" +#~ msgstr "Pode mudar a senha" + +#~ msgid "No" +#~ msgstr "Não" + +#~ msgid "Yes" +#~ msgstr "Sim" + +#~ msgid "First Name" +#~ msgstr "Nome" + +#~ msgid "Surname" +#~ msgstr "Sobrenome" + +#~ msgid "Email address" +#~ msgstr "Endereço email" + +#, fuzzy +#~ msgid "Account type" +#~ msgstr "Conta Permitiu ?" + +#, fuzzy +#~ msgid "Install the domain" +#~ msgstr "Controla domínios permitidos (TLD)" + +#, fuzzy +#~ msgid "Create this AlternC account" +#~ msgstr "Criar está nova conta FTP." + +#, fuzzy +#~ msgid "Add an IP" +#~ msgstr "Adicionar um novo TLD" + +#, fuzzy +#~ msgid "Add a comment" +#~ msgstr "Adiçionar um domínio" + +#~ msgid "Edit" +#~ msgstr "Editar" + +#, fuzzy +#~ msgid "Here the list of the available databases servers." +#~ msgstr "Aqui está a lista de membros hospedados" + +#, fuzzy +#~ msgid "Name" +#~ msgstr "Membro novo" + +#, fuzzy +#~ msgid "Hostname" +#~ msgstr "Nome de usúario" + +#, fuzzy +#~ msgid "Users" +#~ msgstr "Usado(s)" + +#, fuzzy +#~ msgid "Account not found" +#~ msgstr "Conta Permitiu ?" + +#, fuzzy +#~ msgid "User does not exist" +#~ msgstr "Membro '%s' não existe" + +#, fuzzy +#~ msgid "Redirection URL:" +#~ msgstr "Redireção URL" + +#~ msgid "Change the default quotas" +#~ msgstr "Mudar os quotas padrões" + +#, fuzzy +#~ msgid "Add account type" +#~ msgstr "Nenhuma conta selecionada" + +#, fuzzy +#~ msgid "Delete account type" +#~ msgstr "Deletar as contas selecionadas" + +#~ msgid "Quotas" +#~ msgstr "Quotas" + +#, fuzzy +#~ msgid "Edit the default quotas" +#~ msgstr "Mudar os quotas padrões" + +#, fuzzy +#~ msgid "Account" +#~ msgstr "Conta Permitiu ?" + +#~ msgid "Description" +#~ msgstr "Descição" + +#~ msgid "The new member has been successfully created" +#~ msgstr "O membro novo foi criado com sucesso" + +#, fuzzy +#~ msgid "deleted" +#~ msgstr "Suprimir" + +#, fuzzy +#~ msgid "could not be deleted" +#~ msgstr "Algums TLD não pode ser suprimidos..." + +#, fuzzy +#~ msgid "Deleting quota %s" +#~ msgstr "Suprimando o secundário-domínio %s" + +#, fuzzy +#~ msgid "WARNING: Confirm the deletion of the quota" +#~ msgstr "AVISO : Confirmar o apagamento do secundário-domínio" + +#, fuzzy +#~ msgid "Yes, delete this default quota" +#~ msgstr "Mudar os quotas padrões" + +#, fuzzy +#~ msgid "No, don't delete this default quota" +#~ msgstr "Algums TLD não pode ser suprimidos..." + +#~ msgid "Default quotas successfully changed" +#~ msgstr "Quotas padrões foram mudados com sucesso" + +#, fuzzy +#~ msgid "Default quotas could not be set." +#~ msgstr "Quotas padrões foram mudados com sucesso" + +#~ msgid "Member '%s' does not exist" +#~ msgstr "Membro '%s' não existe" + +#~ msgid "Member %s successfully deleted" +#~ msgstr "Membro %s foi suprimido com sucesso" + +#, fuzzy +#~ msgid "Please check the accounts you want to delete" +#~ msgstr "" +#~ "Por favor entrar o nome de arquivo que contem os dados do SQL que " +#~ "precisam restaurar." + +#, fuzzy +#~ msgid "Deleting users" +#~ msgstr "Suprimando o secundário-domínio %s" + +#, fuzzy +#~ msgid "WARNING : Confirm the deletion of the users" +#~ msgstr "AVISO : Confirmar o apagamento do secundário-domínio" + +#, fuzzy +#~ msgid "Yes, delete those accounts" +#~ msgstr "Deletar as contas selecionadas" + +#, fuzzy +#~ msgid "No, don't delete those accounts" +#~ msgstr "Deletar as contas selecionadas" + +#~ msgid "The member has been successfully edited" +#~ msgstr "O membro foi editado com sucesso" + +#, fuzzy +#~ msgid "Manage installed domains" +#~ msgstr "Controla domínios permitidos (TLD)" + +#~ msgid "Action" +#~ msgstr "Ação" + +#~ msgid "Connect as" +#~ msgstr "Conectar como" + +#, fuzzy +#~ msgid "Creator" +#~ msgstr "Criar" + +#, fuzzy +#~ msgid "Domain" +#~ msgstr "Domínios" + +#, fuzzy +#~ msgid "Locked Domain" +#~ msgstr "Conta Troncada" + +#, fuzzy +#~ msgid "Manage defaults domains type" +#~ msgstr "Controla domínios permitidos (TLD)" + +#, fuzzy +#~ msgid "%%DOMAIN%% : the Domain name" +#~ msgstr "Nome do Domínio" + +#, fuzzy +#~ msgid "%%SUB%% : The subdomain name" +#~ msgstr "Nome do Domínio" + +#, fuzzy +#~ msgid "Activation" +#~ msgstr "Ação" + +#, fuzzy +#~ msgid "settings" +#~ msgstr "Mostrar ícones?" + +#, fuzzy +#~ msgid "Manage domains type" +#~ msgstr "Controla domínios permitidos (TLD)" + +#, fuzzy +#~ msgid "Here is the list of domain types." +#~ msgstr "Aqui está a lista de membros hospedados" + +#, fuzzy +#~ msgid "Create a domain type" +#~ msgstr "Adiçionar um secundário-domínio" + +#, fuzzy +#~ msgid "Enabled?" +#~ msgstr "Conta Permitiu ?" + +#, fuzzy +#~ msgid "Edit a domain type" +#~ msgstr "Editando o domínio %s" + +#, fuzzy +#~ msgid "Change this domain type" +#~ msgstr "Mudar esta caixa de email" + +#, fuzzy +#~ msgid "This account is now a normal account" +#~ msgstr "Esta conta é uma conta super-administrador" + +#, fuzzy +#~ msgid "The member has been successfully renewed" +#~ msgstr "O membro foi editado com sucesso" + +#, fuzzy +#~ msgid "This account is now an administrator account" +#~ msgstr "Esta conta é uma conta super-administrador" + +#~ msgid "Member Edition" +#~ msgstr "Edição do Membro" + +#, fuzzy +#~ msgid "Account Enabled?" +#~ msgstr "Conta Permitiu ?" + +#, fuzzy +#~ msgid "You cannot disable your own account." +#~ msgstr "Você não pode mudar sua senha" + +#~ msgid "Password" +#~ msgstr "Senha" + +#, fuzzy +#~ msgid "Password change allowed?" +#~ msgstr "Senha" + +#~ msgid "Edit this account" +#~ msgstr "Editar esta conta" + +#, fuzzy +#~ msgid "Renew" +#~ msgstr "Rebatizar" + +#~ msgid "This account is a super-admin account" +#~ msgstr "Esta conta é uma conta super-administrador" + +# msgid "Disable the database" +# msgstr "Incapa +#~ msgid "" +#~ "There is only one administrator account, you cannot turn this account " +#~ "back to normal" +#~ msgstr "" +#~ "Você pode ter somente uma conta do administrador, você não pode voltar " +#~ "esta conta ao normal" + +#~ msgid "Turn this account back to normal" +#~ msgstr "Voltar esta conta à normal" + +#~ msgid "Make this account a super admin one" +#~ msgstr "Modificar esta conta à uma conta do super admin" + +#~ msgid "Account created by %s" +#~ msgstr "Conta foi criado por %s" + +#, fuzzy +#~ msgid "The email was successfully sent" +#~ msgstr "O membro foi editado com sucesso" + +#, fuzzy +#~ msgid "Mail" +#~ msgstr "Caixas e email" + +#~ msgid "Send" +#~ msgstr "Mandar" + +#, fuzzy +#~ msgid "AlternC account list" +#~ msgstr "Lista de contas FTP" + +#, fuzzy +#~ msgid "List all AlternC accounts" +#~ msgstr "Editar esta conta" + +#, fuzzy +#~ msgid "Or only the accounts of:" +#~ msgstr "Editar esta conta" + +#, fuzzy +#~ msgid "List only my accounts" +#~ msgstr "Editar uma conta FTP" + +#, fuzzy +#~ msgid "%s accounts" +#~ msgstr "Contas FTP" + +#, fuzzy +#~ msgid "Here is the list of hosted AlternC accounts" +#~ msgstr "Aqui está a lista de membros hospedados" + +#, fuzzy +#~ msgid "Create a new AlternC account" +#~ msgstr "Criar uma nova conta ftp" + +#, fuzzy +#~ msgid "No account defined for now" +#~ msgstr "Nenhuma conta selecionada" + +#~ msgid "Delete checked accounts" +#~ msgstr "Deletar as contas selecionadas" + +#, fuzzy +#~ msgid "Created by" +#~ msgstr "Criar" + +#, fuzzy +#~ msgid "Last login" +#~ msgstr "Último Login: " + +#, fuzzy +#~ msgid "Last ip" +#~ msgstr "Último Login: " + +#, fuzzy +#~ msgid "%3$d-%2$d-%1$d" +#~ msgstr "%3$d/%1$d/%2$d %6$d:%5$d %7$s" + +#, fuzzy +#~ msgid "Creator: %s" +#~ msgstr "Criar" + +#, fuzzy +#~ msgid "Member login" +#~ msgstr "Lista dos membros" + +#, fuzzy +#~ msgid "The requested account has been deleted. It is now denied." +#~ msgstr "O TLD pedido foi suprimido" + +#~ msgid "Admin Control Panel" +#~ msgstr "Painel de controle do Administrador" + +#~ msgid "Manage allowed domains (TLD)" +#~ msgstr "Controla domínios permitidos (TLD)" + +#, fuzzy +#~ msgid "Password Policies" +#~ msgstr "Senha" + +#, fuzzy +#~ msgid "Manage IP whitelist" +#~ msgstr "Controlar os membros" + +#, fuzzy +#~ msgid "Configure AlternC variables" +#~ msgstr "Configurar o navegador de arquivo" + +#, fuzzy +#~ msgid "Manage databases servers" +#~ msgstr "Criar minha base de dados principal" + +#, fuzzy +#~ msgid "Account creation statistics" +#~ msgstr "Conta foi criado por %s" + +#, fuzzy +#~ msgid "Click here to lock the panel and force logout of all the user." +#~ msgstr "clica aqui para criar uma conta ftp nesta pasta" + +#, fuzzy +#~ msgid "Manage Password Policy" +#~ msgstr "Mudança da senha SQL" + +#, fuzzy +#~ msgid "Policy changed" +#~ msgstr "Senha" + +#, fuzzy +#~ msgid "Password Kind" +#~ msgstr "Senha" + +#, fuzzy +#~ msgid "Password Policy" +#~ msgstr "Senha" + +#, fuzzy +#~ msgid "Min Size" +#~ msgstr "Tamanho" + +#, fuzzy +#~ msgid "Max Size" +#~ msgstr "Tamanho" + +#~ msgid "The quotas has been successfully edited" +#~ msgstr "Os quotas foram editados com sucesso" + +#~ msgid "Editing the quotas of a member" +#~ msgstr "Editando os quotas do membro" + +#~ msgid "Quota" +#~ msgstr "Quota" + +#~ msgid "Total" +#~ msgstr "Total" + +#~ msgid "Edit the quotas" +#~ msgstr "Editar os quotas" + +#, fuzzy +#~ msgid "IP Address" +#~ msgstr "Endereço email" + +#, fuzzy +#~ msgid "Add this ip to the slave list" +#~ msgstr "Adiçionar um email ao domínio %s" + +#~ msgid "Some TLD cannot be deleted..." +#~ msgstr "Algums TLD não pode ser suprimidos..." + +#~ msgid "The requested TLD has been deleted" +#~ msgstr "O TLD pedido foi suprimido" + +#~ msgid "" +#~ "Here is the list of the TLD allowed on this server. Each TLD can be " +#~ "allowed or denied after some checks (whois, ns, domain exists...)" +#~ msgstr "" +#~ "Aqui está a lista do TLD permitido neste servidor. Cada TLD pode ser " +#~ "permitido ou negado após algumas verifcações (whois, ns, domínio existir) " + +#~ msgid "Add a new TLD" +#~ msgstr "Adicionar um novo TLD" + +#~ msgid "Allowed Mode" +#~ msgstr "Modalidade Permitida" + +#~ msgid "TLD" +#~ msgstr "TLD" + +#~ msgid "Delete the checked TLD" +#~ msgstr "Suprimir o TLD selecionado" + +#~ msgid "" +#~ "Enter the new TLD (without the first dot) and choose what check should be " +#~ "done." +#~ msgstr "" +#~ "Entrar um novo TLD (sem o primeiro ponto) e escolher que verificação deve " +#~ "ser feita." + +#, fuzzy +#~ msgid "" +#~ "Warning : only some final tld are known in the whois function of AlternC, " +#~ "please check m_dom.php accordingly." +#~ msgstr "" +#~ "Aviso: somente algums tld estam conhecedos na função whois do AlternC, " +#~ "por favor verificar em m_domains.php conformente." + +#~ msgid "The TLD has been successfully added" +#~ msgstr "O TLD foi adiçionado com sucesso" + +#~ msgid "The TLD has been successfully edited" +#~ msgstr "Este TLD foi editado com sucesso" + +#~ msgid "Edit a TLD" +#~ msgstr "Editar um TLD" + +#~ msgid "Edit this TLD" +#~ msgstr "Editar este TLD" + +#~ msgid "Your file %s has been saved" +#~ msgstr "Seu arquivo %s foi salvado com sucesso" + +#~ msgid "File editing" +#~ msgstr "Edição de arquivo" + +#~ msgid "Save & Quit" +#~ msgstr "Salva & Sair" + +#~ msgid "Quit" +#~ msgstr "Sair" + +#, fuzzy +#~ msgid "WARNING: Confirm the deletion of this files" +#~ msgstr "AVISO : Confirmar o apagamento do secundário-domínio" + +#, fuzzy +#~ msgid "Yes, delete those files/folders" +#~ msgstr "Deletar as contas selecionadas" + +#, fuzzy +#~ msgid "failed" +#~ msgstr "Arquivo" + +#~ msgid "File browser" +#~ msgstr "Navegador de arquivos" + +#, fuzzy +#~ msgid "Send this file" +#~ msgstr "Importar este arquivo" + +#, fuzzy +#~ msgid "New file or folder:" +#~ msgstr "Nenhum arquivo nesta pasta" + +#~ msgid "Create" +#~ msgstr "Criar" + +#~ msgid "File" +#~ msgstr "Arquivo" + +#~ msgid "Folder" +#~ msgstr "Pasta" + +#~ msgid "Rename" +#~ msgstr "Rebatizar" + +#, fuzzy +#~ msgid "Change permissions" +#~ msgstr "Mudar meus ajustes" + +#, fuzzy +#~ msgid "Copy" +#~ msgstr "Copiar" + +#~ msgid "Move" +#~ msgstr "Relocalizar" + +#, fuzzy +#~ msgid "Filename" +#~ msgstr "Rebatizar" + +#~ msgid "Size" +#~ msgstr "Tamanho" + +#, fuzzy +#~ msgid "File Type" +#~ msgstr "Arquivo" + +#~ msgid "View" +#~ msgstr "Vista" + +#, fuzzy +#~ msgid "Restore SQL" +#~ msgstr "Restauração" + +#, fuzzy +#~ msgid "In which database to you want to restore this dump?" +#~ msgstr "Que pasta você quiser usar para salvar seus backups?" + +#, fuzzy +#~ msgid "Restore it" +#~ msgstr "Restauração" + +#~ msgid "V" +#~ msgstr "V" + +#~ msgid "No files in this folder" +#~ msgstr "Nenhum arquivo nesta pasta" + +#~ msgid "Protect this folder" +#~ msgstr "Protect this folder" + +#, fuzzy +#~ msgid "with a login and a password" +#~ msgstr "Senha inicial" + +#, fuzzy +#~ msgid "Download this folder" +#~ msgstr "Protect this folder" + +#, fuzzy +#~ msgid "Edit the ftp account" +#~ msgstr "Editar esta conta" + +#, fuzzy +#~ msgid "that exists in this folder" +#~ msgstr "Nenhum arquivo nesta pasta" + +#, fuzzy +#~ msgid "Create an ftp account in this folder" +#~ msgstr "Há uma conta ftp nesta pasta" + +#, fuzzy +#~ msgid "Configure the file editor" +#~ msgstr "Configurar o navegador de arquivo" + +#~ msgid "Your preferences have been updated." +#~ msgstr "Suas preferências foram atualizadas." + +#~ msgid "File browser preferences" +#~ msgstr "Preferências do navegador de arquivos" + +#~ msgid "Horizontal window size" +#~ msgstr "Tamanho horizontal da janela" + +#~ msgid "Vertical window size" +#~ msgstr "Tamanho vertical da janela" + +#~ msgid "File editor font name" +#~ msgstr "Nome de fonte do navegador de arquivos" + +#~ msgid "File editor font size" +#~ msgstr "Tamanho de fonte do navegador de arquivos" + +#~ msgid "File list view" +#~ msgstr "Vista lista de arquivos" + +#~ msgid "Downloading file format" +#~ msgstr "Abaixando o formate de arquivo" + +#~ msgid "What to do after creating a file" +#~ msgstr "Que a fazer após ter criado um arquivo" + +#~ msgid "Show icons?" +#~ msgstr "Mostrar ícones?" + +#~ msgid "Show file types?" +#~ msgstr "Mostrar tipos e arquivos?" + +#~ msgid "Remember last visited directory?" +#~ msgstr "Recordar o último diretório visitado?" + +#~ msgid "Change my settings" +#~ msgstr "Mudar meus ajustes" + +#, fuzzy +#~ msgid "Error, cannot find this folder" +#~ msgstr "Protect this folder" + +#, fuzzy +#~ msgid "Back to the root folder" +#~ msgstr "Volta ao navegador de arquivos" + +#, fuzzy +#~ msgid "Select" +#~ msgstr "Suprimir" + +#, fuzzy +#~ msgid "User" +#~ msgstr "Usado(s)" + +#, fuzzy +#~ msgid "Email report" +#~ msgstr "Endereço email" + +#, fuzzy +#~ msgid "HTTP password (optional)" +#~ msgstr "Endereço email" + +#, fuzzy +#~ msgid "Mail address (optional)" +#~ msgstr "Endereço email" + +#~ msgid "Domain hosting" +#~ msgstr "Hospedagem do Domínio" + +#~ msgid "Contact your administrator for more information." +#~ msgstr "Contatar seu administrador para mais informação." + +#~ msgid "You cannot add any new domain, your quota is over." +#~ msgstr "Você não pode adiçionr mais domínios, sua quota acabou." + +#~ msgid "host my dns here" +#~ msgstr "hospedar meu DNS aqui" + +#~ msgid "Add this domain" +#~ msgstr "Adiçionar este domínio" + +#~ msgid "" +#~ "If you don't want to host in our server the DNS of your domain, don't " +#~ "check the box 'host my dns here'. If you don't know what it mean, leave " +#~ "it checked." +#~ msgstr "" +#~ "Se você não quiser hospedar o DNS em nosso servidor, não seleciona a " +#~ "caixa 'hospedar meu DNS aqui'. Se você não sabe o que significa, deixá-lo " +#~ "selecionado." + +#~ msgid "Whois result on the domain" +#~ msgstr "Resultado Whois deste domínio" + +#, fuzzy +#~ msgid "Error: no domain" +#~ msgstr "Número de domínios" + +#~ msgid "Add a domain" +#~ msgstr "Adiçionar um domínio" + +#~ msgid "Your new domain %s has been successfully installed" +#~ msgstr "Seu domínio %s foi instalado com sucesso" + +#, fuzzy +#~ msgid "Deletion have been successfully cancelled" +#~ msgstr "A caixa de email %s foi mudado com sucesso" + +#~ msgid "Confirm the deletion of domain %s" +#~ msgstr "Confirma o apagamento deste domínio %s" + +#~ msgid "WARNING" +#~ msgstr "AVISO" + +#~ msgid "This will delete the related sub-domains too." +#~ msgstr "Isto suprimirá os secundário-domínios relacionados tambem." + +#, fuzzy +#~ msgid "Yes, delete this domain name" +#~ msgstr "Nome do Domínio" + +#, fuzzy +#~ msgid "No, don't delete this domain name" +#~ msgstr "Nome do Domínio" + +#~ msgid "Domain %s deleted" +#~ msgstr "Domínio %s suprimido" + +#~ msgid "The domain %s has been successfully deleted." +#~ msgstr "O domínio %s foi suprimido com sucesso." + +#, fuzzy +#~ msgid "Edit a subdomain:" +#~ msgstr "Editando o domínio %s" + +#, fuzzy +#~ msgid "Create a subdomain:" +#~ msgstr "Adiçionar um secundário-domínio" + +#, fuzzy +#~ msgid "(enter a TXT content for this domain)" +#~ msgstr "Adiçionar um email ao domínio %s" + +#, fuzzy +#~ msgid "Edit this subdomain" +#~ msgstr "Adiçionar este domínio" + +#, fuzzy +#~ msgid "Add this subdomain" +#~ msgstr "Adiçionar este domínio" + +#, fuzzy +#~ msgid "Missing value for this sub-domain" +#~ msgstr "Adiçionar um email ao domínio %s" + +#, fuzzy +#~ msgid "Manage %s" +#~ msgstr "Controlar os membros" + +#, fuzzy +#~ msgid "You requested deletion of domain %s." +#~ msgstr "Confirma o apagamento deste domínio %s" + +#, fuzzy +#~ msgid "Edit subdomains" +#~ msgstr "Editando o domínio %s" + +#, fuzzy +#~ msgid "Add subdomains" +#~ msgstr "Adiçionar um secundário-domínio" + +#, fuzzy +#~ msgid "Editing subdomains of %s" +#~ msgstr "Editando o domínio %s" + +#, fuzzy +#~ msgid "Subdomain" +#~ msgstr "Secundário-domínios" + +#, fuzzy +#~ msgid "Directory not found" +#~ msgstr "Domínio %s suprimido" + +#, fuzzy +#~ msgid "Deletion pending" +#~ msgstr "Suprimando o secundário-domínio %s" + +#, fuzzy +#~ msgid "Add a subdomains to %s" +#~ msgstr "Adiçionar um secundário-domínio" + +#, fuzzy +#~ msgid "DNS & Email parameters" +#~ msgstr "Parâmetros DNS" + +#~ msgid "Manage the DNS on the server ?" +#~ msgstr "Administrar o DNS neste servidor ?" + +#, fuzzy +#~ msgid "Manage the Emails Addresses of this domain on the server?" +#~ msgstr "Administrar o DNS neste servidor ?" + +#~ msgid "Submit the changes" +#~ msgstr "Submeter as mudanças" + +#, fuzzy +#~ msgid "Click here to view the dump" +#~ msgstr "Clicar aqui para continuar" + +#, fuzzy +#~ msgid "Domain removal" +#~ msgstr "Nome do Domínio" + +#~ msgid "Editing domain %s" +#~ msgstr "Editando o domínio %s" + +#, fuzzy +#~ msgid "The domain %s has been changed." +#~ msgstr "O domínio %s foi suprimido com sucesso." + +#, fuzzy +#~ msgid "The modifications will take effect at %time. Server time is %now." +#~ msgstr "As modificações estaram actualizadas em 5 minutos." + +#, fuzzy +#~ msgid "The domain field seems to be empty" +#~ msgstr "A caixa de email %s não existe!" + +#, fuzzy +#~ msgid "Working on %s" +#~ msgstr "Editando o domínio %s" + +#, fuzzy +#~ msgid "Enter the domain name you want to import" +#~ msgstr "A caixa de email %s não existe!" + +#~ msgid "Deleting subdomain %s" +#~ msgstr "Suprimando o secundário-domínio %s" + +#~ msgid "WARNING : Confirm the deletion of the subdomain" +#~ msgstr "AVISO : Confirmar o apagamento do secundário-domínio" + +#, fuzzy +#~ msgid "Deleting the subdomain %s:" +#~ msgstr "Suprimando o secundário-domínio %s" + +#, fuzzy +#~ msgid "The modifications will take effect at %time. Server time is %now." +#~ msgstr "As modificações estaram actualizadas em 5 minutos." + +#, fuzzy +#~ msgid "Editing subdomain" +#~ msgstr "Editando o domínio %s" + +#~ msgid "The ftp account %s has been successfully deleted" +#~ msgstr "Esta conta ftp %s foi suprimado com sucesso" + +#, fuzzy +#~ msgid "Confirm the FTP accounts deletion" +#~ msgstr "Confirma o apagamento deste domínio %s" + +#, fuzzy +#~ msgid "Create a FTP account" +#~ msgstr "Criar está nova conta FTP." + +#, fuzzy +#~ msgid "The ftp account has been successfully saved" +#~ msgstr "A conta ftp foi mudado com sucesso" + +#, fuzzy +#~ msgid "Editing a FTP account" +#~ msgstr "Editar uma conta FTP" + +#, fuzzy +#~ msgid "Click here if you want to edit password" +#~ msgstr "Please enter a password" + +#, fuzzy +#~ msgid "Password do not match" +#~ msgstr "Senha" + +#~ msgid "Please enter a password" +#~ msgstr "Please enter a password" + +#~ msgid "FTP accounts list" +#~ msgstr "Lista de contas FTP" + +#~ msgid "Create a new ftp account" +#~ msgstr "Criar uma nova conta ftp" + +#, fuzzy +#~ msgid "Server:" +#~ msgstr "Servidor SQL" + +#, fuzzy +#~ msgid "User/password:" +#~ msgstr "New password" + +#, fuzzy +#~ msgid "AlternC Control Panel" +#~ msgstr "Painel de controle do Administrador" + +#~ msgid "Protect a folder" +#~ msgstr "Protect a folder" + +#~ msgid "Adding a username in %s" +#~ msgstr "Adding a username in %s" + +#~ msgid "Add this user" +#~ msgstr "Add this user" + +#~ msgid "The protected folder %s has been successfully unprotected" +#~ msgstr "The protected folder %s has been successfully unprotected" + +#, fuzzy +#~ msgid "Authorized user deletion confirm" +#~ msgstr "No authorized user in %s" + +#~ msgid "Change the user %s in the protected folder %s" +#~ msgstr "Change the user %s in the protected folder %s" + +#~ msgid "The password of the user %s has been successfully changed" +#~ msgstr "The password of the user %s has been successfully changed" + +#~ msgid "No folder selected!" +#~ msgstr "No folder selected!" + +#~ msgid "List of authorized user in folder %s" +#~ msgstr "List of authorized user in folder %s" + +#~ msgid "No authorized user in %s" +#~ msgstr "No authorized user in %s" + +#, fuzzy +#~ msgid "Change this user's password" +#~ msgstr "Mudança da senha SQL" + +#~ msgid "Delete the checked users" +#~ msgstr "Delete the checked users" + +#, fuzzy +#~ msgid "Adding an authorized user" +#~ msgstr "No authorized user in %s" + +#~ msgid "Editing user %s in the protected folder %s" +#~ msgstr "Editing user %s in the protected folder %s" + +#~ msgid "New password" +#~ msgstr "New password" + +#, fuzzy +#~ msgid "Change the password" +#~ msgstr "Mudança da senha SQL" + +#~ msgid "Protected folders list" +#~ msgstr "Protected folders list" + +#, fuzzy +#~ msgid "Edit login and passwords" +#~ msgstr "Senha inicial" + +#~ msgid "Unprotect the checked folders" +#~ msgstr "Unprotect the checked folders" + +#, fuzzy +#~ msgid "Web Hosting Control Panel" +#~ msgstr "Painel de controle do Administrador" + +#, fuzzy +#~ msgid "AlternC access" +#~ msgstr "Lista de contas FTP" + +#~ msgid "You must accept the session cookie to log-in" +#~ msgstr "Você precisa aceitar o cookie da sessão para o login" + +#, fuzzy +#~ msgid "Need a login and a password" +#~ msgstr "Senha inicial" + +#, fuzzy +#~ msgid "Enabled rules" +#~ msgstr "Conta Permitiu ?" + +#, fuzzy +#~ msgid "Access type" +#~ msgstr "Conta Permitiu ?" + +#, fuzzy +#~ msgid "Add a new rule" +#~ msgstr "Adicionar um novo TLD" + +#, fuzzy +#~ msgid "Creation Date" +#~ msgstr "Criar" + +#, fuzzy +#~ msgid "Download link" +#~ msgstr "Abaixar" + +#~ msgid "Download" +#~ msgstr "Abaixar" + +#, fuzzy +#~ msgid "Deleting mail accounts" +#~ msgstr "Suprimir uma conta FTP" + +#, fuzzy +#~ msgid "Please confirm the deletion of the following mail accounts:" +#~ msgstr "Confirma o apagamento das bases de dados SQL seguintes" + +#, fuzzy +#~ msgid "Confirm the deletion" +#~ msgstr "Confirma o apagamento deste domínio %s" + +#, fuzzy +#~ msgid "Editing the email %s" +#~ msgstr "Editar a caixa e email %s" + +#, fuzzy +#~ msgid "Is it a POP/IMAP account?" +#~ msgstr "É uma conta POP?" + +#, fuzzy +#~ msgid "Click here to edit the existing password" +#~ msgstr "Please enter a password" + +#, fuzzy +#~ msgid "Enter a POP/IMAP password" +#~ msgstr "Senha POP" + +#, fuzzy +#~ msgid "Is it a redirection to other email addresses?" +#~ msgstr "Suprimir as bases selecionadas" + +#, fuzzy +#~ msgid "one recipient per line" +#~ msgstr "Um email por linha" + +#, fuzzy +#~ msgid "Change this email address" +#~ msgstr "Mudar esta caixa de email" + +#, fuzzy +#~ msgid "Create a new mail account" +#~ msgstr "Criar uma nova conta ftp" + +#, fuzzy +#~ msgid "Can't have empty mail." +#~ msgstr "Mudar esta caixa de email" + +#, fuzzy +#~ msgid "Create this email address" +#~ msgstr "Criar uma caixa de email" + +#, fuzzy +#~ msgid "Manage Catch-all for this domain" +#~ msgstr "Adiçionar um email ao domínio %s" + +#, fuzzy +#~ msgid "Email addresses of the domain %s" +#~ msgstr "Lista de caixas de email do domínio %s" + +#, fuzzy +#~ msgid "No mails for this domain." +#~ msgstr "Adiçionar um email ao domínio %s" + +#, fuzzy +#~ msgid "Show system emails" +#~ msgstr "Nome do Domínio" + +#, fuzzy +#~ msgid "Address" +#~ msgstr "Endereço email" + +#, fuzzy +#~ msgid "Last login time" +#~ msgstr "Último Login: " + +#~ msgid "Other recipients" +#~ msgstr "Outros receptores" + +#, fuzzy +#~ msgid "Deleting..." +#~ msgstr "Suprimando o secundário-domínio %s" + +#, fuzzy +#~ msgid "Undelete" +#~ msgstr "Suprimir" + +#, fuzzy +#~ msgid "Delete the checked email addresses" +#~ msgstr "Suprimir as bases selecionadas" + +#, fuzzy +#~ msgid "Server name: " +#~ msgstr "Rebatizar" + +#, fuzzy +#~ msgid "Username: " +#~ msgstr "Nome de usúario" + +#, fuzzy +#~ msgid "Normal password" +#~ msgstr "Senha inicial" + +#, fuzzy +#~ msgid "Connection security:" +#~ msgstr "Conectar como" + +#, fuzzy +#~ msgid "Normal Password" +#~ msgstr "Senha inicial" + +#, fuzzy +#~ msgid "Catchall successfully deleted" +#~ msgstr "Membro %s foi suprimido com sucesso" + +#, fuzzy +#~ msgid "Catchall successfully updated" +#~ msgstr "Os quotas foram editados com sucesso" + +#, fuzzy +#~ msgid "No catch-all for this domain." +#~ msgstr "Adiçionar um email ao domínio %s" + +#, fuzzy +#~ msgid "Enter the 'target' domain" +#~ msgstr "Controla domínios permitidos (TLD)" + +#, fuzzy +#~ msgid "Missing POST of the mail address" +#~ msgstr "Mudar esta caixa de email" + +#~ msgid "Last Login: " +#~ msgstr "Último Login: " + +#, fuzzy +#~ msgid "the %3$d-%2$d-%1$d at %4$d:%5$02d" +#~ msgstr "%3$d/%1$d/%2$d, à %6$d:%5$d %7$s" + +#~ msgid "from: %1$s " +#~ msgstr "do: %1$s " + +#~ msgid "%1$d login failed since last login" +#~ msgstr "%1$d login falharam desde o último login" + +#, fuzzy +#~ msgid "Your administrator preferences has been successfully changed." +#~ msgstr "Seus parâmetros de backup foram mudados com sucesso" + +#, fuzzy +#~ msgid "Admin preferences" +#~ msgstr "Preferências do editor de arquivos" + +#~ msgid "Change the email of the account" +#~ msgstr "Mudar o email da sua conta" + +#, fuzzy +#~ msgid "The mailbox has been successfully changed." +#~ msgstr "A caixa de email %s foi mudado com sucesso" + +#, fuzzy +#~ msgid "Click here to log in" +#~ msgstr "Clicar aqui para continuar" + +#, fuzzy +#~ msgid "Settings of your account" +#~ msgstr "Suprimir uma conta FTP" + +#~ msgid "Help" +#~ msgstr "Ajuda" + +#, fuzzy +#~ msgid "Administrator" +#~ msgstr "Administração do" + +#, fuzzy +#~ msgid "Password change" +#~ msgstr "Senha" + +#~ msgid "You cannot change your password" +#~ msgstr "Você não pode mudar sua senha" + +#, fuzzy +#~ msgid "Old password" +#~ msgstr "Senha POP" + +#, fuzzy +#~ msgid "Change my password" +#~ msgstr "Mudança da senha SQL" + +#, fuzzy +#~ msgid "Current mailbox" +#~ msgstr "Criar uma caixa de email" + +#, fuzzy +#~ msgid "New mailbox" +#~ msgstr "Caixas e email" + +#, fuzzy +#~ msgid "Change my email address" +#~ msgstr "Mudar esta caixa de email" + +#, fuzzy +#~ msgid "Online help settings" +#~ msgstr "Ajuda online" + +#, fuzzy +#~ msgid "Change these settings" +#~ msgstr "Mudar meus ajustes" + +#, fuzzy +#~ msgid "Members list view" +#~ msgstr "Lista dos membros" + +#, fuzzy +#~ msgid "Change my admin preferences" +#~ msgstr "Preferências do editor de arquivos" + +#~ msgid "Your password has been successfully changed." +#~ msgstr "Sua senha foi mudado com sucesso." + +#, fuzzy +#~ msgid "Welcome %s" +#~ msgstr "Deleter %s" + +#, fuzzy +#~ msgid "You cannot add any new Piwik account, your quota is over." +#~ msgstr "Você não pode adiçionr mais domínios, sua quota acabou." + +#, fuzzy +#~ msgid "Creation of Piwik account \"%s\"" +#~ msgstr "Criar uma nova conta ftp" + +#, fuzzy +#~ msgid "Site successfully deleted" +#~ msgstr "Membro %s foi suprimido com sucesso" + +#, fuzzy +#~ msgid "Piwik site deletion confirm" +#~ msgstr "Lista de contas FTP" + +#, fuzzy +#~ msgid "Add a new website" +#~ msgstr "Adicionar um novo TLD" + +#, fuzzy +#~ msgid "No existing Piwik websites" +#~ msgstr "Editar uma conta FTP" + +#, fuzzy +#~ msgid "Site name" +#~ msgstr "Rebatizar" + +#, fuzzy +#~ msgid "No piwik user specified" +#~ msgstr "No folder selected!" + +#, fuzzy +#~ msgid "This right does not exist" +#~ msgstr "Membro '%s' não existe" + +#, fuzzy +#~ msgid "Add rights to user" +#~ msgstr "Add this user" + +#, fuzzy +#~ msgid "admin" +#~ msgstr "Esta conta NÃO é uma conta administrativa" + +#, fuzzy +#~ msgid "noacces" +#~ msgstr "Lista de contas FTP" + +#, fuzzy +#~ msgid "Create a new piwik account" +#~ msgstr "Criar uma nova conta ftp" + +#, fuzzy +#~ msgid "Existing Piwik accounts" +#~ msgstr "Editar uma conta FTP" + +#, fuzzy +#~ msgid "Connect" +#~ msgstr "Conectar como" + +#, fuzzy +#~ msgid "%s account" +#~ msgstr "Contas FTP" + +#, fuzzy +#~ msgid "quota_web" +#~ msgstr "Espaço de Disco" + +#~ msgid "Domains" +#~ msgstr "Domínios" + +#, fuzzy +#~ msgid "Emails" +#~ msgstr "Endereço email" + +#, fuzzy +#~ msgid "Databases:" +#~ msgstr "Bases de dados" + +#, fuzzy +#~ msgid "Quotas status" +#~ msgstr "Quotas" + +#, fuzzy +#~ msgid "Administration -> Manage the Alternc accounts" +#~ msgstr "Mudar o email da sua conta" + +#, fuzzy +#~ msgid "Show the domain names" +#~ msgstr "Nome do Domínio" + +#, fuzzy +#~ msgid "Hide the domain names" +#~ msgstr "Nome do Domínio" + +#, fuzzy +#~ msgid "All accounts" +#~ msgstr "Contas FTP" + +#, fuzzy +#~ msgid "Email addresses" +#~ msgstr "Endereço email" + +#, fuzzy +#~ msgid "MySQL Databases" +#~ msgstr "Bases de dados MySQL" + +#, fuzzy +#~ msgid "Dom" +#~ msgstr "Domínios" + +#, fuzzy +#~ msgid "MySQL Databases - Configure backups" +#~ msgstr "Bases de dados MySQL" + +#~ msgid "Manage the SQL backup for database %s" +#~ msgstr "Administrar o backup SQL para a base de dados %s" + +#, fuzzy +#~ msgid "Do MySQL backup?" +#~ msgstr "Fazer backup SQL?" + +#~ msgid "No backup" +#~ msgstr "Nenhum backup" + +#~ msgid "Weekly backup" +#~ msgstr "Backup semanal" + +#~ msgid "Daily backup" +#~ msgstr "Backup diário" + +#, fuzzy +#~ msgid "How many backups should be kept?" +#~ msgstr "Quantos backups devem ser mantidos?" + +#~ msgid "Compress the backups? (gzip)" +#~ msgstr "Você quiser compresser os backups? (gzip)" + +#~ msgid "In which folder do you want to store the backups?" +#~ msgstr "Que pasta você quiser usar para salvar seus backups?" + +#, fuzzy +#~ msgid "Change the MySQL backup parameters" +#~ msgstr "Mudar os parâmetros SQL atuais" + +#, fuzzy +#~ msgid "The database %s has been successfully deleted" +#~ msgstr "A base de dados %s foi suprimido com sucesso" + +#, fuzzy +#~ msgid "Confirm the deletion of the following SQL databases" +#~ msgstr "Confirma o apagamento das bases de dados SQL seguintes" + +#, fuzzy +#~ msgid "This will delete all the tables currently in those db." +#~ msgstr "Isto suprimirá todas as tabelas atuais nestas bases de dados." + +#, fuzzy +#~ msgid "No, don't delete the database" +#~ msgstr "Permitir a base de dados" + +#, fuzzy +#~ msgid "Yes, delete the database" +#~ msgstr "Permitir a base de dados" + +#, fuzzy +#~ msgid "Can't create a database: your quota is over" +#~ msgstr "Você não pode adiçionr mais domínios, sua quota acabou." + +#~ msgid "Your backup parameters has been successfully changed." +#~ msgstr "Seus parâmetros de backup foram mudados com sucesso" + +#~ msgid "Restore a SQL backup" +#~ msgstr "Restaurar o backup SQL" + +#~ msgid "" +#~ "Your database has been restored, check out the previous text for error " +#~ "messages." +#~ msgstr "" +#~ "Sua base de dados foi restaurado, verificar o texto precedente para ver " +#~ "se há mensagens de erro." + +#, fuzzy +#~ msgid "Your current connection settings are" +#~ msgstr "Aqui seus parâmetros atuaís" + +#, fuzzy +#~ msgid "Mysql Server" +#~ msgstr "Servidor SQL" + +#~ msgid "Database" +#~ msgstr "Base de dados" + +#, fuzzy +#~ msgid "Web interface PhpMyAdmin" +#~ msgstr "Admin do SQL Geral" + +#, fuzzy +#~ msgid "Back to the MySQL database list" +#~ msgstr "Lista de contas FTP" + +#~ msgid "Backup" +#~ msgstr "Backup" + +#, fuzzy +#~ msgid "Restore" +#~ msgstr "Restauração" + +#, fuzzy +#~ msgid "Show Settings" +#~ msgstr "Mostrar ícones?" + +#, fuzzy +#~ msgid "Delete the checked databases" +#~ msgstr "Suprimir as bases selecionadas" + +#, fuzzy +#~ msgid "Create a new MySQL database" +#~ msgstr "Criar uma nova base de dados" + +#, fuzzy +#~ msgid "MySQL Database" +#~ msgstr "Bases de dados MySQL" + +#, fuzzy +#~ msgid "Create this new MySQL database." +#~ msgstr "Criar esta nova base de dados." + +#, fuzzy +#~ msgid "SQL Admin" +#~ msgstr "Admin SQL" + +#, fuzzy +#~ msgid "Restore a MySQL backup for database %s" +#~ msgstr "Restaurar o backup SQL para a base de dados %s" + +#, fuzzy +#~ msgid "" +#~ "Please enter the path and the filename containing SQL data to be restored." +#~ msgstr "" +#~ "Por favor entrar o nome de arquivo que contem os dados do SQL que " +#~ "precisam restaurar." + +#, fuzzy +#~ msgid "Restore my database" +#~ msgstr "Restaurar a base de dados" + +#~ msgid "Note: If the filename ends with .gz, it will be uncompressed before." +#~ msgstr "" +#~ "Nota: Se o nome de arquivo termina com .gz, primeiramente ele será de-" +#~ "compressado." + +#, fuzzy +#~ msgid "Create a new MySQL user" +#~ msgstr "Criar um membro novo" + +#, fuzzy +#~ msgid "Create this new MySQL user" +#~ msgstr "Criar um membro novo" + +#, fuzzy +#~ msgid "The user %s has been successfully deleted" +#~ msgstr "A base de dados %s foi suprimido com sucesso" + +#, fuzzy +#~ msgid "MySQL users" +#~ msgstr "Bases de dados MySQL" + +#, fuzzy +#~ msgid "Confirm the deletion of the following MySQL users" +#~ msgstr "Confirma o apagamento das bases de dados SQL seguintes" + +#, fuzzy +#~ msgid "No, don't delete the MySQL user" +#~ msgstr "Criar um membro novo" + +#, fuzzy +#~ msgid "Yes, delete the MySQL user" +#~ msgstr "Criar um membro novo" + +#, fuzzy +#~ msgid "The rights has been successfully applied to the user" +#~ msgstr "Os quotas foram editados com sucesso" + +#, fuzzy +#~ msgid "MySQL Users" +#~ msgstr "Bases de dados MySQL" + +#, fuzzy +#~ msgid "Manage the rights" +#~ msgstr "Controlar os membros" + +#, fuzzy +#~ msgid "Change user password" +#~ msgstr "Mudança da senha SQL" + +#, fuzzy +#~ msgid "Account creation per month" +#~ msgstr "Conta foi criado por %s" + +#, fuzzy +#~ msgid "Console access" +#~ msgstr "Lista de contas FTP" + +#, fuzzy +#~ msgid "Click here to start a virtual machine." +#~ msgstr "Clicar aqui para continuar" + +#, fuzzy +#~ msgid "Not managed" +#~ msgstr "Controlado localemente" + +#, fuzzy +#~ msgid "Clic here to generate a password" +#~ msgstr "Please enter a password" + +#, fuzzy +#~ msgid "Choose a folder..." +#~ msgstr "Protect a folder" + +#, fuzzy +#~ msgid "Error selecting old actions" +#~ msgstr "Suprimir uma conta FTP" + +#~ msgid "This TLD is forbidden" +#~ msgstr "Este TLD é proibido" + +#~ msgid "primary DNS is checked in WHOIS db" +#~ msgstr "O DNS preliminar está selecionado em db WHOIS" + +#~ msgid "primary & secondary DNS are checked in WHOIS db" +#~ msgstr "O DNS preliminar e secundário estam selecionados em db WHOIS" + +#~ msgid "Domain must exist, but don't do any DNS check" +#~ msgstr "O domínio deve existir, mais não faz a verificação DNS" + +#~ msgid "Domain can be installed, no check at all" +#~ msgstr "O domínio pode ser instalado, mas não faz nenhuma verificação" + +#, fuzzy +#~ msgid "Domain can be installed, force NO DNS hosting" +#~ msgstr "O domínio pode ser instalado, forçã a hospedadem SEM DNS" + +#, fuzzy +#~ msgid "Administration" +#~ msgstr "Administração do" + +#, fuzzy +#~ msgid "Manage AlternC accounts" +#~ msgstr "Mudar o email da sua conta" + +#, fuzzy +#~ msgid "User Quotas" +#~ msgstr "Quotas" + +#, fuzzy +#~ msgid "Applying..." +#~ msgstr "Suprimando o secundário-domínio %s" + +#, fuzzy +#~ msgid "Apply changes" +#~ msgstr "Senha" + +#, fuzzy +#~ msgid "You don't seem to be allowed to delegate this domain" +#~ msgstr "Confirma o apagamento deste domínio %s" + +#, fuzzy +#~ msgid "Please enter a valid email address" +#~ msgstr "Criar uma caixa de email" + +#, fuzzy +#~ msgid "This account is ALREADY an administrator account" +#~ msgstr "Esta conta é uma conta super-administrador" + +#, fuzzy +#~ msgid "This account is NOT an administrator account!" +#~ msgstr "Esta conta é uma conta super-administrador" + +#, fuzzy +#~ msgid "Domain '%s' not found." +#~ msgstr "Domínio %s suprimido" + +#, fuzzy +#~ msgid "This TLD does not exist" +#~ msgstr "Membro '%s' não existe" + +#, fuzzy +#~ msgid "Please enter a login" +#~ msgstr "Please enter a password" + +#~ msgid "1 column, detailed" +#~ msgstr "1 coluna, detalhado" + +#~ msgid "2 columns, short" +#~ msgstr "2 colunas, condensado" + +#~ msgid "3 columns, short" +#~ msgstr "3 colunas, condensado" + +#~ msgid "Edit the newly created file" +#~ msgstr "Editar o arquivo recentemente criada" + +#~ msgid "Go back to the file manager" +#~ msgstr "Volta ao navegador de arquivos" + +#, fuzzy +#~ msgid "This directory do not exist" +#~ msgstr "Membro '%s' não existe" + +#, fuzzy +#~ msgid "File not in authorized directory" +#~ msgstr "No authorized user in %s" + +#, fuzzy +#~ msgid "Email address is not valid" +#~ msgstr "Lista de caixas de email do domínio %s" + +#, fuzzy +#~ msgid "Missing domain name" +#~ msgstr "Editando o domínio %s" + +#, fuzzy +#~ msgid "The domain already exist" +#~ msgstr "Edição de arquivo" + +#, fuzzy +#~ msgid "Domain '%s' not found" +#~ msgstr "Domínio %s suprimido" + +#, fuzzy +#~ msgid "Could not delete default type" +#~ msgstr "Algums TLD não pode ser suprimidos..." + +#, fuzzy +#~ msgid "The sub-domain does not exist" +#~ msgstr "A caixa de email %s não existe!" + +#, fuzzy +#~ msgid "The folder you entered is incorrect or does not exist" +#~ msgstr "Membro '%s' não existe" + +#, fuzzy +#~ msgid "The name you entered is incorrect" +#~ msgstr "Membro '%s' não existe" + +#, fuzzy +#~ msgid "The TXT value you entered is incorrect" +#~ msgstr "Membro '%s' não existe" + +#, fuzzy +#~ msgid "The domain name %s does not exist" +#~ msgstr "A caixa de email %s não existe!" + +#, fuzzy +#~ msgid "No change has been requested..." +#~ msgstr "Suas preferências foram atualizadas." + +#, fuzzy +#~ msgid "This domain is not installed in your account" +#~ msgstr "Esta conta é uma conta super-administrador" + +#, fuzzy +#~ msgid "URL redirection" +#~ msgstr "Redireção URL" + +#~ msgid "Webmail access" +#~ msgstr "Acesso Webmail" + +#, fuzzy +#~ msgid "err_" +#~ msgstr "A informação entrada é incorreta" + +#~ msgid "FTP accounts" +#~ msgstr "Contas FTP" + +#, fuzzy +#~ msgid "This account do not exist or is not of this account" +#~ msgstr "Esta conta é uma conta super-administrador" + +#, fuzzy +#~ msgid "No FTP account found" +#~ msgstr "Nenhuma conta selecionada" + +#, fuzzy +#~ msgid "This FTP account does not exist" +#~ msgstr "Membro '%s' não existe" + +#, fuzzy +#~ msgid "FTP login is incorrect" +#~ msgstr "Membro '%s' não existe" + +#, fuzzy +#~ msgid "This FTP account already exists" +#~ msgstr "A caixa de email %s não existe!" + +#, fuzzy +#~ msgid "The directory cannot be created" +#~ msgstr "Algums TLD não pode ser suprimidos..." + +#, fuzzy +#~ msgid "Password can't be empty" +#~ msgstr "Senha" + +#~ msgid "Protected folders" +#~ msgstr "Protected folders" + +#, fuzzy +#~ msgid "The folder '%s' does not exist" +#~ msgstr "Membro '%s' não existe" + +#, fuzzy +#~ msgid "No protected folder" +#~ msgstr "Protected folders" + +#, fuzzy +#~ msgid "Please enter a user" +#~ msgstr "Please enter a password" + +#, fuzzy +#~ msgid "The user '%s' already exist for this folder" +#~ msgstr "Nenhum arquivo nesta pasta" + +#, fuzzy +#~ msgid "An incompatible .htaccess file exists in this folder" +#~ msgstr "Nenhum arquivo nesta pasta" + +#, fuzzy +#~ msgid "VM already started" +#~ msgstr "Edição de arquivo" + +#, fuzzy +#~ msgid "Email Addresses" +#~ msgstr "Endereço email" + +#, fuzzy +#~ msgid "Email account password" +#~ msgstr "Senha inicial" + +#, fuzzy +#~ msgid "No email found for this query" +#~ msgstr "Adiçionar um email ao domínio %s" + +#, fuzzy +#~ msgid "You cannot create email addresses: your quota is over" +#~ msgstr "Você não pode adiçionr mais domínios, sua quota acabou." + +#, fuzzy +#~ msgid "This email address already exists" +#~ msgstr "A caixa de email %s não existe!" + +#, fuzzy +#~ msgid "The email %s does not exist, it can't be deleted" +#~ msgstr "A caixa de email %s não existe!" + +#, fuzzy +#~ msgid "The email %s has been marked for deletion" +#~ msgstr "O domínio %s foi suprimido com sucesso." + +#, fuzzy +#~ msgid "The email %s has been successfully deleted" +#~ msgstr "O domínio %s foi suprimido com sucesso." + +#, fuzzy +#~ msgid "The email %s has been undeleted" +#~ msgstr "A caixa de email %s foi criado com sucesso" + +#, fuzzy +#~ msgid "The slave MX account was not found" +#~ msgstr "Conta Permitiu ?" + +#, fuzzy +#~ msgid "This account is locked, contact the administrator" +#~ msgstr "Esta conta é uma conta super-administrador" + +#, fuzzy +#~ msgid "Missing password" +#~ msgstr "Senha inicial" + +#, fuzzy +#~ msgid "Cookie incorrect, please accept the session cookie" +#~ msgstr "Você precisa aceitar o cookie da sessão para o login" + +#, fuzzy +#~ msgid "You are not allowed to change your password." +#~ msgstr "Você não pode mudar sua senha" + +#, fuzzy +#~ msgid "This account is locked, contact the administrator." +#~ msgstr "Esta conta é uma conta super-administrador" + +#~ msgid "Online help" +#~ msgstr "Ajuda online" + +#, fuzzy +#~ msgid "MySQL" +#~ msgstr "Bases de dados MySQL" + +#, fuzzy +#~ msgid "Databases" +#~ msgstr "Bases de dados" + +#, fuzzy +#~ msgid "Database %s not found" +#~ msgstr "Domínio %s suprimido" + +#, fuzzy +#~ msgid "Database %s already exists" +#~ msgstr "Edição de arquivo" + +#, fuzzy +#~ msgid "An error occured. The database could not be created" +#~ msgstr "Algums TLD não pode ser suprimidos..." + +#, fuzzy +#~ msgid "The database was not found. I can't delete it" +#~ msgstr "A base de dados %s foi suprimido com sucesso" + +#, fuzzy +#~ msgid "User aren't allowed to configure their backups" +#~ msgstr "Você não pode mudar sua senha" + +#, fuzzy +#~ msgid "Directory does not exist" +#~ msgstr "Membro '%s' não existe" + +#, fuzzy +#~ msgid "Database not found" +#~ msgstr "Domínio %s suprimido" + +#, fuzzy +#~ msgid "The password is mandatory" +#~ msgstr "Senha" + +#, fuzzy +#~ msgid "Database user not found" +#~ msgstr "Domínio %s suprimido" + +#, fuzzy +#~ msgid "No file specified" +#~ msgstr "No folder selected!" + +#, fuzzy +#~ msgid "The username is mandatory" +#~ msgstr "O usuário não tem nenhuma base de dados" + +#, fuzzy +#~ msgid "The database user already exists" +#~ msgstr "Edição de arquivo" + +#, fuzzy +#~ msgid "The passwords do not match" +#~ msgstr "Senha" + +#, fuzzy +#~ msgid "The username was not found" +#~ msgstr "O usuário não tem nenhuma base de dados" + +#, fuzzy +#~ msgid "This user does not exist in the MySQL/User database" +#~ msgstr "O usuário tem uma base de dados MySQL" + +#, fuzzy +#~ msgid "The directory could not be created" +#~ msgstr "Algums TLD não pode ser suprimidos..." + +#, fuzzy +#~ msgid "Piwik statistics" +#~ msgstr "Número de statisticas Web" + +#, fuzzy +#~ msgid "Piwik Users" +#~ msgstr "Usado(s)" + +#, fuzzy +#~ msgid "quota_" +#~ msgstr "Espaço de Disco" + +#, fuzzy +#~ msgid "Error writing the quota entry!" +#~ msgstr "Editando os quotas do membro" + +#, fuzzy +#~ msgid "Click here to do so." +#~ msgstr "Clicar aqui para continuar" + +#, fuzzy +#~ msgid "Mailing lists" +#~ msgstr "Número de envi-listas" + +#, fuzzy +#~ msgid "Web Statistics" +#~ msgstr "Número de statisticas Web" + +#~ msgid "help_domain_del %s" +#~ msgstr "" +#~ "Se você quiser suprimir o domínio %s, clica a tecla abaixo.Aviso : isto " +#~ "suprimirá todo o ftp, correios, envi-listas ... associadas com " +#~ "estedomínio e os sécondarios domínios dele" + +#, fuzzy +#~ msgid "Add %s mail to the domain %s" +#~ msgstr "Adiçionar um email ao domínio %s" + +#, fuzzy +#~ msgid "Mailboxes size:" +#~ msgstr "Caixas e email" + +#, fuzzy +#~ msgid "You want it to be deleted in" +#~ msgstr "Algums TLD não pode ser suprimidos..." + +#, fuzzy +#~ msgid "General PhpMyAdmin" +#~ msgstr "Admin do SQL Geral" + +#~ msgid "Editing an FTP account" +#~ msgstr "Editar uma conta FTP" + +#, fuzzy +#~ msgid "IP address" +#~ msgstr "Endereço email" + +#, fuzzy +#~ msgid "You cannot add any new ftp account, your quota is over." +#~ msgstr "Você não pode adiçionr mais domínios, sua quota acabou." + +#~ msgid "The FTP account has been successfully created" +#~ msgstr "A conta FTP foi criado com sucesso" + +#~ msgid "No account selected!" +#~ msgstr "Nenhuma conta selecionada" + +#~ msgid "Change this FTP account" +#~ msgstr "Mudar esta conta FTP" + +#, fuzzy +#~ msgid "The database user was not found" +#~ msgstr "A base de dados %s foi suprimido com sucesso" + +#, fuzzy +#~ msgid "Edition of %s" +#~ msgstr "Adiçionar a caixa de email em %s" + +#, fuzzy +#~ msgid "You have to set a new password." +#~ msgstr "Você não pode mudar sua senha" + +#, fuzzy +#~ msgid "You have to input a password." +#~ msgstr "Você não pode mudar sua senha" + +#, fuzzy +#~ msgid "Create this alias" +#~ msgstr "Criar" + +#, fuzzy +#~ msgid "Set a passowrd:" +#~ msgstr "New password" + +#, fuzzy +#~ msgid "Change your password:" +#~ msgstr "Mudança da senha SQL" + +#, fuzzy +#~ msgid "Password does not match" +#~ msgstr "Membro '%s' não existe" + +#, fuzzy +#~ msgid "Password match" +#~ msgstr "Senha" + +#, fuzzy +#~ msgid "Clear all redirections" +#~ msgstr "Redireção IP" + +#, fuzzy +#~ msgid "This allow you to change your mail password." +#~ msgstr "Você não pode mudar sua senha" + +#, fuzzy +#~ msgid "Webmail Access" +#~ msgstr "Acesso Webmail" + +#, fuzzy +#~ msgid "Email Address" +#~ msgstr "Endereço email" + +#, fuzzy +#~ msgid "Active" +#~ msgstr "Ação" + +#, fuzzy +#~ msgid "Raw web statistics" +#~ msgstr "Número de statisticas Web" + +#, fuzzy +#~ msgid "err_mysql_1" +#~ msgstr "Sua quota está completo, você não pode criar mais bases de dados." + +#~ msgid "Your database has been successfully created" +#~ msgstr "Sua base de dados foi criado com sucesso" + +#, fuzzy +#~ msgid "Your current settings are" +#~ msgstr "Aqui seus parâmetros atuaís" + +#, fuzzy +#~ msgid "MySQL Server" +#~ msgstr "Servidor SQL" + +#, fuzzy +#~ msgid "" +#~ "Enter the new password of your MySQL database and click 'change the " +#~ "password' to change it" +#~ msgstr "" +#~ "Entrar sua nova senha de base de dados SQL e clica sobre 'Mudança de " +#~ "senha' para a mudar" + +#, fuzzy +#~ msgid "err_mysql_13" +#~ msgstr "Sua quota está completo, você não pode criar mais bases de dados." + +#, fuzzy +#~ msgid "You cannot add any new statistics, your quota is over." +#~ msgstr "Você não pode adiçionr mais domínios, sua quota acabou." + +#, fuzzy +#~ msgid "Domain name:" +#~ msgstr "Nome do Domínio" + +#, fuzzy +#~ msgid "Create those raw statistics" +#~ msgstr "Número de statisticas Web" + +#, fuzzy +#~ msgid "No Statistics selected!" +#~ msgstr "Nenhuma conta selecionada" + +#, fuzzy +#~ msgid "The Statistics has been successfully changed" +#~ msgstr "A caixa de email %s foi mudado com sucesso" + +#, fuzzy +#~ msgid "Change the Raw Statistics" +#~ msgstr "Mudar os quotas padrões" + +#, fuzzy +#~ msgid "Change those Raw Statistics." +#~ msgstr "Mudar os quotas padrões" + +#, fuzzy +#~ msgid "Raw Statistics List" +#~ msgstr "Número de statisticas Web" + +#, fuzzy +#~ msgid "Delete the checked Raw Statistics (apache)" +#~ msgstr "Suprimir as bases selecionadas" + +#, fuzzy +#~ msgid "The email %s is special, it can't be deleted" +#~ msgstr "A caixa de email %s foi criado com sucesso" + +#, fuzzy +#~ msgid "Local mailbox" +#~ msgstr "Caixas e email" + +#~ msgid "Add a mail to the domain %s" +#~ msgstr "Adiçionar um email ao domínio %s" + +#, fuzzy +#~ msgid "Redirections
Other recipients:" +#~ msgstr "Outros receptores" + +#, fuzzy +#~ msgid "Is it a temporary mail account?" +#~ msgstr "Mudar esta conta FTP" + +#, fuzzy +#~ msgid "The email address %s has been successfully created" +#~ msgstr "A caixa de email %s foi criado com sucesso" + +#, fuzzy +#~ msgid "The email address %s has been successfully changed" +#~ msgstr "A caixa de email %s foi mudado com sucesso" + +#, fuzzy +#~ msgid "Edit an email address of the domain %s" +#~ msgstr "Editar a caixa de email do domínio %s" + +#, fuzzy +#~ msgid "Edit the email address %s" +#~ msgstr "Editar a caixa e email %s" + +#, fuzzy +#~ msgid "help_mail_edit" +#~ msgstr "" +#~ "Se nós não controlamos o DNS deste domínio
controlamos seus " +#~ "correios?" + +#~ msgid "Add a mailbox on %s" +#~ msgstr "Adiçionar a caixa de email em %s" + +#, fuzzy +#~ msgid "Add many mailboxes on %s" +#~ msgstr "Adiçionar a caixa de email em %s" + +#, fuzzy +#~ msgid "This account will be deleted on" +#~ msgstr "Algums TLD não pode ser suprimidos..." + +#, fuzzy +#~ msgid "help_sql_list_ok" +#~ msgstr "" +#~ "Você coloca para fora uma ou algumas bases de dados
Clica sobre " +#~ "'Admin SQL'no menu para administrá-los
Ou usa a tabela abaixo para " +#~ "administrar os backups / restaurações,suprimir suas bases :" + +#, fuzzy +#~ msgid "Change the MySQL password" +#~ msgstr "Mudança de senha SQL" + +#, fuzzy +#~ msgid "Get the current MySQL parameters" +#~ msgstr "Mostrar os parâmetros SQL atuaís" + +#, fuzzy +#~ msgid "help_sql_list_no" +#~ msgstr "" +#~ "Você ainda não criou sua base de dados principal, por favor entra a senha " +#~ "para criá-la.\n" + +#~ msgid "Create my main database" +#~ msgstr "Criar minha base de dados principal" + +#, fuzzy +#~ msgid "help_sql_users_list_ok" +#~ msgstr "" +#~ "Você coloca para fora uma ou algumas bases de dados
Clica sobre " +#~ "'Admin SQL'no menu para administrá-los
Ou usa a tabela abaixo para " +#~ "administrar os backups / restaurações,suprimir suas bases :" + +#, fuzzy +#~ msgid "help_sql_users_rights_ok" +#~ msgstr "" +#~ "Você coloca para fora uma ou algumas bases de dados
Clica sobre " +#~ "'Admin SQL'no menu para administrá-los
Ou usa a tabela abaixo para " +#~ "administrar os backups / restaurações,suprimir suas bases :" + +#~ msgid "New member" +#~ msgstr "Membro novo" + +#~ msgid "Create a new member" +#~ msgstr "Criar um membro novo" + +#, fuzzy +#~ msgid "Member" +#~ msgstr "Lista dos membros" + +#~ msgid "Account Enabled ?" +#~ msgstr "Conta Permitiu ?" + +#, fuzzy +#~ msgid "Back to the account list" +#~ msgstr "Lista de contas FTP" + +#~ msgid "Member list" +#~ msgstr "Lista dos membros" + +#, fuzzy +#~ msgid "List all the accounts" +#~ msgstr "Editar esta conta" + +#~ msgid "Locked Account" +#~ msgstr "Conta Troncada" + +#~ msgid "AlternC Desktop" +#~ msgstr "Desktop AlternC" + +#, fuzzy +#~ msgid "mode" +#~ msgstr "Pasta" + +#~ msgid "all/none" +#~ msgstr "tudo/nada" + +#~ msgid "There is an ftp account in this folder" +#~ msgstr "Há uma conta ftp nesta pasta" + +#~ msgid "This folder has restricted access" +#~ msgstr "Esta pasta tem o acesso limitado" + +#~ msgid "Click here to protect this folder with login/password" +#~ msgstr "Clica aqui para proteger esta pasta com login/senha" + +#~ msgid "this folder and its subfolders as a compressed file" +#~ msgstr "esta pasta e as secondárias-pastas como um arquivo comprimido" + +#~ msgid "Configure the file browser" +#~ msgstr "Configurar o navegador de arquivo" + +#~ msgid "File editor preferences" +#~ msgstr "Preferências do editor de arquivos" + +#~ msgid "Back to the file browser" +#~ msgstr "Volta ao navegador de arquivos" + +#~ msgid "" +#~ "The domain %s has been changed. The modifications will take effect in 5 " +#~ "minutes." +#~ msgstr "" +#~ "O domínio %s foi modificado. As modificações estarão atualizadas em 5 " +#~ "minutos." + +#~ msgid "Subdomains" +#~ msgstr "Secundário-domínios" + +#~ msgid "DNS parameters" +#~ msgstr "Parâmetros DNS" + +#~ msgid "help_dns_mx %s %s" +#~ msgstr "" +#~ "Se nós controlamos seu DNS
Você pode controlar seu correios em " +#~ "outra parte se você quiser (campo MX).
Escreve %s neste campo se seus correios devem ser controlados por %s
ou " +#~ "coloca o endereço IP ou nome do servidor de email usado para controlar " +#~ "seus correios.Aviso: Se você não coloca nada neste campo, seus " +#~ "correios serão inacessívels" + +#~ msgid "MX Field" +#~ msgstr "Campo MX" + +#~ msgid "help_dns_mail" +#~ msgstr "" +#~ "Se nós não controlamos o DNS deste domínio
controlamos seus " +#~ "correios?" + +#~ msgid "The modifications will take effect in 5 minutes." +#~ msgstr "As modificações estaram actualizadas em 5 minutos." + +#~ msgid "The folder must exists." +#~ msgstr "The folder must exists." + +#~ msgid "Add a username" +#~ msgstr "Add a username" + +#~ msgid "Administration of" +#~ msgstr "Administração do" + +#, fuzzy +#~ msgid "Enter your username and password to connect to the virtual desktop" +#~ msgstr "" +#~ "Entrar seu nome do usúario e sua senha para conectar à interface desktop " +#~ "virtual" + +#, fuzzy +#~ msgid "You can use a different language: " +#~ msgstr "" +#~ "Se você quiser usar uma lingua diferente, clicar sobre a bandeira abaixo" + +#~ msgid "Is it a POP account?" +#~ msgstr "É uma conta POP?" + +#~ msgid "POP password" +#~ msgstr "Senha POP" + +#~ msgid "One email per line" +#~ msgstr "Um email por linha" + +#~ msgid "Create this mailbox" +#~ msgstr "Criar uma caixa de email" + +#~ msgid "Delete the selected mailboxes" +#~ msgstr "Suprimir as caixas de email selecionados" + +#~ msgid "The mailbox %s has been successfully created" +#~ msgstr "A caixa de email %s foi criado com sucesso" + +#, fuzzy +#~ msgid "Back to the mail account list" +#~ msgstr "Volta ao navegador de arquivos" + +#~ msgid "The mailbox %s has been successfully changed" +#~ msgstr "A caixa de email %s foi mudado com sucesso" + +#~ msgid "Edit a mailbox of the domain %s" +#~ msgstr "Editar a caixa de email do domínio %s" + +#~ msgid "Change this mailbox" +#~ msgstr "Mudar esta caixa de email" + +#~ msgid "Mailbox list of the domain %s" +#~ msgstr "Lista de caixas de email do domínio %s" + +#~ msgid "General SQL Admin" +#~ msgstr "Admin do SQL Geral" + +#, fuzzy +#~ msgid "Front page" +#~ msgstr "Nome" + +#, fuzzy +#~ msgid "Create a new database" +#~ msgstr "Criar uma nova base de dados" + +#, fuzzy +#~ msgid "Create this new database." +#~ msgstr "Criar esta nova base de dados." + +#, fuzzy +#~ msgid "Do sql backup?" +#~ msgstr "Fazer backup SQL?" + +#, fuzzy +#~ msgid "How many backup should be kept?" +#~ msgstr "Quantos backups devem ser mantidos?" + +#, fuzzy +#~ msgid "Change the SQL backup parameters" +#~ msgstr "Mudar os parâmetros SQL atuais" + +#, fuzzy +#~ msgid "Change the SQL password" +#~ msgstr "Mudança de senha SQL" + +#, fuzzy +#~ msgid "Get the current SQL parameters" +#~ msgstr "Mostrar os parâmetros SQL atuaís" + +#, fuzzy +#~ msgid "" +#~ "Enter the new password of your SQL database and click 'change the " +#~ "password' to change it" +#~ msgstr "" +#~ "Entrar sua nova senha de base de dados SQL e clica sobre 'Mudança de " +#~ "senha' para a mudar" + +#~ msgid "Restore a SQL backup for database %s" +#~ msgstr "Restaurar o backup SQL para a base de dados %s" + +#~ msgid "Please enter the filename containing SQL data to be restored." +#~ msgstr "" +#~ "Por favor entrar o nome de arquivo que contem os dados do SQL que " +#~ "precisam restaurar." + +#, fuzzy +#~ msgid "err_mysql_20" +#~ msgstr "Sua senha é demasiado longa (16 caráteres max)" + +#, fuzzy +#~ msgid "Create this new user" +#~ msgstr "Criar esta nova base de dados." + +#, fuzzy +#~ msgid "WARNING : Confirm the deletion of this files" +#~ msgstr "AVISO : Confirmar o apagamento do secundário-domínio" + +#, fuzzy +#~ msgid "Please choose the filename containing SQL data to be restored." +#~ msgstr "" +#~ "Por favor entrar o nome de arquivo que contem os dados do SQL que " +#~ "precisam restaurar." + +#, fuzzy +#~ msgid "New Name:" +#~ msgstr "Membro novo" + +#, fuzzy +#~ msgid "Move to" +#~ msgstr "Relocalizar" + +#, fuzzy +#~ msgid "" +#~ "The subdomain has been deleted. Changes will take place in 5 minutes." +#~ msgstr "" +#~ "O domínio %s foi modificado. As modificações estarão atualizadas em 5 " +#~ "minutos." + +#, fuzzy +#~ msgid "Copy to" +#~ msgstr "Copiar" + +#, fuzzy +#~ msgid "Sub-domain" +#~ msgstr "Secundário-domínios" + +#, fuzzy +#~ msgid "Validate this change" +#~ msgstr "Submeter as mudanças" + +#, fuzzy +#~ msgid "Actions" +#~ msgstr "Ação" + +#, fuzzy +#~ msgid "Manage this temporary account" +#~ msgstr "Mudar esta conta FTP" + +#, fuzzy +#~ msgid "Manage the Emails of this domain on the server ?" +#~ msgstr "Administrar o DNS neste servidor ?" + +#, fuzzy +#~ msgid "Edition du sous-domaine" +#~ msgstr "Editando o secundário-domínio %s" + +#, fuzzy +#~ msgid "Sous-domaine" +#~ msgstr "Secundário-domínios" + +#~ msgid "Destroy my database" +#~ msgstr "Destruir minha base de dados" + +#~ msgid "Manage the SQL backup" +#~ msgstr "Administrar os backups SQL" + +#~ msgid "Delete my SQL database" +#~ msgstr "Suprimir minha base de dados SQL" + +#~ msgid "hlp_sql_bck" +#~ msgstr "" +#~ "Seu backup MySQL está salvado na pasta de db.sql.1 a " +#~ "db.sql.19
seu nome da base de dados substitui 'db'.
AVISO: Se você muda os ajustes backup (backups, compressão...) os " +#~ "backups antigos podem ficar na pasta backup.Usar a administração de " +#~ "arquivos para suprimi-los." + +#~ msgid "err_mysql_11" +#~ msgstr "" +#~ "Você não tem nenhuma base de dados, clica sobre 'Base de Dados' para " +#~ "criar a primeira" + +#~ msgid "err_mysql_10" +#~ msgstr "" +#~ "Você não pode criar sua base de dados principal : você ainda tem outras " +#~ "base de dados !" + +#~ msgid "err_mysql_9" +#~ msgstr "O arquivo é incorreto ou não existe." + +#~ msgid "err_mysql_8" +#~ msgstr "A senha é demasiado longa (16 caráteres max)" + +#~ msgid "err_mysql_7" +#~ msgstr "O nome de arquivo você escolheu não existe ou é incorreto." + +#~ msgid "err_mysql_6" +#~ msgstr "A pasta é incorreta!" + +#~ msgid "err_mysql_5" +#~ msgstr "seu número backup está incorreto." + +#~ msgid "err_mysql_4" +#~ msgstr "Esta base de dados jà existe!" + +#~ msgid "err_mysql_3" +#~ msgstr "" +#~ "Sua base de dados não existe, você pode começará um acesso criando o." + +#~ msgid "quota_mysql" +#~ msgstr "MySQL Base de Dados" + +#~ msgid "err_mem_8" +#~ msgstr "A senha deve ter pelo menos 3 caráteres" + +#~ msgid "err_mem_7" +#~ msgstr "As novas senhas são diferentes, por favor tentar de novo" + +# PROBLEME : il y avait 2 fois le 5, les autres messages doivent surement etre décalés (TODO) +#~ msgid "err_mem_6" +#~ msgstr "A senha antiga é incorreta" + +#~ msgid "err_mem_5" +#~ msgstr "Endereço IP incorreto, por favor contatar o administrador" + +#~ msgid "err_mem_4" +#~ msgstr "Sessão desconhecido, por favor contatar o administrador" + +#~ msgid "err_mem_3" +#~ msgstr "Cookie incorreto, por favor aceitar o cookie da sessão" + +#~ msgid "err_mem_2" +#~ msgstr "Esta conta está troncada, por favor chamar o administrador" + +#~ msgid "err_mem_1" +#~ msgstr "Usúario ou senha incorreto" + +#~ msgid "err_mail_15" +#~ msgstr "Este email não é uma conta pop. É impossível mudar a senha !" + +#~ msgid "err_mail_14" +#~ msgstr "Um ou mais redireções de email são invalidos" + +#~ msgid "err_mail_13" +#~ msgstr "Por favor entrar um email valido" + +#~ msgid "err_mail_12" +#~ msgstr "Por favor entrar uma senha pop" + +#~ msgid "err_mail_11" +#~ msgstr "Por favor entrar um endereço Email" + +#~ msgid "err_mail_10" +#~ msgstr "-- Erro de Programa -- Quota de Correios não existe" + +#~ msgid "err_mail_9" +#~ msgstr "O domínio '%s' não existe." + +#~ msgid "err_mail_8" +#~ msgstr "Sua quota email acabou. Você não pode criar mais contas de email." + +#~ msgid "err_mail_7" +#~ msgstr "O email '%s' jà existe." + +#~ msgid "err_mail_6" +#~ msgstr "O domínio '%s' não existe." + +#~ msgid "err_mail_5" +#~ msgstr "-- Erro de Servidor --- Parâmetro é incorreto (%s)" + +#~ msgid "err_mail_4" +#~ msgstr "" +#~ "Por favor escolha 'conta pop' e escholha a senha pop, ou entra algumas " +#~ "redireções, ou os dois" + +#~ msgid "err_mail_3" +#~ msgstr "Este email '%s' não existe" + +#~ msgid "err_mail_2" +#~ msgstr "Nenhum email no domínio '%s'" + +#~ msgid "err_mail_1" +#~ msgstr "conexão ldap impossível, por favor tenta mais tarde." + +#~ msgid "quota_mail" +#~ msgstr "Contas de Email" + +#~ msgid "Delete a protected folder" +#~ msgstr "Delete a protected folder" + +#~ msgid "err_hta_11" +#~ msgstr "Please enter a valid username" + +#~ msgid "err_hta_10" +#~ msgstr "The user '%s' already exist for this folder" + +#~ msgid "err_hta_9" +#~ msgstr "The file '%s' is not correct" + +#~ msgid "err_hta_8" +#~ msgstr "The folder '%s' does not exist" + +#~ msgid "err_hta_7" +#~ msgstr "The file .htaccess does not exist" + +#~ msgid "err_hta_6" +#~ msgstr "I cannot delete the file '%s'/.htpasswd" + +#~ msgid "err_hta_5" +#~ msgstr "I cannot delete the file '%s'/.htaccess" + +#~ msgid "err_hta_4" +#~ msgstr "No protected folder" + +#~ msgid "err_hta_3" +#~ msgstr "" +#~ ".htaccess parsed and syntaxically correct, a .htpasswd already exist." + +#~ msgid "err_hta_2" +#~ msgstr "" +#~ ".htaccess parsed and syntaxically correct, a .htpassword file has been " +#~ "created." + +#~ msgid "err_hta_1" +#~ msgstr "An incompatible .htaccess file exists in this folder." + +#~ msgid "<-No Password->" +#~ msgstr "<-Sem Senha->" + +#~ msgid "hlp_ftp_add" +#~ msgstr "Você não pode adiçionar uma nova conta ftp. Sua conta está cheia." + +#~ msgid "hlp_ftp_list_no" +#~ msgstr "" +#~ "Você não tem nenhuma conta FTP disponível. Clica sobre 'Criar uma conta " +#~ "ftp' para criar uma.
Para poder acessar seus arquivos com um " +#~ "programa ftp, você deve criar pelo menos uma conta. Cada conta é " +#~ "associado com uma pasta, e não pode acessar nada fora os arquivos e " +#~ "pastas nesta pasta'
Mais informação sobre o FTP em Ajuda Online " +#~ "HELPID_100
" + +#~ msgid "hlp_ftp_list" +#~ msgstr "" +#~ "Aqui está a lista de contas ftp com acesso à sua conta.Clica sobre " +#~ "'Modifiçar' para mudar o nome do usúario, a senha ou o diretório de " +#~ "raizPara suprimir uma conta, seliciona a conta correspondante e clica " +#~ "sobre a tecla 'Suprimir as contas selecionadas'
Para poder acessar " +#~ "seus arquivos com um programa ftp, você deve criar pelo menos uma conta. " +#~ "Cada conta é associado com uma pasta, e não pode acessar nada fora os " +#~ "arquivos e pastas nesta pasta'
Mais informação sobre o FTP em Ajuda " +#~ "Online HELPID_100
" + +#~ msgid "err_ftp_6" +#~ msgstr "Esta pasta não pode ser criada." + +#~ msgid "err_ftp_5" +#~ msgstr "" +#~ "Sua quota para a conta FTP está cheio. Você não pode criar mais contas " +#~ "FTPs." + +#~ msgid "err_ftp_4" +#~ msgstr "Esta conta FTP jà existe" + +#~ msgid "err_ftp_3" +#~ msgstr "O prefixo escolhido não é permitido" + +#~ msgid "err_ftp_2" +#~ msgstr "Esta conta FTP não existe" + +#~ msgid "err_ftp_1" +#~ msgstr "Nenhuma conta FTP achada" + +#~ msgid "quota_ftp" +#~ msgstr "Contas FTP" + +#~ msgid "err_err_1" +#~ msgstr "Esta mesagem do erro não existe (%s)" + +#~ msgid "err_err_0" +#~ msgstr "OK" + +#~ msgid "hlp_edit_domain" +#~ msgstr "" +#~ "Esta zona permite as modificações de parâmetros de seu domínio e dos " +#~ "secundários-domínios instalados
Você pode criar um novo secundário-" +#~ "domínio e escholer de re-dirigir a seu espaço de disco, a um outro " +#~ "endereço Internet, o a um endereço IP (utilização advancado)
Mais " +#~ "informação sobre a administração dos domínios na seção de ajuda online " +#~ "HELPID_200
" + +#~ msgid "hlp_del_domain" +#~ msgstr "" +#~ "O domínio foi suprimido, mais os arquivos do seu web-site não foram " +#~ "destruídos.
Se você quiser destruir os arquivos du web-site, usa a " +#~ "Administração de Arquivo
Mais informação sobre a administração dos " +#~ "domínios na seção de ajuda online HELPID_200
" + +#~ msgid "hlp_add_domain_2" +#~ msgstr "" +#~ "Clica sobre o link abaixo. Você pode acessar os parâmetros do domínio no " +#~ "menu à esquerda2 links aparecerão :
- o primeiro para modificar os " +#~ "parâmetros de hospedagem do domínio (secondario-domínios, redireções, " +#~ "hospedagem do email ...)
- o segundo para administrar as contas de " +#~ "email do domínio (se você quiser criar as caixas de email).
Mais " +#~ "informação sobre a administração dos domínios na seção de ajuda online " +#~ "HELPID_200
" + +#~ msgid "hlp_add_domain" +#~ msgstr "" +#~ " - Entrar o nome do domínio que você gostaria hospedar. O nome do domínio " +#~ "deve ser completo, mais sem o www.
IMPORTANTE: Se você " +#~ "gostaria uma hospedagem actual do domínio, o DNS do seu domínio deve " +#~ "apontar para nossos servidors DNS. Contatar sua companhia de hospedagem " +#~ "para mais informação.
Exemplos : globonet.org / demo.com / test.eu." +#~ "org etc.
Mais informação sobre a administração dos domínios na seção " +#~ "da ajuda online HELPID_200
" + +#~ msgid "" +#~ "err_dom_23DNS (and eventually wait 1 day) before you install it again." +#~ msgstr "" +#~ "O DNS deste domínio não combina o DNS do servidor. Por favor mudar o DNS " +#~ "do seu domínio (e esperar 1 dia) antes de instalar-lo de novo." + +#~ msgid "err_dom_22" +#~ msgstr "" +#~ "O domínio pedido é proibido neste servidor. Por favor contatar o " +#~ "administrador" + +#~ msgid "err_dom_21" +#~ msgstr "A pasta que você entrou é incorreta ou não existe." + +#~ msgid "err_dom_20" +#~ msgstr "O URL que você entrou é incorreto." + +#~ msgid "err_dom_19" +#~ msgstr "O endereço IP que você entrou é incorreto." + +#~ msgid "err_dom_18" +#~ msgstr "" +#~ "Este domínio é o do servidor !!! Você não pode hospedá-lo em sua conta !" + +#~ msgid "err_dom_17" +#~ msgstr "--- Erro de Programa --- Fechamento obtido já !" + +#~ msgid "err_dom_16" +#~ msgstr "O secundário-domínio jà existe." + +#~ msgid "err_dom_15" +#~ msgstr "Nenhuma mudança foi pedida..." + +#~ msgid "err_dom_14" +#~ msgstr "O secundário-domínio não existe." + +#~ msgid "err_dom_13" +#~ msgstr "" +#~ "O domínio mudou menos de 5 minutos há. Por favor tenta de novo em algums " +#~ "minutos." + +#~ msgid "err_dom_12" +#~ msgstr "O domínio não foi achado na base de dados Whois." + +#~ msgid "err_dom_11" +#~ msgstr "" +#~ "A base de dados Whois está inacessível, por favor tenta de novo mais " +#~ "tarde." + +#~ msgid "err_dom_10" +#~ msgstr "Sua quota do domínio jà acabou, você não pode criar mais domínios." + +#~ msgid "err_dom_9" +#~ msgstr "O domínio foi suprimido menos de 5 minutos há." + +#~ msgid "err_dom_8" +#~ msgstr "O domínio jà existe." + +#~ msgid "err_dom_7" +#~ msgstr "" +#~ "O ultímo membro do domínio é incorreto ou não pode ser hospidado neste " +#~ "servidor." + +#~ msgid "err_dom_6" +#~ msgstr "" +#~ "Há algums caráteres proibidos no nome domínio (somente A-Z 0-9 e - são " +#~ "permitidos)." + +#~ msgid "err_dom_5" +#~ msgstr "Um dos membros do domínio é demasiado longo." + +#~ msgid "err_dom_4" +#~ msgstr "O nome do domínio é demasiado longo" + +#~ msgid "err_dom_3" +#~ msgstr "--- Erro de program --- Falta o fechamento nos domínios !" + +#~ msgid "err_dom_2" +#~ msgstr "O Domínio '%s' não é o seu" + +#~ msgid "err_dom_1" +#~ msgstr "O Domínio '%s' não foi achado" + +#~ msgid "quota_dom" +#~ msgstr "Nome dos Domínios" + +#~ msgid "err_bro_2" +#~ msgstr "Você não pode relocalizar ou copiar o arquivo a mesma pasta" + +#~ msgid "err_bro_1" +#~ msgstr "Nome do arquivo ou a pasta é incorreto" + +#~ msgid "Number of FTP accounts" +#~ msgstr "Número de contas FTP" + +#~ msgid "Number of email accounts" +#~ msgstr "Número de contas do email" + +#~ msgid "Disk space (in KB)" +#~ msgstr "Espaco Disco (em KB)" + +#~ msgid "Recalculate the quotas of the account" +#~ msgstr "Recalcular os quotas da conta" + +#~ msgid "err_admin_12" +#~ msgstr "Este TLD jà existe" + +#~ msgid "err_admin_11" +#~ msgstr "Este TLD não existe" + +#~ msgid "err_admin_10" +#~ msgstr "Somente os carateres a-z, 0-9 e - são permitidos no Login" + +#~ msgid "err_admin_8" +#~ msgstr "Esta conta JÀ é uma conta administrativa" + +#~ msgid "err_admin_7" +#~ msgstr "Você pode me peder uma senha somente uma vez por dia !" + +#~ msgid "err_admin_6" +#~ msgstr "Todos os campos são obrigatórios" + +#~ msgid "err_admin_5" +#~ msgstr "Por favor entrar um endreço email válido" + +#~ msgid "err_admin_4" +#~ msgstr "-- Não posso criar esta conta --" + +#~ msgid "err_admin_3" +#~ msgstr "Este login jà existe" + +#~ msgid "err_admin_2" +#~ msgstr "Conta não foi achado" + +#~ msgid "err_admin_1" +#~ msgstr "-- Somente os administradores tem acceso à essas paginas !! --" diff --git a/ssl/panel/locales/ssl.pot b/ssl/panel/locales/ssl.pot new file mode 100644 index 00000000..ce20f053 --- /dev/null +++ b/ssl/panel/locales/ssl.pot @@ -0,0 +1,513 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR AlternC Team +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: AlternC 2.0\n" +"Report-Msgid-Bugs-To: i18n@alternc.org\n" +"POT-Creation-Date: 2015-02-13 18:04+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../admin/ssl_delete.php:43 +msgid "Your SSL Certificate has been deleted" +msgstr "" + +#: ../admin/ssl_doimport.php:39 +msgid "Please enter an ssl key and a certificate" +msgstr "" + +#: ../admin/ssl_donew.php:38 +msgid "Please enter a proper domain name" +msgstr "" + +#: ../admin/ssl_finalize.php:49 +msgid "Your ssl certificate has been imported successfully" +msgstr "" + +#: ../admin/ssl_list.php:51 ../admin/ssl_view.php:50 +msgid "Pending Certificate" +msgstr "" + +#: ../admin/ssl_list.php:52 +msgid "Valid" +msgstr "" + +#: ../admin/ssl_list.php:53 +msgid "Expired" +msgstr "" + +#: ../admin/ssl_list.php:59 +msgid "" +"Some of your hosting are using a self-signed certificate.
Your " +"browser will not let you surf those domains properly
To fix this, buy a " +"properly signed certificate" +msgstr "" + +#: ../admin/ssl_list.php:71 +msgid "Your Certificates" +msgstr "" + +#: ../admin/ssl_list.php:73 +msgid "" +"Please find below your SSL Certificates. Some may be provided by the " +"administrator of the server, some may be Expired or Pending (waiting for a " +"CRT from your Certificate Provider)" +msgstr "" + +#: ../admin/ssl_list.php:75 +msgid "Only show the following certificates:" +msgstr "" + +#: ../admin/ssl_list.php:76 +msgid "Pending Certificates" +msgstr "" + +#: ../admin/ssl_list.php:77 +msgid "Valid Certificates" +msgstr "" + +#: ../admin/ssl_list.php:78 +msgid "Expired Certificates" +msgstr "" + +#: ../admin/ssl_list.php:80 +msgid "Certificates Shared by the Administrator" +msgstr "" + +#: ../admin/ssl_list.php:82 +msgid "Filter" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Domain Name" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Status" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Used by" +msgstr "" + +#: ../admin/ssl_list.php:85 +msgid "Validity period" +msgstr "" + +#: ../admin/ssl_list.php:91 +msgid "Details" +msgstr "" + +#: ../admin/ssl_list.php:97 +msgid "(shared)" +msgstr "" + +#: ../admin/ssl_list.php:102 ../admin/ssl_list.php:106 +#: ../admin/ssl_list.php:112 ../admin/ssl_view.php:65 +#: ../admin/ssl_view.php:119 ../admin/ssl_view.php:133 +#, php-format +msgid "%3$d-%2$d-%1$d %4$d:%5$d" +msgstr "" + +#: ../admin/ssl_list.php:111 +msgid "Requested on: " +msgstr "" + +#: ../admin/ssl_list.php:129 +msgid "Create one" +msgstr "" + +#: ../admin/ssl_list.php:130 +msgid "" +"This hosting has no valid certificate
a self-signed one has been created" +msgstr "" + +#: ../admin/ssl_list.php:140 +msgid "Create or Import a new SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:42 +msgid "New SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:50 +msgid "" +"An SSL certificate is a file which must be obtained from a Certificate " +"Authority, and allow you to enable HTTPS encryption on a domain name." +msgstr "" + +#: ../admin/ssl_new.php:53 +msgid "" +"To obtain one, you need to generate a Certificate Request (CSR) and a " +"RSA Key (KEY) here, then give the CSR to the Certificate Authority, " +"which will give you a certificate (CRT) and also often a chained certificate " +"(CHAIN)." +msgstr "" + +#: ../admin/ssl_new.php:56 +msgid "" +"If you already know what it is and already have all those files (CRT/KEY/" +"CHAIN) You can import them here too." +msgstr "" + +#: ../admin/ssl_new.php:64 +msgid "Create a CSR/KEY" +msgstr "" + +#: ../admin/ssl_new.php:65 +msgid "Import existing files" +msgstr "" + +#: ../admin/ssl_new.php:69 +msgid "Create a CSR/KEY for a given domain name" +msgstr "" + +#: ../admin/ssl_new.php:71 +msgid "" +"Use this form to generate a Certificate Request file (CSR) and a " +"RSA Key file (KEY) for a given domain name" +msgstr "" + +#: ../admin/ssl_new.php:98 +msgid "" +"Please choose the domain name for which you want a SSL Certificate, or enter " +"it manually" +msgstr "" + +#: ../admin/ssl_new.php:101 ../admin/ssl_view.php:60 +msgid "Fully Qualified Domain Name" +msgstr "" + +#: ../admin/ssl_new.php:104 +msgid "--- Choose here ---" +msgstr "" + +#: ../admin/ssl_new.php:110 +msgid "... or click here to enter it manually" +msgstr "" + +#: ../admin/ssl_new.php:117 ../admin/ssl_new.php:151 ../admin/ssl_view.php:82 +msgid "Save" +msgstr "" + +#: ../admin/ssl_new.php:118 ../admin/ssl_new.php:152 ../admin/ssl_view.php:83 +msgid "Cancel" +msgstr "" + +#: ../admin/ssl_new.php:123 +msgid "" +"(If you want to get a valid certificate for all the subdomains of a " +"domain, use a wildcard notation (eg: *.example.com). Please note that a " +"wildcard certificate is usually more expensive than normal one.)" +msgstr "" + +#: ../admin/ssl_new.php:123 +msgid "" +"Please note that a SSL Certificate is only valid for one fully qualified " +"domain name. As a result, a certificate for www.example.com is " +"NOT valid for intranet.example.com or intranet.www." +"example.com !" +msgstr "" + +#: ../admin/ssl_new.php:130 +msgid "Import existing Key Certificate and Chain files" +msgstr "" + +#: ../admin/ssl_new.php:132 +msgid "" +"If you already have a RSA Key file, a Certificate for this key and (maybe) a " +"Chained certificate, please paste their content here." +msgstr "" + +#: ../admin/ssl_new.php:133 +msgid "" +"We will verify the content of those files and add them in your certificate " +"repository" +msgstr "" + +#: ../admin/ssl_new.php:138 +msgid "RSA Key" +msgstr "" + +#: ../admin/ssl_new.php:142 ../admin/ssl_view.php:73 ../admin/ssl_view.php:159 +msgid "SSL Certificate" +msgstr "" + +#: ../admin/ssl_new.php:146 ../admin/ssl_view.php:77 ../admin/ssl_view.php:164 +msgid "Chained Certificate
(not mandatory)" +msgstr "" + +#: ../admin/ssl_share.php:30 +msgid "This page is restricted to authorized staff" +msgstr "" + +#: ../admin/ssl_view.php:52 +msgid "" +"Your Certificate Request File (CSR) has been created, along with its " +"private RSA Key (KEY). Please find below the CSR you must send to " +"your SSL Certificate provider." +msgstr "" + +#: ../admin/ssl_view.php:54 +msgid "" +"Once you'll have your Certificate File (CRT) and a Chained " +"Certificate File (CHAIN), please paste them here to finish the " +"enrollment." +msgstr "" + +#: ../admin/ssl_view.php:64 +msgid "Date of the request" +msgstr "" + +#: ../admin/ssl_view.php:68 ../admin/ssl_view.php:154 +msgid "Certificate Request File" +msgstr "" + +#: ../admin/ssl_view.php:85 ../admin/ssl_view.php:213 +msgid "Delete" +msgstr "" + +#: ../admin/ssl_view.php:86 +msgid "" +"Please confirm that you want to delete this certificate request AND ITS " +"PRIVATE KEY!" +msgstr "" + +#: ../admin/ssl_view.php:97 +msgid "Valid Certificate" +msgstr "" + +#: ../admin/ssl_view.php:98 +msgid "Please find below your valid certificate data." +msgstr "" + +#: ../admin/ssl_view.php:104 +msgid "EXPIRED Certificate" +msgstr "" + +#: ../admin/ssl_view.php:105 +msgid "" +"Your certificate is EXPIRED. You should not use it for any purpose. Please " +"find below its data." +msgstr "" + +#: ../admin/ssl_view.php:113 +msgid "Back to my SSL Certificates" +msgstr "" + +#: ../admin/ssl_view.php:117 +msgid "Valid From:" +msgstr "" + +#: ../admin/ssl_view.php:123 +#, php-format +msgid "(%d days ago)" +msgstr "" + +#: ../admin/ssl_view.php:126 +#, php-format +msgid "(%d month ago)" +msgstr "" + +#: ../admin/ssl_view.php:131 +msgid "Valid Until:" +msgstr "" + +#: ../admin/ssl_view.php:137 +#, php-format +msgid "(%d days from now)" +msgstr "" + +#: ../admin/ssl_view.php:140 +#, php-format +msgid "(%d month from now)" +msgstr "" + +#: ../admin/ssl_view.php:145 +msgid "FQDN:" +msgstr "" + +#: ../admin/ssl_view.php:149 +msgid "Other Valid FQDN:" +msgstr "" + +#: ../admin/ssl_view.php:173 +msgid "" +"As an administrator you can allow any account on this server to use this " +"certificate to host his services.
(This is only useful for wildcard or " +"multi-domain certificates)." +msgstr "" + +#: ../admin/ssl_view.php:177 +msgid "This certificate is currently shared" +msgstr "" + +#: ../admin/ssl_view.php:184 +msgid "Click here to stop sharing this certificate" +msgstr "" + +#: ../admin/ssl_view.php:189 ../admin/ssl_view.php:205 +msgid "" +"You are not the owner of this certificate, only its owner can share/unshare " +"this certificate." +msgstr "" + +#: ../admin/ssl_view.php:193 +msgid "This certificate is currently NOT shared" +msgstr "" + +#: ../admin/ssl_view.php:200 +msgid "Click here to share this certificate" +msgstr "" + +#: ../admin/ssl_view.php:214 +msgid "" +"Please confirm that you want to delete this certificate AND ITS PRIVATE KEY!" +msgstr "" + +#: ../class/m_ssl.php:69 ../class/m_ssl.php:418 +msgid "SSL Certificates" +msgstr "" + +#: ../class/m_ssl.php:79 +msgid "New SSL certificate" +msgstr "" + +#: ../class/m_ssl.php:93 +msgid "List SSL Certificates" +msgstr "" + +#: ../class/m_ssl.php:152 +msgid "No SSL certificates available" +msgstr "" + +#: ../class/m_ssl.php:175 +msgid "You currently have no hosting using SSL certificate" +msgstr "" + +#: ../class/m_ssl.php:196 +msgid "Bad FQDN domain name" +msgstr "" + +#: ../class/m_ssl.php:202 ../class/m_ssl.php:774 +msgid "Can't generate a private key (1)" +msgstr "" + +#: ../class/m_ssl.php:207 ../class/m_ssl.php:779 +msgid "Can't generate a private key (2)" +msgstr "" + +#: ../class/m_ssl.php:218 +msgid "Can't generate a CSR" +msgstr "" + +#: ../class/m_ssl.php:234 ../class/m_ssl.php:250 ../class/m_ssl.php:273 +msgid "Can't find this Certificate" +msgstr "" + +#: ../class/m_ssl.php:353 +msgid "Can't save the Key/Crt/Chain now. Please try later." +msgstr "" + +#: ../class/m_ssl.php:390 +msgid "Can't save the Crt/Chain now. Please try later." +msgstr "" + +#: ../class/m_ssl.php:618 +msgid "Alias already exists" +msgstr "" + +#: ../class/m_ssl.php:637 +msgid "Alias not found" +msgstr "" + +#: ../class/m_ssl.php:666 +msgid "" +"Can't find the private key in the certificate table, please check your form." +msgstr "" + +#: ../class/m_ssl.php:675 +msgid "" +"The certificate must begin by BEGIN CERTIFICATE and end by END CERTIFICATE " +"lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:680 +msgid "" +"The chained certificate must begin by BEGIN CERTIFICATE and end by END " +"CERTIFICATE lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:686 +msgid "" +"The private key must begin by BEGIN (RSA )PRIVATE KEY and end by END (RSA )" +"PRIVATE KEY lines. Please check you pasted it in PEM form." +msgstr "" + +#: ../class/m_ssl.php:722 +#, php-format +msgid "The %d-th certificate in the chain is invalid" +msgstr "" + +#: ../class/m_ssl.php:730 +msgid "The certificate is invalid." +msgstr "" + +#: ../class/m_ssl.php:735 +msgid "The private key is invalid." +msgstr "" + +#: ../class/m_ssl.php:740 +msgid "The private key is not the one signed inside the certificate." +msgstr "" + +#: ../class/m_ssl.php:746 +msgid "Can't export your certificate as a string, please check its syntax." +msgstr "" + +#: ../class/m_ssl.php:751 +msgid "" +"Can't export one of your chained certificates as a string, please check its " +"syntax." +msgstr "" + +#: ../class/m_ssl.php:757 +msgid "Can't export your private key as a string, please check its syntax." +msgstr "" + +#: ../class/m_ssl.php:800 +msgid "Locally hosted forcing HTTPS" +msgstr "" + +#: ../class/m_ssl.php:801 +msgid "Locally hosted HTTP and HTTPS" +msgstr "" + +#: ../class/m_ssl.php:802 +msgid "HTTPS AlternC panel access" +msgstr "" + +#: ../class/m_ssl.php:803 +msgid "HTTPS Roundcube Webmail" +msgstr "" + +#: ../class/m_ssl.php:804 +msgid "HTTPS Squirrelmail Webmail" +msgstr "" + +#: ../class/m_ssl.php:805 +msgid "php52 forcing HTTPS" +msgstr "" + +#: ../class/m_ssl.php:806 +msgid "php52 HTTP and HTTPS" +msgstr "" diff --git a/ssl/ssl.conf b/ssl/ssl.conf new file mode 100644 index 00000000..c3a599d5 --- /dev/null +++ b/ssl/ssl.conf @@ -0,0 +1,91 @@ +# ############################################################################ +# WARNING : this file is overwritten by alternc.install. +# Edit /etc/alternc/templates/apache2/mods-available/ instead. +# ############################################################################ + + +# +# Pseudo Random Number Generator (PRNG): +# Configure one or more sources to seed the PRNG of the SSL library. +# The seed data should be of good random quality. +# WARNING! On some platforms /dev/random blocks if not enough entropy +# is available. This means you then cannot use the /dev/random device +# because it would lead to very long connection times (as long as +# it requires to make more entropy available). But usually those +# platforms additionally provide a /dev/urandom device which doesn't +# block. So, if available, use this one instead. Read the mod_ssl User +# Manual for more details. +# +SSLRandomSeed startup builtin +SSLRandomSeed startup file:/dev/urandom 512 +SSLRandomSeed connect builtin +SSLRandomSeed connect file:/dev/urandom 512 + +## +## SSL Global Context +## +## All SSL configuration in this context applies both to +## the main server and all SSL-enabled virtual hosts. +## + +# +# Some MIME-types for downloading Certificates and CRLs +# +AddType application/x-x509-ca-cert .crt +AddType application/x-pkcs7-crl .crl + +# Pass Phrase Dialog: +# Configure the pass phrase gathering process. +# The filtering dialog program (`builtin' is a internal +# terminal dialog) has to provide the pass phrase on stdout. +SSLPassPhraseDialog builtin + +# Inter-Process Session Cache: +# Configure the SSL Session Cache: First the mechanism +# to use and second the expiring timeout (in seconds). +# (The mechanism dbm has known memory leaks and should not be used). +#SSLSessionCache dbm:${APACHE_RUN_DIR}/ssl_scache +SSLSessionCache shmcb:${APACHE_RUN_DIR}/ssl_scache(512000) +SSLSessionCacheTimeout 300 + +# Semaphore: +# Configure the path to the mutual exclusion semaphore the +# SSL engine uses internally for inter-process synchronization. +SSLMutex file:${APACHE_RUN_DIR}/ssl_mutex + +# SSL Cipher Suite: +# List the ciphers that the client is permitted to negotiate. See the +# ciphers(1) man page from the openssl package for list of all available +# options. +# Enable only secure ciphers: +#SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 +SSLCipherSuite ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM +# Other possible ciphersuite (requires wheezy-version of apache2 at least) + #SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS" + +# Speed-optimized SSL Cipher configuration: +# If speed is your main concern (on busy HTTPS servers e.g.), +# you might want to force clients to specific, performance +# optimized ciphers. In this case, prepend those ciphers +# to the SSLCipherSuite list, and enable SSLHonorCipherOrder. +# Caveat: by giving precedence to RC4-SHA and AES128-SHA +# (as in the example below), most connections will no longer +# have perfect forward secrecy - if the server's key is +# compromised, captures of past or future traffic must be +# considered compromised, too. +#SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5 +SSLHonorCipherOrder on + +# enable only secure protocols: SSLv3 and TLSv1, but not SSLv2 +#SSLProtocol all -SSLv2 +SSLProtocol all -SSLv2 -SSLv3 + +# Allow insecure renegotiation with clients which do not yet support the +# secure renegotiation protocol. Default: Off +#SSLInsecureRenegotiation on + +# Whether to forbid non-SNI clients to access name based virtual hosts. +# Default: Off +SSLStrictSNIVHostCheck Off + + diff --git a/ssl/ssl.sql b/ssl/ssl.sql new file mode 100644 index 00000000..285d39b8 --- /dev/null +++ b/ssl/ssl.sql @@ -0,0 +1,39 @@ + +CREATE TABLE `certificates` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `uid` int(10) unsigned NOT NULL, + `status` tinyint(3) unsigned NOT NULL, + `shared` tinyint(3) unsigned NOT NULL, + `fqdn` varchar(255) NOT NULL, + `altnames` text NOT NULL, + `validstart` datetime NOT NULL, + `validend` datetime NOT NULL, + `sslcsr` text NOT NULL, + `sslkey` text NOT NULL, + `sslcrt` text NOT NULL, + `sslchain` text NOT NULL, + `ssl_action` varchar(32) NOT NULL, + `ssl_result` varchar(32) NOT NULL, + PRIMARY KEY (`id`), + KEY `uid` (`uid`), + KEY `ssl_action` (`ssl_action`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE IF NOT EXISTS `certif_alias` ( + `name` varchar(255) NOT NULL, + `content` text NOT NULL, + `uid` int(10) unsigned NOT NULL, + `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`name`), + KEY `uid` (`uid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Global aliases defined for SSL certificates FILE validation processes'; + +CREATE TABLE IF NOT EXISTS `certif_hosts` ( + `certif` int(10) unsigned NOT NULL, + `sub` int(10) unsigned NOT NULL, + `uid` int(10) unsigned NOT NULL, + PRIMARY KEY (`certif`,`sub`), + KEY `uid` (`uid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='VHosts of a user using defined or self-signed certificates'; + +INSERT IGNORE INTO defquotas VALUES ('ssl', 0, 'default'); diff --git a/ssl/ssl_alias_manager.sh b/ssl/ssl_alias_manager.sh new file mode 100755 index 00000000..3151501e --- /dev/null +++ b/ssl/ssl_alias_manager.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +rm -f /var/run/alternc-ssl/generate_certif_alias + +# Launched by incron when /tmp/generate_certif_alias exists +# regenerate the list of global aliases used by Comodo for certificate ownership validation +# FIXME: how do we lock that, ensuring we don't launch this more than once ? +APACHECONF=/etc/apache2/conf.d/alternc-ssl_cert-alias.conf +TMP=/tmp/alternc-ssl_cert-alias_${$}.tmp +FILEDIR=/var/lib/alternc/ssl-cert-alias + + +rm -f "$TMP" +mkdir -p "$FILEDIR" + +echo "# this file is autogenerated from /usr/lib/alternc/ssl_alias_manager.sh" >$TMP +echo "# Please do not edit, your changes will be overwritten" >>$TMP + +mysql --defaults-file=/etc/alternc/my.cnf --skip-column-names -B -e "SELECT name,content FROM certif_alias;" | while read name content +do + echo "alias /$name ${FILEDIR}/${name}" >>$TMP + echo "$content" >"${FILEDIR}/${name}" +done +if ! diff -q "$TMP" "$APACHECONF" +then + mv -f "$TMP" "$APACHECONF" + service apache2 reload +else + rm -f "$TMP" +fi + diff --git a/ssl/templates/panel-ssl.conf b/ssl/templates/panel-ssl.conf new file mode 100644 index 00000000..78d7236e --- /dev/null +++ b/ssl/templates/panel-ssl.conf @@ -0,0 +1,42 @@ + + ServerName %%fqdn%% + AssignUserId #%%UID%% #%%GID%% + SetEnv LOGIN "%%UID%%-%%LOGIN%%" + + KeepAlive Off + + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !/cgi-bin/ + RewriteRule ^/(.*)$ https://%%fqdn%%/$1 [R=301,L] + + + + DocumentRoot /usr/share/alternc/panel/admin + AssignUserId alterncpanel alterncpanel + SetEnv LOGIN "%%UID%%-%%LOGIN%%" + ServerName %%fqdn%% + RewriteEngine on + RewriteRule ^/admin/(.*) /$1 + + alias /alternc-sql /usr/share/phpmyadmin + + RewriteEngine On + RewriteRule ^webmail /webmail-redirect.php [L] + + # Mail autoconfig + RewriteRule ^mail/mailautoconfig.xml$ /mailautoconfig_thunderbird.php [L] + RewriteRule ^mail/config-v1.1.xml$ /mailautoconfig_thunderbird.php [L] + RewriteRule ^autodiscover/autodiscover.xml$ /mailautoconfig_outlook.php [L] + RewriteRule ^Autodiscover/Autodiscover.xml$ /mailautoconfig_outlook.php [L] + RewriteRule ^Autodiscover.xml$ mailautoconfig_outlook.php [L] + RewriteRule ^autodiscover.xml$ mailautoconfig_outlook.php [L] + + # will be used to define aliases such as /javascript /squirrelmail ... + Include /etc/alternc/apache-panel.d/*.conf + + SSLEngine On + SSLCertificateFile %%CRT%% + SSLCertificateKeyFile %%KEY%% + %%CHAINLINE%% + + diff --git a/ssl/templates/roundcube-ssl.conf b/ssl/templates/roundcube-ssl.conf new file mode 100644 index 00000000..8e5e5e2f --- /dev/null +++ b/ssl/templates/roundcube-ssl.conf @@ -0,0 +1,70 @@ + + ServerName %%fqdn%% + AssignUserId #%%UID%% #%%GID%% + SetEnv LOGIN "%%UID%%-%%LOGIN%%" + + KeepAlive Off + + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !/cgi-bin/ + RewriteRule ^/(.*)$ https://%%fqdn%%/$1 [R=301,L] + + + + ServerName %%fqdn%% + AssignUserId www-data www-data + SetEnv LOGIN "0000-roundcube" + + DocumentRoot /var/lib/roundcube + + # Access to tinymce files + + Options Indexes MultiViews FollowSymLinks + AllowOverride None + Order allow,deny + allow from all + + + + Options +FollowSymLinks + # This is needed to parse /var/lib/roundcube/.htaccess. See its + # content before setting AllowOverride to None. + AllowOverride All + order allow,deny + allow from all + + + # Protecting basic directories: + + Options -FollowSymLinks + AllowOverride None + + + + Options -FollowSymLinks + AllowOverride None + Order allow,deny + Deny from all + + + + Options -FollowSymLinks + AllowOverride None + Order allow,deny + Deny from all + + + Alias /javascript /usr/share/javascript/ + + + Options FollowSymLinks MultiViews + Order allow,deny + Allow from all + + + SSLEngine On + SSLCertificateFile %%CRT%% + SSLCertificateKeyFile %%KEY%% + %%CHAINLINE%% + + diff --git a/ssl/templates/squirrelmail-ssl.conf b/ssl/templates/squirrelmail-ssl.conf new file mode 100644 index 00000000..a67b8837 --- /dev/null +++ b/ssl/templates/squirrelmail-ssl.conf @@ -0,0 +1,38 @@ + + ServerName %%fqdn%% + AssignUserId #%%UID%% #%%GID%% + SetEnv LOGIN "%%UID%%-%%LOGIN%%" + + KeepAlive Off + + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !/cgi-bin/ + RewriteRule ^/(.*)$ https://%%fqdn%%/$1 [R=301,L] + + + + ServerName %%fqdn%% + AssignUserId alternc-squirrelmail nogroup + SetEnv LOGIN "%%UID%%-%%LOGIN%%" + + DocumentRoot /usr/share/squirrelmail + + php_value open_basedir /usr/share/squirrelmail:/etc/squirrelmail/:/var/lib/squirrelmail/data/:/var/spool/squirrelmail/:/etc/mailname + php_admin_flag safe_mode off + Options Indexes FollowSymLinks + + + Alias /javascript /usr/share/javascript/ + + + Options FollowSymLinks MultiViews + Order allow,deny + Allow from all + + + SSLEngine On + SSLCertificateFile %%CRT%% + SSLCertificateKeyFile %%KEY%% + %%CHAINLINE%% + + diff --git a/ssl/templates/vhost-mixssl.conf b/ssl/templates/vhost-mixssl.conf new file mode 100644 index 00000000..301834b8 --- /dev/null +++ b/ssl/templates/vhost-mixssl.conf @@ -0,0 +1,39 @@ + + ServerName %%fqdn%% + DocumentRoot "%%document_root%%" + AssignUserId #%%UID%% #%%GID%% + SetEnv LOGIN "%%UID%%-%%LOGIN%%" + + + php_admin_value open_basedir "%%account_root%%:/usr/share/php/" + php_admin_value upload_tmp_dir %%account_root%%/tmp + php_admin_value sendmail_path '/usr/lib/alternc/sendmail "%%mail_account%%" ' + php_admin_flag mail.add_x_header on + Options +MultiViews -FollowSymLinks +SymLinksIfOwnerMatch + AllowOverride AuthConfig FileInfo Limit Options Indexes + + + + + + ServerName %%fqdn%% + DocumentRoot "%%document_root%%" + AssignUserId #%%UID%% #%%GID%% + SetEnv LOGIN "%%UID%%-%%LOGIN%%" + + + php_admin_value open_basedir "%%account_root%%:/usr/share/php/" + php_admin_value upload_tmp_dir %%account_root%%/tmp + php_admin_value sendmail_path '/usr/lib/alternc/sendmail "%%mail_account%%" ' + php_admin_flag mail.add_x_header on + Options +MultiViews -FollowSymLinks +SymLinksIfOwnerMatch + AllowOverride AuthConfig FileInfo Limit Options Indexes + + + SSLEngine On + SSLCertificateFile %%CRT%% + SSLCertificateKeyFile %%KEY%% + %%CHAINLINE%% + + + diff --git a/ssl/templates/vhost-ssl.conf b/ssl/templates/vhost-ssl.conf new file mode 100644 index 00000000..190f2000 --- /dev/null +++ b/ssl/templates/vhost-ssl.conf @@ -0,0 +1,34 @@ + + ServerName %%fqdn%% + AssignUserId #%%UID%% #%%GID%% + SetEnv LOGIN "%%UID%%-%%LOGIN%%" + + KeepAlive Off + + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !/cgi-bin/ + RewriteRule ^/(.*)$ https://%%fqdn%%/$1 [R=301,L] + + + + ServerName %%fqdn%% + DocumentRoot "%%document_root%%" + AssignUserId #%%UID%% #%%GID%% + SetEnv LOGIN "%%UID%%-%%LOGIN%%" + + + php_admin_value open_basedir "%%account_root%%:/usr/share/php/" + php_admin_value upload_tmp_dir %%account_root%%/tmp + php_admin_value sendmail_path '/usr/lib/alternc/sendmail "%%mail_account%%" ' + php_admin_flag mail.add_x_header on + Options +MultiViews -FollowSymLinks +SymLinksIfOwnerMatch + AllowOverride AuthConfig FileInfo Limit Options Indexes + + + SSLEngine On + SSLCertificateFile %%CRT%% + SSLCertificateKeyFile %%KEY%% + %%CHAINLINE%% + + +