/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/plymouth.c

  • Committer: Teddy Hogeborn
  • Date: 2011-12-31 20:07:11 UTC
  • mfrom: (535.1.9 wireless-network-hook)
  • Revision ID: teddy@recompile.se-20111231200711-6dli3r8drftem57r
Merge new wireless network hook.  Fix bridge network hook to use
hardware addresses instead of interface names.  Implement and document
new "CONNECT" environment variable for network hooks.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
/*
3
3
 * Plymouth - Read a password from Plymouth and output it
4
4
 * 
5
 
 * Copyright © 2010-2017 Teddy Hogeborn
6
 
 * Copyright © 2010-2017 Björn Påhlsson
7
 
 * 
8
 
 * This file is part of Mandos.
9
 
 * 
10
 
 * Mandos is free software: you can redistribute it and/or modify it
11
 
 * under the terms of the GNU General Public License as published by
12
 
 * the Free Software Foundation, either version 3 of the License, or
13
 
 * (at your option) any later version.
14
 
 * 
15
 
 * Mandos is distributed in the hope that it will be useful, but
 
5
 * Copyright © 2010-2011 Teddy Hogeborn
 
6
 * Copyright © 2010-2011 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
16
14
 * WITHOUT ANY WARRANTY; without even the implied warranty of
17
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18
16
 * General Public License for more details.
19
17
 * 
20
18
 * You should have received a copy of the GNU General Public License
21
 
 * along with Mandos.  If not, see <http://www.gnu.org/licenses/>.
 
19
 * along with this program.  If not, see
 
20
 * <http://www.gnu.org/licenses/>.
22
21
 * 
23
22
 * Contact the authors at <mandos@recompile.se>.
24
23
 */
85
84
  
86
85
  va_start(ap, formatstring);
87
86
  ret = vasprintf(&text, formatstring, ap);
88
 
  if(ret == -1){
 
87
  if (ret == -1){
89
88
    fprintf(stderr, "Mandos plugin %s: ",
90
89
            program_invocation_short_name);
91
90
    vfprintf(stderr, formatstring, ap);
157
156
 
158
157
__attribute__((nonnull (2, 3)))
159
158
bool exec_and_wait(pid_t *pid_return, const char *path,
160
 
                   const char * const *argv, bool interruptable,
 
159
                   const char **argv, bool interruptable,
161
160
                   bool daemonize){
162
161
  int status;
163
162
  int ret;
175
174
      }
176
175
    }
177
176
    
178
 
    char **new_argv = malloc(sizeof(const char *));
179
 
    if(new_argv == NULL){
180
 
      error_plus(0, errno, "malloc");
181
 
      _exit(EX_OSERR);
182
 
    }
 
177
    char **new_argv = NULL;
183
178
    char **tmp;
184
179
    int i = 0;
185
 
    for (; argv[i] != NULL; i++){
186
 
      tmp = realloc(new_argv, sizeof(const char *) * ((size_t)i + 2));
187
 
      if(tmp == NULL){
 
180
    for (; argv[i]!=NULL; i++){
 
181
      tmp = realloc(new_argv, sizeof(const char *) * ((size_t)i + 1));
 
182
      if (tmp == NULL){
188
183
        error_plus(0, errno, "realloc");
189
184
        free(new_argv);
190
185
        _exit(EX_OSERR);
295
290
  if(proc_id == 0){
296
291
    struct dirent **direntries = NULL;
297
292
    ret = scandir("/proc", &direntries, is_plymouth, alphasort);
298
 
    if(ret == -1){
 
293
    if (ret == -1){
299
294
      error_plus(0, errno, "scandir");
300
295
    }
301
 
    if(ret > 0){
 
296
    if (ret > 0){
302
297
      ret = sscanf(direntries[0]->d_name, "%" SCNuMAX, &proc_id);
303
 
      if(ret < 0){
 
298
      if (ret < 0){
304
299
        error_plus(0, errno, "sscanf");
305
300
      }
306
301
    }
317
312
  return 0;
318
313
}
319
314
 
320
 
const char * const * getargv(pid_t pid){
 
315
const char **getargv(pid_t pid){
321
316
  int cl_fd;
322
317
  char *cmdline_filename;
323
318
  ssize_t sret;
384
379
    return NULL;
385
380
  }
386
381
  argz_extract(cmdline, cmdline_len, argv); /* Create argv */
387
 
  return (const char * const *)argv;
 
382
  return (const char **)argv;
388
383
}
389
384
 
390
385
int main(__attribute__((unused))int argc,
465
460
  }
466
461
  kill_and_wait(plymouth_command_pid);
467
462
  
468
 
  const char * const *plymouthd_argv;
 
463
  const char **plymouthd_argv;
469
464
  pid_t pid = get_pid();
470
465
  if(pid == 0){
471
466
    error_plus(0, 0, "plymouthd pid not found");