-
- // Close write end of stdin, and set it to #0
- close(stdin_pair[1]); dup2(stdin_pair[0], 0);
- // 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);
- perror("execl");
- exit(-1);
- }
-
- child_stdin = fdopen(stdin_pair[1], "w");
- close(stdin_pair[0]); // child stdin read
- close(stdout_pair[1]); // child stdout write
-
- if( giDoor_ChildStatus || read(stdout_pair[0], buf, 512) < 0) {
- #if DEBUG
- printf("Door_DoDispense: fread fail\n");
- #endif
- return -1;
- }
-
- // Send password
- if( giDoor_ChildStatus || fputs(gsDoor_Password, child_stdin) <= 0 ) {
- #if DEBUG
- printf("Door_DoDispense: fputs password\n");
- #endif
- return -1;
- }
- fputs("\n", child_stdin);
-
-
- #if DEBUG
- printf("Door_DoDispense: Door unlock\n");
- #endif
-
- // ATH1 - Unlock door
- if( giDoor_ChildStatus || fputs("ATH1\n", child_stdin) <= 0) {
- #if DEBUG
- printf("Door_DoDispense: fputs unlock\n");
- #endif
- return -1;
+ struct termios info;
+ tcgetattr(door_serial_handle, &info);
+ info.c_cflag &= ~CLOCAL;
+ tcsetattr(door_serial_handle, TCSANOW, &info);