- Adapted indenation to new agreed upon system

- Added support for second generation scriptcontext based counter
This commit is contained in:
koennecke
2009-02-13 09:00:03 +00:00
parent a3dcad2bfa
commit 91d4af0541
405 changed files with 88101 additions and 88173 deletions

263
token.c
View File

@ -14,143 +14,130 @@
#include "status.h"
/*---------------------- token Management ----------------------------------*/
static int iToken = 0;
static char pTokenPassword[256];
static int iToken = 0;
static char pTokenPassword[256];
/*--------------------------------------------------------------------------*/
int TokenGrabActive(void)
{
return iToken;
}
/*-------------------------------------------------------------------------*/
void TokenRelease(void)
{
iToken = 0;
}
/*-------------------------------------------------------------------------*/
int TokenInit(SConnection *pCon, SicsInterp *pSics, void *pData,
int argc, char *argv[])
{
int iRet;
/* we need a password for token forcing as a parameter */
if(argc < 2)
{
SCWrite(pCon,"ERROR: I need a password for token forcing!", eError);
return 0;
}
if(strlen(argv[1]) > 255)
{
SCWrite(pCon, "ERROR: TokenPassword to long!",eError);
return 0;
}
memset(pTokenPassword,0,255);
strcpy(pTokenPassword,argv[1]);
/* create command */
iRet = AddCommand(pSics,
"token",
TokenWrapper,
NULL,
NULL);
if(!iRet)
{
SCWrite(pCon,"ERROR: token command already exists ??? !!",eError);
}
return iRet;
}
/*-------------------------------------------------------------------------*/
int TokenWrapper(SConnection *pCon, SicsInterp *pSics, void *pData,
int argc, char *argv[])
{
char pBueffel[256];
if(argc < 2)
{
SCWrite(pCon,"ERROR: expected subcommand to token",eError);
return 0;
}
/* handle grab */
if(strcmp(argv[1],"grab") == 0)
{
/* check user rights */
if(usUser < SCGetRights(pCon))
{
SCWrite(pCon,"ERROR: you are not authorised to grab anything at all!",
eError);
return 0;
}
/* is there already a grab? */
if(iToken)
{
SCWrite(pCon,"ERROR: Somebody else has already control! You are REJECTED",
eError);
return 0;
}
/* is somebody doing a scan ? */
if(GetStatus() != eEager)
{
SCWrite(pCon,"ERROR: you cannot grab control while a scan is still running",
eError);
return 0;
}
/* we can do it */
iToken = 1;
TaskSignal(pServ->pTasker,TOKENGRAB,NULL);
pCon->iGrab = 0; /* to enable us to do commands */
SCSendOK(pCon);
return 1;
}
else if(strcmp(argv[1],"release") == 0)
{
if(pCon->iGrab != 0)
{
SCWrite(pCon,"ERROR: you cannot release somebody elses control token!",
eError);
return 0;
}
iToken = 0;
TaskSignal(pServ->pTasker,TOKENRELEASE,NULL);
SCSendOK(pCon);
return 1;
}
else if(strcmp(argv[1],"force") == 0)
{
/* check force password */
if(argc < 3)
{
SCWrite(pCon,"ERROR: I need a password for this operation! Request REJECTED",
eError);
return 0;
}
if(strcmp(argv[2],pTokenPassword) == 0)
{
if(usMugger < SCGetRights(pCon))
{
SCWrite(pCon,"ERROR: Manager privilege required to force your way into a SICS server",
eError);
SCWrite(pCon,"ERROR: You are REJECTED",eError);
return 0;
}
iToken = 0;
TaskSignal(pServ->pTasker,TOKENRELEASE,0);
SCWrite(pCon,"Token forcefully released, no grab active",eWarning);
return 1;
}
else
{
SCWrite(pCon,"ERROR: The specified password is WRONG!",eError);
SCWrite(pCon,"ERROR: Your request has been REJECTED",eError);
return 0;
}
}
/* default */
sprintf(pBueffel,"ERROR: subcommand %s to token NOT understood",
argv[1]);
SCWrite(pCon,pBueffel,eError);
return 0;
int TokenGrabActive(void)
{
return iToken;
}
}
/*-------------------------------------------------------------------------*/
void TokenRelease(void)
{
iToken = 0;
}
/*-------------------------------------------------------------------------*/
int TokenInit(SConnection * pCon, SicsInterp * pSics, void *pData,
int argc, char *argv[])
{
int iRet;
/* we need a password for token forcing as a parameter */
if (argc < 2) {
SCWrite(pCon, "ERROR: I need a password for token forcing!", eError);
return 0;
}
if (strlen(argv[1]) > 255) {
SCWrite(pCon, "ERROR: TokenPassword to long!", eError);
return 0;
}
memset(pTokenPassword, 0, 255);
strcpy(pTokenPassword, argv[1]);
/* create command */
iRet = AddCommand(pSics, "token", TokenWrapper, NULL, NULL);
if (!iRet) {
SCWrite(pCon, "ERROR: token command already exists ??? !!", eError);
}
return iRet;
}
/*-------------------------------------------------------------------------*/
int TokenWrapper(SConnection * pCon, SicsInterp * pSics, void *pData,
int argc, char *argv[])
{
char pBueffel[256];
if (argc < 2) {
SCWrite(pCon, "ERROR: expected subcommand to token", eError);
return 0;
}
/* handle grab */
if (strcmp(argv[1], "grab") == 0) {
/* check user rights */
if (usUser < SCGetRights(pCon)) {
SCWrite(pCon,
"ERROR: you are not authorised to grab anything at all!",
eError);
return 0;
}
/* is there already a grab? */
if (iToken) {
SCWrite(pCon,
"ERROR: Somebody else has already control! You are REJECTED",
eError);
return 0;
}
/* is somebody doing a scan ? */
if (GetStatus() != eEager) {
SCWrite(pCon,
"ERROR: you cannot grab control while a scan is still running",
eError);
return 0;
}
/* we can do it */
iToken = 1;
TaskSignal(pServ->pTasker, TOKENGRAB, NULL);
pCon->iGrab = 0; /* to enable us to do commands */
SCSendOK(pCon);
return 1;
} else if (strcmp(argv[1], "release") == 0) {
if (pCon->iGrab != 0) {
SCWrite(pCon,
"ERROR: you cannot release somebody elses control token!",
eError);
return 0;
}
iToken = 0;
TaskSignal(pServ->pTasker, TOKENRELEASE, NULL);
SCSendOK(pCon);
return 1;
} else if (strcmp(argv[1], "force") == 0) {
/* check force password */
if (argc < 3) {
SCWrite(pCon,
"ERROR: I need a password for this operation! Request REJECTED",
eError);
return 0;
}
if (strcmp(argv[2], pTokenPassword) == 0) {
if (usMugger < SCGetRights(pCon)) {
SCWrite(pCon,
"ERROR: Manager privilege required to force your way into a SICS server",
eError);
SCWrite(pCon, "ERROR: You are REJECTED", eError);
return 0;
}
iToken = 0;
TaskSignal(pServ->pTasker, TOKENRELEASE, 0);
SCWrite(pCon, "Token forcefully released, no grab active", eWarning);
return 1;
} else {
SCWrite(pCon, "ERROR: The specified password is WRONG!", eError);
SCWrite(pCon, "ERROR: Your request has been REJECTED", eError);
return 0;
}
}
/* default */
sprintf(pBueffel, "ERROR: subcommand %s to token NOT understood",
argv[1]);
SCWrite(pCon, pBueffel, eError);
return 0;
}