/mandos/release

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

« back to all changes in this revision

Viewing changes to plugins.d/usplash.c

* plugins.d/splashy.c (main): Do not abort if a process vanishes while
                              investigating it.
* plugins.d/usplash.c (main): - '' -  Also removed unnecessary code.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*  -*- coding: utf-8 -*- */
 
2
/*
 
3
 * Usplash - Read a password from usplash and output it
 
4
 * 
 
5
 * Copyright © 2008,2009 Teddy Hogeborn
 
6
 * Copyright © 2008,2009 Björn Påhlsson
 
7
 * 
 
8
 * This program is free software: you can redistribute it and/or
 
9
 * modify it under the terms of the GNU General Public License as
 
10
 * published by the Free Software Foundation, either version 3 of the
 
11
 * License, or (at your option) any later version.
 
12
 * 
 
13
 * This program is distributed in the hope that it will be useful, but
 
14
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
16
 * General Public License for more details.
 
17
 * 
 
18
 * You should have received a copy of the GNU General Public License
 
19
 * along with this program.  If not, see
 
20
 * <http://www.gnu.org/licenses/>.
 
21
 * 
 
22
 * Contact the authors at <https://www.fukt.bsnet.se/~belorn/> and
 
23
 * <https://www.fukt.bsnet.se/~teddy/>.
 
24
 */
 
25
 
1
26
#define _GNU_SOURCE             /* asprintf() */
2
27
#include <signal.h>             /* sig_atomic_t, struct sigaction,
3
28
                                   sigemptyset(), sigaddset(), SIGINT,
67
92
  }
68
93
  
69
94
  size_t written = 0;
 
95
  ssize_t sret = 0;
70
96
  while(not interrupted_by_signal and written < cmd_line_len){
71
 
    ret = write(fifo_fd, cmd_line + written,
72
 
                cmd_line_len - written);
73
 
    if(ret == -1){
 
97
    sret = write(fifo_fd, cmd_line + written,
 
98
                 cmd_line_len - written);
 
99
    if(sret == -1){
74
100
      if(errno != EINTR or interrupted_by_signal){
75
101
        int e = errno;
76
102
        close(fifo_fd);
81
107
        continue;
82
108
      }
83
109
    }
84
 
    written += (size_t)ret;
 
110
    written += (size_t)sret;
85
111
  }
86
112
  free(cmd_line_alloc);
87
113
  do{
167
193
        struct stat exe_stat;
168
194
        ret = lstat(exe_link, &exe_stat);
169
195
        if(ret == -1){
 
196
          if(errno == ENOENT){
 
197
            free(exe_link);
 
198
            continue;
 
199
          }
170
200
          perror("lstat");
171
201
          free(exe_link);
172
202
          free(prompt);
182
212
        
183
213
        sret = readlink(exe_link, exe_target, sizeof(exe_target));
184
214
        free(exe_link);
185
 
        if(sret == -1){
186
 
          continue;
187
 
        }
188
215
      }
189
216
      if((sret == ((ssize_t)sizeof(exe_target)-1))
190
217
         and (memcmp(usplash_name, exe_target,