Merge branch 'conclean' into rhel7

Conflicts:
	SCinter.c
	telnet.c
This commit is contained in:
2017-04-03 11:44:35 +02:00
23 changed files with 306 additions and 930 deletions

156
telnet.c
View File

@ -13,6 +13,8 @@
#include "passwd.h"
#include "telnet.h"
#include "fortify.h"
#include "asynnet.h"
#include "conman.h"
#define LOGINWAIT 300
/* 300 == 5 minutes to wait for valid username password */
/*-------------------------------------------------------------------------*/
@ -96,114 +98,7 @@ static void SendGA(SConnection * pCon)
pReply[0] = (char) 255;
pReply[1] = (char) 249;
NETWrite(pCon->pSock, pReply, 2);
}
/*--------------------------------------------------------------------------*/
int TelnetTaskOld(void *pData)
{
pTelTask self = NULL;
char *pPtr = NULL;
char *pLogin = NULL;
char *pUser = NULL, *pPasswd = NULL;
char pBuffer[512], pHost[131];
int iRet;
time_t shit;
self = (pTelTask) pData;
assert(self);
if (self->pCon->iEnd) {
if (SCActive(self->pCon)) {
return 1;
} else {
return 0;
}
}
/* pop and execute */
iRet = CostaPop(self->pCon->pStack, &pPtr);
if (iRet) {
if (pPtr) {
if (self->iLogin) { /* handle normal command */
/* check for logoff */
if (strstr(pPtr, "logoff") != NULL) {
NetReadRemove(pServ->pReader, self->pCon->pSock);
free(pPtr);
self->pCon->iEnd = 1;
return 0;
}
/* invoke command */
CostaLock(self->pCon->pStack);
SCInvoke(self->pCon, pServ->pSics, pPtr);
CostaUnlock(self->pCon->pStack);
SendGA(self->pCon);
free(pPtr);
} else { /* handle login messages */
pLogin = strstr(pPtr, self->pLoginWord);
if (!pLogin) {
SCWrite(self->pCon,
"------------------- Get Lost -------------------",
eError);
if (time(&shit) > self->tStart + LOGINWAIT) {
SCWrite(self->pCon,
"I cannot stand your login attempts anymore!", eError);
NetReadRemove(pServ->pReader, self->pCon->pSock);
self->pCon->iEnd = 1;
free(pPtr);
return 0;
}
free(pPtr);
return 1;
} else { /* check username / password */
pLogin += strlen(self->pLoginWord);
pUser = strtok(pLogin, " \t");
pPasswd = strtok(NULL, " \t\r\n");
iRet = IsValidUser(pUser, pPasswd);
if (iRet < 0) {
snprintf(pBuffer,sizeof(pBuffer)-1, "SYSTEM ATTACK by %s / %s", pUser, pPasswd);
Log(FATAL,"sys","%s",pBuffer);
SCWrite(self->pCon,
"I do not know you, I do not let you in", eError);
SendGA(self->pCon);
free(pPtr);
return 1;
} else {
NETInfo(self->pCon->pSock, pHost, 131);
snprintf(pBuffer,sizeof(pBuffer)-1, "Accepted connection on socket %d from %s",
self->pCon->pSock->sockid, pHost);
Log(INFO,"com",pBuffer);
SendWelcome(self->pCon);
SCSetRights(self->pCon, iRet);
self->iLogin = 1;
SendGA(self->pCon);
free(pPtr);
return 1;
}
}
}
}
}
/* check for no commands but timeout on telnet */
if (!self->iLogin && (time(&shit) > self->tStart + LOGINWAIT)) {
self->pCon->iEnd = 1;
NetReadRemove(pServ->pReader, self->pCon->pSock);
return 0;
}
/* check for end */
if (self->pCon->iEnd) {
if (SCActive(self->pCon)) {
return 1;
} else {
return 0;
}
}
return 1;
ANETwrite(SCGetSockHandle(pCon), pReply, 2);
}
/*--------------------------------------------------------------------------*/
@ -220,7 +115,7 @@ int TelnetTask(void *pData)
self = (pTelTask) pData;
assert(self);
if (self->pCon->iEnd) {
if (SCGetEnd(self->pCon)) {
if (SCActive(self->pCon)) {
return 1;
} else {
@ -230,22 +125,20 @@ int TelnetTask(void *pData)
}
/* pop and execute */
iRet = CostaPop(self->pCon->pStack, &pPtr);
iRet = SCCostaTop(self->pCon,pPtr);
if (iRet) {
if (pPtr) {
if (self->iLogin) { /* handle normal command */
/* check for logoff */
if (strstr(pPtr, "logoff") != NULL) {
Log(INFO,"sys","Handle %d logging off", self->pCon->sockHandle);
ANETclose(self->pCon->sockHandle);
SCClose(self->pCon);
free(pPtr);
self->pCon->iEnd = 1;
return 0;
}
/* invoke command */
CostaLock(self->pCon->pStack);
SCCostaLock(self->pCon);
SCInvoke(self->pCon, pServ->pSics, pPtr);
CostaUnlock(self->pCon->pStack);
SCCostaUnLock(self->pCon);
SendGA(self->pCon);
free(pPtr);
} else { /* handle login messages */
@ -258,8 +151,7 @@ int TelnetTask(void *pData)
if (time(&shit) > self->tStart + LOGINWAIT) {
SCWrite(self->pCon,
"I cannot stand your login attempts anymore!", eError);
ANETclose(self->pCon->sockHandle);
self->pCon->iEnd = 1;
SCClose(self->pCon);
free(pPtr);
return 0;
}
@ -281,8 +173,13 @@ int TelnetTask(void *pData)
return 1;
} else {
snprintf(pBuffer,sizeof(pBuffer)-1, "Accepted telnet connection on handle %d",
<<<<<<< HEAD
self->pCon->sockHandle);
Log(INFO,"sys","%s",pBuffer);
=======
SCGetSockHandle(self->pCon));
Log(INFO,"com","%s",pBuffer);
>>>>>>> conclean
SendWelcome(self->pCon);
SCSetRights(self->pCon, iRet);
self->iLogin = 1;
@ -296,14 +193,14 @@ int TelnetTask(void *pData)
}
/* check for no commands but timeout on telnet */
if (!self->iLogin && (time(&shit) > self->tStart + LOGINWAIT)) {
self->pCon->iEnd = 1;
ANETclose(self->pCon->sockHandle);
SCSetEnd(self->pCon,1);
SCClose(self->pCon);
return 0;
}
/* check for end */
if (self->pCon->iEnd) {
if (SCGetEnd(self->pCon)) {
if (SCActive(self->pCon)) {
return 1;
} else {
@ -328,7 +225,7 @@ void TelnetSignal(void *pData, int iSignal, void *pSigData)
iInt = (int *) pSigData;
SCSetInterrupt(self->pCon, *iInt);
if (*iInt == eEndServer) {
self->pCon->iEnd = 1;
SCSetEnd(self->pCon,1);
}
} else if (iSignal == SICSBROADCAST) {
pPtr = (char *) pSigData;
@ -336,9 +233,9 @@ void TelnetSignal(void *pData, int iSignal, void *pSigData)
SCWrite(self->pCon, pPtr, eWarning);
}
} else if (iSignal == TOKENRELEASE) {
self->pCon->iGrab = 0;
SCSetGrab(self->pCon,0);
} else if (iSignal == TOKENGRAB) {
self->pCon->iGrab = 1;
SCSetGrab(self->pCon,1);
}
}
@ -359,18 +256,6 @@ void InstallTelnet(void)
return;
}
i = sscanf(pPtr, "%d", &iPort);
/*
if(i > 0)
{
pTelnet = NETOpenPort(iPort);
}
if(pTelnet)
{
NetReadRegister(pServ->pReader,pTelnet, taccept, NULL);
}
*/
/* when we have a port have the NetReader listen and handle it */
NetReadInstallANETPort(pServ->pReader, taccept, iPort);
}
@ -380,7 +265,6 @@ void KillTelnet(void)
{
if (pTelnet) {
NETClosePort(pTelnet);
/* NetReadRemove(pServ->pReader,pTelnet); */
free(pTelnet);
pTelnet = NULL;
}