X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fserver%2Fserver.c;h=11846bb21fceb1836dba743e28f60e3bdfbddd76;hb=6d657891a5410b7d93cc90f376a3ef27b72b20f6;hp=2afd1a7b9d73fdf5126ffd9a4ee72f63e3cfe683;hpb=afc4569cb98d4cc498e78ebb51767e5521ba2ea8;p=tpg%2Fopendispense2.git diff --git a/src/server/server.c b/src/server/server.c index 2afd1a7..11846bb 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -10,6 +10,7 @@ #include #include #include "common.h" +#include "../common/config.h" #include #include #include @@ -155,7 +156,6 @@ void Server_Start(void) } } - atexit(Server_Cleanup); // Ignore SIGPIPE (stops crashes when the client exits early) signal(SIGPIPE, SIG_IGN); @@ -176,6 +176,7 @@ void Server_Start(void) if( bind(giServer_Socket, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0 ) { fprintf(stderr, "ERROR: Unable to bind to 0.0.0.0:%i\n", giServer_Port); perror("Binding"); + close(giServer_Socket); return ; } @@ -190,7 +191,7 @@ void Server_Start(void) } if( pid != 0 ) { // Parent, quit - printf("Forked child %i\n", pid); + Debug_Notice("Forked child server as PID %i\n", pid); exit(0); } // In child @@ -207,6 +208,7 @@ void Server_Start(void) fprintf(stderr, "OpenDispense 2 Server Started at %lld\n", (long long)time(NULL)); #endif } + atexit(Server_Cleanup); // Start the helper thread StartPeriodicThread(); @@ -218,7 +220,7 @@ void Server_Start(void) return ; } - printf("Listening on 0.0.0.0:%i\n", giServer_Port); + Debug_Notice("Listening on 0.0.0.0:%i", giServer_Port); // write pidfile { @@ -258,7 +260,7 @@ void Server_Start(void) if(giDebugLevel >= 2) { char ipstr[INET_ADDRSTRLEN]; inet_ntop(AF_INET, &client_addr.sin_addr, ipstr, INET_ADDRSTRLEN); - printf("Client connection from %s:%i\n", + Debug_Debug("Client connection from %s:%i", ipstr, ntohs(client_addr.sin_port)); } @@ -312,7 +314,7 @@ void Server_Start(void) void Server_Cleanup(void) { - printf("\nClose(%i)\n", giServer_Socket); + Debug_Debug("Close(%i)", giServer_Socket); close(giServer_Socket); unlink(PIDFILE); } @@ -1100,7 +1102,7 @@ void Server_Cmd_ADD(tClient *Client, char *Args) if( !(Bank_GetFlags(Client->UID) & USER_FLAG_ADMIN) ) { if( Bank_GetFlags(uid) & USER_FLAG_INTERNAL ) { - sendf(Client->Socket, "404 Invalid user\n"); + sendf(Client->Socket, "403 Admin only\n"); return ; } // TODO: Maybe disallow changes to disabled? @@ -1164,17 +1166,15 @@ void Server_Cmd_SET(tClient *Client, char *Args) return ; } + int origBalance, rv; // Do give - switch( DispenseSet(Client->UID, uid, iAmmount, reason) ) + switch( rv = DispenseSet(Client->UID, uid, iAmmount, reason, &origBalance) ) { case 0: - sendf(Client->Socket, "200 Add OK\n"); - return ; - case 2: - sendf(Client->Socket, "402 Poor Guy\n"); + sendf(Client->Socket, "200 Add OK (%i)\n", origBalance); return ; default: - sendf(Client->Socket, "500 Unknown error\n"); + sendf(Client->Socket, "500 Unknown error (%i)\n", rv); return ; } } @@ -1560,7 +1560,7 @@ void Server_Cmd_PINCHECK(tClient *Client, char *Args) } pin = atoi(pinstr); - // Not strictly needed, but ensures that randoms don't do brute forcing + // Not authenticated? go away! if( !Client->bIsAuthed ) { sendf(Client->Socket, "401 Not Authenticated\n"); return ; @@ -1591,6 +1591,13 @@ void Server_Cmd_PINCHECK(tClient *Client, char *Args) if( !Bank_IsPinValid(uid, pin) ) { sendf(Client->Socket, "201 Pin incorrect\n"); + struct sockaddr_storage addr; + socklen_t len = sizeof(addr); + char ipstr[INET6_ADDRSTRLEN]; + getpeername(Client->Socket, (void*)&addr, &len); + struct sockaddr_in *s = (struct sockaddr_in *)&addr; + inet_ntop(addr.ss_family, &s->sin_addr, ipstr, sizeof(ipstr)); + Debug_Notice("Bad pin from %s for %s by %i", ipstr, username, Client->UID); if( backoff < 5) backoff ++; return ; @@ -1608,7 +1615,7 @@ void Server_Cmd_PINSET(tClient *Client, char *Args) if( Server_int_ParseArgs(0, Args, &pinstr, NULL) ) { - sendf(Client->Socket, "407 PIN_SET takes 2 arguments\n"); + sendf(Client->Socket, "407 PIN_SET takes 1 argument\n"); return ; } @@ -1618,7 +1625,6 @@ void Server_Cmd_PINSET(tClient *Client, char *Args) } pin = atoi(pinstr); - // Not strictly needed, but ensures that randoms don't do brute forcing if( !Client->bIsAuthed ) { sendf(Client->Socket, "401 Not Authenticated\n"); return ;