Password validity argument check added
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Fri, 13 Sep 2013 13:04:01 +0000 (15:04 +0200)
committerBartlomiej Grzelewski <b.grzelewski@samsung.com>
Thu, 6 Feb 2014 16:13:22 +0000 (17:13 +0100)
[Issue#] N/A
[Feature/Bug] N/A
[Problem] tc10_security_server_set_pwd_current_pwd_max_valid_period_in_days fails
[Cause] Password validity argument was not checked
[Solution] Check added

[Verification] Run security-server-tests-password. All should pass.

Change-Id: I564ec3fcfa905c8b3ed9af620f67dec47f86fc87

src/server/security-server-password.c

index 087e12f..a8fa836 100644 (file)
@@ -31,6 +31,7 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <openssl/sha.h>
+#include <limits.h>
 
 #include "security-server-password.h"
 
@@ -946,7 +947,24 @@ int process_set_pwd_request(int sockfd)
     if (valid_days == 0)
         expire_time = 0;
     else
-        expire_time = time(NULL) + (valid_days * 86400);
+    {
+        time_t t = time(NULL );
+        unsigned int valid_days_max = (UINT_MAX - t) / 86400;
+        if (valid_days > valid_days_max)
+        {
+            SECURE_SLOGE("%s",
+                    "Server: Max password validity exceeded (%d>%d)", valid_days, valid_days_max);
+            retval = send_generic_response(sockfd,
+                    SECURITY_SERVER_MSG_TYPE_SET_PWD_RESPONSE,
+                    SECURITY_SERVER_RETURN_CODE_BAD_REQUEST);
+            if (retval != SECURITY_SERVER_SUCCESS)
+            {
+                SEC_SVR_ERR("Server ERROR: Cannot send generic response: %d", retval);
+            }
+            goto error;
+        }
+        expire_time = t + (valid_days * 86400);
+    }
 
     /* set new password */
     retval = set_password(hashed_new_pw, received_attempts, expire_time);