X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fserver%2Fserver.c;h=315b12987f78768edbad34da98f8f9689a7824f6;hb=10fc79a2f4f72165cb1ce1ba78c84faa8d56f5db;hp=8138f1eb63240925a6e991ca1b0cbc8efba0f2c7;hpb=ffc52312097ac25aaca6d20a132242f5f0670c5b;p=tpg%2Fopendispense2.git diff --git a/src/server/server.c b/src/server/server.c index 8138f1e..315b129 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -68,6 +68,7 @@ void _SendUserInfo(tClient *Client, int UserID); void Server_Cmd_USERADD(tClient *Client, char *Args); void Server_Cmd_USERFLAGS(tClient *Client, char *Args); // --- Helpers --- +void Debug(tClient *Client, const char *Format, ...); int Server_int_ParseFlags(tClient *Client, const char *Str, int *Mask, int *Value); int sendf(int Socket, const char *Format, ...); @@ -145,12 +146,14 @@ void Server_Start(void) uint len = sizeof(client_addr); int bTrusted = 0; + // Accept a connection client_socket = accept(giServer_Socket, (struct sockaddr *) &client_addr, &len); if(client_socket < 0) { fprintf(stderr, "ERROR: Unable to accept client connection\n"); return ; } + // Debug: Print the connection string if(giDebugLevel >= 2) { char ipstr[INET_ADDRSTRLEN]; inet_ntop(AF_INET, &client_addr.sin_addr, ipstr, INET_ADDRSTRLEN); @@ -158,6 +161,10 @@ void Server_Start(void) ipstr, ntohs(client_addr.sin_port)); } + // Doesn't matter what, localhost is trusted + if( ntohl( client_addr.sin_addr.s_addr ) == 0x7F000001 ) + bTrusted = 1; + // Trusted Connections if( ntohs(client_addr.sin_port) < 1024 ) { @@ -166,6 +173,7 @@ void Server_Start(void) { case 0x7F000001: // 127.0.0.1 localhost //case 0x825E0D00: // 130.95.13.0 + case 0x825E0D07: // 130.95.13.7 motsugo case 0x825E0D12: // 130.95.13.18 mussel case 0x825E0D17: // 130.95.13.23 martello bTrusted = 1; @@ -334,7 +342,7 @@ void Server_Cmd_USER(tClient *Client, char *Args) // Debug! if( giDebugLevel ) - printf("Client %i authenticating as '%s'\n", Client->ID, Args); + Debug(Client, "Authenticating as '%s'", Args); // Save username if(Client->Username) @@ -395,7 +403,7 @@ void Server_Cmd_AUTOAUTH(tClient *Client, char *Args) // Check if trusted if( !Client->bIsTrusted ) { if(giDebugLevel) - printf("Client %i: Untrusted client attempting to AUTOAUTH\n", Client->ID); + Debug(Client, "Untrusted client attempting to AUTOAUTH"); sendf(Client->Socket, "401 Untrusted\n"); return ; } @@ -404,7 +412,7 @@ void Server_Cmd_AUTOAUTH(tClient *Client, char *Args) Client->UID = Bank_GetAcctByName( Args ); if( Client->UID < 0 ) { if(giDebugLevel) - printf("Client %i: Unknown user '%s'\n", Client->ID, Args); + Debug(Client, "Unknown user '%s'", Args); sendf(Client->Socket, "401 Auth Failure\n"); return ; } @@ -415,9 +423,11 @@ void Server_Cmd_AUTOAUTH(tClient *Client, char *Args) sendf(Client->Socket, "401 Auth Failure\n"); return ; } + + Client->bIsAuthed = 1; if(giDebugLevel) - printf("Client %i: Authenticated as '%s' (%i)\n", Client->ID, Args, Client->UID); + Debug(Client, "Auto authenticated as '%s' (%i)", Args, Client->UID); sendf(Client->Socket, "200 Auth OK\n"); } @@ -439,7 +449,7 @@ void Server_Cmd_SETEUSER(tClient *Client, char *Args) } // Check user permissions - if( !(Bank_GetFlags(Client->UID) & USER_FLAG_COKE) ) { + if( !(Bank_GetFlags(Client->UID) & (USER_FLAG_COKE|USER_FLAG_ADMIN)) ) { sendf(Client->Socket, "403 Not in coke\n"); return ; } @@ -733,7 +743,7 @@ void Server_Cmd_ADD(tClient *Client, char *Args) reason ++; // Check user permissions - if( !(Bank_GetFlags(Client->UID) & USER_FLAG_COKE) ) { + if( !(Bank_GetFlags(Client->UID) & (USER_FLAG_COKE|USER_FLAG_ADMIN)) ) { sendf(Client->Socket, "403 Not in coke\n"); return ; } @@ -1021,10 +1031,14 @@ void Server_Cmd_USERINFO(tClient *Client, char *Args) space = strchr(user, ' '); if(space) *space = '\0'; + if( giDebugLevel ) Debug(Client, "User Info '%s'", user); + // Get recipient uid = Bank_GetAcctByName(user); + + if( giDebugLevel >= 2 ) Debug(Client, "uid = %i", uid); if( uid == -1 ) { - sendf(Client->Socket, "404 Invalid user"); + sendf(Client->Socket, "404 Invalid user\n"); return ; } @@ -1144,6 +1158,17 @@ void Server_Cmd_USERFLAGS(tClient *Client, char *Args) } // --- INTERNAL HELPERS --- +void Debug(tClient *Client, const char *Format, ...) +{ + va_list args; + //printf("%010i [%i] ", (int)time(NULL), Client->ID); + printf("[%i] ", Client->ID); + va_start(args, Format); + vprintf(Format, args); + va_end(args); + printf("\n"); +} + int sendf(int Socket, const char *Format, ...) { va_list args;