/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 at recompile
  • Date: 2020-02-05 21:39:28 UTC
  • Revision ID: teddy@recompile.se-20200205213928-vpvt0fwfg47ikv6f
Allow users to alter ask-password-mandos.service

If a user uses dracut with systemd and wishes to modify the options
passed to password-agent(8mandos) or mandos-client(8mandos), they
should be able to do so by simply creating a file
/etc/systemd/system/ask-password-mandos.service.d/override.conf,
containing, for instance:

[Service]
Environment=MANDOS_CLIENT_OPTIONS=--debug

Adding PASSWORD_AGENT_OPTIONS should also be possible (but should not
normally be needed).

* dracut-module/ask-password-mandos.service ([Service]/ExecStart): Add
  $PASSWORD_AGENT_OPTIONS before "--" and "$MANDOS_CLIENT_OPTIONS" to
  end of line.
* dracut-module/module-setup.sh (install): Install all files named
  /etc/systemd/system/ask-password-mandos.service.d/*.conf if any
  exists.  Also add --dh-params before $MANDOS_CLIENT_OPTIONS instead
  of at end of line.

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
 
28
28
#include <termios.h>            /* struct termios, tcsetattr(),
29
29
                                   TCSAFLUSH, tcgetattr(), ECHO */
30
 
#include <unistd.h>             /* struct termios, tcsetattr(),
31
 
                                   STDIN_FILENO, TCSAFLUSH,
32
 
                                   tcgetattr(), ECHO, readlink() */
 
30
#include <unistd.h>             /* access(), struct termios,
 
31
                                   tcsetattr(), STDIN_FILENO,
 
32
                                   TCSAFLUSH, tcgetattr(), ECHO,
 
33
                                   readlink() */
33
34
#include <signal.h>             /* sig_atomic_t, raise(), struct
34
35
                                   sigaction, sigemptyset(),
35
36
                                   sigaction(), sigaddset(), SIGINT,
110
111
     from the terminal.  Password-prompt will exit if it detects
111
112
     plymouth since plymouth performs the same functionality.
112
113
   */
 
114
  if(access("/run/plymouth/pid", R_OK) == 0){
 
115
    return true;
 
116
  }
 
117
  
113
118
  __attribute__((nonnull))
114
119
  int is_plymouth(const struct dirent *proc_entry){
115
120
    int ret;
234
239
  struct termios t_new, t_old;
235
240
  char *buffer = NULL;
236
241
  char *prefix = NULL;
 
242
  char *prompt = NULL;
237
243
  int status = EXIT_SUCCESS;
238
244
  struct sigaction old_action,
239
245
    new_action = { .sa_handler = termination_handler,
243
249
      { .name = "prefix", .key = 'p',
244
250
        .arg = "PREFIX", .flags = 0,
245
251
        .doc = "Prefix shown before the prompt", .group = 2 },
 
252
      { .name = "prompt", .key = 129,
 
253
        .arg = "PROMPT", .flags = 0,
 
254
        .doc = "The prompt to show", .group = 2 },
246
255
      { .name = "debug", .key = 128,
247
256
        .doc = "Debug mode", .group = 3 },
248
257
      /*
261
270
    error_t parse_opt (int key, char *arg, struct argp_state *state){
262
271
      errno = 0;
263
272
      switch (key){
264
 
      case 'p':
 
273
      case 'p':                 /* --prefix */
265
274
        prefix = arg;
266
275
        break;
267
 
      case 128:
 
276
      case 128:                 /* --debug */
268
277
        debug = true;
269
278
        break;
 
279
      case 129:                 /* --prompt */
 
280
        prompt = arg;
 
281
        break;
270
282
        /*
271
283
         * These reproduce what we would get without ARGP_NO_HELP
272
284
         */
427
439
    if(prefix){
428
440
      fprintf(stderr, "%s ", prefix);
429
441
    }
430
 
    {
 
442
    if(prompt != NULL){
 
443
      fprintf(stderr, "%s: ", prompt);
 
444
    } else {
431
445
      const char *cryptsource = getenv("CRYPTTAB_SOURCE");
432
446
      const char *crypttarget = getenv("CRYPTTAB_NAME");
433
447
      /* Before cryptsetup 1.1.0~rc2 */