]> eyrie.org Git - kerberos/krb5-strength.git/blobdiff - plugin/principal.c
Use explicit_bzero to overwrite passwords
[kerberos/krb5-strength.git] / plugin / principal.c
index 55b6d1344277f62e13363e0edfa5ba75f22c715b..67d8be5858923b9098ef18d2ac7d0d729edec95e 100644 (file)
@@ -6,10 +6,11 @@
  * components of the principal.
  *
  * Developed by Derrick Brashear and Ken Hornstein of Sine Nomine Associates,
- *     on behalf of Stanford University.
- * Extensive modifications by Russ Allbery <rra@stanford.edu>
- * Copyright 2006, 2007, 2009, 2012, 2013
- *     The Board of Trustees of the Leland Stanford Junior Unversity
+ *     on behalf of Stanford University
+ * Extensive modifications by Russ Allbery <eagle@eyrie.org>
+ * 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.
  */
@@ -56,6 +57,7 @@ check_component(krb5_context ctx, const char *component, const char *password)
             copy[j] = c;
         }
         if (strcasecmp(copy, password) == 0) {
+            explicit_bzero(copy, strlen(copy));
             free(copy);
             return strength_error_generic(ctx, ERROR_USERNAME);
         }
@@ -158,6 +160,7 @@ strength_check_principal(krb5_context ctx, krb5_pwqual_moddata data UNUSED,
         if (i != 0) {
             code = check_component(ctx, copy + i, password);
             if (code != 0) {
+                explicit_bzero(copy, strlen(copy));
                 free(copy);
                 return code;
             }
@@ -174,6 +177,7 @@ strength_check_principal(krb5_context ctx, krb5_pwqual_moddata data UNUSED,
         /* Check the current component. */
         code = check_component(ctx, start, password);
         if (code != 0) {
+            explicit_bzero(copy, strlen(copy));
             free(copy);
             return code;
         }
@@ -184,6 +188,7 @@ strength_check_principal(krb5_context ctx, krb5_pwqual_moddata data UNUSED,
     } while (i < length);
 
     /* Password does not appear to be based on the principal. */
+    explicit_bzero(copy, strlen(copy));
     free(copy);
     return 0;
 }