X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/6c3114a1ec31d54d935f4d8395ef4816ae250295..7d8f69bd16c0e415d771a29c367519f26184ffae:/projects/stargazer/plugins/configuration/sgconfig/rsconf.cpp diff --git a/projects/stargazer/plugins/configuration/sgconfig/rsconf.cpp b/projects/stargazer/plugins/configuration/sgconfig/rsconf.cpp index b4cbf544..6ca2b3da 100644 --- a/projects/stargazer/plugins/configuration/sgconfig/rsconf.cpp +++ b/projects/stargazer/plugins/configuration/sgconfig/rsconf.cpp @@ -26,14 +26,15 @@ * *******************************************************************/ -#include // cloase, usleep +#include "configproto.h" + +#include "stg/blowfish.h" #include #include #include // snprintf -#include "stg/blowfish.h" -#include "configproto.h" +#include // close #ifndef ENODATA // FreeBSD 4.* - suxx @@ -57,7 +58,7 @@ enum //----------------------------------------------------------------------------- int CONFIGPROTO::Prepare() { -list ansList; //óÀÄÁ ÂÕÄÅÔ ÐÏÍÅÝÅÎ ÏÔ×ÅÔ ÄÌÑ ÍÅÎÅÄÖÅÒÁ ËÌÉÅÎÔÏ× +std::list ansList; //óÀÄÁ ÂÕÄÅÔ ÐÏÍÅÝÅÎ ÏÔ×ÅÔ ÄÌÑ ÍÅÎÅÄÖÅÒÁ ËÌÉÅÎÔÏ× int res; struct sockaddr_in listenAddr; @@ -74,6 +75,7 @@ listenSocket = socket(PF_INET, SOCK_STREAM, 0); if (listenSocket < 0) { errorStr = "Create NET_CONFIGURATOR socket failed."; + logger("Cannot create a socket: %s", strerror(errno)); return -1; } @@ -85,7 +87,8 @@ int lng = 1; if (0 != setsockopt(listenSocket, SOL_SOCKET, SO_REUSEADDR, &lng, 4)) { - errorStr = "Setsockopt failed. " + string(strerror(errno)); + errorStr = "Setsockopt failed. " + std::string(strerror(errno)); + logger("setsockopt error: %s", strerror(errno)); return -1; } @@ -94,6 +97,7 @@ res = bind(listenSocket, (struct sockaddr*)&listenAddr, sizeof(listenAddr)); if (res == -1) { errorStr = "Bind admin socket failed"; + logger("Cannot bind the socket: %s", strerror(errno)); return -1; } @@ -101,6 +105,7 @@ res = listen(listenSocket, 0); if (res == -1) { errorStr = "Listen admin socket failed"; + logger("Cannot listen the socket: %s", strerror(errno)); return -1; } @@ -143,20 +148,17 @@ while (nonstop) &outerAddrLen); if (!nonstop) - { break; - } - if (outerSocket == -1) + if (outerSocket < 0) { + logger("accept error: %s", strerror(errno)); printfd(__FILE__, "accept failed\n"); continue; } adminIP = *(unsigned int*)&(outerAddr.sin_addr); - printfd(__FILE__, "Connection accepted from %s\n", inet_ntostring(outerAddr.sin_addr.s_addr).c_str()); - if (state == confHdr) { if (RecvHdr(outerSocket) < 0) @@ -231,6 +233,7 @@ while (nonstop) { WriteLogAccessFailed(adminIP); } + printfd(__FILE__, "Successfull connection from %s\n", inet_ntostring(outerAddr.sin_addr.s_addr).c_str()); close(outerSocket); } } @@ -249,9 +252,11 @@ while (pos < stgHdrLen) SendError("Bad request"); return -1; } - int ret = recv(sock, &buf[pos], stgHdrLen - pos, 0); - if (ret < 0) + ssize_t ret = recv(sock, &buf[pos], static_cast(stgHdrLen) - static_cast(pos), 0); + if (ret <= 0) { + if (ret < 0) + logger("recv error: %s", strerror(errno)); state = confHdr; return -1; } @@ -278,7 +283,7 @@ if (err) { if (send(sock, ERR_HEADER, sizeof(ERR_HEADER) - 1, 0) < 0) { - WriteServLog("send ERR_HEADER error in SendHdrAnswer."); + logger("send error: %s", strerror(errno)); return -1; } } @@ -286,7 +291,7 @@ else { if (send(sock, OK_HEADER, sizeof(OK_HEADER) - 1, 0) < 0) { - WriteServLog("send OK_HEADER error in SendHdrAnswer."); + logger("send error: %s", strerror(errno)); return -1; } } @@ -308,11 +313,12 @@ while (pos < ADM_LOGIN_LEN) { return ENODATA; } - int ret = recv(sock, &login[pos], ADM_LOGIN_LEN - pos, 0); + ssize_t ret = recv(sock, &login[pos], ADM_LOGIN_LEN - static_cast(pos), 0); - if (ret < 0) + if (ret <= 0) { // Error in network + logger("recv error: %s", strerror(errno)); state = confHdr; return ENODATA; } @@ -337,7 +343,7 @@ int CONFIGPROTO::SendLoginAnswer(int sock) { if (send(sock, OK_LOGIN, sizeof(OK_LOGIN) - 1, 0) < 0) { - WriteServLog("Send OK_LOGIN error in SendLoginAnswer."); + logger("Send OK_LOGIN error in SendLoginAnswer."); return -1; } return 0; @@ -357,12 +363,13 @@ while (pos < ADM_LOGIN_LEN) return ENODATA; } - int ret = recv(sock, &loginS[pos], ADM_LOGIN_LEN - pos, 0); + ssize_t ret = recv(sock, &loginS[pos], ADM_LOGIN_LEN - static_cast(pos), 0); - if (ret < 0) + if (ret <= 0) { // Network error printfd(__FILE__, "recv error: '%s'\n", strerror(errno)); + logger("recv error: %s", strerror(errno)); state = confHdr; return ENODATA; } @@ -381,9 +388,7 @@ EnDecodeInit(currAdmin->GetPassword().c_str(), ADM_PASSWD_LEN, &ctx); char login[ADM_LOGIN_LEN + 1]; for (size_t i = 0; i < ADM_LOGIN_LEN / 8; i++) - { DecodeString(login + i * 8, loginS + i * 8, &ctx); - } if (currAdmin == admins->GetNoAdmin()) { @@ -399,6 +404,7 @@ if (strncmp(currAdmin->GetLogin().c_str(), login, ADM_LOGIN_LEN) != 0) } state = confData; +adminPassword = currAdmin->GetPassword(); return 0; } //----------------------------------------------------------------------------- @@ -408,7 +414,7 @@ if (err) { if (send(sock, ERR_LOGINS, sizeof(ERR_LOGINS) - 1, 0) < 0) { - WriteServLog("send ERR_LOGIN error in SendLoginAnswer."); + logger("send error: %s", strerror(errno)); return -1; } } @@ -416,7 +422,7 @@ else { if (send(sock, OK_LOGINS, sizeof(OK_LOGINS) - 1, 0) < 0) { - WriteServLog("send OK_LOGINS error in SendLoginSAnswer."); + logger("send error: %s", strerror(errno)); return -1; } } @@ -443,10 +449,11 @@ while (1) break; } - int ret = recv(sock, &bufferS[pos], sizeof(bufferS) - pos, 0); + ssize_t ret = recv(sock, &bufferS[pos], sizeof(bufferS) - static_cast(pos), 0); if (ret < 0) { // Network error + logger("recv error: %s", strerror(errno)); printfd(__FILE__, "recv error: '%s'\n", strerror(errno)); return -1; } @@ -476,12 +483,12 @@ while (1) return SendDataAnswer(sock); } } -return 0; +//return 0; } //----------------------------------------------------------------------------- int CONFIGPROTO::SendDataAnswer(int sock) { -list::iterator li; +std::list::iterator li; li = answerList.begin(); BLOWFISH_CTX ctx; @@ -491,7 +498,7 @@ char buffS[8]; int n = 0; int k = 0; -EnDecodeInit(currAdmin->GetPassword().c_str(), ADM_PASSWD_LEN, &ctx); +EnDecodeInit(adminPassword.c_str(), ADM_PASSWD_LEN, &ctx); while (li != answerList.end()) { @@ -504,11 +511,8 @@ while (li != answerList.end()) if (n % 8 == 0) { EncodeString(buffS, buff, &ctx); - int ret = send(sock, buffS, 8, 0); - if (ret < 0) - { + if (send(sock, buffS, 8, 0) < 0) return -1; - } } } k = 0;// new node @@ -524,7 +528,7 @@ EncodeString(buffS, buff, &ctx); answerList.clear(); -return send(sock, buffS, 8, 0); +return static_cast(send(sock, buffS, 8, 0)); } //----------------------------------------------------------------------------- void CONFIGPROTO::SendError(const char * text) @@ -537,6 +541,6 @@ answerList.push_back(s); //----------------------------------------------------------------------------- void CONFIGPROTO::WriteLogAccessFailed(uint32_t ip) { -WriteServLog("Admin's connect failed. IP %s", inet_ntostring(ip).c_str()); +logger("Admin's connection failed. IP %s", inet_ntostring(ip).c_str()); } //-----------------------------------------------------------------------------