/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/password-prompt.c

  • Committer: Teddy Hogeborn
  • Date: 2011-03-08 19:09:03 UTC
  • Revision ID: teddy@fukt.bsnet.se-20110308190903-j499ebtb9bpk31ar
* INSTALL: Updated.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
 
25
25
#define _GNU_SOURCE             /* getline(), asprintf() */
26
26
 
27
 
#include <termios.h>            /* struct termios, tcsetattr(),
 
27
#include <termios.h>            /* struct termios, tcsetattr(),
28
28
                                   TCSAFLUSH, tcgetattr(), ECHO */
29
29
#include <unistd.h>             /* struct termios, tcsetattr(),
30
30
                                   STDIN_FILENO, TCSAFLUSH,
50
50
#include <iso646.h>             /* or, not */
51
51
#include <stdbool.h>            /* bool, false, true */
52
52
#include <inttypes.h>           /* strtoumax() */
53
 
#include <sys/stat.h>           /* struct stat, lstat(), open() */
54
 
#include <string.h>             /* strlen, rindex, memcmp */
 
53
#include <sys/stat.h>           /* struct stat, lstat(), open() */
 
54
#include <string.h>             /* strlen, rindex, memcmp */
55
55
#include <argp.h>               /* struct argp_option, struct
56
56
                                   argp_state, struct argp,
57
57
                                   argp_parse(), error_t,
67
67
const char *argp_program_version = "password-prompt " VERSION;
68
68
const char *argp_program_bug_address = "<mandos@fukt.bsnet.se>";
69
69
 
70
 
/* Needed for conflic resolution */
71
 
const char plymouthd_name[] = "plymouthd";
72
 
 
 
70
/* Needed for conflict resolution */
 
71
const char plymouth_name[] = "plymouthd";
73
72
 
74
73
static void termination_handler(int signum){
75
74
  if(quit_now){
101
100
    }
102
101
    
103
102
    char *cmdline_filename;
104
 
    ret = asprintf(&cmdline_filename, "/proc/%s/cmdline", proc_entry->d_name);
 
103
    ret = asprintf(&cmdline_filename, "/proc/%s/cmdline",
 
104
                   proc_entry->d_name);
105
105
    if(ret == -1){
106
106
      error(0, errno, "asprintf");
107
107
      return 0;
108
108
    }
109
109
    
110
 
    /* Open /proc/<pid>/cmdline  */
 
110
    /* Open /proc/<pid>/cmdline */
111
111
    cl_fd = open(cmdline_filename, O_RDONLY);
112
112
    free(cmdline_filename);
113
113
    if(cl_fd == -1){
165
165
      cmdline_base = cmdline;
166
166
    }
167
167
    
168
 
    if(strcmp(cmdline_base, plymouthd_name) != 0){
 
168
    if(strcmp(cmdline_base, plymouth_name) != 0){
 
169
      if(debug){
 
170
        fprintf(stderr, "\"%s\" is not \"%s\"\n", cmdline_base,
 
171
                plymouth_name);
 
172
      }
169
173
      free(cmdline);
170
174
      return 0;
171
175
    }
 
176
    if(debug){
 
177
      fprintf(stderr, "\"%s\" equals \"%s\"\n", cmdline_base,
 
178
              plymouth_name);
 
179
    }
172
180
    free(cmdline);
173
181
    return 1;
174
182
  }
175
 
 
 
183
  
176
184
  struct dirent **direntries;
177
185
  int ret;
178
186
  ret = scandir("/proc", &direntries, is_plymouth, alphasort);
179
187
  if (ret == -1){
180
188
    error(1, errno, "scandir");
181
189
  }
182
 
  if (ret > 0){
183
 
    return true;
184
 
  } else {
185
 
    return false;
186
 
  }
 
190
  return ret > 0;
187
191
}
188
192
 
189
193
 
271
275
 
272
276
  if (conflict_detection()){
273
277
    if(debug){
274
 
      fprintf(stderr, "Stopping %s because of conflict", argv[0]);
 
278
      fprintf(stderr, "Stopping %s because of conflict\n", argv[0]);
275
279
    }
276
280
    return EXIT_FAILURE;
277
281
  }
479
483
        break;
480
484
      }
481
485
    }
482
 
    /* if(sret == 0), then the only sensible thing to do is to retry to
483
 
       read from stdin */
 
486
    /* if(sret == 0), then the only sensible thing to do is to retry
 
487
       to read from stdin */
484
488
    fputc('\n', stderr);
485
489
    if(debug and not quit_now){
486
490
      /* If quit_now is nonzero, we were interrupted by a signal, and