~siretart/cryptsetup/debian

« back to all changes in this revision

Viewing changes to debian/askpass.c

  • Committer: Reinhard Tartler
  • Date: 2008-08-06 13:15:36 UTC
  • Revision ID: siretart@tauware.de-20080806131536-52nd1v52wo7ft4zt
import cryptsetup_1.0.6-4.dsc

Show diffs side-by-side

added added

removed removed

Lines of Context:
40
40
#include <signal.h>
41
41
#include <dirent.h>
42
42
#include <linux/vt.h>
 
43
#include <sys/socket.h>
 
44
#include <sys/un.h>
 
45
#include <sys/uio.h>
43
46
 
44
47
#define DEBUG 0
45
48
 
361
364
}
362
365
 
363
366
/*****************************************************************************
 
367
 * splashy functions                                                         *
 
368
 *****************************************************************************/
 
369
 
 
370
/* It might be better style to just do a popen of splashy_update ? */
 
371
 
 
372
#define SPLASHY_SOCK    "\0/splashy"
 
373
static size_t splashyused = 0;
 
374
static size_t splashysize = 0;
 
375
static char *splashybuf = NULL;
 
376
 
 
377
static int
 
378
splashy_prepare(const char *prompt)
 
379
{
 
380
        int fd;
 
381
        struct sockaddr addr = {AF_UNIX, SPLASHY_SOCK};
 
382
        struct iovec iov[2];
 
383
 
 
384
        if ((fd = socket (PF_UNIX, SOCK_STREAM, 0)) == -1) {
 
385
                return -1;
 
386
        }
 
387
 
 
388
        if (connect (fd, &addr, sizeof addr) == -1) {
 
389
                close (fd);
 
390
                return -1;
 
391
        }
 
392
 
 
393
        iov[0].iov_base = "getpass ";
 
394
        iov[0].iov_len = strlen ("getpass ");
 
395
        iov[1].iov_base = prompt;
 
396
        iov[1].iov_len = strlen (prompt) + 1;
 
397
 
 
398
        if (writev (fd, iov, 2) == -1) {
 
399
                close (fd);
 
400
                return -1;
 
401
        }
 
402
 
 
403
        /* Shutdown write? */
 
404
 
 
405
        return fd;
 
406
}
 
407
 
 
408
static bool
 
409
splashy_read(int fd, char **buf, size_t *size)
 
410
{
 
411
        debug("In splashy_read\n");
 
412
        if (fifo_common_read(fd, &splashybuf, &splashyused, &splashysize)) {
 
413
                *buf = splashybuf;
 
414
                *size = splashyused;
 
415
                return true;
 
416
        }
 
417
 
 
418
        return false;
 
419
}
 
420
 
 
421
 
 
422
static void
 
423
splashy_finish(int fd)
 
424
{
 
425
        fifo_common_finish (fd, &splashybuf, &splashyused, &splashysize);
 
426
}
 
427
 
 
428
/*****************************************************************************
364
429
 * fifo functions                                                            *
365
430
 *****************************************************************************/
366
431
#define FIFO_PATH "/lib/cryptsetup/passfifo"
512
577
 
513
578
static struct method methods[] = {
514
579
        { "usplash", usplash_prepare, usplash_read, usplash_finish, false, true, -1 },
 
580
        { "splashy", splashy_prepare, splashy_read, splashy_finish, false, true, -1 },
515
581
        { "fifo", fifo_prepare, fifo_read, fifo_finish, false, true, -1 },
516
582
        { "console", console_prepare, console_read, console_finish, false, true, -1 }
517
583
};