IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Java Discussion :

probleme avec jaas


Sujet :

Sécurité Java

  1. #1
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Par défaut probleme avec jaas
    salut
    j'ai integré jaas dans une application web
    je voudrait testé est ce que ca marche bien mais j'ai rencontré un probleme: j'ai configuré dans web.xml une page jsf pageSecurise.jsfdont l'accés est securisé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <security-constraint>
      <display-name>WebApp Administration</display-name>
      <web-resource-collection>
       <web-resource-name>WebApp Admin</web-resource-name>
       <url-pattern>/pages/pageSecurise.jsf</url-pattern>
       <http-method>DELETE</http-method>
       <http-method>GET</http-method>
       <http-method>POST</http-method>
       <http-method>PUT</http-method>
      </web-resource-collection>
      <auth-constraint>
       <role-name>admin</role-name>
       <role-name>other-role</role-name>
      </auth-constraint>
     </security-constraint>
    voici ma classe MyLoginModule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    public class MyLoginModule implements LoginModule {
    	private Subject subject;
    	private CallbackHandler callbackHandler;
    	private MyPrincipalName namePrincipal;
    	private String userName;
    	private boolean succeeded = false;
    	private boolean commitSucceeded = false;
    	@SuppressWarnings({ "unchecked", "unused" })
    	private Map sharedState;
    	@SuppressWarnings({ "unchecked", "unused" })
    	private Map options;
     
    	@SuppressWarnings("unchecked")
    	public void initialize(Subject subject, CallbackHandler callbackHandler,Map sharedState, Map options) 
    	{
    		this.subject = subject;
    		this.callbackHandler = callbackHandler;
    		//this.sharedState= sharedState;
    		this.options= options;
    		//debug = "true".equalsIgnoreCase((String) options.get("debug"));
    	}
     
    	public boolean login() throws LoginException {
     
    		NameCallback nameCallback = new NameCallback("user");
     
    		PasswordCallback passwordCallback = new PasswordCallback("password :",false);
    		Callback[] callbacks = new Callback[] {nameCallback,passwordCallback};
    		try {
    			callbackHandler.handle(callbacks);			
    			}
    		catch (Exception ex) 
    			{
    			 ex.printStackTrace();
    			 throw new LoginException("Exception lors de la récupération des donnés !");
    		    }
    		userName = nameCallback.getName();
    		succeeded = validateUser(userName,passwordCallback.getPassword());
    		passwordCallback.clearPassword();
     
    		return succeeded;
    	}
     
    	public boolean abort() throws LoginException {
    		if (!succeeded)
    			return false;
    		else if (succeeded && commitSucceeded)
    			logout();
    		else
    			succeeded = false;
     
    		return true;
    	}
     
    	public boolean commit() throws LoginException {
     
    		if (!succeeded) {
    			userName = null;
    			return false;
    		}
    		namePrincipal = new MyPrincipalName(userName);
    		if (!subject.getPrincipals().contains(namePrincipal)) 
    		{
    			{
    				subject.getPrincipals().add(namePrincipal);
    				System.out.println("commit done");
    			}
    		}
    		userName = null;
    		commitSucceeded = true;
    		return true;
    	}
     
    	public boolean logout() throws LoginException 
    	{
    		subject.getPrincipals().remove(namePrincipal);
    		namePrincipal = null;
    		userName = null;
    		succeeded = commitSucceeded = false;
    		return true;
    	}
     
    	private boolean validateUser(String userName, char[] password) {
     
    		return "admin".equals(userName) && "secret".equals(new String(password));
     
    	}
    }
    j'ai bien dans la methode commit ajouté un Principal admin
    mais j'obtient une erreur 403(Accés à la ressource interdit)

    je veut savoir comment se fait la verification du role:comment le serveur compare le role déclaré pour ma page jsf dans le fichier web.xml à l'aide de la balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <role-name>admin</role-name>
    et avec qu'elle valeur il comapre la valeure de sette balise

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu as déclaré ce role dans security roles

  3. #3
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    tu as déclaré ce role dans security roles
    oui ,il est bien déclaré dans la balise <security-role>
    je pense que le problème est que je ne connait pas comment le serveur récupère le nom d'utilisateur déjà authentifié dans ma page login.jsf

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu utilise quel type de realm?

  5. #5
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    tu utilise quel type de realm?
    j'utilise JAASRealm
    mais j'ai une ambiguité
    est ce qu'il est obligatoire d'utiliser un realm avec JAAS?
    tout ce que je connait est que JAAS permet de gérer les roles indépendamment du serveur utilisé; pourquoi donc utiliser de realm?

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par riadhhwajdii Voir le message
    j'utilise JAASRealm
    mais j'ai une ambiguité
    est ce qu'il est obligatoire d'utiliser un realm avec JAAS?
    tout ce que je connait est que JAAS permet de gérer les roles indépendamment du serveur utilisé; pourquoi donc utiliser de realm?
    oui, c'est obligatoire, je suppose que tu as déclaré le module dans le fichier le fichier de conf et l'ajouter au démarrage de la JVM, maintenant
    je pense que tu dois ajouter les roles dans la fonction commit, un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    java.util.Enumeration e = rolePrincipals.elements();
    		while (e.hasMoreElements()) {
    			RolePrincipal rolePrincipal = (RolePrincipal) e.nextElement();
     
    			if (!subject.getPrincipals().contains(rolePrincipal)) {
    				subject.getPrincipals().add(rolePrincipal);
    				logger.info("Added role principal");
    			}
    		}

  7. #7
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    oui, c'est obligatoire, je suppose que tu as déclaré le module dans le fichier le fichier de conf et l'ajouter au démarrage de la JVM, maintenant
    je pense que tu dois ajouter les roles dans la fonction commit, un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    java.util.Enumeration e = rolePrincipals.elements();
    		while (e.hasMoreElements()) {
    			RolePrincipal rolePrincipal = (RolePrincipal) e.nextElement();
     
    			if (!subject.getPrincipals().contains(rolePrincipal)) {
    				subject.getPrincipals().add(rolePrincipal);
    				logger.info("Added role principal");
    			}
    		}
    j'ai bien fait tout ce que tu m' suggéré
    lagrande question pour moi est comment le serveur connait le role de l'utilisateur authentifié??

    une autre chose qui me géne: je n'ai pas declaré de balise <login-config>dans le fichier web.xml;j'utilise une page de login dans laquelle j'appele mon loginModule et ensuite j'enregistre le Subject en session en cas de reussite.
    est ce que ça peut provoquer des problèmes?

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu dois ajouter ce role dans la méthode d'authentification, vu que tu utilise authentification par form, JAAS ne peux pas récupérer automatiquement les roles à toi de lui donner pour chaque son role.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RolePrincipal rolePrincipal = new RolePrincipal("admin");
    			// Ajout de l'objet dans le vecteur rolePrincipals
    rolePrincipals.addElement(rolePrincipal);

  9. #9
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    tu dois ajouter ce role dans la méthode d'authentification, vu que tu utilise authentification par form, JAAS ne peux pas récupérer automatiquement les roles à toi de lui donner pour chaque son role.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RolePrincipal rolePrincipal = new RolePrincipal("admin");
    			// Ajout de l'objet dans le vecteur rolePrincipals
    rolePrincipals.addElement(rolePrincipal);
    merci sniper mais je veut dire autre chose:dans mon fichier web.xml,
    j'ai déclaré une ressource securisé(qui est pageSecurise.jsf).
    tomcat va alors vérifier quels sont les roles qui peuvent accéder à cette ressource à partir du fichier web.xml et de la balise <role-name>
    ensuite il va identifier si l'utilisateur courant possède ce rôle:ici comment vérifie t il que si l'utilisateur possède le role demandé(ou va chercher tomcat le role de l'utilisateur)

  10. #10
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par riadhhwajdii Voir le message
    merci sniper mais je veut dire autre chose:dans mon fichier web.xml,
    j'ai déclaré une ressource securisé(qui est pageSecurise.jsf).
    tomcat va alors vérifier quels sont les roles qui peuvent accéder à cette ressource à partir du fichier web.xml et de la balise <role-name>
    ensuite il va identifier si l'utilisateur courant possède ce rôle:ici comment vérifie t il que si l'utilisateur possède le role demandé(ou va chercher tomcat le role de l'utilisateur)
    Ouii mais je pense qu'il y'a d'abord le processus d'authentification, ensuite authorization, tomcat vérifie les roles suivant la méthode de login, dans ton cas, c'est FORM avec JAAS, si tu n'ajoute pas de role dans le module tu ne sera pas autoriser à afficher la page.

  11. #11
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    Ouii mais je pense qu'il y'a d'abord le processus d'authentification, ensuite authorization, tomcat vérifie les roles suivant la méthode de login, dans ton cas, c'est FORM avec JAAS, si tu n'ajoute pas de role dans le module tu ne sera pas autoriser à afficher la page.
    j'ai essayé de modifier le realm par defaut de tomcat 6(org.apache.catalina.realm.UserDatabaseRealm)
    j'ai supprimé ce dernier et ajouter mon propre JAASRealm:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <Realm className="org.apache.catalina.realm.JAASRealm" appName="FileLogin" userClassNames="jaas.fileLogin.MyPrincipalName" roleClassNames="jaas.fileLogin.MyPrincipalRole"/>
    mon login module est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    public class MyLoginModule implements LoginModule {
    	private Subject subject;
    	private CallbackHandler callbackHandler;
    	private MyPrincipalName namePrincipal;
    	private String userName;
    	private boolean succeeded = false;
    	private boolean commitSucceeded = false;
    	@SuppressWarnings({ "unchecked", "unused" })
    	private Map sharedState;
    	@SuppressWarnings({ "unchecked", "unused" })
    	private Map options;
     
    	@SuppressWarnings("unchecked")
    	public void initialize(Subject subject, CallbackHandler callbackHandler,Map sharedState, Map options) 
    	{
    		this.subject = subject;
    		this.callbackHandler = callbackHandler;
    		//this.sharedState= sharedState;
    		this.options= options;
    		//debug = "true".equalsIgnoreCase((String) options.get("debug"));
    	}
     
    	public boolean login() throws LoginException {
     
    		NameCallback nameCallback = new NameCallback("user");
     
    		PasswordCallback passwordCallback = new PasswordCallback("password :",false);
    		Callback[] callbacks = new Callback[] {nameCallback,passwordCallback};
    		try {
    			callbackHandler.handle(callbacks);			
    			}
    		catch (Exception ex) 
    			{
    			 ex.printStackTrace();
    			 throw new LoginException("Exception lors de la récupération des donnés !");
    		    }
    		userName = nameCallback.getName();
    		succeeded = validateUser(userName,passwordCallback.getPassword());
    		passwordCallback.clearPassword();
     
    		return succeeded;
    	}
     
    	public boolean abort() throws LoginException {
    		if (!succeeded)
    			return false;
    		else if (succeeded && commitSucceeded)
    			logout();
    		else
    			succeeded = false;
     
    		return true;
    	}
     
    	public boolean commit() throws LoginException {
     
    		if (!succeeded) {
    			userName = null;
    			return false;
    		}
    		MyPrincipalRole role=new MyPrincipalRole("admin");
    		namePrincipal = new MyPrincipalName(userName);
    		if (!subject.getPrincipals().contains(namePrincipal)) 
    		{
    			{
    				subject.getPrincipals().add(namePrincipal);
    				subject.getPrincipals().add(role);
    				System.out.println("commit done");
    			}
    		}
    		userName = null;
    		commitSucceeded = true;
    		return true;
    	}
     
    	public boolean logout() throws LoginException 
    	{
    		subject.getPrincipals().remove(namePrincipal);
    		namePrincipal = null;
    		userName = null;
    		succeeded = commitSucceeded = false;
    		return true;
    	}
     
    	private boolean validateUser(String userName, char[] password) {
     
    		return "login".equals(userName) && "pwd".equals(new String(password));
     
    	}
    mais lorsque je lance tomcat puis localhost:8080 et ensuite lorsque je clique sur tomcat manager j'obtient l'erreur 403
    meme la fenetre qui doit s'afficher pour me demander le login et le mot de passe ne s'affiche pas
    une autre chose est que la methode commit de mon loginModule est appelée!!!! elle me renvoit commit done ( j'ai fait un System.out.println("commit done"); dans la methode commit)

  12. #12
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu ne passe pas pas ta page JSF de connexion? même pour le manager tu veux la même politique de sécurité de l'application?

  13. #13
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    tu ne passe pas pas ta page JSF de connexion? même pour le manager tu veux la même politique de sécurité de l'application?
    merci sniper pour votre aide
    mais maintenent ca n'a rien à avoir avec mon application ,je veut seulement changer la politique de securité de tomcat(je ne veut pas qu'il recupére le login et le mot de passe du fichier tomcat-users.xml mais je veut qu'il utilise mon propre JAAS que j'ai developpé)
    pour le probleme précédant(la boite de dialague ne s'ouvre pas) est résolu; en fait il suffit que je redémarre mon navigateur.
    mais maintenant, le probleme est que j'ai une erreur 403: je n'ai pas les droits pour consulter la page http://localhost:8080/manager/html avec mon nouveau JAASRealm malgrés que j'ai ajouté dans la methode commit de mon LoginModule le role admin pour l'utilisateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    public boolean commit() throws LoginException {
     
    		if (!succeeded) {
    			userName = null;
    			return false;
    		}
    		MyPrincipalRole role=new MyPrincipalRole("admin");
    		namePrincipal = new MyPrincipalName(userName);
     
     
    		if (!subject.getPrincipals().contains(role)) 
    		{
    			{
    				subject.getPrincipals().add(role);
    				System.out.println("add role");
    			}
    		}
    		if (!subject.getPrincipals().contains(namePrincipal)) 
    		{
    			{
    				subject.getPrincipals().add(namePrincipal);
    				System.out.println("commit done");
    			}
    		}
            System.out.println("principal1==========="+subject.getPrincipals().iterator().next().getName());
    		System.out.println("principal2==========="+subject.getPrincipals().iterator().next().getName());
    		userName = null;
    		commitSucceeded = true;
    		return true;
    	}

  14. #14
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu as modifié quel web.xml?

    et ça marche déjà avec ton application? ou c'est le premier test.

  15. #15
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    tu as modifié quel web.xml?
    j'ai pas touché maintenant web.xml mais j'ai modifier tomcat-users.xml pour supprimer le realm par defaut et la remplacer par mon JAASRealm

    Citation Envoyé par Sniper37 Voir le message

    et ça marche déjà avec ton application? ou c'est le premier test.
    j'ai laissé mon application à part (authentification marche mais non les roles )
    et je fait maintenant un test pour tomcat

  16. #16
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Il faut que tu modifie le web.xml de l'application manager dans ce cas là, le role définit par défaut est manager je pense.

  17. #17
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    Il faut que tu modifie le web.xml de l'application manager dans ce cas là, le role définit par défaut est manager je pense.
    merci infiniment sniper
    c'était tout a fait mon probleme
    une dernière demande SVP:
    dans mon cas , j'attribut les roles aux utilisateurs dans ma classe MyLoginModule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyPrincipalRole role=new MyPrincipalRole("admin");
    or cette classe est packagé dans un fichier jar et placé ensuite dans le lib de tomcat, il sera donc difficile de gérer les roles d'un utilisateur
    est ce qu'il ya un autre moyen pour déclarer les roles d'un utilisateur en dehors de cette classe?

  18. #18
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Normalement tu récupère le role de la base ou d'un fichier quand tu vérifie l'authentification.

  19. #19
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    Normalement tu récupère le role de la base ou d'un fichier quand tu vérifie l'authentification.
    comment le récupérer d'un fichier plat?

  20. #20
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu peux utiliser un fichier properties, un fichier text ou un fichier XML comme pour tomcat-users, juste tu récupère les roles d'un user, c'est de la lecture de flux, tu trouvera pas mal d'exemples dans les cours et tutoriels.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Probleme avec jaas
    Par koack dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 17/01/2011, 14h32
  2. probleme avec jaas et les permissions
    Par riadhhwajdii dans le forum Sécurité
    Réponses: 14
    Dernier message: 03/12/2009, 14h17
  3. probleme avec JAAS
    Par riadhhwajdii dans le forum Général Java
    Réponses: 1
    Dernier message: 01/10/2009, 13h09
  4. Probleme de JAAS avec JBoss
    Par amine1980 dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 17/02/2007, 19h47
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo