pam_mount problem

Zdenek Pizl z.p na linux-cd.cz
Úterý Únor 18 10:44:31 CET 2003


On Wednesday 12 of February 2003 19:01, you wrote:
> On Wed, 12 Feb 2003, Krištof Petr wrote:
> > Pamy se debugujou dost spatne. Zapnul bych debug ve vsech modulech
> > ktery potkam, zvednul uroven syslogu na *.* a nachystal si nocnimu
> > stolku zdrojaky ;-)

narouboval jsem si tam vlastni debugovaci vypisy, povolil jsem ve zdrojacich 
vsechno mozne logovani a vysledkem je zjisteni, ze problem je zde:

    if (pipe(pipefd)) {
        log("pam_mount: %s\n", "could not create pipe pair");
        return 0;
    }
    if ((child = fork()) == -1) {
        log("pam_mount: %s\n", "could not invoke helper child");
        return 0;
    }
    if (child == 0) {
        /* Child */
        close(pipefd[1]);
        if (dup2(pipefd[0], 0) == -1) {
            log("pam_mount: %s\n", "CHILD could not dup stdin");
            _exit(1);
        }
        w4rn("pam_mount: execv %s %s \n", config.command[0][PMHELPER]);
        execv(config.command[0][PMHELPER], config.command[PMHELPER] + 1);
        log("pam_mount: %s\n", "CHILD Could not execv helper child");
        log("pam_mount: CHILD command was %s\n",
            config.command[0][PMHELPER]);
        _exit(1);
    }
    /* Parent */
    w4rn("pam_mount: %s\n", "sending data to pmhelper");
    close(pipefd[0]);
    count = 0;
    while (count < sizeof(data_t)) {
        w4rn("pam_mount: %s\n", "inside write loop");
        n = write(pipefd[1],((char *) data) + count, sizeof(data_t) - count);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tady to zhuci na EPIPE. Co tak chapu, 
tak zapisuje do roury, jejiz druhy konec visi ve vzduchu.


        if (n < 0) {
            log("pam-mount: %s\n", "could not write data to child");
            close(pipefd[1]);
            kill(child, SIGKILL);
^^^^^^^^^^^^^^^^^^ a tady spacha seppuku

Proc je ten druhy konec roury nepripojeny?  To vypada, ze to dite ve forku se nevytvori ...

-- 
z.p.


Další informace o konferenci Linux