Add a new helper function, pinentry_setbuffer_use.
authorNeal H. Walfield <neal@gnu.org>
Wed, 13 May 2015 21:09:46 +0000 (23:09 +0200)
committerNeal H. Walfield <neal@gnu.org>
Wed, 13 May 2015 21:15:50 +0000 (23:15 +0200)
* pinentry/pinentry.c (pinentry_setbuffer_use): New function.
* pinentry/pinentry.h (pinentry_setbuffer_use): New declaration.

pinentry/pinentry.c
pinentry/pinentry.h

index 836ee14..eb70ae7 100644 (file)
@@ -405,6 +405,28 @@ pinentry_setbuffer_init (pinentry_t pin)
   pinentry_setbufferlen (pin, 0);
 }
 
+/* passphrase better be alloced with secmem_alloc.  */
+void
+pinentry_setbuffer_use (pinentry_t pin, char *passphrase, int len)
+{
+  if (! passphrase)
+    {
+      assert (len == 0);
+      pinentry_setbuffer_clear (pin);
+
+      return;
+    }
+
+  if (passphrase && len == 0)
+    len = strlen (passphrase) + 1;
+
+  if (pin->pin)
+    secmem_free (pin->pin);
+
+  pin->pin = passphrase;
+  pin->pin_len = len;
+}
+
 /* Initialize the secure memory subsystem, drop privileges and return.
    Must be called early. */
 void
index 7112637..19fdb55 100644 (file)
@@ -240,6 +240,12 @@ int pinentry_inq_quality (pinentry_t pin,
    PIN.  Returns new buffer on success and 0 on failure.  */
 char *pinentry_setbufferlen (pinentry_t pin, int len);
 
+/* Use the buffer at BUFFER for PIN->PIN.  BUFFER must be NULL or
+   allocated using secmem_alloc.  LEN is the size of the buffer.  If
+   it is unknown, but BUFFER is a NUL terminated string, you pass 0 to
+   just use strlen(buffer)+1.  */
+void pinentry_setbuffer_use (pinentry_t pin, char *buffer, int len);
+
 /* Initialize the secure memory subsystem, drop privileges and
    return.  Must be called early.  */
 void pinentry_init (const char *pgmname);