Changeset 1531

Show
Ignore:
Timestamp:
04/26/06 16:59:28 (3 years ago)
Author:
nahuel
Message:

Rajout de la gestion des utilisateurs mysql pour les membres ( avec quotas )
Closes: #265

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • alternc/trunk/bureau/admin/menu_sql.php

    r101 r1531  
    3333<tr><td nowrap="nowrap"> 
    3434MySQL<br /> 
     35        - <a href="sql_users_list.php"><?php __("MySQL Users") ?></a><br /> 
    3536        - <a href="sql_list.php"><?php __("Databases"); ?></a><br /> 
    3637        - <a target="_blank" href="sql_admin.php"><?php __("SQL Admin"); ?></a><br /> 
  • alternc/trunk/bureau/class/m_mysql.php

    r1530 r1531  
    5353   */ 
    5454  function alternc_quota_names() { 
    55     return "mysql"
     55    return array("mysql","mysql_users")
    5656  } 
    5757 
     
    101101    global $db,$err,$bro,$mem,$cuid; 
    102102    $root="/var/alternc/html/".substr($mem->user["login"],0,1)."/".$mem->user["login"]; 
    103     $root=realpath($root); 
    104103    $err->log("mysql","get_mysql_details"); 
    105104    $dbname=$mem->user["login"].($dbn?"_":"").$dbn; 
     
    256255    $login=$db->f("login"); 
    257256 
    258     if (strlen($password)>16 || strlen($password)<4 ) { 
     257    if (strlen($password)>16) { 
    259258      $err->raise("mysql",8); 
    260259      return false; 
     
    274273    global $db,$err,$mem,$cuid; 
    275274    $err->log("mysql","new_mysql"); 
    276     if (strlen($password)>16 || strlen($password)<4 ) { 
     275    if (strlen($password)>16) { 
    277276      $err->raise("mysql",8); 
    278277      return false; 
     
    363362        return 0; 
    364363      } 
     364    } elseif ($name=="mysql_users") { 
     365      $err->log("mysql","alternc_get_quota"); 
     366      $c=$this->get_userslist(); 
     367      if(is_array($c)) 
     368        return count($c); 
     369      else 
     370        return 0; 
    365371    } else return false; 
    366372  } 
     
    419425  } 
    420426 
     427  function get_userslist() { 
     428    global $db,$err,$bro,$cuid; 
     429    $err->log("mysql","get_userslist"); 
     430    $db->query("SELECT name FROM dbusers WHERE uid='$cuid';"); 
     431    if (!$db->num_rows()) { 
     432      $err->raise("mysql",19); 
     433      return false; 
     434    } 
     435    $c=array(); 
     436    while ($db->next_record()) { 
     437      $c[]=array("name"=>substr($db->f("name"),strpos($db->f("name"),"_")+1)); 
     438    } 
     439 
     440    return $c; 
     441  } 
     442 
     443  function add_user($usern,$password,$passconf) { 
     444    global $db,$err,$quota,$mem,$cuid; 
     445    $err->log("mysql","add_user",$usern); 
     446     
     447    $user=addslashes($mem->user["login"]."_$usern"); 
     448    $pass=addslashes($password); 
     449         
     450    if (!$quota->cancreate("mysql_users")) { 
     451      $err->raise("mysql",13); 
     452      return false; 
     453    } 
     454    if (!ereg("^[0-9a-z]",$usern)) { 
     455      $err->raise("mysql",14); 
     456      return false; 
     457    } 
     458     
     459    if (strlen($user) > 16 || strlen($usern) == 0 ) { 
     460      $err->raise("mysql",15); 
     461      return false; 
     462    } 
     463    $db->query("SELECT * FROM dbusers WHERE name='$user';"); 
     464    if ($db->num_rows()) { 
     465      $err->raise("mysql",16); 
     466      return false; 
     467    } 
     468    if ($password != $passconf || !$password) { 
     469      $err->raise("mysql",17); 
     470      return false; 
     471    } 
     472 
     473 
     474    // On créé l'utilisateur 
     475    $db->query("GRANT USAGE ON *.* TO '$user'@'$this->client' IDENTIFIED BY '$pass';"); 
     476    // On le rajoute dans la table des utilisateurs 
     477    $db->query("INSERT INTO dbusers (uid,name) VALUES($cuid,'$user');"); 
     478    return true; 
     479  } 
     480 
     481  function del_user($user) { 
     482    global $db,$err,$mem,$cuid,$L_MYSQL_DATABASE; 
     483    $err->log("mysql","del_user",$user); 
     484    if (!ereg("^[0-9a-z]",$user)) { 
     485      $err->raise("mysql",14); 
     486      return false; 
     487    } 
     488    $db->query("SELECT name FROM dbusers WHERE name='".$mem->user["login"]."_$user';"); 
     489    if (!$db->num_rows()) { 
     490      $err->raise("mysql",18); 
     491      return false; 
     492    } 
     493    $db->next_record(); 
     494    $login=$db->f("name"); 
     495 
     496    // Ok, database exists and dbname is compliant. Let's proceed 
     497    $db->query("USE mysql"); 
     498    $db->query("REVOKE ALL PRIVILEGES ON *.* FROM '".$mem->user["login"]."_$user'@'$this->client';"); 
     499    $db->query("DELETE FROM db WHERE User='".$mem->user["login"]."_$user' AND Host='$this->client';"); 
     500    $db->query("DELETE FROM user WHERE User='".$mem->user["login"]."_$user' AND Host='$this->client';"); 
     501    $db->query("FLUSH PRIVILEGES"); 
     502    $db->query("USE $L_MYSQL_DATABASE"); 
     503    $db->query("DELETE FROM dbusers WHERE uid='$cuid' AND name='".$mem->user["login"]."_$user';"); 
     504    return true; 
     505  } 
     506 
     507  function get_user_dblist($user) { 
     508    global $db,$err,$mem,$cuid,$L_MYSQL_DATABASE; 
     509    $err->log("mysql","get_user_dblist"); 
     510 
     511    $r=array(); 
     512    $dblist=$this->get_dblist(); 
     513 
     514    $db->query("USE mysql;"); 
     515    for ( $i=0 ; $i<count($dblist) ; $i++ ) { 
     516      $db->query("SELECT Db, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, References_priv, Index_priv, Alter_priv, Create_tmp_table_priv, Lock_tables_priv FROM db WHERE User='".$mem->user["login"].($user?"_":"").$user."' AND Host='$this->client' AND Db='".$dblist[$i]["db"]."';"); 
     517      if ($db->next_record()) 
     518        $r[]=array("db"=>$dblist[$i]["name"], "select"=>$db->f("Select_priv"), "insert"=>$db->f("Insert_priv"), "update"=>$db->f("Update_priv"), "delete"=>$db->f("Delete_priv"), "create"=>$db->f("Create_priv"), "drop"=>$db->f("Drop_priv"), "references"=>$db->f("References_priv"), "index"=>$db->f("Index_priv"), "alter"=>$db->f("Alter_priv"), "create_tmp"=>$db->f("Create_tmp_table_priv"), "lock"=>$db->f("Lock_tables_priv")); 
     519      else 
     520        $r[]=array("db"=>$dblist[$i]["name"], "select"=>"N", "insert"=>"N", "update"=>"N", "delete"=>"N", "create"=>"N", "drop"=>"N", "references"=>"N", "index"=>"N", "alter"=>"N", "Create_tmp"=>"N", "lock"=>"N" ); 
     521    } 
     522    $db->query("FLUSH PRIVILEGES"); 
     523    $db->query("USE $L_MYSQL_DATABASE"); 
     524 
     525    return $r; 
     526  } 
     527 
     528  function set_user_rights($user,$dbn,$rights) { 
     529    global $mem, $db; 
     530 
     531    $usern=addslashes($mem->user["login"].($user?"_":"").$user); 
     532    $dbname=addslashes($mem->user["login"].($dbn?"_":"").$dbn); 
     533    // On génère les droits en fonction du tableau de droits 
     534    for( $i=0 ; $i<count($rights) ; $i++ ) { 
     535      switch ($rights[$i]) { 
     536        case "select": 
     537          $strrights.="SELECT,"; 
     538          break; 
     539        case "insert": 
     540          $strrights.="INSERT,"; 
     541          break; 
     542        case "update": 
     543          $strrights.="UPDATE,"; 
     544          break; 
     545        case "delete": 
     546          $strrights.="DELETE,"; 
     547          break; 
     548        case "create": 
     549          $strrights.="CREATE,"; 
     550          break; 
     551        case "drop": 
     552          $strrights.="DROP,"; 
     553          break; 
     554        case "references": 
     555          $strrights.="REFERENCES,"; 
     556          break; 
     557        case "index": 
     558          $strrights.="INDEX,"; 
     559          break; 
     560        case "alter": 
     561          $strrights.="ALTER,"; 
     562          break; 
     563        case "create_tmp": 
     564          $strrights.="CREATE TEMPORARY TABLES,"; 
     565          break; 
     566        case "lock": 
     567          $strrights.="LOCK TABLES,"; 
     568          break; 
     569      } 
     570    } 
     571 
     572     
     573    // On remet à zéro tous les droits de l'utilisateur 
     574    $db->query("REVOKE ALL PRIVILEGES ON *.* FROM '$usern'@'$this->client';"); 
     575    if( $strrights ){ 
     576      $strrights=substr($strrights,0,strlen($strrights)-1); 
     577      $db->query("GRANT $strrights ON $dbname.* TO '$usern'@'$this->client';");       
     578    } 
     579    return TRUE; 
     580  } 
    421581 
    422582} /* Class m_mysql */ 
  • alternc/trunk/bureau/locales/fr_FR/LC_MESSAGES/sql.po

    r458 r1531  
    77"Project-Id-Version: $Id: sql.po,v 1.6 2004/11/10 22:14:22 anonymous Exp $\n" 
    88"Report-Msgid-Bugs-To: i18n@alternc.org\n" 
    9 "POT-Creation-Date: 2004-11-01 16:18+0100\n" 
     9"POT-Creation-Date: 2006-04-02 03:58+0000\n" 
    1010"PO-Revision-Date: 2002-06-16 13:50CEST\n" 
    1111"Last-Translator: Benjamin Sonntag <benjamin@alternc.org>\n" 
     
    1616"X-Generator: Emacs 21\n" 
    1717 
     18#: admin/menu_sql.php:34 
     19msgid "MySQL Users" 
     20msgstr "Utilisateurs MySQL" 
     21 
    1822#: admin/menu_sql.php:35 
    1923msgid "Databases" 
     
    3135msgid "err_mysql_1" 
    3236msgstr "Vous avez atteint votre quota de bases, vous ne pouvez plus en créer." 
     37 
     38#: admin/sql_users_add.php:34 admin/sql_users_doadd.php:34 
     39msgid "err_mysql_20" 
     40msgstr "" 
     41"Vous avez atteint votre quota d'utilisateurs, vous ne pouvez plus en créer." 
    3342 
    3443#: admin/sql_add.php:41 admin/sql_list.php:82 
     
    96105msgstr "Changer les paramètres de sauvegarde SQL" 
    97106 
    98 #: admin/sql_bck.php:101 admin/sql_dorestore.php:55 admin/sql_restore.php:68 
     107#: admin/sql_bck.php:101 admin/sql_dorestore.php:55 admin/sql_restore.php:69 
    99108msgid "You currently have no database defined" 
    100109msgstr "Vous n'avez pas de base de données de définie" 
     
    202211msgstr "Changement de mot de passe SQL" 
    203212 
    204 #: admin/sql_pass.php:36 
     213#: admin/sql_pass.php:38 
    205214msgid "Your password has been successfully changed." 
    206215msgstr "Votre mot de passe a été modifié avec succès" 
     
    211220msgstr "Restaurer la sauvegarde SQL de la base %s" 
    212221 
    213 #: admin/sql_restore.php:53 
     222#: admin/sql_restore.php:54 
    214223msgid "Please enter the filename containing SQL data to be restored." 
    215224msgstr "" 
    216225"Entrez le nom du fichier contenant des données SQL à restaurer dans la base." 
    217226 
    218 #: admin/sql_restore.php:57 
     227#: admin/sql_restore.php:58 
    219228msgid "Restore my database" 
    220229msgstr "Restaurer ma base de données" 
    221230 
    222 #: admin/sql_restore.php:63 
     231#: admin/sql_restore.php:64 
    223232msgid "Note: If the filename ends with .gz, it will be uncompressed before." 
    224233msgstr "" 
    225234"Note : Si le nom du fichier se termine par .gz, il sera décompressé avant." 
     235 
     236#: admin/sql_users_add.php:41 
     237msgid "Create a new MySQL user" 
     238msgstr "Créer un nouvel utilisateur MySQL" 
     239 
     240#: admin/sql_users_add.php:66 
     241msgid "Create this new user" 
     242msgstr "Créer ce nouvel utilisateur" 
     243 
     244#: admin/sql_users_del.php:41 
     245msgid "The user %s has been successfully deleted" 
     246msgstr "L'utilisateur %s a été effacée avec succès" 
     247 
     248#: admin/sql_users_del.php:54 
     249msgid "Confirm the deletion of the following MySQL users" 
     250msgstr "Confirmez l'effacement des utilisateurs MySQL suivants" 
     251 
     252#: admin/sql_users_dorights.php:44 
     253msgid "The rights has been successfully applied to the user" 
     254msgstr "La droits ont été appliqués avec succès à l'utilisateur" 
     255 
     256#: admin/sql_users_list.php:48 
     257msgid "help_sql_users_list_ok" 
     258msgstr "" 
     259"Utilisez le tableau ci-dessous pour gérer vos utilisateurs MySQL : " 
     260 
     261#: admin/sql_users_rights.php:46 
     262msgid "help_sql_users_rights_ok" 
     263msgstr "" 
     264"Cochez les droits sur les bases dont vous voulez fournir à l'utilisateur : " 
     265 
     266#: admin/sql_users_list.php:53 
     267msgid "Rights" 
     268msgstr "Droits" 
     269 
     270#: admin/sql_users_rights.php:38 
     271msgid "MySQL Rights for %s" 
     272msgstr "Droits MySQL pour %s" 
     273 
     274#: admin/sql_users_rights.php:115 
     275msgid "Apply" 
     276msgstr "Appliquer" 
  • alternc/trunk/bureau/locales/fr_FR/LC_MESSAGES/sql_manual.po

    r692 r1531  
    55msgid "" 
    66msgstr "" 
    7 "Project-Id-Version: $Id: sql_manual.po,v 1.2 2005/05/27 20:10:19 arnaud-lb Exp $\n" 
     7"Project-Id-Version: $Id: sql_manual.po,v 1.2 2005/05/27 20:10:19 arnaud-lb " 
     8"Exp $\n" 
    89"Report-Msgid-Bugs-To: i18n@alternc.org\n" 
    910"POT-Creation-Date: 2004-05-24 19:34+0200\n" 
     
    1819msgid "quota_mysql" 
    1920msgstr "Bases de données MySQL" 
     21 
     22msgid "quota_mysql_users" 
     23msgstr "Utilisateurs MySQL" 
    2024 
    2125msgid "err_mysql_2" 
     
    4751msgid "err_mysql_10" 
    4852msgstr "" 
    49 "Erreur : vous ne pouvez créer votre base principale : il vous reste
    50 "d'autres bases !" 
     53"Erreur : vous ne pouvez créer votre base principale : il vous reste d'autres
     54"bases !" 
    5155 
    5256msgid "err_mysql_11" 
    5357msgstr "" 
    54 "Vous n'avez aucune base de données, cliquez sur 'Bases de données' pour
    55 "en créer une" 
     58"Vous n'avez aucune base de données, cliquez sur 'Bases de données' pour en
     59"créer une" 
    5660 
    5761msgid "err_mysql_12" 
    5862msgstr "Le nom de la base de données est trop long (64 caractères maximum)" 
     63 
     64msgid "err_mysql_13" 
     65msgstr "" 
     66"Vous avez atteint votre quota d'utilisateurs SQL, vous ne pouvez plus en " 
     67"créer" 
     68 
     69msgid "err_mysql_14" 
     70msgstr "Le nom d'utilisateur ne peut contenir que des chiffres et/ou lettres minuscules" 
     71 
     72msgid "err_mysql_15" 
     73msgstr "Nom d'utilisateur trop long (16 caractères maximum)" 
     74 
     75msgid "err_mysql_16" 
     76msgstr "Un utilisateur du même nom existe déjà" 
     77 
     78msgid "err_mysql_17" 
     79msgstr "Les mot de passes ne correspondent pas" 
     80 
     81msgid "err_mysql_18" 
     82msgstr "L'utilisateur n'existe pas" 
     83 
     84#, fuzzy 
     85msgid "err_mysql_19" 
     86msgstr "Le fichier entré n'existe pas ou est incorect." 
    5987 
    6088msgid "General SQL Admin" 
     
    72100msgid "hlp_sql_bck" 
    73101msgstr "" 
    74 "Les sauvegardes de votre base MySQL sont stockées dans le répertoire
    75 "choisi sous le nom <code>db.sql.1</code> à <code>db.sql.19</code><br />
    76 "où 'db' est remplacé par le nom de la base de données.<br />ATTENTION :
    77 "si vous modifiez les paramètres de la sauvegarde (nombre de sauvegardes,
    78 "compression ...) des vieilles sauvegardes peuvent rester dans le
    79 "répertoire concerné. Vous pouvez les effacer dans le gestionnaire de
    80 "fichier." 
     102"Les sauvegardes de votre base MySQL sont stockées dans le répertoire choisi
     103"sous le nom <code>db.sql.1</code> à <code>db.sql.19</code><br /> où 'db' est
     104"remplacé par le nom de la base de données.<br />ATTENTION : si vous modifiez
     105"les paramètres de la sauvegarde (nombre de sauvegardes, compression ...) des
     106"vieilles sauvegardes peuvent rester dans le répertoire concerné. Vous pouvez
     107"les effacer dans le gestionnaire de fichier.
     108 
  • alternc/trunk/bureau/locales/sql.po

    r968 r1531  
    1717"Content-Transfer-Encoding: 8bit\n" 
    1818 
     19#: admin/menu_sql.php:34 
     20msgid "MySQL Users" 
     21msgstr "" 
     22 
    1923#: admin/menu_sql.php:35 
    2024msgid "Databases" 
     
    3135#: admin/sql_add.php:34 admin/sql_doadd.php:34 
    3236msgid "err_mysql_1" 
     37msgstr "" 
     38 
     39#: admin/sql_users_add.php:34 admin/sql_users_doadd.php:34 
     40msgid "err_mysql_20" 
    3341msgstr "" 
    3442 
     
    214222msgid "Note: If the filename ends with .gz, it will be uncompressed before." 
    215223msgstr "" 
     224 
     225#: admin/sql_users_add.php:41 
     226msgid "Create a new MySQL user" 
     227msgstr "" 
     228 
     229#: admin/sql_users_add.php:66 
     230msgid "Create this new user" 
     231msgstr "" 
     232 
     233#: admin/sql_users_del.php:41 
     234msgid "The user %s has been successfully deleted" 
     235msgstr "" 
     236 
     237#: admin/sql_users_del.php:54 
     238msgid "Confirm the deletion of the following MySQL users" 
     239msgstr "" 
     240 
     241#: admin/sql_users_dorights.php:44 
     242msgid "The rights has been successfully applied to the user" 
     243msgstr "" 
     244 
     245#: admin/sql_users_list.php:48 
     246msgid "help_sql_users_list_ok" 
     247msgstr "" 
     248 
     249#: admin/sql_users_rights.php:46 
     250msgid "help_sql_users_rights_ok" 
     251msgstr "" 
     252 
     253#: admin/sql_users_list.php:53 
     254msgid "Rights" 
     255msgstr "" 
     256 
     257#: admin/sql_users_rights.php:38 
     258msgid "MySQL Rights for %s" 
     259msgstr "" 
     260 
     261#: admin/sql_users_rights.php:115 
     262msgid "Apply" 
     263msgstr "" 
  • alternc/trunk/bureau/locales/sql_manual.po

    r692 r1531  
    1818msgid "quota_mysql" 
    1919msgstr "Bases de données MySQL" 
     20 
     21msgid "quota_mysql_users" 
     22msgstr "Utilisateurs MySQL" 
    2023 
    2124msgid "err_mysql_2" 
     
    5861msgstr "Le nom de la base de données est trop long (64 caractères maximum)" 
    5962 
     63msgid "err_mysql_13" 
     64msgstr "Vous n'avez aucun utilisateur SQL autre que l'utilisateur principal" 
     65 
     66msgid "err_mysql_14" 
     67msgstr "Le nom de l'utilisateur ne peut contenir que des chiffres ou lettres minuscules." 
     68 
     69msgid "err_mysql_15" 
     70msgstr "Le nom d'utilisateur est trop long (16 caractères maximum)" 
     71 
     72msgid "err_mysql_16" 
     73msgstr "L'utilisateur existe déjà" 
     74 
     75msgid "err_mysql_17" 
     76msgstr "Les mots de passes ne correspondent pas" 
     77 
     78msgid "err_mysql_18" 
     79msgstr "Aucun utilisateur de ce nom n'existe" 
     80 
     81msgid "err_mysql_19" 
     82msgstr "Vous n'avez aucun utilisateur SQL autre que l'utilisateur principal" 
     83 
    6084msgid "General SQL Admin" 
    6185msgstr "Admin SQL Général" 
  • alternc/trunk/install/mysql.sql

    r983 r1531  
    417417 
    418418If this is set to 0 or a "false" string, it will be ignored.'); 
     419 
     420-- 
     421-- Table structure for table `dbusers` 
     422-- 
     423 
     424CREATE TABLE `dbusers` ( 
     425  `id` int(10) unsigned NOT NULL auto_increment, 
     426  `uid` int(10) unsigned NOT NULL default '0', 
     427  `name` varchar(16) NOT NULL default '', 
     428  KEY `id` (`id`) 
     429) TYPE=MyISAM COMMENT='Utilisateurs MySQL des membres'; 
     430 
  • alternc/trunk/install/upgrades/0.9.5.sql

    r1528 r1531  
    4141) TYPE=MyISAM COMMENT='Web space used by accounts.'; 
    4242 
     43-- ajout d'une table pour la gestion des utilisateurs mysql 
     44CREATE TABLE `dbusers` ( 
     45  `id` int(10) unsigned NOT NULL auto_increment, 
     46  `uid` int(10) unsigned NOT NULL default '0', 
     47  `name` varchar(16) NOT NULL default '', 
     48  KEY `id` (`id`) 
     49) TYPE=MyISAM COMMENT='Utilisateurs MySQL des membres'; 
     50