X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fserver%2Fserver.c;h=b7ca068c4efc1e50c2a56fccbf3856556bcafc68;hb=989710c614c291be681e272d96a0b65eb164232c;hp=21740fd87d126bf4f0af028d76758ea903444071;hpb=dd8536ef3eddac19e517e99479f7ec7c4c1faf1c;p=tpg%2Fopendispense2.git diff --git a/src/server/server.c b/src/server/server.c index 21740fd..b7ca068 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -18,8 +18,9 @@ #include #include #include -#include -#include +#include // Signal handling +#include // AUTHIDENT +#include // time(2) #define DEBUG_TRACE_CLIENT 0 #define HACK_NO_REFUNDS 1 @@ -166,6 +167,7 @@ void Server_Start(void) } if( pid != 0 ) { // Parent, quit + printf("Forked child %i\n", pid); exit(0); } // In child @@ -178,6 +180,8 @@ void Server_Start(void) freopen("/dev/null", "r", stdin); freopen(gsServer_LogFile, "a", stdout); freopen(gsServer_ErrorLog, "a", stderr); + fprintf(stdout, "OpenDispense 2 Server Started at %lld\n", (long long)time(NULL)); + fprintf(stderr, "OpenDispense 2 Server Started at %lld\n", (long long)time(NULL)); #endif } @@ -555,12 +559,18 @@ void Server_Cmd_AUTHIDENT(tClient *Client, char *Args) // Check if trusted (only works with INET sockets at present) len = sizeof(client_addr); - if ( ! getpeername(Client->Socket, (struct sockaddr*)&client_addr, &len) ) { - // throw an error + if( getpeername(Client->Socket, (struct sockaddr*)&client_addr, &len) == -1 ) { + Debug(Client, "500 getpeername() failed\n"); + perror("Getting AUTHIDENT peer name"); + sendf(Client->Socket, "500 getpeername() failed\n"); + return ; } client_ip = client_addr.sin_addr.s_addr; - if ( ! (ntohl(client_ip) == 0x7F000001 || ( (ntohl(client_ip) & IDENT_TRUSTED_NETMASK) == IDENT_TRUSTED_NETWORK ) )) { + if(giDebugLevel >= 2) { + Debug(Client, "client_ip = %x, ntohl(client_ip) = %x", client_ip, ntohl(client_ip)); + } + if( ntohl(client_ip) != 0x7F000001 && (ntohl(client_ip) & IDENT_TRUSTED_NETMASK) != IDENT_TRUSTED_NETWORK ) { if(giDebugLevel) Debug(Client, "Untrusted client attempting to AUTHIDENT"); sendf(Client->Socket, "401 Untrusted\n"); @@ -569,8 +579,9 @@ void Server_Cmd_AUTHIDENT(tClient *Client, char *Args) // Get username via IDENT username = ident_id(Client->Socket, ident_timeout); - if (!username) { + if( !username ) { sendf(Client->Socket, "403 Authentication failure: IDENT auth timed out\n"); + return ; } // Get UID @@ -671,6 +682,13 @@ void Server_Cmd_SETEUSER(tClient *Client, char *Args) return ; } } + + // Disabled accounts + if( userFlags & USER_FLAG_DISABLED ) { + Client->UID = -1; + sendf(Client->Socket, "403 Account disabled\n"); + return ; + } sendf(Client->Socket, "200 User set\n"); } @@ -695,6 +713,8 @@ void Server_int_SendItem(tClient *Client, tItem *Item) } } + if( Item->Price == 0 ) + status = "error"; // KNOWN HACK: Naming a slot 'dead' disables it if( strcmp(Item->Name, "dead") == 0 ) status = "sold"; // Another status?