/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: 2008-08-29 05:53:59 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080829055359-wkdasnyxtylmnxus
* mandos.xml (EXAMPLE): Replaced all occurences of command name with
                        "&COMMANDNAME;".

* plugins.d/password-prompt.c (main): Improved some documentation
                                      strings.  Do perror() of
                                      tcgetattr() fails.  Add debug
                                      output if interrupted by signal.
                                      Loop over write() instead of
                                      using fwrite() when outputting
                                      password.  Add debug output if
                                      getline() returns 0, unless it
                                      was caused by a signal.  Add
                                      exit status code to debug
                                      output.

* plugins.d/password-prompt.xml: Changed all single quotes to double
                                 quotes for consistency.  Removed
                                 <?xml-stylesheet>.
  (ENTITY TIMESTAMP): New.  Automatically updated by Emacs time-stamp
                      by using Emacs local variables.
  (/refentry/refentryinfo/title): Changed to "Mandos Manual".
  (/refentry/refentryinfo/productname): Changed to "Mandos".
  (/refentry/refentryinfo/date): New; set to "&TIMESTAMP;".
  (/refentry/refentryinfo/copyright): Split copyright holders.
  (/refentry/refnamediv/refpurpose): Improved wording.
  (SYNOPSIS): Fix to use correct markup.  Add short options.
  (DESCRIPTION, OPTIONS): Improved wording.
  (OPTIONS): Improved wording.  Use more correct markup.  Document
             short options.
  (EXIT STATUS): Add text.
  (ENVIRONMENT): Document use of "cryptsource" and "crypttarget".
  (FILES): REMOVED.
  (BUGS): Add text.
  (EXAMPLE): Added some examples.
  (SECURITY): Added text.
  (SEE ALSO): Remove reference to mandos(8).  Add reference to
              crypttab(5).

Show diffs side-by-side

added added

removed removed

Lines of Context:
73
73
    struct argp_option options[] = {
74
74
      { .name = "prefix", .key = 'p',
75
75
        .arg = "PREFIX", .flags = 0,
76
 
        .doc = "Prefix used before the passprompt", .group = 2 },
 
76
        .doc = "Prefix shown before the prompt", .group = 2 },
77
77
      { .name = "debug", .key = 128,
78
78
        .doc = "Debug mode", .group = 3 },
79
79
      { .name = NULL }
102
102
  
103
103
    struct argp argp = { .options = options, .parser = parse_opt,
104
104
                         .args_doc = "",
105
 
                         .doc = "Mandos Passprompt -- Provides a passprompt" };
 
105
                         .doc = "Mandos password-prompt -- Read and"
 
106
                         " output a password" };
106
107
    ret = argp_parse (&argp, argc, argv, 0, 0, NULL);
107
108
    if (ret == ARGP_ERR_UNKNOWN){
108
109
      fprintf(stderr, "Unknown error while parsing arguments\n");
118
119
  }
119
120
  
120
121
  if (tcgetattr(STDIN_FILENO, &t_old) != 0){
 
122
    perror("tcgetattr");
121
123
    return EXIT_FAILURE;
122
124
  }
123
125
  
179
181
  }
180
182
  while(true){
181
183
    if (quit_now){
 
184
      if(debug){
 
185
        fprintf(stderr, "Interrupted by signal, exiting.\n");
 
186
      }
182
187
      status = EXIT_FAILURE;
183
188
      break;
184
189
    }
208
213
    }
209
214
    ret = getline(&buffer, &n, stdin);
210
215
    if (ret > 0){
211
 
      fprintf(stdout, "%s", buffer);
212
216
      status = EXIT_SUCCESS;
 
217
      /* Make n = data size instead of allocated buffer size */
 
218
      n = (size_t)ret;
 
219
      size_t written = 0;
 
220
      while(written < n){
 
221
        ret = write(STDOUT_FILENO, buffer + written, n - written);
 
222
        if(ret < 0){
 
223
          perror("write");
 
224
          status = EXIT_FAILURE;
 
225
          break;
 
226
        }
 
227
        written += (size_t)ret;
 
228
      }
213
229
      break;
214
230
    }
215
231
    if (ret < 0){
222
238
    /* if(ret == 0), then the only sensible thing to do is to retry to
223
239
       read from stdin */
224
240
    fputc('\n', stderr);
 
241
    if(debug and not quit_now){
 
242
      /* If quit_now is true, we were interrupted by a signal, and
 
243
         will print that later, so no need to show this too. */
 
244
      fprintf(stderr, "getline() returned 0, retrying.\n");
 
245
    }
225
246
  }
226
247
  
227
248
  if (debug){
232
253
  }
233
254
  
234
255
  if (debug){
235
 
    fprintf(stderr, "%s is exiting\n", argv[0]);
 
256
    fprintf(stderr, "%s is exiting with status %d\n", argv[0],
 
257
            status);
236
258
  }
237
259
  
238
260
  return status;