- repaired commandlog tail command (inserted SCPureSocketWrite)
- fixed mechanism for suppressing double lines in config listen mode
This commit is contained in:
@ -244,8 +244,8 @@ static void PrintTail(int iNum, SConnection * pCon)
|
|||||||
*/
|
*/
|
||||||
for (i = 0; i < iNum; i++) {
|
for (i = 0; i < iNum; i++) {
|
||||||
pPtr = (char *) getCircular(pTail);
|
pPtr = (char *) getCircular(pTail);
|
||||||
if (pCon->pSock && pPtr != NULL) {
|
if (pPtr != NULL) {
|
||||||
TelnetWrite(pCon->pSock, pPtr);
|
SCPureSockWrite(pCon, pPtr, eWarning);
|
||||||
}
|
}
|
||||||
nextCircular(pTail);
|
nextCircular(pTail);
|
||||||
}
|
}
|
||||||
|
31
conman.c
31
conman.c
@ -99,7 +99,7 @@ typedef struct {
|
|||||||
static int iName = 0;
|
static int iName = 0;
|
||||||
static long lastIdent = 0;
|
static long lastIdent = 0;
|
||||||
/*------------- sending connection (prevent double write when listening) ----*/
|
/*------------- sending connection (prevent double write when listening) ----*/
|
||||||
static SConnection *sendingConnection = NULL;
|
static int sendingConnection = 0;
|
||||||
/*------------- storing connection and context for later use ----*/
|
/*------------- storing connection and context for later use ----*/
|
||||||
struct SCStore {
|
struct SCStore {
|
||||||
SConnection *pCon;
|
SConnection *pCon;
|
||||||
@ -679,10 +679,14 @@ static void testAndWriteCommandLog(SConnection * pCon, char *buffer,
|
|||||||
{
|
{
|
||||||
if (SCGetRights(pCon) <= usUser) {
|
if (SCGetRights(pCon) <= usUser) {
|
||||||
if (SCinMacro(pCon) != 1) {
|
if (SCinMacro(pCon) != 1) {
|
||||||
|
sendingConnection = pCon->sockHandle;
|
||||||
WriteToCommandLogId(NULL, pCon->sockHandle, buffer);
|
WriteToCommandLogId(NULL, pCon->sockHandle, buffer);
|
||||||
|
sendingConnection = 0;
|
||||||
} else {
|
} else {
|
||||||
if (iOut == eLog || iOut == eLogError) {
|
if (iOut == eLog || iOut == eLogError) {
|
||||||
|
sendingConnection = pCon->sockHandle;
|
||||||
WriteToCommandLogId(NULL, pCon->sockHandle, buffer);
|
WriteToCommandLogId(NULL, pCon->sockHandle, buffer);
|
||||||
|
sendingConnection = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -910,6 +914,19 @@ int SCOnlySockWrite(SConnection * self, char *buffer, int iOut)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------*/
|
||||||
|
int SCPureSockWrite(SConnection * self, char *buffer, int iOut)
|
||||||
|
{
|
||||||
|
/* for commandlog tail */
|
||||||
|
if (!VerifyConnection(self)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
testAndWriteSocket(self, buffer, iOut);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
int SCNotWrite(SConnection * self, char *buffer, int iOut)
|
int SCNotWrite(SConnection * self, char *buffer, int iOut)
|
||||||
{
|
{
|
||||||
@ -1337,13 +1354,13 @@ int SCInvoke(SConnection * self, SicsInterp * pInter, char *pCommand)
|
|||||||
* case
|
* case
|
||||||
*/
|
*/
|
||||||
if (SCGetWriteFunc(self) != SCNotWrite) {
|
if (SCGetWriteFunc(self) != SCNotWrite) {
|
||||||
sendingConnection = self;
|
sendingConnection = self->sockHandle;
|
||||||
if (self->sockHandle >= 0) {
|
if (self->sockHandle >= 0) {
|
||||||
WriteToCommandLogCmd(self->sockHandle, pCommand);
|
WriteToCommandLogCmd(self->sockHandle, pCommand);
|
||||||
} else {
|
} else {
|
||||||
WriteToCommandLog("CRON>>", pCommand);
|
WriteToCommandLog("CRON>>", pCommand);
|
||||||
}
|
}
|
||||||
sendingConnection = NULL;
|
sendingConnection = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1436,6 +1453,7 @@ int ConfigCon(SConnection * pCon, SicsInterp * pSics, void *pData,
|
|||||||
eError);
|
eError);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
pMaster->listening = pCon->listening;
|
||||||
SCSendOK(pCon);
|
SCSendOK(pCon);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -1500,10 +1518,9 @@ int ConfigCon(SConnection * pCon, SicsInterp * pSics, void *pData,
|
|||||||
if (CompactCommandLog()) {
|
if (CompactCommandLog()) {
|
||||||
if (pCon->iUserRights < 3 || i < 3) {
|
if (pCon->iUserRights < 3 || i < 3) {
|
||||||
ANETinfo(pCon->sockHandle, pHost, sizeof pHost);
|
ANETinfo(pCon->sockHandle, pHost, sizeof pHost);
|
||||||
sprintf(pBueffel, "User %s from %s switched to %d privilege",
|
snprintf(pBueffel, sizeof pBueffel,
|
||||||
|
"User %s from %s switched to %d privilege",
|
||||||
argv[2], pHost, i);
|
argv[2], pHost, i);
|
||||||
snprintf(pBueffel, 512, "User at %d switched to %d privilige",
|
|
||||||
pCon->sockHandle, i);
|
|
||||||
WriteToCommandLogId("SYS>", pCon->sockHandle, pBueffel);
|
WriteToCommandLogId("SYS>", pCon->sockHandle, pBueffel);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -1888,7 +1905,7 @@ void SCSignalFunction(void *pData, int iSignal, void *pSigData)
|
|||||||
}
|
}
|
||||||
} else if (iSignal == COMLOG && self->listening == 1) {
|
} else if (iSignal == COMLOG && self->listening == 1) {
|
||||||
pPtr = (char *) pSigData;
|
pPtr = (char *) pSigData;
|
||||||
if (pPtr != NULL && self != sendingConnection) {
|
if (pPtr != NULL && self->sockHandle != sendingConnection) {
|
||||||
doSockWrite(self, pPtr);
|
doSockWrite(self, pPtr);
|
||||||
}
|
}
|
||||||
} else if (iSignal == TOKENRELEASE) {
|
} else if (iSignal == TOKENRELEASE) {
|
||||||
|
Reference in New Issue
Block a user