Mercurial > hg > xemacs-beta
diff src/tls.c @ 5891:a0e751d6c3ad
Import the #'clear-string API from GNU, use it in tls.c
src/ChangeLog addition:
2015-04-18 Aidan Kehoe <kehoea@parhasard.net>
* sequence.c (Fclear_string): New, API from GNU. Zero a string's
contents, making sure the text is not kept around even when the
string's data is reallocated because of a changed character
length.
* sequence.c (syms_of_sequence): Make it available to Lisp.
* lisp.h: Make it available to C code.
* tls.c (nss_pk11_password): Use it.
* tls.c (gnutls_pk11_password): Use it.
* tls.c (openssl_password): Use it.
tests/ChangeLog addition:
2015-04-18 Aidan Kehoe <kehoea@parhasard.net>
* automated/lisp-tests.el:
Test #'clear-string, just added. Unfortunately there's no way to
be certain from Lisp that the old password data has been erased
after realloc; it may be worth adding a test to tests.c, but
*we'll be reading memory we shouldn't be*, so that gives me pause.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Sat, 18 Apr 2015 23:00:14 +0100 |
parents | a85efdabe237 |
children |
line wrap: on
line diff
--- a/src/tls.c Thu Apr 09 14:54:37 2015 +0100 +++ b/src/tls.c Sat Apr 18 23:00:14 2015 +0100 @@ -302,7 +302,7 @@ static char * nss_pk11_password (PK11SlotInfo *slot, PRBool retry, void * UNUSED (arg)) { - Lisp_Object lsp_password, args[2]; + Lisp_Object lsp_password; Extbyte *c_password, *nss_password; const Extbyte *token_name; @@ -319,10 +319,9 @@ nss_password = PL_strdup (c_password); /* Wipe out the password on the stack and in the Lisp string */ - args[0] = lsp_password; - args[1] = make_char ('*'); - Ffill (2, args); + Fclear_string (lsp_password); memset (c_password, '*', strlen (c_password)); + return nss_password; } @@ -729,10 +728,9 @@ pin[len] = '\0'; /* Wipe out the password on the stack and in the Lisp string */ - args[0] = lsp_password; - args[1] = make_char ('*'); - Ffill (2, args); + Fclear_string (lsp_password); memset (c_password, '*', strlen (c_password)); + return GNUTLS_E_SUCCESS; } @@ -1075,7 +1073,7 @@ openssl_password (char *buf, int size, int UNUSED (rwflag), void *UNUSED (userdata)) { - Lisp_Object lsp_password, args[2]; + Lisp_Object lsp_password; Extbyte *c_password; lsp_password = @@ -1084,10 +1082,9 @@ strncpy (buf, c_password, size); /* Wipe out the password on the stack and in the Lisp string */ - args[0] = lsp_password; - args[1] = make_char ('*'); - Ffill (2, args); + Fclear_string (lsp_password); memset (c_password, '*', strlen (c_password)); + return (int) strlen (buf); }