- Adapted indenation to new agreed upon system
- Added support for second generation scriptcontext based counter
This commit is contained in:
263
token.c
263
token.c
@ -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;
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user