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