-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Salut,

Actuellement le contrôle de la configuration est plutôt "minimum"
(connexion + version)

De plus la configuration TRACE_DELETED est forcée à chaque passage.

Voici une petite proposition d'amélioration.

1/ TRACE_DELETED

Lire la valeur avant et essayer de la changer uniquement si besoin.
Cela évite d'avoir besoin des droits d'écriture sur cette table.

2/ hardware.CHECKSUM

Contrôle des droits d'écriture lors de la configuration d'un serveur OCS

3/ deleted_equiv

Contrôle des droits de suppression lors de la configuration d'un
serveur OCS

Bien sûr avec quelques messages très utiles (enfin j'espère) pour
l'administrateur lors de l'installation.


Pour cela j'ai crée une fonction ocsCheckConfig (argument = champ de
bits des éléments à contrôler) qui est appelée depuis le formulaire de
configuration et depuis la fonction ocsManageDeleted.

Sujet de reflexion :
- - intégrer checkOCSconnexion dans ocsCheckConfig ?
- - lors de l'appel depuis ocsManageDeleted, que doit-on vérifier ?
(j'ai mis uniquement le contrôle de la configuration, ce qui
correspond au fonctionnement actuel)

Patch en P.J. (version SVN du 24/6)
Par contre je n'ai pas modifié toutes les "locales".

Bon dimanche et à bientôt.
Remi.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (GNU/Linux)
Comment: Using GnuPG with Remi - http://enigmail.mozdev.org

iD8DBQFGfiRWYUppBSnxahgRArgDAKCOfMwA2i2VZsGanKKZYNKmrdZ17wCePMDG
KTERaKGZcfWFtCE0iEVg8Sg=
=T1XE
-----END PGP SIGNATURE-----

--- ./inc/ocsng.function.php.orig	2007-06-24 08:33:23.000000000 +0200
+++ ./inc/ocsng.function.php	2007-06-24 09:43:28.000000000 +0200
@@ -270,14 +270,46 @@ function ocsLink($ocs_id, $ocs_server_id
 	}
 }
 
