View Full Version : Ajout de car non solicités dans des champs Oreon
tlinder
05-18-2005, 01:44 PM
Bonjour,
j'ai déjà posté cette demande dans un autre sujet de discussion qui est maintenant réglé, malheuresement, pour moi ce n'est pas encore le cas.
Depuis mon passage à la version 1.2.1, j'ai un phénomène qui me dérange et rend mon système Oreon+Nagios non fonctionnel.
En effet, dès que je crée par exemple une commande de notification avec les éléments suivants:
command name: test
command line:
coucou
"coucou"
'coucou'
J'enregistre et je constate que la command line a été modifiée :
coucou \"coucou\" \'coucou\'
Un caractère \ a été placé à mon insu et me provoque des effets néfaste sur le fonctionnement de Nagios.
Merci d'avance pour votre aide, car après de de multiples essais, je suis bloqué et cette situation est vraiment désagréable.
Merci
Thierry
Je viens de tester sur mon Oreon.
Ma commande une fois enregistree
name : test
line : coucou "coucou" 'coucou'
Apres generation dans le cfg ->
# 'test' command definition 33
define command{
command_name test
command_line coucou "coucou" 'coucou'
}
Dans mon fichier command.class :
function get_name() {
return stripslashes($this->command_name);
}
function get_line() {
return stripslashes($this->command_line);
}
function set_name($name) {
$this->command_name = $name;
}
function set_line($line) {
$this->command_line = $line;
}
Dans mon fichier include/exporte/commands.php
$str .= "define command{\n";
if ($cmd->get_name()){$str .= print_line("command_name", $cmd->get_name());}
if ($cmd->get_line()){$str .= print_line("command_line", $cmd->get_line());}
$str .= "}\n\n";
tlinder
05-19-2005, 08:52 AM
Salut Romain,
merci pour le coup de main.
J'ai regardé dans mes fichiers de conf (je suis en version 1.2.1).
Il me semble que j'ai comme toi :
dans le fichier /usr/local/oreon/class/Command.class.php:
// Get
function get_id() {
return $this->command_id;
}
function get_name() {
return stripslashes($this->command_name);
}
function get_line() {
return stripslashes($this->command_line);
}
function get_type() {
return $this->command_type;
}
function get_errCode() {
return $this->errCode;
}
Et dans le second fichier /usr/local/oreon/include/export/commands.php:
function Create_command( $oreon, $path)
{
$handle = create_file( $path ."checkcommands.cfg", $oreon->user->get_firstname(), $oreon->user->get_lastname());
if (!isset($oreon->commands) && !count($oreon->commands)) {
return ;
} else {
$i = 0;
$str = NULL;
foreach ($oreon->commands as $cmd) {
if (!strcmp($cmd->get_type(), "2")){
$str .= "# '" . $cmd->get_name() . "' command definition " . $i . "\n";
$str .= "define command{\n";
if ($cmd->get_name()){$str .= print_line("command_name", $cmd->get_name());}
if ($cmd->get_line()){$str .= print_line("command_line", $cmd->get_line());}
$str .= "}\n\n";
$i++;
}
unset($cmd);
}
}
write_in_file($handle, $str, $path . "checkcommands.cfg");
fclose($handle);
}
Par contre, j'ai toujours cet effet néfaste.
Je ne comprend pas bien quel fonction est chargée par Oreon lorsque l'on rempli un champ au travers de l'interface si on crée ou modifie un commande de check (notification ou check).
As-tu cette information ?
Quelle fonction mérite d'être oscultée ?
Merci d'avance pour ton aide.
Thierry
Le fonctionnement est simple :
Tu saisies ton text, tu sauves, on appele le constructeur dans command.class.php (verifie a ce niveau qu'il n'y a pas de addslashes dans le set de line), on verifie que tous les champs sont bons, on sauve en base avec OreonDatabase.class.php ou la on fait un addslashes.
Ensuite quand on a besoin de l'element on le recupere avec le get_line() de l'object command qui inclue un stripslashes automatiquement.
Le seul truc que je voie est que tu as un addslashes dans le constructeur de command. Enleve et teste si c'est le cas.
tlinder
05-19-2005, 09:50 AM
Salut Romain,
merci pour ces précisions.
J'avais une ligne addslashes dans le fichier Command.class.php en ligne 57.
$this->command_line = addslashes($command["command_line"]);
je l'ai modifié
$this->command_line = stripslashes($command["command_line"]);
Est c'est tout bon!
Merci beaucoup
Thierry
Logiquement tu n'as pas besoin de mettre un stripslashes, cela devrait suffir :
$this->command_line = $command["command_line"];
Effectivement, il t'en rajoutait en double et n'en n'enlevait qu'un a la generation... C'etait du a des tests qu'on avait fait a ce sujet deja...
tlinder
05-24-2005, 01:54 PM
Salut Romain,
désolé, mais mon cas de figure apparait à nouveau, mais dans un autre champ:
Le champ "Check_command_arguments" dans la description d'un service.
A nouveau, si je place les arguments suivants:
!coucou!'coucou'!"coucou"
j'obtiens dans le champ dès que je sauve ma modification:
!coucou!\'coucou\'!\"coucou\"
Donc, ce soucis de addslashes et stripslashes semble être présent ailleurs dans le code, j'ai cherché un moment, mais je n'ai pas trouvé !
:?: As-tu une idée comment je peux régler ce problème définitivement ?
Merci d'avance
Thierry
Alors si je teste voila chez moi :
check_graph_traffic!coucou!'coucou'!"coucou"
Je sais c enervant :lol:
Donc, j'ai regarde, pas de addslashes en trop, tu peux toujours essaier en mettant un stripslashes() dans l'exportedb de service
Ligne 66
$cc_arg = stripslashes($oreon->services[$sv->get_service_template()]->get_check_command_arg());
Ligne 70
$str .= print_line("check_command", $oreon->commands[$sv->get_check_command()]->get_name() . stripslashes($sv->get_check_command_arg()));
tlinder
05-24-2005, 02:26 PM
:cry: Dommage, cela ne résoud pas mon problème.
Question: je suis en version 1.2.1 et je n'ai pas les mêmes numéros de lignes que toi.
Dans mon fichier export/services.php, les lignes que tu me proposes de modifier sont placées aux lignes 64 et 68 alors que toi tu les as en ligne 66 et 70
As-tu une idée ?
Thierry
Et bien modifie celle la alors :lol:
tlinder
05-24-2005, 02:49 PM
EUH!
on c'est pas bien compris, je les ai modifiées, mais le résulat attendu n'a pas été au RDV.
Du coup, je me suis posé la question que si j'ai pas les mêmes lignes que toi, il se peut bien que d'autres lignes de codes ne soient pas les mêmes.
Sur ta station de test, est-tu en 1.2.1 ?
As-tu une autre idées pour ces "\" non désirés ?
Merci
Thierry
En fait je suis sur la version en dev la.
Les \ se trouvent dans confiuration->service mais sont ils toujours present dans le services.cfg ?
Si tu veux les enlever dans la partie configuration, rajoute des stripslashes dans la page /oreon/service.php
tlinder
05-25-2005, 06:06 AM
Salut Romain,
Pour ton information, les modifications proposées ont un effet de bord innatendu.
En effet, suite aux modifications dans le fichier services.php, le fichier généré services.cfg est faux.
Les services prennent comme arguements, la valeur proposée dans le template en lieu et place ce celle spécifiée dans le service.
J'ai donc du revenir en arrière.
Thierry
tlinder
05-25-2005, 06:54 AM
Salut Romain,
pour répondre à ta question:
Les \ se trouvent dans confiuration->service mais sont ils toujours present dans le services.cfg ?
Tout à fait, les \ que je vois dans le champs configuration -> service -> check_command_arguments, je les retrouves dans le fichier de configuration nagios service.cfg. D'où mon problème, car cela fausse la syntaxe des arguments, et le plugin check_nt ne le supporte pas bien du tout.
Concernant ton autre proposition:
Si tu veux les enlever dans la partie configuration, rajoute des stripslashes dans la page /oreon/service.php
Je suis passé au travers de ce fichier, et je ne suis malheuresement pas à l'aise pour poser comme cela des stripslashes dans tous les coins.
Peux-tu m'aider sur ce coup là ?
Merci
Thierry
tlinder
05-27-2005, 02:07 PM
Salut Romain,
mes problèmes associés à des caractères \ se généralise.
Apparrement, selon tes indications, tu ne reproduis pas ce problèmes avec ton installation.
:?: Dans ce cas, peux-tu m'envoyer un tarball de ton tree Oreon afin que je le place dans ma situation pour voir si cela corrige mes soucis ?
Merci d'avance pour ton aide
Thierry