X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fserver%2Fserver.c;h=6286f43a3b2217ad4283447a09328d88f2df3338;hb=5cf5f1c0479d0052d53ea735895a550a0e455287;hp=b34d93d731b643dfa99ee734332807cbf4682f96;hpb=81797498c0f078dbe129a59f9e28e17848c00611;p=tpg%2Fopendispense2.git diff --git a/src/server/server.c b/src/server/server.c index b34d93d..6286f43 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -21,6 +21,7 @@ #include #define DEBUG_TRACE_CLIENT 0 +#define HACK_NO_REFUNDS 1 // Statistics #define MAX_CONNECTION_QUEUE 5 @@ -151,7 +152,6 @@ void Server_Start(void) // Fork into background if( gbServer_RunInBackground ) { - int newin, newout, newerr; int pid = fork(); if( pid == -1 ) { fprintf(stderr, "ERROR: Unable to fork\n"); @@ -164,13 +164,19 @@ void Server_Start(void) } // In child // - Sort out stdin/stdout - newin = open("/dev/null", O_RDONLY); - newout = open(gsServer_LogFile, O_CREAT|O_APPEND, 0644); - newerr = open(gsServer_ErrorLog, O_CREAT|O_APPEND, 0644); - dup2(newin, 0); - dup2(newout, 1); - dup2(newerr, 2); + #if 0 + dup2( open("/dev/null", O_RDONLY, 0644), STDIN_FILENO ); + dup2( open(gsServer_LogFile, O_CREAT|O_APPEND, 0644), STDOUT_FILENO ); + dup2( open(gsServer_ErrorLog, O_CREAT|O_APPEND, 0644), STDERR_FILENO ); + #else + freopen("/dev/null", "r", stdin); + freopen(gsServer_LogFile, "a", stdout); + freopen(gsServer_ErrorLog, "a", stderr); + #endif } + + // Start the helper thread + StartPeriodicThread(); // Listen if( listen(giServer_Socket, MAX_CONNECTION_QUEUE) < 0 ) { @@ -234,12 +240,14 @@ void Server_Start(void) { case 0x7F000001: // 127.0.0.1 localhost // case 0x825F0D00: // 130.95.13.0 + case 0x825F0D04: // 130.95.13.4 merlo + // case 0x825F0D05: // 130.95.13.5 heathred (MR) case 0x825F0D07: // 130.95.13.7 motsugo case 0x825F0D11: // 130.95.13.17 mermaid case 0x825F0D12: // 130.95.13.18 mussel case 0x825F0D17: // 130.95.13.23 martello case 0x825F0D2A: // 130.95.13.42 meersau - case 0x825F0D42: // 130.95.13.66 heathred + // case 0x825F0D42: // 130.95.13.66 heathred (Clubroom) bTrusted = 1; break; default: @@ -507,6 +515,11 @@ void Server_Cmd_AUTOAUTH(tClient *Client, char *Args) return ; } + // Save username + if(Client->Username) + free(Client->Username); + Client->Username = strdup(username); + Client->bIsAuthed = 1; if(giDebugLevel) @@ -910,6 +923,24 @@ void Server_Cmd_ADD(tClient *Client, char *Args) return ; } + #if !ROOT_CAN_ADD + if( strcmp( Client->Username, "root" ) == 0 ) { + // Allow adding for new users + if( strcmp(reason, "treasurer: new user") != 0 ) { + sendf(Client->Socket, "403 Root may not add\n"); + return ; + } + } + #endif + + #if HACK_NO_REFUNDS + if( strstr(reason, "refund") != NULL || strstr(reason, "misdispense") != NULL ) + { + sendf(Client->Socket, "499 Don't use `dispense acct` for refunds, use `dispense refund` (and `dispense -G` to get item IDs)\n"); + return ; + } + #endif + // Get recipient uid = Bank_GetAcctByName(user, 0); if( uid == -1 ) { @@ -1313,8 +1344,8 @@ void Server_Cmd_USERFLAGS(tClient *Client, char *Args) Bank_SetFlags(uid, mask, value); // Log the change - Log_Info("Updated '%s' with flag set '%s' - Reason: %s", - username, flags, reason); + Log_Info("Updated '%s' with flag set '%s' by '%s' - Reason: %s", + username, flags, Client->Username, reason); // Return OK sendf(Client->Socket, "200 User Updated\n");