]> git.stg.codes - stg.git/commitdiff
Handle string for encryption properly.
authorMaxim Mamontov <faust.madf@gmail.com>
Sat, 13 Sep 2014 22:01:44 +0000 (01:01 +0300)
committerMaxim Mamontov <faust.madf@gmail.com>
Fri, 9 Jan 2015 20:58:25 +0000 (22:58 +0200)
projects/stargazer/plugins/configuration/sgconfig/rsconf.cpp

index de91d3a213f2a08334438519aa49aa0aa8c69810..e34f82a5526db603185930d55fb878938236ec3d 100644 (file)
@@ -482,7 +482,7 @@ while (1)
         if (ParseCommand())
             return SendError(sock, "Bad command");
         else
         if (ParseCommand())
             return SendError(sock, "Bad command");
         else
-            return SendDataAnswer(sock, currParser->GetAnswer());
+            return SendDataAnswer(sock, GetDataAnswer());
         }
     }
 //return 0;
         }
     }
 //return 0;
@@ -497,13 +497,13 @@ BLOWFISH_CTX ctx;
 InitContext(adminPassword.c_str(), ADM_PASSWD_LEN, &ctx);
 
 std::string::size_type pos = 0;
 InitContext(adminPassword.c_str(), ADM_PASSWD_LEN, &ctx);
 
 std::string::size_type pos = 0;
-std::string::size_type length = answer.length();
+std::string::size_type length = answer.length() + 1;
 while (pos < length)
     {
     char buffer[1024];
     std::string::size_type chunkLength = std::min(length - pos, sizeof(buffer));
     EncryptString(buffer, answer.c_str() + pos, chunkLength, &ctx);
 while (pos < length)
     {
     char buffer[1024];
     std::string::size_type chunkLength = std::min(length - pos, sizeof(buffer));
     EncryptString(buffer, answer.c_str() + pos, chunkLength, &ctx);
-    if (send(sock, buffer, chunkLength, 0) < 0)
+    if (send(sock, buffer, (chunkLength & ~7) < chunkLength ? chunkLength + 8 : chunkLength, 0) < 0) // Need to send data adjusted to the 8-byte boundary.
         return -1;
     pos += chunkLength;
     }
         return -1;
     pos += chunkLength;
     }