summaryrefslogtreecommitdiff
path: root/lib/plugins/authpgsql
diff options
context:
space:
mode:
Diffstat (limited to 'lib/plugins/authpgsql')
-rw-r--r--lib/plugins/authpgsql/auth.php418
-rw-r--r--lib/plugins/authpgsql/conf/default.php33
-rw-r--r--lib/plugins/authpgsql/conf/metadata.php33
-rw-r--r--lib/plugins/authpgsql/lang/bg/settings.php12
-rw-r--r--lib/plugins/authpgsql/lang/cs/settings.php37
-rw-r--r--lib/plugins/authpgsql/lang/de-informal/settings.php39
-rw-r--r--lib/plugins/authpgsql/lang/de/settings.php38
-rw-r--r--lib/plugins/authpgsql/lang/en/settings.php33
-rw-r--r--lib/plugins/authpgsql/lang/eo/settings.php36
-rw-r--r--lib/plugins/authpgsql/lang/fi/settings.php6
-rw-r--r--lib/plugins/authpgsql/lang/fr/settings.php37
-rw-r--r--lib/plugins/authpgsql/lang/it/settings.php5
-rw-r--r--lib/plugins/authpgsql/lang/ja/settings.php37
-rw-r--r--lib/plugins/authpgsql/lang/ko/settings.php37
-rw-r--r--lib/plugins/authpgsql/lang/lv/settings.php6
-rw-r--r--lib/plugins/authpgsql/lang/nl/settings.php36
-rw-r--r--lib/plugins/authpgsql/lang/pt-br/settings.php37
-rw-r--r--lib/plugins/authpgsql/lang/ru/settings.php6
-rw-r--r--lib/plugins/authpgsql/lang/sv/settings.php28
-rw-r--r--lib/plugins/authpgsql/lang/zh-tw/settings.php37
-rw-r--r--lib/plugins/authpgsql/lang/zh/settings.php37
-rw-r--r--lib/plugins/authpgsql/plugin.info.txt7
22 files changed, 995 insertions, 0 deletions
diff --git a/lib/plugins/authpgsql/auth.php b/lib/plugins/authpgsql/auth.php
new file mode 100644
index 000000000..3f8ff3249
--- /dev/null
+++ b/lib/plugins/authpgsql/auth.php
@@ -0,0 +1,418 @@
+<?php
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+/**
+ * PostgreSQL authentication backend
+ *
+ * This class inherits much functionality from the MySQL class
+ * and just reimplements the Postgres specific parts.
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Matthias Grimm <matthias.grimmm@sourceforge.net>
+ * @author Jan Schumann <js@schumann-it.com>
+ */
+class auth_plugin_authpgsql extends auth_plugin_authmysql {
+
+ /**
+ * Constructor
+ *
+ * checks if the pgsql interface is available, otherwise it will
+ * set the variable $success of the basis class to false
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ public function __construct() {
+ // we don't want the stuff the MySQL constructor does, but the grandparent might do something
+ DokuWiki_Auth_Plugin::__construct();
+
+ if(!function_exists('pg_connect')) {
+ $this->_debug("PgSQL err: PHP Postgres extension not found.", -1, __LINE__, __FILE__);
+ $this->success = false;
+ return;
+ }
+
+ $this->loadConfig();
+
+ // set capabilities based upon config strings set
+ if(empty($this->conf['user']) ||
+ empty($this->conf['password']) || empty($this->conf['database'])
+ ) {
+ $this->_debug("PgSQL err: insufficient configuration.", -1, __LINE__, __FILE__);
+ $this->success = false;
+ return;
+ }
+
+ $this->cando['addUser'] = $this->_chkcnf(
+ array(
+ 'getUserInfo',
+ 'getGroups',
+ 'addUser',
+ 'getUserID',
+ 'getGroupID',
+ 'addGroup',
+ 'addUserGroup'
+ )
+ );
+ $this->cando['delUser'] = $this->_chkcnf(
+ array(
+ 'getUserID',
+ 'delUser',
+ 'delUserRefs'
+ )
+ );
+ $this->cando['modLogin'] = $this->_chkcnf(
+ array(
+ 'getUserID',
+ 'updateUser',
+ 'UpdateTarget'
+ )
+ );
+ $this->cando['modPass'] = $this->cando['modLogin'];
+ $this->cando['modName'] = $this->cando['modLogin'];
+ $this->cando['modMail'] = $this->cando['modLogin'];
+ $this->cando['modGroups'] = $this->_chkcnf(
+ array(
+ 'getUserID',
+ 'getGroups',
+ 'getGroupID',
+ 'addGroup',
+ 'addUserGroup',
+ 'delGroup',
+ 'getGroupID',
+ 'delUserGroup'
+ )
+ );
+ /* getGroups is not yet supported
+ $this->cando['getGroups'] = $this->_chkcnf(array('getGroups',
+ 'getGroupID')); */
+ $this->cando['getUsers'] = $this->_chkcnf(
+ array(
+ 'getUsers',
+ 'getUserInfo',
+ 'getGroups'
+ )
+ );
+ $this->cando['getUserCount'] = $this->_chkcnf(array('getUsers'));
+ }
+
+ /**
+ * Check if the given config strings are set
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ *
+ * @param array $keys
+ * @param bool $wop
+ * @return bool
+ */
+ protected function _chkcnf($keys, $wop = false) {
+ foreach($keys as $key) {
+ if(empty($this->conf[$key])) return false;
+ }
+ return true;
+ }
+
+ /**
+ * Counts users which meet certain $filter criteria.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ *
+ * @param array $filter filter criteria in item/pattern pairs
+ * @return int count of found users.
+ */
+ public function getUserCount($filter = array()) {
+ $rc = 0;
+
+ if($this->_openDB()) {
+ $sql = $this->_createSQLFilter($this->conf['getUsers'], $filter);
+
+ // no equivalent of SQL_CALC_FOUND_ROWS in pgsql?
+ if(($result = $this->_queryDB($sql))) {
+ $rc = count($result);
+ }
+ $this->_closeDB();
+ }
+ return $rc;
+ }
+
+ /**
+ * Bulk retrieval of user data
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ *
+ * @param int $first index of first user to be returned
+ * @param int $limit max number of users to be returned
+ * @param array $filter array of field/pattern pairs
+ * @return array userinfo (refer getUserData for internal userinfo details)
+ */
+ public function retrieveUsers($first = 0, $limit = 10, $filter = array()) {
+ $out = array();
+
+ if($this->_openDB()) {
+ $this->_lockTables("READ");
+ $sql = $this->_createSQLFilter($this->conf['getUsers'], $filter);
+ $sql .= " ".$this->conf['SortOrder']." LIMIT $limit OFFSET $first";
+ $result = $this->_queryDB($sql);
+
+ foreach($result as $user)
+ if(($info = $this->_getUserInfo($user['user'])))
+ $out[$user['user']] = $info;
+
+ $this->_unlockTables();
+ $this->_closeDB();
+ }
+ return $out;
+ }
+
+ // @inherit function joinGroup($user, $group)
+ // @inherit function leaveGroup($user, $group) {
+
+ /**
+ * Adds a user to a group.
+ *
+ * If $force is set to true non existing groups would be created.
+ *
+ * The database connection must already be established. Otherwise
+ * this function does nothing and returns 'false'.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param string $user user to add to a group
+ * @param string $group name of the group
+ * @param bool $force create missing groups
+ * @return bool true on success, false on error
+ */
+ protected function _addUserToGroup($user, $group, $force = false) {
+ $newgroup = 0;
+
+ if(($this->dbcon) && ($user)) {
+ $gid = $this->_getGroupID($group);
+ if(!$gid) {
+ if($force) { // create missing groups
+ $sql = str_replace('%{group}', addslashes($group), $this->conf['addGroup']);
+ $this->_modifyDB($sql);
+ //group should now exists try again to fetch it
+ $gid = $this->_getGroupID($group);
+ $newgroup = 1; // group newly created
+ }
+ }
+ if(!$gid) return false; // group didn't exist and can't be created
+
+ $sql = $this->conf['addUserGroup'];
+ if(strpos($sql, '%{uid}') !== false) {
+ $uid = $this->_getUserID($user);
+ $sql = str_replace('%{uid}', addslashes($uid), $sql);
+ }
+ $sql = str_replace('%{user}', addslashes($user), $sql);
+ $sql = str_replace('%{gid}', addslashes($gid), $sql);
+ $sql = str_replace('%{group}', addslashes($group), $sql);
+ if($this->_modifyDB($sql) !== false) return true;
+
+ if($newgroup) { // remove previously created group on error
+ $sql = str_replace('%{gid}', addslashes($gid), $this->conf['delGroup']);
+ $sql = str_replace('%{group}', addslashes($group), $sql);
+ $this->_modifyDB($sql);
+ }
+ }
+ return false;
+ }
+
+ // @inherit function _delUserFromGroup($user $group)
+ // @inherit function _getGroups($user)
+ // @inherit function _getUserID($user)
+
+ /**
+ * Adds a new User to the database.
+ *
+ * The database connection must already be established
+ * for this function to work. Otherwise it will return
+ * 'false'.
+ *
+ * @param string $user login of the user
+ * @param string $pwd encrypted password
+ * @param string $name full name of the user
+ * @param string $mail email address
+ * @param array $grps array of groups the user should become member of
+ * @return bool
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ protected function _addUser($user, $pwd, $name, $mail, $grps) {
+ if($this->dbcon && is_array($grps)) {
+ $sql = str_replace('%{user}', addslashes($user), $this->conf['addUser']);
+ $sql = str_replace('%{pass}', addslashes($pwd), $sql);
+ $sql = str_replace('%{name}', addslashes($name), $sql);
+ $sql = str_replace('%{email}', addslashes($mail), $sql);
+ if($this->_modifyDB($sql)) {
+ $uid = $this->_getUserID($user);
+ } else {
+ return false;
+ }
+
+ $group = '';
+ $gid = false;
+
+ if($uid) {
+ foreach($grps as $group) {
+ $gid = $this->_addUserToGroup($user, $group, 1);
+ if($gid === false) break;
+ }
+
+ if($gid !== false){
+ return true;
+ } else {
+ /* remove the new user and all group relations if a group can't
+ * be assigned. Newly created groups will remain in the database
+ * and won't be removed. This might create orphaned groups but
+ * is not a big issue so we ignore this problem here.
+ */
+ $this->_delUser($user);
+ $this->_debug("PgSQL err: Adding user '$user' to group '$group' failed.", -1, __LINE__, __FILE__);
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Opens a connection to a database and saves the handle for further
+ * usage in the object. The successful call to this functions is
+ * essential for most functions in this object.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ *
+ * @return bool
+ */
+ protected function _openDB() {
+ if(!$this->dbcon) {
+ $dsn = $this->conf['server'] ? 'host='.$this->conf['server'] : '';
+ $dsn .= ' port='.$this->conf['port'];
+ $dsn .= ' dbname='.$this->conf['database'];
+ $dsn .= ' user='.$this->conf['user'];
+ $dsn .= ' password='.$this->conf['password'];
+
+ $con = @pg_connect($dsn);
+ if($con) {
+ $this->dbcon = $con;
+ return true; // connection and database successfully opened
+ } else {
+ $this->_debug(
+ "PgSQL err: Connection to {$this->conf['user']}@{$this->conf['server']} not possible.",
+ -1, __LINE__, __FILE__
+ );
+ }
+ return false; // connection failed
+ }
+ return true; // connection already open
+ }
+
+ /**
+ * Closes a database connection.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ protected function _closeDB() {
+ if($this->dbcon) {
+ pg_close($this->dbcon);
+ $this->dbcon = 0;
+ }
+ }
+
+ /**
+ * Sends a SQL query to the database and transforms the result into
+ * an associative array.
+ *
+ * This function is only able to handle queries that returns a
+ * table such as SELECT.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ *
+ * @param string $query SQL string that contains the query
+ * @return array the result table
+ */
+ protected function _queryDB($query) {
+ $resultarray = array();
+ if($this->dbcon) {
+ $result = @pg_query($this->dbcon, $query);
+ if($result) {
+ while(($t = pg_fetch_assoc($result)) !== false)
+ $resultarray[] = $t;
+ pg_free_result($result);
+ return $resultarray;
+ } else{
+ $this->_debug('PgSQL err: '.pg_last_error($this->dbcon), -1, __LINE__, __FILE__);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Executes an update or insert query. This differs from the
+ * MySQL one because it does NOT return the last insertID
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ protected function _modifyDB($query) {
+ if($this->dbcon) {
+ $result = @pg_query($this->dbcon, $query);
+ if($result) {
+ pg_free_result($result);
+ return true;
+ }
+ $this->_debug('PgSQL err: '.pg_last_error($this->dbcon), -1, __LINE__, __FILE__);
+ }
+ return false;
+ }
+
+ /**
+ * Start a transaction
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ *
+ * @param string $mode could be 'READ' or 'WRITE'
+ * @return bool
+ */
+ protected function _lockTables($mode) {
+ if($this->dbcon) {
+ $this->_modifyDB('BEGIN');
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Commit a transaction
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ protected function _unlockTables() {
+ if($this->dbcon) {
+ $this->_modifyDB('COMMIT');
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Escape a string for insertion into the database
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param string $string The string to escape
+ * @param bool $like Escape wildcard chars as well?
+ * @return string
+ */
+ protected function _escape($string, $like = false) {
+ $string = pg_escape_string($string);
+ if($like) {
+ $string = addcslashes($string, '%_');
+ }
+ return $string;
+ }
+} \ No newline at end of file
diff --git a/lib/plugins/authpgsql/conf/default.php b/lib/plugins/authpgsql/conf/default.php
new file mode 100644
index 000000000..7f78280f9
--- /dev/null
+++ b/lib/plugins/authpgsql/conf/default.php
@@ -0,0 +1,33 @@
+<?php
+
+$conf['server'] = '';
+$conf['port'] = 5432;
+$conf['user'] = '';
+$conf['password'] = '';
+$conf['database'] = '';
+$conf['debug'] = 0;
+$conf['forwardClearPass'] = 0;
+$conf['checkPass'] = '';
+$conf['getUserInfo'] = '';
+$conf['getGroups'] = '';
+$conf['getUsers'] = '';
+$conf['FilterLogin'] = '';
+$conf['FilterName'] = '';
+$conf['FilterEmail'] = '';
+$conf['FilterGroup'] = '';
+$conf['SortOrder'] = '';
+$conf['addUser'] = '';
+$conf['addGroup'] = '';
+$conf['addUserGroup'] = '';
+$conf['delGroup'] = '';
+$conf['getUserID'] = '';
+$conf['delUser'] = '';
+$conf['delUserRefs'] = '';
+$conf['updateUser'] = '';
+$conf['UpdateLogin'] = '';
+$conf['UpdatePass'] = '';
+$conf['UpdateEmail'] = '';
+$conf['UpdateName'] = '';
+$conf['UpdateTarget'] = '';
+$conf['delUserGroup'] = '';
+$conf['getGroupID'] = ''; \ No newline at end of file
diff --git a/lib/plugins/authpgsql/conf/metadata.php b/lib/plugins/authpgsql/conf/metadata.php
new file mode 100644
index 000000000..d52a17865
--- /dev/null
+++ b/lib/plugins/authpgsql/conf/metadata.php
@@ -0,0 +1,33 @@
+<?php
+
+$meta['server'] = array('string');
+$meta['port'] = array('numeric');
+$meta['user'] = array('string');
+$meta['password'] = array('password');
+$meta['database'] = array('string');
+$meta['debug'] = array('onoff');
+$meta['forwardClearPass'] = array('onoff');
+$meta['checkPass'] = array('');
+$meta['getUserInfo'] = array('');
+$meta['getGroups'] = array('');
+$meta['getUsers'] = array('');
+$meta['FilterLogin'] = array('string');
+$meta['FilterName'] = array('string');
+$meta['FilterEmail'] = array('string');
+$meta['FilterGroup'] = array('string');
+$meta['SortOrder'] = array('string');
+$meta['addUser'] = array('');
+$meta['addGroup'] = array('');
+$meta['addUserGroup'] = array('');
+$meta['delGroup'] = array('');
+$meta['getUserID'] = array('');
+$meta['delUser'] = array('');
+$meta['delUserRefs'] = array('');
+$meta['updateUser'] = array('string');
+$meta['UpdateLogin'] = array('string');
+$meta['UpdatePass'] = array('string');
+$meta['UpdateEmail'] = array('string');
+$meta['UpdateName'] = array('string');
+$meta['UpdateTarget'] = array('string');
+$meta['delUserGroup'] = array('');
+$meta['getGroupID'] = array(''); \ No newline at end of file
diff --git a/lib/plugins/authpgsql/lang/bg/settings.php b/lib/plugins/authpgsql/lang/bg/settings.php
new file mode 100644
index 000000000..0defdc4ff
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/bg/settings.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Bulgarian language file
+ *
+ * @author Kiril <neohidra@gmail.com>
+ */
+$lang['server'] = 'Вашият PostgreSQL сървър';
+$lang['port'] = 'Порт за PostgreSQL сървъра';
+$lang['user'] = 'PostgreSQL потребител';
+$lang['password'] = 'Парола за горния потребител';
+$lang['database'] = 'Име на базата от данни';
+$lang['debug'] = 'Показване на допълнителна debug информация'; \ No newline at end of file
diff --git a/lib/plugins/authpgsql/lang/cs/settings.php b/lib/plugins/authpgsql/lang/cs/settings.php
new file mode 100644
index 000000000..06abe86f4
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/cs/settings.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Czech language file
+ *
+ * @author mkucera66@seznam.cz
+ */
+$lang['server'] = 'Váš server PostgreSQL';
+$lang['port'] = 'Port vašeho serveru PostgreSQL';
+$lang['user'] = 'Uživatelské jméno pro PostgreSQL';
+$lang['password'] = 'Heslo tohoto uživatele';
+$lang['database'] = 'Použtá databáze';
+$lang['debug'] = 'Zobrazit dodatečné debugovací informace';
+$lang['forwardClearPass'] = 'Posílat uživatelské heslo jako čistý text do příkazů SQL namísto využití volby passcrypt.';
+$lang['checkPass'] = 'Příkaz SQL pro kontrolu hesel';
+$lang['getUserInfo'] = 'Příkaz SQL pro získání informací o uživateli';
+$lang['getGroups'] = 'Příkaz SQL pro získání členství uživatele ve skupinách';
+$lang['getUsers'] = 'Příkaz SQL pro seznam všech uživatelů';
+$lang['FilterLogin'] = 'Příkaz SQL pro filtrování uživatelů podle přihlašovacího jména';
+$lang['FilterName'] = 'Příkaz SQL pro filtrování uživatelů podle celého jména';
+$lang['FilterEmail'] = 'Příkaz SQL pro filtrování uživatelů podle adres emailů';
+$lang['FilterGroup'] = 'Příkaz SQL pro filtrování uživatelů podle členství ve skupinách';
+$lang['SortOrder'] = 'Příkaz SQL pro řazení uživatelů';
+$lang['addUser'] = 'Příkaz SQL pro řazení uživatelů';
+$lang['addGroup'] = 'Příkaz SQL pro přidání nové skupiny';
+$lang['addUserGroup'] = 'Příkaz SQL pro přidání uživatele do existující skupiny';
+$lang['delGroup'] = 'Příkaz SQL pro vymazání skupiny';
+$lang['getUserID'] = 'Příkaz SQL pro získání primárního klíče uživatele';
+$lang['delUser'] = 'Příkaz SQL pro vymazání uživatele';
+$lang['delUserRefs'] = 'Příkaz SQL pro odstranění členství uživatele se všech skupin';
+$lang['updateUser'] = 'Příkaz SQL pro aktualizaci uživatelského profilu';
+$lang['UpdateLogin'] = 'Klauzule pro aktualizaci přihlačovacího jména uživatele';
+$lang['UpdatePass'] = 'Klauzule pro aktualizaci hesla uživatele';
+$lang['UpdateEmail'] = 'Klauzule pro aktualizaci emailové adresy uživatele';
+$lang['UpdateName'] = 'Klauzule pro aktualizaci celého jména uživatele';
+$lang['UpdateTarget'] = 'Omezující klauzule pro identifikaci uživatele při aktualizaci';
+$lang['delUserGroup'] = 'Příkaz SQL pro zrušení členství uživatele v dané skupině';
+$lang['getGroupID'] = 'Příkaz SQL pro získání primárního klíče skupiny';
diff --git a/lib/plugins/authpgsql/lang/de-informal/settings.php b/lib/plugins/authpgsql/lang/de-informal/settings.php
new file mode 100644
index 000000000..d864d14d4
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/de-informal/settings.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * German language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Matthias Schulte <dokuwiki@lupo49.de>
+ * @author Volker Bödker <volker@boedker.de>
+ */
+$lang['server'] = 'PostgreSQL-Server';
+$lang['port'] = 'Port des PostgreSQL-Servers.';
+$lang['user'] = 'Benutzername für den Zugriff auf den PostgreSQL-Server.';
+$lang['password'] = 'Passwort des angegebenen Benutzers.';
+$lang['database'] = 'Zu verwendende Datenbank.';
+$lang['debug'] = 'Debug-Informationen anzeigen?';
+$lang['forwardClearPass'] = 'Passwort der DokuWiki-Benutzer im Klartext an die Datenbank übergeben? (Im Normalfall wird die passcrypt-Option angewendet.)';
+$lang['checkPass'] = 'SQL-Kommando zum Überprüfen von Passwörtern.';
+$lang['getUserInfo'] = 'SQL-Kommando um Benutzerinformationen auszulesen.';
+$lang['getGroups'] = 'SQL-Kommando um Gruppen eines Benutzers auszulesen.';
+$lang['getUsers'] = 'SQL-Kommando um alle Benutzer auszulesen.';
+$lang['FilterLogin'] = 'SQL-Bedingung um Benutzer anhand ihres Anmeldenamens zu filtern.';
+$lang['FilterName'] = 'SQL-Bedingung um Benutzer anhand ihres Namens zu filtern.';
+$lang['FilterEmail'] = 'SQL-Bedingung um Benutzer anhand ihrer E-Mail-Adresse zu filtern.';
+$lang['FilterGroup'] = 'SQL-Bedingung um Benutzer anhand ihrer Gruppenzugehörigkeit zu filtern.';
+$lang['SortOrder'] = 'SQL-Bedingung um anhand der die Benutzerliste sortiert wird.';
+$lang['addUser'] = 'SQL-Kommando um einen neuen Benutzer anzulegen.';
+$lang['addGroup'] = 'SQL-Kommando um eine neue Gruppe anzulegen.';
+$lang['addUserGroup'] = 'SQL-Kommando um einen Benutzer zu einer Gruppe hinzuzufügen.';
+$lang['delGroup'] = 'SQL-Kommando um eine Gruppe zu löschen.';
+$lang['getUserID'] = 'SQL-Kommando um den Primärschlüssel des Benutzers auszulesen.';
+$lang['delUser'] = 'SQL-Kommando um einen Benutzer zu löschen.';
+$lang['delUserRefs'] = 'SQL-Kommando um einen Benutzer aus allen Gruppen zu entfernen.';
+$lang['updateUser'] = 'SQL-Kommando um das Profil eines Benutzers zu aktualisieren.';
+$lang['UpdateLogin'] = 'SQL-Bedingung um den Anmeldenamen eines Benutzers zu ändern.';
+$lang['UpdatePass'] = 'SQL-Bedingung um das Passwort eines Benutzers zu ändern.';
+$lang['UpdateEmail'] = 'SQL-Bedingung um die E-Mail-Adresse eines Benutzers zu ändern.';
+$lang['UpdateName'] = 'SQL-Bedingung um den Namen eines Benutzers zu ändern.';
+$lang['UpdateTarget'] = 'SQL-Bedingung zur eindeutigen Identifikation des Benutzers.';
+$lang['delUserGroup'] = 'SQL-Kommando um einen Benutzer aus einer angegeben Gruppe zu entfernen.';
+$lang['getGroupID'] = 'SQL-Kommando um den Primärschlüssel einer Gruppe auszulesen.';
diff --git a/lib/plugins/authpgsql/lang/de/settings.php b/lib/plugins/authpgsql/lang/de/settings.php
new file mode 100644
index 000000000..4c80245d6
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/de/settings.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * German language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Matthias Schulte <dokuwiki@lupo49.de>
+ */
+$lang['server'] = 'PostgreSQL-Server';
+$lang['port'] = 'Port des PostgreSQL-Servers.';
+$lang['user'] = 'Benutzername für den Zugriff auf den PostgreSQL-Server.';
+$lang['password'] = 'Passwort des angegebenen Benutzers.';
+$lang['database'] = 'Zu verwendende Datenbank.';
+$lang['debug'] = 'Debug-Informationen anzeigen?';
+$lang['forwardClearPass'] = 'Passwort der DokuWiki-Benutzer im Klartext an die Datenbank übergeben? (Im Normalfall wird die passcrypt-Option angewendet.)';
+$lang['checkPass'] = 'SQL-Kommando zum Überprüfen von Passwörtern.';
+$lang['getUserInfo'] = 'SQL-Kommando um Benutzerinformationen auszulesen.';
+$lang['getGroups'] = 'SQL-Kommando um Gruppen eines Benutzers auszulesen.';
+$lang['getUsers'] = 'SQL-Kommando um alle Benutzer auszulesen.';
+$lang['FilterLogin'] = 'SQL-Bedingung um Benutzer anhand ihres Anmeldenamens zu filtern.';
+$lang['FilterName'] = 'SQL-Bedingung um Benutzer anhand ihres Namens zu filtern.';
+$lang['FilterEmail'] = 'SQL-Bedingung um Benutzer anhand ihrer E-Mail-Adresse zu filtern.';
+$lang['FilterGroup'] = 'SQL-Bedingung um Benutzer anhand ihrer Gruppenzugehörigkeit zu filtern.';
+$lang['SortOrder'] = 'SQL-Bedingung um anhand der die Benutzerliste sortiert wird.';
+$lang['addUser'] = 'SQL-Kommando um einen neuen Benutzer anzulegen.';
+$lang['addGroup'] = 'SQL-Kommando um eine neue Gruppe anzulegen.';
+$lang['addUserGroup'] = 'SQL-Kommando um einen Benutzer zu einer Gruppe hinzuzufügen.';
+$lang['delGroup'] = 'SQL-Kommando um eine Gruppe zu löschen.';
+$lang['getUserID'] = 'SQL-Kommando um den Primärschlüssel des Benutzers auszulesen.';
+$lang['delUser'] = 'SQL-Kommando um einen Benutzer zu löschen.';
+$lang['delUserRefs'] = 'SQL-Kommando um einen Benutzer aus allen Gruppen zu entfernen.';
+$lang['updateUser'] = 'SQL-Kommando um das Profil eines Benutzers zu aktualisieren.';
+$lang['UpdateLogin'] = 'SQL-Bedingung um den Anmeldenamen eines Benutzers zu ändern.';
+$lang['UpdatePass'] = 'SQL-Bedingung um das Passwort eines Benutzers zu ändern.';
+$lang['UpdateEmail'] = 'SQL-Bedingung um die E-Mail-Adresse eines Benutzers zu ändern.';
+$lang['UpdateName'] = 'SQL-Bedingung um den Namen eines Benutzers zu ändern.';
+$lang['UpdateTarget'] = 'SQL-Bedingung zur eindeutigen Identifikation des Benutzers.';
+$lang['delUserGroup'] = 'SQL-Kommando um einen Benutzer aus einer angegeben Gruppe zu entfernen.';
+$lang['getGroupID'] = 'SQL-Kommando um den Primärschlüssel einer Gruppe auszulesen.';
diff --git a/lib/plugins/authpgsql/lang/en/settings.php b/lib/plugins/authpgsql/lang/en/settings.php
new file mode 100644
index 000000000..e67235cfa
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/en/settings.php
@@ -0,0 +1,33 @@
+<?php
+
+$lang['server'] = 'Your PostgreSQL server';
+$lang['port'] = 'Your PostgreSQL server\'s port';
+$lang['user'] = 'PostgreSQL user name';
+$lang['password'] = 'Password for above user';
+$lang['database'] = 'Database to use';
+$lang['debug'] = 'Display additional debug information';
+$lang['forwardClearPass'] = 'Pass user passwords as cleartext to the SQL statements below, instead of using the passcrypt option';
+$lang['checkPass'] = 'SQL statement for checking passwords';
+$lang['getUserInfo'] = 'SQL statement for retrieving user information';
+$lang['getGroups'] = 'SQL statement for retrieving a user\'s group memberships';
+$lang['getUsers'] = 'SQL statement to list all users';
+$lang['FilterLogin'] = 'SQL clause for filtering users by login name';
+$lang['FilterName'] = 'SQL clause for filtering users by full name';
+$lang['FilterEmail'] = 'SQL clause for filtering users by email address';
+$lang['FilterGroup'] = 'SQL clause for filtering users by group membership';
+$lang['SortOrder'] = 'SQL clause to sort users';
+$lang['addUser'] = 'SQL statement to add a new user';
+$lang['addGroup'] = 'SQL statement to add a new group';
+$lang['addUserGroup'] = 'SQL statment to add a user to an existing group';
+$lang['delGroup'] = 'SQL statement to remove a group';
+$lang['getUserID'] = 'SQL statement to get the primary key of a user';
+$lang['delUser'] = 'SQL statement to delete a user';
+$lang['delUserRefs'] = 'SQL statement to remove a user from all groups';
+$lang['updateUser'] = 'SQL statement to update a user profile';
+$lang['UpdateLogin'] = 'Update clause for updating the user\'s login name';
+$lang['UpdatePass'] = 'Update clause for updating the user\'s password';
+$lang['UpdateEmail'] = 'Update clause for updating the user\'s email address';
+$lang['UpdateName'] = 'Update clause for updating the user\'s full name';
+$lang['UpdateTarget'] = 'Limit clause to identify the user when updating';
+$lang['delUserGroup'] = 'SQL statement to remove a user from a given group';
+$lang['getGroupID'] = 'SQL statement to get the primary key of a given group';
diff --git a/lib/plugins/authpgsql/lang/eo/settings.php b/lib/plugins/authpgsql/lang/eo/settings.php
new file mode 100644
index 000000000..dbdfdd41b
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/eo/settings.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Esperanto language file
+ *
+ */
+$lang['server'] = 'Via PostgreSQL-servilo';
+$lang['port'] = 'Via PostgreSQL-servila pordego';
+$lang['user'] = 'PostgreSQL-uzantonomo';
+$lang['password'] = 'Pasvorto por tiu uzanto';
+$lang['database'] = 'Uzenda datumbazo';
+$lang['debug'] = 'Ĉu indiki aldonajn erarinformojn';
+$lang['forwardClearPass'] = 'Ĉu transdoni pasvortojn klartekste al la SQL-frazoj sube anstataŭ uzi pasvortan kaŝon';
+$lang['checkPass'] = 'SQL-frazo por testi pasvortojn';
+$lang['getUserInfo'] = 'SQL-frazo por ricevi uzantajn informojn';
+$lang['getGroups'] = 'SQL-frazo por ricevi la grupmembrecojn de uzanto';
+$lang['getUsers'] = 'SQL-frazo por listigi ĉiujn uzantojn';
+$lang['FilterLogin'] = 'SQL-frazo por filtri uzantojn je ensaluta nomo';
+$lang['FilterName'] = 'SQL-frazo por filtri uzantojn je plena nomo';
+$lang['FilterEmail'] = 'SQL-frazo por filtri uzantojn je retpoŝtadreso';
+$lang['FilterGroup'] = 'SQL-frazo por filtri uzantojn je grupmembreco';
+$lang['SortOrder'] = 'SQL-frazo por ordigi uzantojn';
+$lang['addUser'] = 'SQL-frazo por aldoni novan uzanton';
+$lang['addGroup'] = 'SQL-frazo por aldoni novan grupon';
+$lang['addUserGroup'] = 'SQL-frazo por aldoni uzanton al ekzistanta grupo';
+$lang['delGroup'] = 'SQL-frazo por forigi grupon';
+$lang['getUserID'] = 'SQL-frazo por ricevi la ĉefan ŝlosilon de uzanto';
+$lang['delUser'] = 'SQL-frazo por forigi uzanton';
+$lang['delUserRefs'] = 'SQL-frazo por forigi uzanton el ĉiuj grupoj';
+$lang['updateUser'] = 'SQL-frazo por aktualigi uzantan profilon';
+$lang['UpdateLogin'] = 'Aktualiga frazo por uzanta ensalutnomo';
+$lang['UpdatePass'] = 'Aktualiga frazo por uzanta pasvorto';
+$lang['UpdateEmail'] = 'Aktualiga frazo por uzanta retpoŝtadreso';
+$lang['UpdateName'] = 'Aktualiga frazo por plena uzanta nomo';
+$lang['UpdateTarget'] = 'Limiga frazo por identigi la uzanton dum aktualigado';
+$lang['delUserGroup'] = 'SQL-frazo por forigi uzanton el indikita grupo';
+$lang['getGroupID'] = 'SQL-frazo por ricevi la ĉefan ŝlosilon de indikita grupo';
diff --git a/lib/plugins/authpgsql/lang/fi/settings.php b/lib/plugins/authpgsql/lang/fi/settings.php
new file mode 100644
index 000000000..d3aa13e07
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/fi/settings.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Finnish language file
+ *
+ * @author Otto Vainio <otto@valjakko.net>
+ */
diff --git a/lib/plugins/authpgsql/lang/fr/settings.php b/lib/plugins/authpgsql/lang/fr/settings.php
new file mode 100644
index 000000000..ec425bd49
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/fr/settings.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * French language file
+ *
+ * @author Bruno Veilleux <bruno.vey@gmail.com>
+ */
+$lang['server'] = 'Votre serveur PostgreSQL';
+$lang['port'] = 'Le port de votre serveur PostgreSQL';
+$lang['user'] = 'Nom d\'utilisateur PostgreSQL';
+$lang['password'] = 'Mot de passe pour l\'utilisateur ci-dessus';
+$lang['database'] = 'Base de données à utiliser';
+$lang['debug'] = 'Afficher des informations de débogage supplémentaires';
+$lang['forwardClearPass'] = 'Passer les mots de passe aux requêtes SQL ci-dessous en cleartext plutôt qu\'avec l\'option passcrypt';
+$lang['checkPass'] = 'Requête SQL pour la vérification des mots de passe';
+$lang['getUserInfo'] = 'Requête SQL pour la récupération des informations d\'un utilisateur';
+$lang['getGroups'] = 'Requête SQL pour la récupération des groupes d\'un utilisateur';
+$lang['getUsers'] = 'Requête SQL pour énumérer tous les utilisateurs';
+$lang['FilterLogin'] = 'Clause SQL pour filtrer les utilisateurs par identifiant';
+$lang['FilterName'] = 'Clause SQL pour filtrer les utilisateurs par nom complet';
+$lang['FilterEmail'] = 'Clause SQL pour filtrer les utilisateurs par adresse électronique';
+$lang['FilterGroup'] = 'Clause SQL pour filtrer les utilisateurs par groupes';
+$lang['SortOrder'] = 'Clause SQL pour trier les utilisateurs';
+$lang['addUser'] = 'Requête SQL pour ajouter un nouvel utilisateur';
+$lang['addGroup'] = 'Requête SQL pour ajouter un nouveau groupe';
+$lang['addUserGroup'] = 'Requête SQL pour ajouter un utilisateur à un groupe existant';
+$lang['delGroup'] = 'Requête SQL pour retirer un groupe';
+$lang['getUserID'] = 'Requête SQL pour obtenir la clé primaire d\'un utilisateur';
+$lang['delUser'] = 'Requête SQL pour supprimer un utilisateur';
+$lang['delUserRefs'] = 'Requête SQL pour retirer un utilisateur de tous les groupes';
+$lang['updateUser'] = 'Requête SQL pour mettre à jour le profil d\'un utilisateur';
+$lang['UpdateLogin'] = 'Clause de mise à jour pour mettre à jour l\'identifiant d\'un utilisateur';
+$lang['UpdatePass'] = 'Clause de mise à jour pour mettre à jour le mot de passe d\'un utilisateur';
+$lang['UpdateEmail'] = 'Clause de mise à jour pour mettre à jour l\'adresse électronique d\'un utilisateur';
+$lang['UpdateName'] = 'Clause de mise à jour pour mettre à jour le nom complet d\'un utilisateur';
+$lang['UpdateTarget'] = 'Clause de limite pour identifier l\'utilisateur durant une mise à jour';
+$lang['delUserGroup'] = 'Requête SQL pour retirer un utilisateur d\'un groupe donné';
+$lang['getGroupID'] = 'Requête SQL pour obtenir la clé primaire d\'un groupe donné';
diff --git a/lib/plugins/authpgsql/lang/it/settings.php b/lib/plugins/authpgsql/lang/it/settings.php
new file mode 100644
index 000000000..10ae72f87
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/it/settings.php
@@ -0,0 +1,5 @@
+<?php
+/**
+ * Italian language file
+ *
+ */
diff --git a/lib/plugins/authpgsql/lang/ja/settings.php b/lib/plugins/authpgsql/lang/ja/settings.php
new file mode 100644
index 000000000..4883caa4c
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/ja/settings.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Japanese language file
+ *
+ * @author Satoshi Sahara <sahara.satoshi@gmail.com>
+ */
+$lang['server'] = 'PostgreSQL のサーバー名';
+$lang['port'] = 'PostgreSQL サーバーのポート番号';
+$lang['user'] = 'PostgreSQL 接続用ユーザー名';
+$lang['password'] = 'PostgreSQL 接続用ユーザーのパスワード';
+$lang['database'] = '使用するデータベース名';
+$lang['debug'] = 'デバック情報を表示する';
+$lang['forwardClearPass'] = '以下で定義する SQL ステートメントにおいて, パスワード変数 %{pass} を平文とする(DokiWiki側で暗号化しない)';
+$lang['checkPass'] = 'パスワードの照合に用いる SQL ステートメント';
+$lang['getUserInfo'] = 'ユーザー情報の取得に用いる SQL ステートメント';
+$lang['getGroups'] = 'ユーザーが所属する全てのグループの取得に用いる SQL ステートメント';
+$lang['getUsers'] = 'ユーザーリストを取得する SQL ステートメント';
+$lang['FilterLogin'] = 'ユーザーリストをログイン名で絞り込む SQL 句';
+$lang['FilterName'] = 'ユーザーリストをフルネームで絞り込む SQL 句';
+$lang['FilterEmail'] = 'ユーザーリストをメールアドレスで絞り込む SQL 句';
+$lang['FilterGroup'] = 'ユーザーリストを所属グループで絞り込む SQL 句';
+$lang['SortOrder'] = 'ユーザーリストのソート方法を指定する SQL 句';
+$lang['addUser'] = '新規ユーザーを追加する SQL ステートメント';
+$lang['addGroup'] = '新規グループを追加する SQL ステートメント';
+$lang['addUserGroup'] = 'ユーザーをグループに配属する SQL ステートメント';
+$lang['delGroup'] = 'グループを削除する SQL ステートメント';
+$lang['getUserID'] = 'ユーザーIDの取得に用いる SQL ステートメン';
+$lang['delUser'] = 'ユーザーを削除する SQL ステートメント';
+$lang['delUserRefs'] = 'ユーザーのグループ所属を全て取り消す SQL ステートメント';
+$lang['updateUser'] = 'ユーザー情報を変更する SQL ステートメント';
+$lang['UpdateLogin'] = '変更後のログイン名を指定する SQL 句';
+$lang['UpdatePass'] = '変更後のパスワードを指定する SQL 句';
+$lang['UpdateEmail'] = '変更後のメールアドレスを指定する SQL 句';
+$lang['UpdateName'] = '変更後のフルネームを指定する SQL 句';
+$lang['UpdateTarget'] = '変更対象のユーザを特定するための SQL 句';
+$lang['delUserGroup'] = 'ユーザーをグループから除名する SQL ステートメント';
+$lang['getGroupID'] = 'グループIDの取得に用いる SQL ステートメント';
diff --git a/lib/plugins/authpgsql/lang/ko/settings.php b/lib/plugins/authpgsql/lang/ko/settings.php
new file mode 100644
index 000000000..d21e81cd6
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/ko/settings.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Korean language file
+ *
+ * @author Myeongjin <aranet100@gmail.com>
+ */
+$lang['server'] = 'PostgreSQL 서버';
+$lang['port'] = 'PostgreSQL 서버의 포트';
+$lang['user'] = 'PostgreSQL 사용자 이름';
+$lang['password'] = '위 사용자의 비밀번호';
+$lang['database'] = '사용할 데이터베이스';
+$lang['debug'] = '추가적인 디버그 정보 보이기';
+$lang['forwardClearPass'] = 'passcrypt 옵션을 사용하는 대신 아래 SQL 문에 일반 텍스트로 사용자 비밀번호를 전달';
+$lang['checkPass'] = '비밀번호를 확인하기 위한 SQL 문';
+$lang['getUserInfo'] = '사용자 정보를 가져오기 위한 SQL 문';
+$lang['getGroups'] = '사용자의 그룹 구성원을 가져오기 위한 SQL 문';
+$lang['getUsers'] = '모든 사용자를 나타낼 SQL 문';
+$lang['FilterLogin'] = '로그인 이름 별로 사용자를 필터하기 위한 SQL 조항';
+$lang['FilterName'] = '전체 이름 별로 사용자를 필터하기 위한 SQL 조항';
+$lang['FilterEmail'] = '이메일 주소 별로 사용자를 필터하기 위한 SQL 조항';
+$lang['FilterGroup'] = '그룹 구성원 별로 사용자를 필터하기 위한 SQL 조항';
+$lang['SortOrder'] = '사용자를 정렬할 SQL 조항';
+$lang['addUser'] = '새 사용자를 추가할 SQL 문';
+$lang['addGroup'] = '새 그룹을 추가할 SQL 문';
+$lang['addUserGroup'] = '기존 그룹에 사용자를 추가할 SQL 문';
+$lang['delGroup'] = '그룹을 제거할 SQL 문';
+$lang['getUserID'] = '사용자의 기본 키를 얻을 SQL 문';
+$lang['delUser'] = '사용자를 삭제할 SQL 문';
+$lang['delUserRefs'] = '모든 그룹에서 사용자를 제거할 SQL 문';
+$lang['updateUser'] = '사용자 프로필을 업데이트할 SQL 문';
+$lang['UpdateLogin'] = '사용자의 로그인 이름을 업데이트하기 위한 Update 조항';
+$lang['UpdatePass'] = '사용자의 비밀번호를 업데이트하기 위한 Update 조항';
+$lang['UpdateEmail'] = '사용자의 이메일 주소를 업데이트하기 위한 Update 조항';
+$lang['UpdateName'] = '사용자의 전체 이름을 업데이트하기 위한 Update 조항';
+$lang['UpdateTarget'] = '업데이트할 때 사용자를 식별할 Limit 조항';
+$lang['delUserGroup'] = '주어진 그룹에서 사용자를 제거할 SQL 문';
+$lang['getGroupID'] = '주어진 그룹의 기본 키를 얻을 SQL 문';
diff --git a/lib/plugins/authpgsql/lang/lv/settings.php b/lib/plugins/authpgsql/lang/lv/settings.php
new file mode 100644
index 000000000..ced5dabf8
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/lv/settings.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Latvian, Lettish language file
+ *
+ * @author Aivars Miška <allefm@gmail.com>
+ */
diff --git a/lib/plugins/authpgsql/lang/nl/settings.php b/lib/plugins/authpgsql/lang/nl/settings.php
new file mode 100644
index 000000000..4e6c007c6
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/nl/settings.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Dutch language file
+ *
+ */
+$lang['server'] = 'Je PostgrSQL server';
+$lang['port'] = 'Je PostgreSQL server poort';
+$lang['user'] = 'PostgrSQL gebruikersnaam';
+$lang['password'] = 'Wachtwoord voor bovenstaande gebruiker';
+$lang['database'] = 'Te gebruiken database';
+$lang['debug'] = 'Tonen aanvullende debuginformatie';
+$lang['forwardClearPass'] = 'Wachtwoorden als leesbare tekst in SQL commando\'s opnemen in plaats van versleutelde tekens';
+$lang['checkPass'] = 'SQL commando voor verifiëren wachtwoorden';
+$lang['getUserInfo'] = 'SQL commando voor ophalen gebruikersinformatie';
+$lang['getGroups'] = 'SQL commando voor ophalen groepslidmaatschappen van gebruikers';
+$lang['getUsers'] = 'SQL commando voor tonen alle gebruikers';
+$lang['FilterLogin'] = 'SQL commando voor filteren gebruikers op inlognaam';
+$lang['FilterName'] = 'SQL commando voor filteren gebruikers op volledige naam';
+$lang['FilterEmail'] = 'SQL commando voor filteren gebruikers op e-mailadres';
+$lang['FilterGroup'] = 'SQL commando voor filteren gebruikers op groepslidmaatschap';
+$lang['SortOrder'] = 'SQL commando voor sorteren gebruikers';
+$lang['addUser'] = 'SQL commando voor toevoegen nieuwe gebruiker';
+$lang['addGroup'] = 'SQL commando voor toevoegen nieuwe groep';
+$lang['addUserGroup'] = 'SQL commando voor toevoegen gebruiker aan bestaande groep';
+$lang['delGroup'] = 'SQL commando voor verwijderen groep';
+$lang['getUserID'] = 'SQL commando om de primaire sleutel van een gebruiker op te halen';
+$lang['delUser'] = 'SQL commando voor verwijderen gebruiker';
+$lang['delUserRefs'] = 'SQL commando om een gebruiker uit alle groepen te verwijderen';
+$lang['updateUser'] = 'SQL commando om een gebruikersprofiel bij te werken';
+$lang['UpdateLogin'] = 'SQL commando om een inlognaam bij te werken';
+$lang['UpdatePass'] = 'SQL commando om een wachtwoord bij te werken';
+$lang['UpdateEmail'] = 'SQL commando om een e-mailadres bij te werken';
+$lang['UpdateName'] = 'SQL commando om een volledige naam bij te werken';
+$lang['UpdateTarget'] = 'Beperkingsclausule om gebruiker te identificeren voor bijwerken';
+$lang['delUserGroup'] = 'SQL commando om een gebruiker uit een bepaalde groep te verwijderen';
+$lang['getGroupID'] = 'SQL commando om de primaire sleutel van een bepaalde groep op te halen';
diff --git a/lib/plugins/authpgsql/lang/pt-br/settings.php b/lib/plugins/authpgsql/lang/pt-br/settings.php
new file mode 100644
index 000000000..d91e9c8e5
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/pt-br/settings.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Brazilian Portuguese language file
+ *
+ * @author Victor Westmann <victor.westmann@gmail.com>
+ */
+$lang['server'] = 'Seu servidor PostgreSQL';
+$lang['port'] = 'Sua porta do servidor PostgreSQL';
+$lang['user'] = 'Nome de usuário PostgreSQL';
+$lang['password'] = 'Senha do usuário acima';
+$lang['database'] = 'Base de dados para usar';
+$lang['debug'] = 'Mostrar informações adicionais de depuração';
+$lang['forwardClearPass'] = 'Transmitir senhas de usuário como texto puro para comandos SQL abaixo, ao invés de usar a opção passcrypt';
+$lang['checkPass'] = 'Comando SQL para verificar senhas';
+$lang['getUserInfo'] = 'Comando SQL para obter informações do usuário';
+$lang['getGroups'] = 'Comando SQL para obter as credenciais de um usuário de um determinado grupo';
+$lang['getUsers'] = 'Comando SQL para listar todos os usuários';
+$lang['FilterLogin'] = 'Cláusula SQL para filtrar usuários pelo nome de login';
+$lang['FilterName'] = 'Cláusula SQL para filtrar usuários pelo nome completo';
+$lang['FilterEmail'] = 'Cláusula SQL para filtrar usuários pelo endereço de email';
+$lang['FilterGroup'] = 'Cláusula SQL para filtrar usuários pelo grupo que pertencem';
+$lang['SortOrder'] = 'Comando SQL para adicionar novo grupo';
+$lang['addUser'] = 'Comando SQL para adicionar novo usuário';
+$lang['addGroup'] = 'Comando SQL para adicionar novo grupo';
+$lang['addUserGroup'] = 'Comando SQL para adicionar um usuário a um grupo existente';
+$lang['delGroup'] = 'Comando SQL para remover um grupo';
+$lang['getUserID'] = 'Comando SQL para obter chave primária de usuário';
+$lang['delUser'] = 'Comando SQL para apagar usuário';
+$lang['delUserRefs'] = 'Comando SQL para remover um usuário de todos os grupos';
+$lang['updateUser'] = 'Comando SQL para atualizar perfil de usuário';
+$lang['UpdateLogin'] = 'Atualizar cláusula para atualizar o login do usuário';
+$lang['UpdatePass'] = 'Atualizar cláusula para atualizar a senha do usuário';
+$lang['UpdateEmail'] = 'Atualizar cláusula para atualizar o endereço de email';
+$lang['UpdateName'] = 'Atualizar cláusula para atualizar o nome completo do usuário';
+$lang['UpdateTarget'] = 'Limitar cláusula para identificar quando um usuário estiver atualizando';
+$lang['delUserGroup'] = 'Comando SQL para remover um usuário de um determinado grupo';
+$lang['getGroupID'] = 'Comando SQL para obter a chave primária de um determinado grupo';
diff --git a/lib/plugins/authpgsql/lang/ru/settings.php b/lib/plugins/authpgsql/lang/ru/settings.php
new file mode 100644
index 000000000..4c394080e
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/ru/settings.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Russian language file
+ *
+ * @author Ivan I. Udovichenko (sendtome@mymailbox.pp.ua)
+ */
diff --git a/lib/plugins/authpgsql/lang/sv/settings.php b/lib/plugins/authpgsql/lang/sv/settings.php
new file mode 100644
index 000000000..27cb2601d
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/sv/settings.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Swedish language file
+ *
+ * @author Smorkster Andersson smorkster@gmail.com
+ */
+$lang['server'] = 'Din PostgreSQL server';
+$lang['port'] = 'Din PostgreSQL servers port';
+$lang['user'] = 'PostgreSQL användarnamn';
+$lang['password'] = 'Lösenord för användaren ovan';
+$lang['database'] = 'Databas att använda';
+$lang['debug'] = 'Visa ytterligare felsökningsinformation';
+$lang['forwardClearPass'] = 'Skicka lösenord för användare som klartext till SQL satserna nedan, istället för att använda krypteringsalternativet';
+$lang['checkPass'] = 'SQL sats för kontroll av lösenord';
+$lang['getUserInfo'] = 'SQL sats för att hämta användarinformation';
+$lang['getGroups'] = 'SQL sats för att hämta en användares gruppmedlemskap';
+$lang['getUsers'] = 'SQL sats för att lista alla användare';
+$lang['FilterLogin'] = 'SQL klausul för att filtrera användare efter inloggningsnamn';
+$lang['FilterName'] = 'SQL klausul för att filtrera användare efter fullt namn';
+$lang['FilterEmail'] = 'SQL klausul för att filtrera användare efter e-post adress';
+$lang['addUser'] = 'SQL sats för att lägga till en ny användare';
+$lang['addGroup'] = 'SQL sats för att lägga till en ny grupp';
+$lang['addUserGroup'] = 'SQL sats för att lägga till en användare i en existerande grupp';
+$lang['delGroup'] = 'SQL sats för att ta bort en grupp';
+$lang['delUser'] = 'SQL sats för att ta bort en användare';
+$lang['delUserRefs'] = 'SQL sats för att ta bort en användare från alla grupper';
+$lang['updateUser'] = 'SQL sats för att uppdatera en användarprofil';
+$lang['delUserGroup'] = 'SQL sats för att ta bort en användare från angiven grupp';
diff --git a/lib/plugins/authpgsql/lang/zh-tw/settings.php b/lib/plugins/authpgsql/lang/zh-tw/settings.php
new file mode 100644
index 000000000..6a04214ad
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/zh-tw/settings.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Chinese Traditional language file
+ *
+ * @author syaoranhinata@gmail.com
+ */
+$lang['server'] = '您的 PostgreSQL 伺服器';
+$lang['port'] = '您的 PostgreSQL 伺服器端口';
+$lang['user'] = 'PostgreSQL 使用者名稱';
+$lang['password'] = '上述使用者的密碼';
+$lang['database'] = '使用的資料庫';
+$lang['debug'] = '顯示額外除錯資訊';
+$lang['forwardClearPass'] = '以明文形式,把使用者密碼傳送给下列的 SQL 語句,而不使用 passcrypt 密碼加密選項';
+$lang['checkPass'] = '檢查密碼的 SQL 語句';
+$lang['getUserInfo'] = '獲取使用者訊息的 SQL 語句';
+$lang['getGroups'] = '獲取使用者群組成員身份的 SQL 語句';
+$lang['getUsers'] = '把所有使用者列出的 SQL 語句';
+$lang['FilterLogin'] = '根據登入名稱來篩選使用者的 SQL 子句';
+$lang['FilterName'] = '根據全名來篩選使用者的 SQL 子句';
+$lang['FilterEmail'] = '根據電郵地址來篩選使用者的 SQL 子句';
+$lang['FilterGroup'] = '根據群組成員身份來篩選使用者的 SQL 子句';
+$lang['SortOrder'] = '對使用者排序的 SQL 子句';
+$lang['addUser'] = '增加新使用者的 SQL 語句';
+$lang['addGroup'] = '增加新群組的 SQL 語句';
+$lang['addUserGroup'] = '把使用者新增至現有群組的 SQL 語句';
+$lang['delGroup'] = '把群組刪除的 SQL 語句';
+$lang['getUserID'] = '取得使用者主鍵的 SQL 語句';
+$lang['delUser'] = '把使用者刪除的 SQL 語句';
+$lang['delUserRefs'] = '把使用者從所有群組裏刪除的 SQL 語句';
+$lang['updateUser'] = '更新使用者訊息的 SQL 語句';
+$lang['UpdateLogin'] = '更新使用者登入名稱的 Update 子句';
+$lang['UpdatePass'] = '更新帳號密碼的 Update 子句';
+$lang['UpdateEmail'] = '更新使用者電郵地址的 Update 子句';
+$lang['UpdateName'] = '更新使用者全名的 Update 子句';
+$lang['UpdateTarget'] = '在更新時識別使用者的 Limit 子句';
+$lang['delUserGroup'] = '把使用者從指定群組中刪除的 SQL 語句';
+$lang['getGroupID'] = '取得指定群組主鍵的 SQL 語句';
diff --git a/lib/plugins/authpgsql/lang/zh/settings.php b/lib/plugins/authpgsql/lang/zh/settings.php
new file mode 100644
index 000000000..dc7223d89
--- /dev/null
+++ b/lib/plugins/authpgsql/lang/zh/settings.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Chinese language file
+ *
+ * @author lainme <lainme993@gmail.com>
+ */
+$lang['server'] = '您的 PostgreSQL 服务器';
+$lang['port'] = '您的 PostgreSQL 服务器端口';
+$lang['user'] = 'PostgreSQL 用户名';
+$lang['password'] = '上述用户的密码';
+$lang['database'] = '使用的数据库';
+$lang['debug'] = '显示额外调试信息';
+$lang['forwardClearPass'] = '将用户密码以明文形式传送给下面的 SQL 语句,而不使用 passcrypt 密码加密选项';
+$lang['checkPass'] = '检查密码的 SQL 语句';
+$lang['getUserInfo'] = '获取用户信息的 SQL 语句';
+$lang['getGroups'] = '获取用户的组成员身份的 SQL 语句';
+$lang['getUsers'] = '列出所有用户的 SQL 语句';
+$lang['FilterLogin'] = '根据登录名筛选用户的 SQL 子句';
+$lang['FilterName'] = '根据全名筛选用户的 SQL 子句';
+$lang['FilterEmail'] = '根据电子邮件地址筛选用户的 SQL 子句';
+$lang['FilterGroup'] = '根据组成员身份筛选用户的 SQL 子句';
+$lang['SortOrder'] = '对用户排序的 SQL 子句';
+$lang['addUser'] = '添加新用户的 SQL 语句';
+$lang['addGroup'] = '添加新组的 SQL 语句';
+$lang['addUserGroup'] = '将用户添加到现有组的 SQL 语句';
+$lang['delGroup'] = '删除组的 SQL 语句';
+$lang['getUserID'] = '获取用户主键的 SQL 语句';
+$lang['delUser'] = '删除用户的 SQL 语句';
+$lang['delUserRefs'] = '从所有组中删除一个用户的 SQL 语句';
+$lang['updateUser'] = '更新用户信息的 SQL 语句';
+$lang['UpdateLogin'] = '更新用户登录名的 Update 子句';
+$lang['UpdatePass'] = '更新用户密码的 Update 子句';
+$lang['UpdateEmail'] = '更新用户电子邮件地址的 Update 子句';
+$lang['UpdateName'] = '更新用户全名的 Update 子句';
+$lang['UpdateTarget'] = '更新时识别用户的 Limit 子句';
+$lang['delUserGroup'] = '从指定组删除用户的 SQL 语句';
+$lang['getGroupID'] = '获取指定组主键的 SQL 语句';
diff --git a/lib/plugins/authpgsql/plugin.info.txt b/lib/plugins/authpgsql/plugin.info.txt
new file mode 100644
index 000000000..af33cec3e
--- /dev/null
+++ b/lib/plugins/authpgsql/plugin.info.txt
@@ -0,0 +1,7 @@
+base authpgsql
+author Andreas Gohr
+email andi@splitbrain.org
+date 2013-02-16
+name PostgreSQL auth plugin
+desc Provides authentication against a PostgreSQL database
+url http://www.dokuwiki.org/plugin:authpgsql