aboutsummaryrefslogtreecommitdiff
path: root/pam/pam.c
diff options
context:
space:
mode:
Diffstat (limited to 'pam/pam.c')
-rw-r--r--pam/pam.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/pam/pam.c b/pam/pam.c
index 4769705..1d6aefe 100644
--- a/pam/pam.c
+++ b/pam/pam.c
@@ -19,11 +19,11 @@
#include "pam.h"
+#include <security/pam_appl.h>
+#include <security/pam_ext.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-
-#include <security/pam_appl.h>
#include <sys/mman.h> // mlock/munlock
#include "_cgo_export.h" // for input callbacks
@@ -94,7 +94,7 @@ void freeArray(pam_handle_t* pamh, void** array, int error_status) {
void* copyIntoSecret(void* data) {
size_t size = strlen(data) + 1; // include null terminator
- void* copy = malloc(size);
+ void* copy = calloc(1, size); // initialize to avoid a compiler warning
mlock(copy, size);
memcpy(copy, data, size);
return copy;
@@ -102,9 +102,13 @@ void* copyIntoSecret(void* data) {
void freeSecret(pam_handle_t* pamh, char* data, int error_status) {
size_t size = strlen(data) + 1; // Include null terminator
- // Use volitile function pointer to actually clear the memory.
+ // Use volatile function pointer to actually clear the memory.
static void* (*const volatile memset_sec)(void*, int, size_t) = &memset;
memset_sec(data, 0, size);
munlock(data, size);
free(data);
}
+
+void infoMessage(pam_handle_t* pamh, const char* message) {
+ pam_info(pamh, "%s", message);
+}