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

Linux Discussion :

Date et fuseaux horaires sous linux C++


Sujet :

Linux

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Date et fuseaux horaires sous linux C++
    Bonjour;

    Je cherche à développer une application qui permet de modifier aussi bien la date et l'heure ainsi que le fuseau horaire.
    Quelles sont les méthodes à employer, sachant que l'utilisateur de l'application n'est pas root :
    - comment obtenir les fuseaux possibles ?
    - comment faire un set de l'heure et la date du système saisie par l'utilisateur ?
    - comment positionner le fuseau du système choisi par l'utilisateur ?

    En effet settimeofday n'est pas utilisable puisqu'il faut être super-utilisateur. A moins bien sûr de pouvoir récuppérer le profil autorisé au sein de l'application (donc transparent pour l'utilisateur : sans saisie de mot de passe). Dans ce cas comment pocéde-t-on ?
    J'ai essayé avec un rsh par l'intermédiaire duquel la commande "date" est appelée, mais cela ne donne pas satisfaction : pas de changement de fuseau et des problèmes si la date entrée est antérieure à la date actuelle...

    J'ai également jeté un oeil sur le code source de "timeconfig", mais la aussi des accès root sont nécessaires...

    Y aurait-il quelqu'un dans la salle pour éclairer ma lanterne ?
    lsdfr

  2. #2
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Si il faut les droits root, il faut les droits root. On n'y peut rien.

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Obtention profil
    Je me doute bien.

    Aussi n'est-il pas possible d'obtenir le profil root de façon à ce que le logiciel s'identifie comme tel afin d'executer des fonctions ou appels systèmes réservés au super-utilisateur, le tout restant transparent pour l'utilisateur ?

    Je ne pense pas être le premier à avoir besoin de régler l'heure à partir d'une application exécutée à partir d'un compte non root, comment avez-vous alors fait ?

    Cordialement;

  4. #4
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Voir si une recherche avec setuid ne te mène pas à la solution.

  5. #5
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut setuid
    En effet cela pourrait peut-être une solution.

    Donc j'ai fait un setuid sur mon exe, mais celui-ci ne trouve plus les bibliothèques partagées qui elles se trouvent dans un autre répertoire. En effet je lance mon exe par l'intermédiaire d'un batch qui positionne des variables d'environnement, telle que celle du chemin des bibliothèques.
    Lorsque j'exécute mon appli en tant qu'utilisateur ou root j'ai le même message d'erreur à savoir : "error while loading shared libraries : can not open shared object file : no such file or directory".

    Une idée?

  6. #6
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Dans ton script de lancement, tu peux faire un echo de ta variable d'environnement, et vérifier que tu l'as bien orthographiée (export LD_LIBRARY_PATH=/foo/bar:$LD_LIBRARY_PATH).

    Puis tu peux aussi essayer de taper "ldd /mon/application" pour voir quelles librairies sont introuvables.

  7. #7
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut path
    L'appli est lancée par un batch qui contient les variables d'environnement (en particulier celles pour ILOG VIEWS).
    Le tout fonctionne très bien.
    C'est à partir du moment où je positionne le setuid que les bibliothèques ILOG ne sont plus trouvées... Que ce soit en tant que root ou qu'utilisateur.
    Pour positionner le setuid j'ai fait : $chmod +s mon_exe

  8. #8
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Ca y est
    Enfin je prends un peu de temps pour expliquer la solution retenue et testée

    Utilisation de la commande "zic" pour le changement de fuseau en lui passant en paramètre un des fuseaux du répertoire "/usr/share/zoneinfo/Etc", donc GMT+/-xx. Attention avec ces fichiers, en effet la norme utilisée est SQL donc GMT-3 signifie UTC+3
    Utilisation de la commande "date" pour la mise à l'heure si plus d'une seconde d'écart entre la valeur reçue ou entrée et la valeur en cours sur le système. De plus le hard travaille avec l'heure UTC
    Ce n'est pas fini : ces deux commandes sont exécutées depuis l'application par l'intermédiaire de la commande "sudo". Pour cela il faut placer dans "/etc/sudoers" les lignes autorisant n'importe quel utilisateur a exécuter les commandes ci-dessus.
    De façon à palier le problème des timers qui sont exécutés dans l'appli, il faut bien sûr tous les arrêter ou suspendre et les redémarrer... Pour cela tous mes timers dérivent de ma propre classe de timer dans laquelle la com me permet un stop and go automatique par envoi d'un simple message

    Merci de votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Lazarus] [0.9.28.2] Date en français sous Windows et en anglais sous Linux
    Par G-Assfeld dans le forum Lazarus
    Réponses: 3
    Dernier message: 27/11/2010, 07h18
  2. Récupérer la date et l'heure système sous Linux
    Par Marie.B dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 24/07/2009, 15h21
  3. Réponses: 1
    Dernier message: 23/02/2009, 02h18
  4. Réponses: 23
    Dernier message: 07/08/2008, 11h52
  5. Gestion des fuseaux horaires(time.h et timezone)sous Linux
    Par adesport dans le forum Bibliothèque standard
    Réponses: 3
    Dernier message: 17/07/2008, 11h59

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