/* passwd.c --- verifying typed passwords with the OS.
- * xscreensaver, Copyright (c) 1993-1998 Jamie Zawinski <jwz@jwz.org>
+ * xscreensaver, Copyright (c) 1993-2004 Jamie Zawinski <jwz@jwz.org>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
#endif
extern char *blurb(void);
+extern void check_for_leaks (const char *where);
/* blargh */
extern Bool pam_priv_init (int argc, char **argv, Bool verbose_p);
extern Bool pam_passwd_valid_p (const char *typed_passwd, Bool verbose_p);
#endif
+#ifdef PASSWD_HELPER_PROGRAM
+extern Bool ext_priv_init (int argc, char **argv, Bool verbose_p);
+extern Bool ext_passwd_valid_p (const char *typed_passwd, Bool verbose_p);
+#endif
extern Bool pwent_lock_init (int argc, char **argv, Bool verbose_p);
extern Bool pwent_priv_init (int argc, char **argv, Bool verbose_p);
extern Bool pwent_passwd_valid_p (const char *typed_passwd, Bool verbose_p);
{ "PAM", 0, pam_priv_init, pam_passwd_valid_p,
False, False },
# endif
+# ifdef PASSWD_HELPER_PROGRAM
+ { "external", 0, ext_priv_init, ext_passwd_valid_p,
+ False, False },
+#endif
{ "normal", pwent_lock_init, pwent_priv_init, pwent_passwd_valid_p,
False, False }
};
int i, j;
for (i = 0; i < countof(methods); i++)
{
- if (methods[i].initted_p &&
- methods[i].valid_p (typed_passwd, verbose_p))
+ int ok_p = (methods[i].initted_p &&
+ methods[i].valid_p (typed_passwd, verbose_p));
+
+ check_for_leaks (methods[i].name);
+
+ if (ok_p)
{
/* If we successfully authenticated by method N, but attempting
to authenticate by method N-1 failed, mention that (since if
"%s: authentication via %s passwords failed.\n",
blurb(), methods[j].name);
fprintf (stderr,
- "%s: but authentication via %s passwords succeeded.\n",
+ "%s: authentication via %s passwords succeeded.\n",
blurb(), methods[i].name);
}