X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fserver%2Fserver.c;h=86c63d6dc3df12884fb0bded696ec167213b7493;hb=8e73ecadd6ed8f20fc6ce155ddd7658ff5c801c3;hp=9469b602014db07728ae5ba6f9afe362ad841f76;hpb=eaaa22b9437e80a965c8bcec480d5d023dec3a03;p=tpg%2Fopendispense2.git diff --git a/src/server/server.c b/src/server/server.c index 9469b60..86c63d6 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -401,6 +401,13 @@ void Server_Cmd_AUTOAUTH(tClient *Client, char *Args) return ; } + // You can't be an internal account + if( GetFlags(Client->UID) & USER_FLAG_INTERNAL ) { + Client->UID = -1; + sendf(Client->Socket, "401 Auth Failure\n"); + return ; + } + if(giDebugLevel) printf("Client %i: Authenticated as '%s' (%i)\n", Client->ID, Args, Client->UID); @@ -424,7 +431,7 @@ void Server_Cmd_SETEUSER(tClient *Client, char *Args) } // Check user permissions - if( (GetFlags(Client->UID) & USER_FLAG_TYPEMASK) < USER_TYPE_COKE ) { + if( !(GetFlags(Client->UID) & USER_FLAG_COKE) ) { sendf(Client->Socket, "403 Not in coke\n"); return ; } @@ -436,6 +443,13 @@ void Server_Cmd_SETEUSER(tClient *Client, char *Args) return ; } + // You can't be an internal account + if( GetFlags(Client->EffectiveUID) & USER_FLAG_INTERNAL ) { + Client->EffectiveUID = -1; + sendf(Client->Socket, "404 User not found\n"); + return ; + } + sendf(Client->Socket, "200 User set\n"); } @@ -583,6 +597,12 @@ void Server_Cmd_GIVE(tClient *Client, char *Args) sendf(Client->Socket, "404 Invalid target user\n"); return ; } + + // You can't alter an internal account + if( GetFlags(uid) & USER_FLAG_INTERNAL ) { + sendf(Client->Socket, "404 Invalid target user\n"); + return ; + } // Parse ammount iAmmount = atoi(ammount); @@ -642,20 +662,20 @@ void Server_Cmd_ADD(tClient *Client, char *Args) reason ++; // Check user permissions - if( (GetFlags(Client->UID) & USER_FLAG_TYPEMASK) < USER_TYPE_COKE ) { + if( !(GetFlags(Client->UID) & USER_FLAG_COKE) ) { sendf(Client->Socket, "403 Not in coke\n"); return ; } // Get recipient uid = GetUserID(user); - - // Check user permissions - if( (GetFlags(Client->UID) & USER_FLAG_TYPEMASK) < USER_TYPE_COKE ) { - sendf(Client->Socket, "403 Not in coke\n"); + if( uid == -1 ) { + sendf(Client->Socket, "404 Invalid user\n"); return ; } - if( uid == -1 ) { + + // You can't alter an internal account + if( GetFlags(uid) & USER_FLAG_INTERNAL ) { sendf(Client->Socket, "404 Invalid user\n"); return ; } @@ -759,22 +779,29 @@ void Server_Cmd_USERINFO(tClient *Client, char *Args) void _SendUserInfo(tClient *Client, int UserID) { - char *type, *disabled=""; + char *type, *disabled="", *door=""; int flags = GetFlags(UserID); - switch( flags & USER_FLAG_TYPEMASK ) - { - default: - case USER_TYPE_NORMAL: type = "user"; break; - case USER_TYPE_COKE: type = "coke"; break; - case USER_TYPE_WHEEL: type = "wheel"; break; - case USER_TYPE_GOD: type = "meta"; break; + if( flags & USER_FLAG_INTERNAL ) { + type = "internal"; + } + else if( flags & USER_FLAG_COKE ) { + if( flags & USER_FLAG_WHEEL ) + type = "coke,wheel"; + else + type = "coke"; + } + else if( flags & USER_FLAG_WHEEL ) { + type = "wheel"; + } + else { + type = "user"; } if( flags & USER_FLAG_DISABLED ) disabled = ",disabled"; if( flags & USER_FLAG_DOORGROUP ) - disabled = ",door"; + door = ",door"; // TODO: User flags/type sendf( @@ -789,7 +816,7 @@ void Server_Cmd_USERADD(tClient *Client, char *Args) char *username, *space; // Check permissions - if( (GetFlags(Client->UID) & USER_FLAG_TYPEMASK) < USER_TYPE_WHEEL ) { + if( !(GetFlags(Client->UID) & USER_FLAG_WHEEL) ) { sendf(Client->Socket, "403 Not Wheel\n"); return ; } @@ -817,7 +844,7 @@ void Server_Cmd_USERFLAGS(tClient *Client, char *Args) int uid; // Check permissions - if( (GetFlags(Client->UID) & USER_FLAG_TYPEMASK) < USER_TYPE_WHEEL ) { + if( !(GetFlags(Client->UID) & USER_FLAG_WHEEL) ) { sendf(Client->Socket, "403 Not Wheel\n"); return ; } @@ -854,12 +881,11 @@ void Server_Cmd_USERFLAGS(tClient *Client, char *Args) int Mask; int Value; } cFLAGS[] = { - {"disabled", USER_FLAG_DISABLED, USER_FLAG_DISABLED}, - {"door", USER_FLAG_DOORGROUP, USER_FLAG_DOORGROUP}, - {"user", USER_FLAG_TYPEMASK, USER_TYPE_NORMAL}, - {"coke", USER_FLAG_TYPEMASK, USER_TYPE_COKE}, - {"wheel", USER_FLAG_TYPEMASK, USER_TYPE_WHEEL}, - {"meta", USER_FLAG_TYPEMASK, USER_TYPE_GOD} + {"disabled", USER_FLAG_DISABLED, USER_FLAG_DISABLED} + ,{"door", USER_FLAG_DOORGROUP, USER_FLAG_DOORGROUP} + ,{"coke", USER_FLAG_COKE, USER_FLAG_COKE} + ,{"wheel", USER_FLAG_WHEEL, USER_FLAG_WHEEL} + // ,{"internal", USER_FLAG_INTERNAL, USER_FLAG_INTERNAL} }; const int ciNumFlags = sizeof(cFLAGS)/sizeof(cFLAGS[0]);