Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/10/2007, à 17:15

antoinexp

Les variables d'environnements, sont-elles sous exploitées ?

Bonjour ! smile

Comme vous le savez tous, linux permet d'utiliser des variables d'environnements, accessibles partout, par exemple :

05:47:37 antoinexp@antoinexp-laptop 3 [~] $
> echo $USER
antoinexp

De plus, il est aussi possible de récupérer déclarer ces variables dans vos programmes en C ou en C++ grâce aux fonctions :

char *getenv (const char *name);
int setenv (const char *name, const char *value, int overwrite);

La  fonction getenv() recherche dans la liste des variables d’environnement une chaîne correspondant à celle pointée par name.
       Les chaînes sont de la forme nom = valeur.

La  fonction  setenv()  ajoute  la variable name dans l’environnement, en lui attribuant la valeur value, si name n’existe pas
       encore. Si name existe déjà dans l’environnement, alors sa valeur est modifiée en value si overwrite est non  nul ;  si  over‐
       write vaut zéro, la valeur de name n’est pas modifiée

Donc petit exemple en C, pour récupérer et afficher le nom d'utilisateur d'un linuxien :


#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argh[])
{
	char * pseudo = getenv("USER");

	printf("Bonjour %s !\n", pseudo);

	return 0;
}
Bonjour antoinexp !

Imaginons que je programme un lecteur audio, je pourrais faire ceci :

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argh[])
{
	char currentMusic[] = "Mika - Take It Easy";

	setenv("$CURRENTMUSIC", currentMusic, 20) == 0)

	return 0;
}

Et ainsi, n'importe qui pourrait faire un script afin de récupérer ce qu'il écoute dans un script shell, envoyer ces informations sur un site web, etc ....

Pourquoi nous n'utilisons pas ceci ? hmm

Hors ligne

#2 Le 17/10/2007, à 17:38

Watchwolf

Re : Les variables d'environnements, sont-elles sous exploitées ?

antoinexp a écrit :

Bonjour ! smile

Comme vous le savez tous, linux permet d'utiliser des variables d'environnements, accessibles partout, par exemple :

05:47:37 antoinexp@antoinexp-laptop 3 [~] $
> echo $USER
antoinexp

De plus, il est aussi possible de récupérer déclarer ces variables dans vos programmes en C ou en C++ grâce aux fonctions :

char *getenv (const char *name);
int setenv (const char *name, const char *value, int overwrite);

La  fonction getenv() recherche dans la liste des variables d’environnement une chaîne correspondant à celle pointée par name.
       Les chaînes sont de la forme nom = valeur.

La  fonction  setenv()  ajoute  la variable name dans l’environnement, en lui attribuant la valeur value, si name n’existe pas
       encore. Si name existe déjà dans l’environnement, alors sa valeur est modifiée en value si overwrite est non  nul ;  si  over‐
       write vaut zéro, la valeur de name n’est pas modifiée

Donc petit exemple en C, pour récupérer et afficher le nom d'utilisateur d'un linuxien :


#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argh[])
{
	char * pseudo = getenv("USER");

	printf("Bonjour %s !\n", pseudo);

	return 0;
}
Bonjour antoinexp !

Imaginons que je programme un lecteur audio, je pourrais faire ceci :

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argh[])
{
	char currentMusic[] = "Mika - Take It Easy";

	setenv("$CURRENTMUSIC", currentMusic, 20) == 0)

	return 0;
}

Et ainsi, n'importe qui pourrait faire un script afin de récupérer ce qu'il écoute dans un script shell, envoyer ces informations sur un site web, etc ....

Pourquoi nous n'utilisons pas ceci ? hmm

il y a plusieurs raisons, par ex si ton lecteur de musique plante, bah ta variable aura tjrs une valeur alors que ...

Et Dbus sert justement à partager des informations entre applications.

Hors ligne

#3 Le 17/10/2007, à 22:19

Link31

Re : Les variables d'environnements, sont-elles sous exploitées ?

En ce qui concerne le getenv(), c'est parce que les variables d'environnement ne sont pas sécurisées. Les utiliser pour communiquer entre processus, c'est comme envoyer quelqu'un d'une maison à une autre en passant par un quartier chaud. N'importe quel utilisateur malintentionné peut modifier les variables en cours de route, pour exploiter des failles de débordement de tampon. Sous Linux, on a l'habitude de faire des programmes sécurisés.
Et il existe des fonctions dédiées pour récupérer le nom d'utilisateur, qui ne sont pas soumises aux aléas du shell.

Pour le setenv(), c'est parce qu'on ne peut pas se fier au shell. Il peut gérer les variables d'environnement comme il le veut, mais le programme doit continuer à fonctionner de la même façon. D'ailleurs, en C, rien n'indique qu'un shell tourne en arrière-plan.
C'est plus "standard" d'envoyer les informations dans la sortie standard, qu'on est assuré de pouvoir utiliser (par la norme du C). Rien n'empêche ensuite un shell de placer les informations dans une variable d'environnement comme ça le chante. De plus, la sortie standard permet d'utiliser les redirections su shell, alors que le setenv() ne le permet pas directement.

Dernière modification par Link31 (Le 17/10/2007, à 22:20)

Hors ligne