X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fserver%2Fserver.c;h=be15a4095abcb5623db19b78ef9f00211e71cf5b;hb=a3b265fadf5761d8e8a14357db5402d04d65796e;hp=e0fcafa64b2511173f37de18229901842690af14;hpb=d40b4a892a6b06e2ef0cb72e90ebf7b023577d03;p=tpg%2Fopendispense2.git diff --git a/src/server/server.c b/src/server/server.c index e0fcafa..be15a40 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -18,6 +18,7 @@ // HACKS #define HACK_TPG_NOAUTH 1 +#define HACK_ROOT_NOAUTH 1 // Statistics #define MAX_CONNECTION_QUEUE 5 @@ -54,6 +55,8 @@ char *Server_Cmd_AUTOAUTH(tClient *Client, char *Args); char *Server_Cmd_ENUMITEMS(tClient *Client, char *Args); char *Server_Cmd_ITEMINFO(tClient *Client, char *Args); char *Server_Cmd_DISPENSE(tClient *Client, char *Args); +char *Server_Cmd_GIVE(tClient *Client, char *Args); +char *Server_Cmd_ADD(tClient *Client, char *Args); // --- Helpers --- int GetUserAuth(const char *Salt, const char *Username, const uint8_t *Hash); void HexBin(uint8_t *Dest, char *Src, int BufSize); @@ -71,7 +74,9 @@ struct sClientCommand { {"AUTOAUTH", Server_Cmd_AUTOAUTH}, {"ENUM_ITEMS", Server_Cmd_ENUMITEMS}, {"ITEM_INFO", Server_Cmd_ITEMINFO}, - {"DISPENSE", Server_Cmd_DISPENSE} + {"DISPENSE", Server_Cmd_DISPENSE}, + {"GIVE", Server_Cmd_GIVE}, + {"ADD", Server_Cmd_ADD} }; #define NUM_COMMANDS (sizeof(gaServer_Commands)/sizeof(gaServer_Commands[0])) int giServer_Socket; @@ -378,7 +383,6 @@ char *Server_Cmd_AUTOAUTH(tClient *Client, char *Args) */ char *Server_Cmd_ENUMITEMS(tClient *Client, char *Args) { -// int nItems = giNumItems; int retLen; int i; char *ret; @@ -466,6 +470,7 @@ char *Server_Cmd_ITEMINFO(tClient *Client, char *Args) char *Server_Cmd_DISPENSE(tClient *Client, char *Args) { tItem *item; + int ret; if( !Client->bIsAuthed ) return strdup("401 Not Authenticated\n"); item = _GetItemFromString(Args); @@ -473,7 +478,7 @@ char *Server_Cmd_DISPENSE(tClient *Client, char *Args) return strdup("406 Bad Item ID\n"); } - switch( DispenseItem( Client->UID, item ) ) + switch( ret = DispenseItem( Client->UID, item ) ) { case 0: return strdup("200 Dispense OK\n"); case 1: return strdup("501 Unable to dispense\n"); @@ -511,12 +516,53 @@ char *Server_Cmd_GIVE(tClient *Client, char *Args) if( iAmmount <= 0 ) return strdup("407 Invalid Argument, ammount must be > zero\n"); // Do give - switch( Transfer(Client->UID, uid, iAmmount, reason) ) + switch( DispenseGive(Client->UID, uid, iAmmount, reason) ) { case 0: return strdup("200 Give OK\n"); - default: + case 2: return strdup("402 Poor You\n"); + default: + return strdup("500 Unknown error\n"); + } +} + +char *Server_Cmd_ADD(tClient *Client, char *Args) +{ + char *user, *ammount, *reason; + int uid, iAmmount; + + if( !Client->bIsAuthed ) return strdup("401 Not Authenticated\n"); + + user = Args; + + ammount = strchr(Args, ' '); + if( !ammount ) return strdup("407 Invalid Argument, expected 3 parameters, 1 encountered\n"); + *ammount = '\0'; + ammount ++; + + reason = strchr(ammount, ' '); + if( !reason ) return strdup("407 Invalid Argument, expected 3 parameters, 2 encountered\n"); + *reason = '\0'; + reason ++; + + // Get recipient + uid = GetUserID(user); + if( uid == -1 ) return strdup("404 Invalid user"); + + // Parse ammount + iAmmount = atoi(ammount); + if( iAmmount == 0 && ammount[0] != '0' ) return strdup("407 Invalid Argument, ammount must be > zero\n"); + + // Do give + switch( DispenseAdd(uid, Client->UID, iAmmount, reason) ) + { + case 0: + return strdup("200 Add OK\n"); + case 2: + return strdup("402 Poor Guy\n"); + default: + return strdup("500 Unknown error\n"); } } @@ -537,6 +583,10 @@ int GetUserAuth(const char *Salt, const char *Username, const uint8_t *ProvidedH if( strcmp(Username, "tpg") == 0 ) return GetUserID("tpg"); #endif + #if HACK_ROOT_NOAUTH + if( strcmp(Username, "root") == 0 ) + return GetUserID("root"); + #endif #if 0 //