From: John Hodge Date: Sat, 19 Feb 2011 09:48:25 +0000 (+0800) Subject: Waiting for llogin? X-Git-Url: https://git.ucc.asn.au/?p=tpg%2Fopendispense2.git;a=commitdiff_plain;h=27821403db9a9488cc508899af92f90c9bbade34 Waiting for llogin? --- diff --git a/src/server/handler_door.c b/src/server/handler_door.c index fe8d1d9..b2c6c2b 100644 --- a/src/server/handler_door.c +++ b/src/server/handler_door.c @@ -17,9 +17,8 @@ #include #include #include -#if !USE_POPEN -# include -#endif +#include +#include #define DOOR_UNLOCKED_DELAY 10 // 10 seconds before it re-locks @@ -132,7 +131,8 @@ int Door_DoDispense(int User, int Item) // Close read end of stdout, and set it to #1 close(stdout_pair[0]); dup2(stdout_pair[1], 1); - execl("/bin/sh", "sh", "-c", "llogin door -w-", NULL); + //execl("/bin/sh", "sh", "-c", "llogin door -w-", NULL); + execl("/usr/bin/llogin", "llogin" "door" "-w-", NULL); perror("execl"); exit(-1); } @@ -146,7 +146,9 @@ int Door_DoDispense(int User, int Item) if( giDoor_ChildStatus || (len = read(stdout_pair[0], buf, 512)) < 0) { #if DEBUG - printf("Door_DoDispense: fread fail\n"); + int child_exit; + waitpid(childPid, &child_exit, 0); + printf("Door_DoDispense: fread fail (child status %i)\n", child_exit); #endif return -1; } @@ -160,7 +162,9 @@ int Door_DoDispense(int User, int Item) // Send password if( giDoor_ChildStatus || fputs(gsDoor_Password, child_stdin) <= 0 ) { #if DEBUG - printf("Door_DoDispense: fputs password\n"); + int child_exit; + waitpid(childPid, &child_exit, 0); + printf("Door_DoDispense: fputs password fail (child status %i)\n", child_exit); #endif return -1; } @@ -187,8 +191,8 @@ int Door_DoDispense(int User, int Item) printf("Door_DoDispense: Door re-lock\n"); #endif - // Re-lock the door - if( giDoor_ChildStatus || fputs("ATH0\n", child_stdin) == 0 ) { + // Re-lock the door (and quit llogin) + if( giDoor_ChildStatus || fputs("ATH0\n\x1D", child_stdin) == 0 ) { #if DEBUG printf("Door_DoDispense: fputs lock\n"); #endif