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