[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openbsd-tech
Subject:    OpenBSD bcrypt return value on errors
From:       loganaden () devio ! us (Loganaden Velvindron)
Date:       2012-02-26 5:29:10
Message-ID: 20120226052910.63B7B1B5BFE () wolfman ! devio ! us
[Download RAW message or body]

According to http://www.openwall.com/lists/oss-security/2011/11/15/3,
it would be preferable to use something else than ':' when an error
is encountered.

According to crypt(3), crypt() should return NULL values on errors.

Index: src/lib/libc/crypt/bcrypt.c
===================================================================
RCS file: /cvs/src/lib/libc/crypt/bcrypt.c,v
retrieving revision 1.24
diff -u -p -r1.24 bcrypt.c
--- src/lib/libc/crypt/bcrypt.c	2 Apr 2008 19:54:05 -0000	1.24
+++ src/lib/libc/crypt/bcrypt.c	26 Feb 2012 05:19:27 -0000
@@ -70,7 +70,6 @@ static void decode_base64(u_int8_t *, u_
 
 static char    encrypted[_PASSWORD_LEN];
 static char    gsalt[7 + (BCRYPT_MAXSALT * 4 + 2) / 3 + 1];
-static char    error[] = ":";
 
 const static u_int8_t Base64Code[] =
 "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
@@ -185,8 +184,9 @@ bcrypt(const char *key, const char *salt
 	salt++;
 
 	if (*salt > BCRYPT_VERSION) {
-		/* How do I handle errors ? Return ':' */
-		return error;
+		/* How do I handle errors ? Return NULL according to
+		   crypt(3) */
+		return NULL;
 	}
 
 	/* Check for minor versions */
@@ -198,7 +198,7 @@ bcrypt(const char *key, const char *salt
 			 salt++;
 			 break;
 		 default:
-			 return error;
+			 return NULL;
 		 }
 	} else
 		 minor = 0;
@@ -208,21 +208,21 @@ bcrypt(const char *key, const char *salt
 
 	if (salt[2] != '$')
 		/* Out of sync with passwd entry */
-		return error;
+		return NULL;
 
 	/* Computer power doesn't increase linear, 2^x should be fine */
 	n = atoi(salt);
 	if (n > 31 || n < 0)
-		return error;
+		return NULL;
 	logr = (u_int8_t)n;
 	if ((rounds = (u_int32_t) 1 << logr) < BCRYPT_MINROUNDS)
-		return error;
+		return NULL;
 
 	/* Discard num rounds + "$" identifier */
 	salt += 3;
 
 	if (strlen(salt) * 3 / 4 < BCRYPT_MAXSALT)
-		return error;
+		return NULL;
 
 	/* We dont want the base64 salt but the raw data */
 	decode_base64(csalt, BCRYPT_MAXSALT, (u_int8_t *) salt);

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic