1
1
/*  -*- coding: utf-8 -*- */
 
3
 
 * Plymouth - Read a password from Plymouth and output it
 
 
3
 * Usplash - Read a password from usplash and output it
 
5
 
 * Copyright © 2010-2011 Teddy Hogeborn
 
6
 
 * Copyright © 2010-2011 Björn Påhlsson
 
 
5
 * Copyright © 2010 Teddy Hogeborn
 
 
6
 * Copyright © 2010 Björn Påhlsson
 
8
8
 * This program is free software: you can redistribute it and/or
 
9
9
 * modify it under the terms of the GNU General Public License as
 
 
77
77
  const char *const cryptsource = getenv("cryptsource");
 
78
78
  const char *const crypttarget = getenv("crypttarget");
 
79
 
  const char prompt_start[] = "Unlocking the disk";
 
80
 
  const char prompt_end[] = "Enter passphrase";
 
 
79
  const char prompt_start[] = "Enter passphrase to unlock the disk";
 
82
81
  if(cryptsource == NULL){
 
83
82
    if(crypttarget == NULL){
 
84
 
      ret = asprintf(&prompt, "%s\n%s", prompt_start, prompt_end);
 
 
83
      ret = asprintf(&prompt, "%s: ", prompt_start);
 
86
 
      ret = asprintf(&prompt, "%s (%s)\n%s", prompt_start,
 
87
 
                     crypttarget, prompt_end);
 
 
85
      ret = asprintf(&prompt, "%s (%s): ", prompt_start,
 
90
89
    if(crypttarget == NULL){
 
91
 
      ret = asprintf(&prompt, "%s %s\n%s", prompt_start, cryptsource,
 
 
90
      ret = asprintf(&prompt, "%s %s: ", prompt_start, cryptsource);
 
94
 
      ret = asprintf(&prompt, "%s %s (%s)\n%s", prompt_start,
 
95
 
                     cryptsource, crypttarget, prompt_end);
 
 
92
      ret = asprintf(&prompt, "%s %s (%s): ", prompt_start,
 
 
93
                     cryptsource, crypttarget);
 
 
148
146
    char **new_argv = NULL;
 
151
 
    for (; argv[i]!=NULL; i++){
 
 
149
    for (; argv[i]!=(char *)NULL; i++){
 
152
150
      tmp = realloc(new_argv, sizeof(const char *) * ((size_t)i + 1));
 
153
151
      if (tmp == NULL){
 
154
152
        error(0, errno, "realloc");
 
 
156
      new_argv = (char **)tmp;
 
159
157
      new_argv[i] = strdup(argv[i]);
 
 
159
    new_argv[i] = (char *) NULL;
 
163
161
    execv(path, (char *const *)new_argv);
 
164
162
    error(0, errno, "execv");
 
 
226
224
  ssize_t sret = readlink(exe_link, exe_target, sizeof(exe_target));
 
228
 
  if((sret != (ssize_t)sizeof(plymouthd_path)-1) or
 
229
 
      (memcmp(plymouthd_path, exe_target,
 
230
 
              sizeof(plymouthd_path)-1) != 0)){
 
 
226
  if((sret != (ssize_t)sizeof(plymouth_path)-1) or
 
 
227
      (memcmp(plymouth_path, exe_target,
 
 
228
              sizeof(plymouth_path)-1) != 0)){
 
 
247
245
  if(maxvalue == 0){
 
248
246
    struct dirent **direntries;
 
249
247
    ret = scandir("/proc", &direntries, is_plymouth, alphasort);
 
251
 
      error(0, errno, "scandir");
 
254
 
      ret = sscanf(direntries[0]->d_name, "%" SCNuMAX, &maxvalue);
 
256
 
        error(0, errno, "sscanf");
 
 
248
    sscanf(direntries[0]->d_name, "%" SCNuMAX, &maxvalue);
 
261
251
  pid = (pid_t)maxvalue;