+function ocsCheckConfig($what=1) {
+	global $DBocs;
+
+	# Check OCS version
+	if ($what & 1) {
+		$result = $DBocs->query("SELECT TVALUE FROM config WHERE NAME='GUI_VERSION'");
+		if ($DBocs->numrows($result) != 1 || $DBocs->result($result, 0, 0) < 4020) {
+			return false;
+		}
+	}
+	# Check TRACE_DELETED in CONFIG
+	if ($what & 2) {
+		$result = $DBocs->query("SELECT IVALUE FROM config WHERE NAME='TRACE_DELETED'");
+		if ($DBocs->numrows($result) != 1 || $DBocs->result($result, 0, 0) != 1) {
+			$query = "UPDATE config SET IVALUE='1' WHERE NAME='TRACE_DELETED'";
+
+			if (!$DBocs->query($query)) return false;			
+		}
+	}
+	# Check write access on hardware.CHECKSUM
+	if ($what & 4) {
+		if (!$DBocs->query("UPDATE hardware SET CHECKSUM = CHECKSUM LIMIT 1")) {
+			return false;			
+		}
+	}
+	# Check delete access on deleted_equiv
+	if ($what & 8) {
+		if (!$DBocs->query("DELETE FROM deleted_equiv LIMIT 0")) {
+			return false;			
+		}
+	}
+
+	return true;
+}
 function ocsManageDeleted($ocs_server_id) {
 	global $DB, $DBocs;
 
-	checkOCSconnection($ocs_server_id);
-
-	// Activate TRACE_DELETED : ALSO DONE IN THE CONFIG
-	$query = "UPDATE config SET IVALUE='1' WHERE NAME='TRACE_DELETED'";
-	$DBocs->query($query);
+	if (!(checkOCSconnection($ocs_server_id) && ocsCheckConfig(1))) {
+		return false;
+	}
 
 	$query = "SELECT * FROM deleted_equiv";
 	$result = $DBocs->query($query);
--- ./inc/ocsng.class.php.orig	2007-06-24 08:34:49.000000000 +0200
+++ ./inc/ocsng.class.php	2007-06-24 09:30:03.000000000 +0200
@@ -449,25 +449,30 @@ function showForm($target, $ID,$withtemp
 		echo "<div align='center'>";
 
 		if ($ID != -1) {
-			checkOCSconnection($ID);
-			
-			if (!$DBocs->error) {
-				echo $LANG["ocsng"][18] . "<br>";
-				$result = $DBocs->query("SELECT TVALUE FROM config WHERE NAME='GUI_VERSION'");
-				if ($DBocs->numrows($result) == 1 && $DBocs->result($result, 0, 0) >= 4020) {
-					$query = "UPDATE config SET IVALUE='1' WHERE NAME='TRACE_DELETED'";
-					$DBocs->query($query);
-
-					echo $LANG["ocsng"][19];
-					if ($withtemplate == 2)
-						$this->ocsFormConfig($target,$ID,$withtemplate,$templateid);
-					else
-						$this->ocsFormConfig($target, $ID,$withtemplate);
-				} else
-					echo $LANG["ocsng"][20];
-			} else {
+			if (!checkOCSconnection($ID)){
 				echo $LANG["ocsng"][21];
 			}
+			else if (!ocsCheckConfig(1)) {
+				echo $LANG["ocsng"][20];
+			}
+			else if (!ocsCheckConfig(2)) {
+				echo $LANG["ocsng"][42];
+			}
+			else if (!ocsCheckConfig(4)) {
+				echo $LANG["ocsng"][43];
+			}
+			else if (!ocsCheckConfig(8)) {
+				echo $LANG["ocsng"][44];
+			}
+			else {
+				echo $LANG["ocsng"][18] . "<br>";
+				echo $LANG["ocsng"][19];
+
+				if ($withtemplate == 2)
+					$this->ocsFormConfig($target,$ID,$withtemplate,$templateid);
+				else
+					$this->ocsFormConfig($target, $ID,$withtemplate);
+			}
 
 		}
 		echo "</div>";
--- ./locales/fr_FR.php.orig	2007-06-24 08:35:50.000000000 +0200
+++ ./locales/fr_FR.php	2007-06-24 09:32:05.000000000 +0200
@@ -964,7 +964,7 @@ $LANG["ocsng"][14]="Date dernière mise 
 $LANG["ocsng"][15]="Aucun champ verrouillé";
 $LANG["ocsng"][16]="Champs verrouillés";
 $LANG["ocsng"][18]="Connexion à la base de données OCS réussie";
-$LANG["ocsng"][19]="Version OCS NG valide";
+$LANG["ocsng"][19]="Version et Configuration OCS NG valide";
 $LANG["ocsng"][20]="Version d'OCS NG non valide : nécessite RC3";
 $LANG["ocsng"][21]="Echec de connexion à la base de données OCS NG";
 $LANG["ocsng"][22]="Attention ! Les données importées (voir votre configuration) écraseront les données existantes";
@@ -985,6 +985,9 @@ $LANG["ocsng"][37]="Activer la prévisua
 $LANG["ocsng"][38]="Désactiver la prévisualisation";
 $LANG["ocsng"][40]="Match règle ?";
 $LANG["ocsng"][41]="Mode d'import manuel";
+$LANG["ocsng"][42]="Configuration OCS NG invalide (TRACE_DELETED doit être activé)"; 
+$LANG["ocsng"][43]="Accès refusé sur la base OCS (Droit d'écriture sur hardware.CHECKSUM nécessaire)"; 
+$LANG["ocsng"][44]="Accès refusé sur la base OCS (Droit de suppression sur deleted_equiv nécessaire)"; 
 
 
 $LANG["ocsconfig"][0]="Configuration du module d'import OCS NG -> GLPI";
--- ./locales/en_GB.php.orig	2007-06-24 08:35:34.000000000 +0200
+++ ./locales/en_GB.php	2007-06-24 09:31:41.000000000 +0200
@@ -990,7 +990,7 @@ $LANG["ocsng"][14]="Last update date in 
 $LANG["ocsng"][15]="No field locked"; 
 $LANG["ocsng"][16]="Locked Fields"; 
 $LANG["ocsng"][18]="Connection to OCS database successful"; 
-$LANG["ocsng"][19]="Valid OCS NG version"; 
+$LANG["ocsng"][19]="Valid OCS NG version and configuration"; 
 $LANG["ocsng"][20]="Invalid OCS NG Version: require RC3"; 
 $LANG["ocsng"][21]="Connection to the OCS NG database failed"; 
 $LANG["ocsng"][22]="Caution! The imported data (see your configuration) will overwrite the existing data"; 
@@ -1011,6 +1011,9 @@ $LANG["ocsng"][37]="Activate the preview
 $LANG["ocsng"][38]="Désactiver la prévisualisation"; 
 $LANG["ocsng"][40]="Match règle ?"; 
 $LANG["ocsng"][41]="Mode d'import manuel"; 
+$LANG["ocsng"][42]="Invalid OCS configuration (TRACE_DELETED must be ON)"; 
+$LANG["ocsng"][43]="Access denied on OCS database (write privilege on hardware.CHECKSUM required)"; 
+$LANG["ocsng"][44]="Access denied on OCS database (delete privilege on deleted_equiv required)"; 
 
 $LANG["pager"][1]="to"; 
 $LANG["pager"][2]="from"; 
@@ -1625,4 +1628,4 @@ $LANG["update"][135]="Root location"; 
 $LANG["update"][136]="This is the new hierarchy. If it's OK, you can validate it."; 
 $LANG["update"][137]="New hierarchy"; 
 $LANG["update"][138]="Actual locations"; 
-?>
\ Pas de fin de ligne à la fin du fichier.
+?>
--- ./scripts/ocsng_mass_import.php.orig	2007-06-24 09:40:31.000000000 +0200
+++ ./scripts/ocsng_mass_import.php	2007-06-24 09:41:01.000000000 +0200
@@ -60,9 +60,7 @@ if (isset($_GET["limit"])) $limit=$_GET[
 $DBocs = new DBocs($ocs_server_id);
 $cfg_ocs=getOcsConf($ocs_server_id);
 
-// PREREQUISITE : activate trace_deleted
-$query = "UPDATE config SET IVALUE='1' WHERE NAME='TRACE_DELETED'";
-$DBocs->query($query);
+// PREREQUISITE : activate trace_deleted (check done in ocsManageDeleted)
 // Clean links
 ocsManageDeleted($ocs_server_id);
 ocsCleanLinks($ocs_server_id);
_______________________________________________
Glpi-dev mailing list
Glpi-dev@gna.org
https://mail.gna.org/listinfo/glpi-dev

Reply via email to