#include <signal.h>
#define DEBUG_TRACE_CLIENT 0
+#define HACK_NO_REFUNDS 1
// Statistics
#define MAX_CONNECTION_QUEUE 5
// Fork into background
if( gbServer_RunInBackground )
{
- int newin, newout, newerr;
int pid = fork();
if( pid == -1 ) {
fprintf(stderr, "ERROR: Unable to fork\n");
}
// 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 ) {
{
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:
return ;
}
+ // Save username
+ if(Client->Username)
+ free(Client->Username);
+ Client->Username = strdup(username);
+
Client->bIsAuthed = 1;
if(giDebugLevel)
case 1: sendf(Client->Socket, "501 Unable to dispense\n"); return ;
case 2: sendf(Client->Socket, "402 Poor You\n"); return ;
default:
- sendf(Client->Socket, "500 Dispense Error\n");
+ sendf(Client->Socket, "500 Dispense Error (%i)\n", ret);
return ;
}
}
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 ) {
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");