X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fcokebank_basic%2Fbank.c;h=dce089f0c085e89dcea1eca49cd33f6a429d1e44;hb=a3b265fadf5761d8e8a14357db5402d04d65796e;hp=c9aa6b36dc7259a1883f39ff5d5ab6484f7a44fd;hpb=bb482071835d6155974f3d5f91cc288e690e20d1;p=tpg%2Fopendispense2.git diff --git a/src/cokebank_basic/bank.c b/src/cokebank_basic/bank.c index c9aa6b3..dce089f 100644 --- a/src/cokebank_basic/bank.c +++ b/src/cokebank_basic/bank.c @@ -9,22 +9,39 @@ * for full details. */ #include +#include +#include +#include +#include +#include "common.h" enum { FLAG_TYPEMASK = 0x03, - USER_FLAG_NORMAL = 0x00, - USER_FLAG_COKE = 0x01, - USER_FLAG_WHEEL = 0x02, - USER_FLAG_GOD = 0x03 + USER_TYPE_NORMAL = 0x00, + USER_TYPE_COKE = 0x01, + USER_TYPE_WHEEL = 0x02, + USER_TYPE_GOD = 0x03 }; +// === PROTOTYPES === +static int GetUnixID(const char *Username); + +// === GLOBALS === +tUser *gaBank_Users; + int giBank_NumUsers; +FILE *gBank_File; + // === CODE === -int Bank_GetUserByUnixID(int UnixUID) +int Bank_GetUserByName(const char *Username) { + int i, uid; + + uid = GetUnixID(Username); + // Expensive search :( for( i = 0; i < giBank_NumUsers; i ++ ) { - if( gaBank_Users[i].UnixID == UnixID ) + if( gaBank_Users[i].UnixID == uid ) return i; } @@ -89,9 +106,10 @@ int Bank_GetMinAllowedBalance(int ID) /** * \brief Create a new user in our database */ -int Bank_AddUser(int UnixID) +int Bank_AddUser(const char *Username) { void *tmp; + int uid = GetUnixID(Username); // Can has moar space plz? tmp = realloc(gaBank_Users, (giBank_NumUsers+1)*sizeof(gaBank_Users[0])); @@ -99,16 +117,59 @@ int Bank_AddUser(int UnixID) gaBank_Users = tmp; // Crete new user - gaBank_Users[giBank_NumUsers].UnixID = UnixID; + gaBank_Users[giBank_NumUsers].UnixID = uid; gaBank_Users[giBank_NumUsers].Balance = 0; gaBank_Users[giBank_NumUsers].Flags = 0; // Commit to file fseek(gBank_File, giBank_NumUsers*sizeof(gaBank_Users[0]), SEEK_SET); - fwrite(gaBank_Users[giBank_NumUsers], sizeof(gaBank_Users[0]), 1, gBank_File); + fwrite(&gaBank_Users[giBank_NumUsers], sizeof(gaBank_Users[0]), 1, gBank_File); // Increment count giBank_NumUsers ++; return 0; } + +// --- +// Unix user dependent code +// TODO: Modify to keep its own list of usernames +// --- +char *Bank_GetUserName(int ID) +{ + struct passwd *pwd; + + if( ID < 0 || ID >= giBank_NumUsers ) + return NULL; + + if( gaBank_Users[ID].UnixID == -1 ) + return strdup(">sales"); + + if( gaBank_Users[ID].UnixID == -2 ) + return strdup(">liability"); + + pwd = getpwuid(gaBank_Users[ID].UnixID); + if( !pwd ) return NULL; + + return strdup(pwd->pw_name); +} + +static int GetUnixID(const char *Username) +{ + int uid; + + if( strcmp(Username, ">sales") == 0 ) { // Pseudo account that sales are made into + uid = -1; + } + else if( strcmp(Username, ">liability") == 0 ) { // Pseudo acount that money is added from + uid = -2; + } + else { + struct passwd *pwd; + // Get user ID + pwd = getpwnam(Username); + if( !pwd ) return -1; + uid = pwd->pw_uid; + } + return uid; +}