The only parameter is the password file. It must have permissions to be read by the user that Squid is running as (cache_effective_user in squid.conf).
.PP
This password file can be manipulated using htpasswd.
+.
+.PP
+.This authenticator accepts:
+.BR
+* MD5 - with optional salt and magic strings
+.BR
+* DES - for passwords 8 characters or less in length
+.
.SH OPTIONS
Only specify the password file name.
.SH EXAMPLE
\fBncsa_auth\fP /etc/squid/squid.pass
.SH SECURITY
\fBncsa_auth\fP must have access to the password file to be executed.
+.
+.SH KNOWN ISSUES
+.PP
+DES functionality (used by htpasswd by default) silently truncates passwords to 8 characters.
+Allowing login with password values shorter than the one desired.
+This authenticator will reject login with long passwords when using DES.
+.
.SH SEE ALSO
\fBhtpasswd\fP(1), \fBsquid\fP(8)
+.
.SH AUTHOR
Manpage written by Rodrigo Rubira Branco <rrbranco@br.ibm.com>
* - extra fields in the password file are ignored; this makes it
* possible to use a Unix password file but I do not recommend that.
*
+ * MD5 without salt and magic strings - Added by Ramon de Carvalho and Rodrigo Rubira Branco
*/
#include "config.h"
if (u == NULL) {
printf("ERR No such user\n");
#if HAVE_CRYPT
- } else if (strcmp(u->passwd, (char *) crypt(passwd, u->passwd)) == 0) {
- printf("OK\n");
+ } else if (strlen(passwd) <= 8 && strcmp(u->passwd, (char *) crypt(passwd, u->passwd)) == 0) {
+ // Bug 3107: crypt() DES functionality silently truncates long passwords.
+ printf("OK\n");
+ } else if (strlen(passwd) > 8 && strcmp(u->passwd, (char *) crypt(passwd, u->passwd)) == 0) {
+ // Bug 3107: crypt() DES functionality silently truncates long passwords.
+ fprintf(stderr, "SECURITY ALERT: NCSA DES algorithm truncating user %s password to 8 bytes. Upgrade to MD5.", user);
+ // Highly Unsafe: permit a transition period for admin to update passwords.
+ printf("OK\n");
#endif
} else if (strcmp(u->passwd, (char *) crypt_md5(passwd, u->passwd)) == 0) {
printf("OK\n");
- } else if (strcmp(u->passwd, (char *) md5sum(passwd)) == 0) { /* md5 without salt and magic strings - Added by Ramon de Carvalho and Rodrigo Rubira Branco */
+ } else if (strcmp(u->passwd, (char *) md5sum(passwd)) == 0) {
printf("OK\n");
} else {
printf("ERR Wrong password\n");