/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to plugins.d/passprompt.c

  • Committer: Teddy Hogeborn
  • Date: 2008-08-04 16:05:01 UTC
  • mfrom: (24.1.15 mandos)
  • Revision ID: teddy@fukt.bsnet.se-20080804160501-woej7nf8amgrbc2e
* plugins.d/mandosclient.c (start_mandos_communication): Change "to"
                                    to be a union.  All users changed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
/*
3
3
 * Passprompt - Read a password from the terminal and print it
4
4
 *
5
 
 * Copyright © 2007-2008 Teddy Hogeborn and Björn Påhlsson.
 
5
 * Copyright © 2007-2008 Teddy Hogeborn & Björn Påhlsson
6
6
 * 
7
7
 * This program is free software: you can redistribute it and/or
8
8
 * modify it under the terms of the GNU General Public License as
23
23
 */
24
24
 
25
25
#define _GNU_SOURCE             /* getline() */
26
 
#define _FORTIFY_SOURCE 2
27
26
 
28
27
#include <termios.h>            /* struct termios, tcsetattr(),
29
28
                                   TCSAFLUSH, tcgetattr(), ECHO */
50
49
volatile bool quit_now = false;
51
50
bool debug = false;
52
51
 
53
 
void termination_handler(__attribute__((unused))int signum){
 
52
static void termination_handler(__attribute__((unused))int signum){
54
53
  quit_now = true;
55
54
}
56
55
 
103
102
  
104
103
  sigemptyset(&new_action.sa_mask);
105
104
  sigaddset(&new_action.sa_mask, SIGINT);
106
 
  sigaddset(&new_action.sa_mask, SIGQUIT);
107
105
  sigaddset(&new_action.sa_mask, SIGHUP);
108
106
  sigaddset(&new_action.sa_mask, SIGTERM);
109
107
  sigaction(SIGINT, NULL, &old_action);
110
108
  if (old_action.sa_handler != SIG_IGN)
111
109
    sigaction(SIGINT, &new_action, NULL);
112
 
  sigaction(SIGQUIT, NULL, &old_action);
113
 
  if (old_action.sa_handler != SIG_IGN)
114
 
    sigaction(SIGQUIT, &new_action, NULL);
115
110
  sigaction(SIGHUP, NULL, &old_action);
116
111
  if (old_action.sa_handler != SIG_IGN)
117
112
    sigaction(SIGHUP, &new_action, NULL);
151
146
      status = EXIT_SUCCESS;
152
147
      break;
153
148
    }
154
 
    // ret == 0 makes no other sence than to retry to read from stdin
155
149
    if (ret < 0){
156
150
      if (errno != EINTR and not feof(stdin)){
157
151
        perror("getline");
159
153
        break;
160
154
      }
161
155
    }
 
156
    /* if(ret == 0), then the only sensible thing to do is to retry to
 
157
       read from stdin */
162
158
    fputc('\n', stderr);
163
159
  }
164
 
 
 
160
  
165
161
  if (debug){
166
162
    fprintf(stderr, "Restoring terminal attributes\n");
167
163
  }
168
164
  if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &t_old) != 0){
169
165
    perror("tcsetattr+echo");
170
166
  }
171
 
 
 
167
  
172
168
  if (debug){
173
169
    fprintf(stderr, "%s is exiting\n", argv[0]);
174
170
  }