X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=src%2Fclient%2Fmain.c;h=1f4485d6153430140ee2a268fbe6b5dd2e1d6499;hb=6ce2ae9922415d9f65ded1c468e45eed50758666;hp=444ab34c9aba8880105e3acea515182dab12937f;hpb=0b5755205d388b5704c040c21285c0b7ab58825e;p=tpg%2Fopendispense2.git diff --git a/src/client/main.c b/src/client/main.c index 444ab34..1f4485d 100644 --- a/src/client/main.c +++ b/src/client/main.c @@ -12,7 +12,8 @@ #include #include #include // isspace -#include // close +#include // getpwuids +#include // close/getuid #include // INT_MIN/INT_MAX #include "common.h" @@ -344,7 +345,6 @@ int main(int argc, char *argv[]) break; } printf("%i - %s %3i %s\n", gaItems[i].ID, status, gaItems[i].Price, gaItems[i].Desc); - } printf("\nMay your pink fish bing into the distance.\n"); @@ -385,19 +385,20 @@ int main(int argc, char *argv[]) // gsTextArgs[1]: Username // gsTextArgs[2]: Ammount // gsTextArgs[3]: Reason + char *tmp = NULL; + long int balance = strtol(gsTextArgs[2]+(gsTextArgs[2][0] == '='), &tmp, 10); + if(!tmp || *tmp != '\0') { + fprintf(stderr, "dispense acct: Value must be a decimal number of cents\n"); + return RV_ARGUMENTS; + } if( gsTextArgs[2][0] == '=' ) { // Set balance - if( gsTextArgs[2][1] != '0' && atoi(gsTextArgs[2]+1) == 0 ) { - fprintf(stderr, "Error: Invalid balance to be set\n"); - exit(1); - } - - ret = Dispense_SetBalance(sock, gsTextArgs[1], atoi(gsTextArgs[2]+1), gsTextArgs[3]); + ret = Dispense_SetBalance(sock, gsTextArgs[1], balance, gsTextArgs[3]); } else { // Alter balance - ret = Dispense_AlterBalance(sock, gsTextArgs[1], atoi(gsTextArgs[2]), gsTextArgs[3]); + ret = Dispense_AlterBalance(sock, gsTextArgs[1], balance, gsTextArgs[3]); } } // On error, quit @@ -434,8 +435,14 @@ int main(int argc, char *argv[]) // Authenticate ret = Authenticate(sock); if(ret) return ret; - - ret = Dispense_Give(sock, gsTextArgs[1], atoi(gsTextArgs[2]), gsTextArgs[3]); + + char *tmp = NULL; + int amt = strtol(gsTextArgs[2], &tmp, 10); + if( !tmp || *tmp != '\0' ) { + fprintf(stderr, "dispense give: Balance is invalid, must be decimal number of cents"); + return RV_ARGUMENTS; + } + ret = Dispense_Give(sock, gsTextArgs[1], amt, gsTextArgs[3]); close(sock); @@ -637,6 +644,54 @@ int main(int argc, char *argv[]) close(sock); return ret; } + // Check a user's pin + else if(strcmp(gsTextArgs[0], "pincheck") == 0) + { + if( giTextArgc < 2 || giTextArgc > 3 ) { + fprintf(stderr, "Error: `dispense pincheck` takes one/two arguments\n"); + ShowUsage(); + return RV_ARGUMENTS; + } + struct passwd *pwd = getpwuid( getuid() ); + gsUserName = strdup(pwd->pw_name); + + const char *pin = gsTextArgs[1]; + const char *user = gsUserName; + if( giTextArgc == 3 ) + user = gsTextArgs[2]; + + + sock = OpenConnection(gsDispenseServer, giDispensePort); + if( sock < 0 ) return RV_SOCKET_ERROR; + ret = Authenticate(sock); + if(ret) return ret; + + ret = DispenseCheckPin(sock, user, pin); + + close(sock); + return ret; + } + // Update 'your' pin + else if(strcmp(gsTextArgs[0], "pinset") == 0) + { + if( giTextArgc != 2 ) { + fprintf(stderr, "Error: `dispense pinset` takes one argument\n"); + ShowUsage(); + return RV_ARGUMENTS; + } + + const char *pin = gsTextArgs[1]; + + sock = OpenConnection(gsDispenseServer, giDispensePort); + if( sock < 0 ) return RV_SOCKET_ERROR; + ret = Authenticate(sock); + if(ret) return ret; + + ret = DispenseSetPin(sock, pin); + + close(sock); + return ret; + } // Item name / pattern else {