Vincent ORDY a écrit 105 commentaires

  • # getpwnam() et getgrnam().

    Posté par  . En réponse au message comment récupérer un uid et gid à partir d'un nom d'utilisateur ou de groupe. Évalué à 3.

    Bonjour,

    Regarde du côté des fonctions getpwnam() et getgrnam().

    Bonne chance
  • # ifrename

    Posté par  . En réponse au message changement de nom des cartes réseaux. Évalué à 1.

    Bonjour,

    Utilisez ifrename.

    Un tuto pour Debian (qui doit être facilement adaptable pour fedora) : http://www.debian-administration.org/articles/502
  • [^] # Re: requête SQL

    Posté par  . En réponse au message requête sql. Évalué à 1.

    Pourtant je l'ai testé sur une serveur MySQL 5.0.32-Debian_7etch1-log et elle marchait !
  • # .

    Posté par  . En réponse au message while boucle + 1. Évalué à 2.

    Première solution:

    $current = mysql_fetch_assoc($requete);
    if ($current) {
        while($next = mysql_fetch_assoc($requete))
        {
            echo 'nom:'.$current['nom'].'
                    position:'.$current['position'].'
                    id;'.$current['id'].' ';
            echo 'prochain:'$next['nom'].' '.$next['position']."\n";
            $current = &$next;
        }
    }


    Deuxième solution: utiliser mysql_data_seek
  • [^] # Re: requête SQL

    Posté par  . En réponse au message requête sql. Évalué à 3.

    Oops, j'ai oublié le MAX au 2ème SELECT ...

    SELECT dept, salary, lastname
    FROM employee A
    WHERE (dept, salary) =
        (SELECT dept, MAX(salary)
        FROM employee B
        WHERE A.deptv = B.dept
        GROUP BY dept)
  • # Re: requête SQL

    Posté par  . En réponse au message requête sql. Évalué à 2.

    C'est pas très beau, mais ça devrait marcher :


    SELECT dept, salary, lastname
    FROM employee A
    WHERE (dept, salary) =
        (SELECT dept, salary
        FROM employee B
        WHERE A.deptv = B.dept
        GROUP BY dept)


    Bonne chance
  • [^] # Re: .

    Posté par  . En réponse au message popen / pclose. Évalué à 1.

    utilise une authentification SSH par clé, soit sans passphrase (c'est pas bien), soit avec une passphrase (et dans ce cas là tu peux utiliser ssh-agent pour la taper une seule fois, et en dehors du programme)

    Et là, pas de problème de mot de passe.
  • [^] # Re: .

    Posté par  . En réponse au message popen / pclose. Évalué à 1.

    donc je peux pas faire grand chose ?

    Si, lire le man de SSH.

    -> utilise une authentification SSH par clé, soit sans passphrase (c'est pas bien), soit avec une passphrase (et dans ce cas là tu peux utiliser ssh-agent pour la taper une seule fois, et en dehors du programme)

    -> regarde du côté des paramètres -f et -n de SSH :

    -f
    Requests ssh to go to background just before command execution. This is useful if ssh is going to ask for passwords or passphrases, but the user wants it in the background. This implies -n. The recommended way to start X11 programs at a remote site is with something like ssh -f host xterm.
    -n
    Redirects stdin from /dev/null (actually, prevents reading from stdin). This must be used when ssh is run in the background. A common trick is to use this to run X11 programs on a remote machine. For example, ssh -n shadows.cs.hut.fi emacs & will start an emacs on shadows.cs.hut.fi, and the X11 connection will be automatically forwarded over an encrypted channel. The ssh program will be put in the background. (This does not work if ssh needs to ask for a password or passphrase; see also the -f option.)
  • [^] # Re: .

    Posté par  . En réponse au message popen / pclose. Évalué à 1.

    C'est parce que ssh lit directement sur tty.


    open("/dev/tty", O_RDWR) = 6
    write(6, "vince@darkangel\'s password: ", 32vince@darkangel's password: ) = 32
    read(6, <unfinished ...>
  • [^] # Re: .

    Posté par  . En réponse au message popen / pclose. Évalué à 1.

    Une application en particulier ? Je viens de tester avec passwd, ça marche parfaitement chez moi !


    else if (Pid == 0) // Child
    {
    close(FdCOut[0]);
    close(FdCErr[0]);
    WDup(FdCOut[1], STDOUT);
    WDup(FdCErr[1], STDERR);
    if (close(STDIN_FILENO) != 0)
    exit(EXIT_FAILURE);

    execl("/usr/bin/passwd", "passwd", (char *) NULL);

    perror("Erreur execl");
    exit(EXIT_FAILURE);
    }



    $ ./a.out
    OUT
    Changing password for vince


    ERR
    (current) UNIX password: passwd : Conversation error
    passwd: password unchanged


    OK, code sortie: 10
    $
  • [^] # Re: .

    Posté par  . En réponse au message popen / pclose. Évalué à 1.

    Par exemple, ne peut on pas "fermer" stdin de ce process ?


    Bien sûr ! Il suffit de mettre dans le fils, avant le execl() :

    close(STDIN_FILENO);
  • # .

    Posté par  . En réponse au message popen / pclose. Évalué à 5.

    Pour le moment j'ai trouvé une solution avec popen+close qui me permet de recuperer le code de retour, en revanche, pour stderr et stdout, je ne vois pas comment les recuperer separement.

    Je viens d'écrire rapidement (comprendre pas très propre) un code sur lequel tu peux te baser, si tu as des questions n'hésite pas !


    #include <iostream>
    #include <string>

    #include <sys/types.h>
    #include <sys/wait.h>
    #include <unistd.h>

    #define STDOUT 1
    #define STDERR 2

    using namespace std;

    void WPipe(int Fd[2])
    {
        if (pipe(Fd) < 0)
        {
            perror("Erreur pipe");
            exit(EXIT_FAILURE);
        }
        return;
    }

    void WDup(int oldfd, int newfd)
    {
        if (dup2(oldfd, newfd) < 0)
        {
            perror("Erreur dup2");
            exit(EXIT_FAILURE);
        }
    }

    int main()
    {
        int status;
        int FdCOut[2];
        int FdCErr[2];
        pid_t Pid;

        WPipe(FdCErr);
        WPipe(FdCOut);
        Pid = fork();

        if (Pid == -1)
        {
            perror("Erreur fork");
            exit(EXIT_FAILURE);
        }
        else if (Pid == 0)  // Child
        {
            close(FdCOut[0]);
            close(FdCErr[0]);
            WDup(FdCOut[1], STDOUT);
            WDup(FdCErr[1], STDERR);

            execl("./test.run", "a", (char *) NULL);

            perror("Erreur execl");
            exit(EXIT_FAILURE);
        }

        close(FdCOut[1]);
        close(FdCErr[1]);

        // Ici mettre la lecture depuis FdCOut[0] et FdCErr[0]
        char tmp[1024];
        string output = "";
        while (read(FdCOut[0], tmp, 1024) > 0)
        {
            output.append(tmp);
        }
        std::cout << output << endl;

        waitpid(Pid, &status, 0);

        if (!WIFEXITED(status))
        {
            std::cerr << "Erreur fils\n";
            exit(EXIT_FAILURE);
        }

        cout << "OK, code sortie: "
              << WEXITSTATUS(status)
              << "\n";

        return 0;
    }
  • # /etc/crontab

    Posté par  . En réponse au message Comment paramètrer les CRONTAB. Évalué à 3.

    Dans /etc/crontab tu dois avoir quelque chose comme

    # m h dom mon dow user command
    17 * * * * root cd / && run-parts --report /etc/cron.hourly
    25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
    47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
    52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )


    Il te suffit de changer les heures.

    Crond rechargera même tout seul le fichier une fois que tu l'auras modifié sans redémarrage.
  • # blocage des appels sortants

    Posté par  . En réponse au message à l'aide téléphonie. Évalué à 2.

    De plus, je voudrais savoir comment faire pour interdire les appels vers les portables et l"internationnal.


    Tu peux le faire directement avec Free :

    Activer : composer le *341*0000#
    Bloquer l'international : *341*0000*00#
    Bloquer les portables : *341*0000*06#

    Il est préférable de changer le code secret aussi, 0000 étant trop classique (*34*0000*nouveau code#)

    Si tu veux bloquer tous les appels payants, tu peux aussi composer :
    *341*0000*081#
    *341*0000*082#
    *341*0000*089#
    *341*0000*32# (numéro courts)
    *341*0000*36# (numéro courts)
    *341*0000*39# (numéro courts)
    *341*0000*118# (annuaires)
  • # Unable to determine our source address: This computer has an invalid IP

    Posté par  . En réponse au message FREEBOXTV sur PCBSD -> Utilisation PCBSD/VLC/FreeboxTV. Évalué à 1.

  • [^] # Re: C'est comme le monsieur il dit

    Posté par  . En réponse au message shell (bash) et C. Évalué à 2.

    Il dit qu'il faut utiliser

    echo printf\(\"erreur de calcul pour l\'appel $fonction\($params\)\"\)\;>>./TestCoutEtalageSaisonnier.c
  • # Re: le gestionnairede media de kde n'est pas actif

    Posté par  . En réponse au message le gestionnairede media de kde n'est pas actif. Évalué à 1.

    menu K > Centre de configuration de KDE > composants de KDE > gestionnaire de services

    Vérifies que "gestionnaire de média KDED" est "en fonctionnement".
  • # Re: transfert de fichier ou dossier vers disque dur

    Posté par  . En réponse au message transfert de fichier ou dossier vers disque dur. Évalué à 1.

    Bonjour,

    Quel est le format des partitions de stockage ? Ça ne serait pas du NTFS par hasard ?
  • [^] # Re: OpenMesh

    Posté par  . En réponse au message OpenMesh. Évalué à 1.

    Bonjour,

    Dans acgmake, dans le fichier configs/config.Linux (prendre celui qui correspond à votre OS bien sûr), j'ai ceci :

    QT_CFLAGS := -DQT_CLEAN_NAMESPACE -DQT_NO_COMPAT -DQT_THREAD_SUPPORT
    QT_LIBS := qt-mt
    QT_INCDIR := /usr/include/qt3
    QT_LIBDIR := /usr/lib
    MOC := /usr/bin/moc
    UIC := /usr/bin/uic


    Vous devriez donc pouvoir l'adapter à votre configuration.
  • [^] # Re: OpenMesh

    Posté par  . En réponse au message OpenMesh. Évalué à 2.

    Vous pouvez donner la sortie complète ? Il doit y avoir une erreur plus haut.

    Chez moi ça marche :


    ...
    Building global library -> Debian64_gcc4.0_dbg/libOpenMesh_Tools.so

    make[1]: quittant le répertoire « /tmp/OpenMesh/Tools »
    make[1]: entrant dans le répertoire « /tmp/OpenMesh/Apps »
    make[2]: entrant dans le répertoire « /tmp/OpenMesh/Apps/mconvert »

    Compile mconvert.cc -> Debian64_gcc4.0_dbg/mconvert.o

    Build executable Debian64_gcc4.0_dbg/mconvert.o -> Debian64_gcc4.0_dbg/mconvert

    make[2]: quittant le répertoire « /tmp/OpenMesh/Apps/mconvert »
    ...
  • # Re: OpenMesh

    Posté par  . En réponse au message OpenMesh. Évalué à 1.


    open.o: In function `OpenMesh::BaseProperty::~BaseProperty()':
    open.cpp:(.text._ZN8OpenMesh12BasePropertyD2Ev[OpenMesh::BaseProperty::~BaseProperty()]+0x7): undefined reference to `vtable for OpenMesh::BaseProperty'


    open.o: In function `OpenMesh::BaseProperty::BaseProperty(OpenMesh::BaseProperty const&)':
    open.cpp:(.text._ZN8OpenMesh12BasePropertyC2ERKS0_[OpenMesh::BaseProperty::BaseProperty(OpenMesh::BaseProperty const&)]+0x7): undefined reference to `vtable for OpenMesh::BaseProperty'


    open.o: In function `OpenMesh::BaseProperty::BaseProperty(std::basic_string<char, std::char_traits, std::allocator > const&)':
    open.cpp:(.text._ZN8OpenMesh12BasePropertyC2ERKSs[OpenMesh::BaseProperty::BaseProperty(std::basic_string<char, std::char_traits, std::allocator > const&)]+0x7): undefined reference to `vtable for OpenMesh::BaseProperty'

    open.o:(.rodata._ZTVN8OpenMesh9PropertyTINS_7VectorTIfLi3EEEEE[vtable for OpenMesh::PropertyT<OpenMesh::VectorT<float, 3> >]+0x28): undefined reference to `OpenMesh::BaseProperty::stats(std::basic_ostream<char, std::char_traits >&) const'

    open.o:(.rodata._ZTIN8OpenMesh9PropertyTINS_7VectorTIfLi3EEEEE[typeinfo for OpenMesh::PropertyT<OpenMesh::VectorT<float, 3> >]+0x8): undefined reference to `typeinfo for OpenMesh::BaseProperty'


    Vous n'avez pas défini toutes les fonctions déclarées dans BaseProperty. Vérifiez qu'il y a bien le code pour les constructeurs, le destructeur, et la fonction OpenMesh::BaseProperty::stats(std::basic_ostream<char, std::char_traits >&) const

    Par hasard, vous n'essayeriez pas d'utiliser une classe abstraite ?


    open.o: In function `void OpenMesh::BaseProperty::check_and_set_persistent<OpenMesh::VectorT<float, 3> >(bool)':
    open.cpp:(.text._ZN8OpenMesh12BaseProperty24check_and_set_persistentINS_7VectorTIfLi3EEEEEvb[void OpenMesh::BaseProperty::check_and_set_persistent<OpenMesh::VectorT<float, 3> >(bool)]+0x39): undefined reference to `omerr()'


    Ça paraît plutôt clair, il ne trouve pas omerr().
  • # Re:

    Posté par  . En réponse au message apt-ouille !. Évalué à 7.

    Bonjour,

    Essayez de supprimer les fichiers de cache de apt :
    # rm /var/cache/apt*.bin

    ( comme donné sur http://forum.ubuntu-fr.org/viewtopic.php?id=57288 et http://www.developpez.net/forums/showthread.php?p=1660130 )
  • # .

    Posté par  . En réponse au message bash_profile ou autre chose ....... Évalué à 2.

    Bonjour,

    Regarde dans ton fichier de config de Apache du site (dans quelque chose comme /etc/apache2/sites-enabled/), il se peut que tu croises "php_admin_value open_basedir".

    Pour ce qui est de bash_profile, ça n'a rien à voir, PHP n'ouvre pas de shell !
  • [^] # Re: re

    Posté par  . En réponse au message audit système linux. Évalué à 2.

    package net-snmp-utils

    Sur http://fr2.rpmfind.net//linux/RPM/fedora/devel/i386/net-snmp(...) on voit

    Files

    /usr/bin/encode_keychange
    /usr/bin/fixproc
    /usr/bin/ipf-mod.pl
    /usr/bin/mib2c-update
    /usr/bin/snmpbulkget
    /usr/bin/snmpbulkwalk
    /usr/bin/snmpconf
    /usr/bin/snmpdelta
    /usr/bin/snmpdf
    /usr/bin/snmpget
    /usr/bin/snmpgetnext
    /usr/bin/snmpinform
    /usr/bin/snmpnetstat
    /usr/bin/snmpset
    /usr/bin/snmpstatus
    /usr/bin/snmptable
    /usr/bin/snmptest
    /usr/bin/snmptranslate
    /usr/bin/snmptrap
    /usr/bin/snmpusm
    /usr/bin/snmpvacm
    /usr/bin/snmpwalk
    ...
  • [^] # Re: re

    Posté par  . En réponse au message audit système linux. Évalué à 1.

    Sur Debian par exemple, snmpget et snmpwalk sont dans le package snmp alors que le démon est dans le package snmpd

    Il doit y avoir quelque chose de similaire sur votre distribution. Laquelle est-ce ?