--without-cracklib to configure. This makes the code a bit simpler
and lighter if you don't intend to ever use the CrackLib support.
+ Use explicit_bzero instead of memset, where available, to overwrite
+ copies of passwords before freeing memory. This reduces the lifetime
+ of passwords in memory.
+
Update to rra-c-util 8.2:
* Implement explicit_bzero with memset if it is not available.
* Developed by Derrick Brashear and Ken Hornstein of Sine Nomine Associates,
* on behalf of Stanford University
* Extensive modifications by Russ Allbery <eagle@eyrie.org>
- * Copyright 2006, 2007, 2009, 2012, 2013, 2014
+ * Copyright 2020 Russ Allbery <eagle@eyrie.org>
+ * Copyright 2006-2007, 2009, 2012-2014
* The Board of Trustees of the Leland Stanford Junior University
*
* See LICENSE for licensing terms.
copy[j] = c;
}
if (strcasecmp(copy, password) == 0) {
- memset(copy, 0, strlen(copy));
+ explicit_bzero(copy, strlen(copy));
free(copy);
return strength_error_generic(ctx, ERROR_USERNAME);
}
if (i != 0) {
code = check_component(ctx, copy + i, password);
if (code != 0) {
- memset(copy, 0, strlen(copy));
+ explicit_bzero(copy, strlen(copy));
free(copy);
return code;
}
/* Check the current component. */
code = check_component(ctx, start, password);
if (code != 0) {
- memset(copy, 0, strlen(copy));
+ explicit_bzero(copy, strlen(copy));
free(copy);
return code;
}
} while (i < length);
/* Password does not appear to be based on the principal. */
- memset(copy, 0, strlen(copy));
+ explicit_bzero(copy, strlen(copy));
free(copy);
return 0;
}
goto found;
/* No match. Clean up and return success. */
- memset(prefix, 0, length);
- memset(drowssap, 0, length);
+ explicit_bzero(prefix, length);
+ explicit_bzero(drowssap, length);
free(prefix);
free(drowssap);
return 0;
fail:
if (prefix != NULL)
- memset(prefix, 0, length);
- memset(drowssap, 0, length);
+ explicit_bzero(prefix, length);
+ explicit_bzero(drowssap, length);
free(prefix);
free(drowssap);
return code;