void Server_Cmd_ENUMUSERS(tClient *Client, char *Args);
void Server_Cmd_USERINFO(tClient *Client, char *Args);
void _SendUserInfo(tClient *Client, int UserID);
+void Server_Cmd_USERADD(tClient *Client, char *Args);
+void Server_Cmd_USERFLAGS(tClient *Client, char *Args);
// --- Helpers ---
int sendf(int Socket, const char *Format, ...);
int GetUserAuth(const char *Salt, const char *Username, const uint8_t *Hash);
{"GIVE", Server_Cmd_GIVE},
{"ADD", Server_Cmd_ADD},
{"ENUM_USERS", Server_Cmd_ENUMUSERS},
- {"USER_INFO", Server_Cmd_USERINFO}
+ {"USER_INFO", Server_Cmd_USERINFO},
+ {"USER_ADD", Server_Cmd_USERADD},
+ {"USER_FLAGS", Server_Cmd_USERFLAGS}
};
#define NUM_COMMANDS (sizeof(gaServer_Commands)/sizeof(gaServer_Commands[0]))
int giServer_Socket;
{
char *space, *args;
int i;
+ #if 0
+ char **argList;
+ int numArgs = 0;
+ #endif
// Split at first space
space = strchr(CommandString, ' ');
else {
*space = '\0';
args = space + 1;
+ while( *space == ' ' ) space ++;
+
+ #if 0
+ // Count arguments
+ numArgs = 1;
+ for( i = 0; args[i]; )
+ {
+ while( CommandString[i] != ' ' ) {
+ if( CommandString[i] == '"' ) {
+ while( !(CommandString[i] != '\\' CommandString[i+1] == '"' ) )
+ i ++;
+ i ++;
+ }
+ i ++;
+ }
+ numArgs ++;
+ while( CommandString[i] == ' ' ) i ++;
+ }
+ #endif
}
+
// Find command
for( i = 0; i < NUM_COMMANDS; i++ )
{
}
// Get UID
- Client->UID = GetUserID( Args );
+ Client->UID = GetUserID( Args );
if( Client->UID < 0 ) {
if(giDebugLevel)
printf("Client %i: Unknown user '%s'\n", Client->ID, Args);
if( bal < minBal ) continue;
if( bal > maxBal ) continue;
- // TODO: User flags
_SendUserInfo(Client, i);
}
);
}
+void Server_Cmd_USERADD(tClient *Client, char *Args)
+{
+ char *username, *space;
+
+ // Check permissions
+ if( (GetFlags(Client->UID) & USER_FLAG_TYPEMASK) < USER_TYPE_WHEEL ) {
+ sendf(Client->Socket, "403 Not Wheel\n");
+ return ;
+ }
+
+ // Read arguments
+ username = Args;
+ while( *username == ' ' ) username ++;
+ space = strchr(username, ' ');
+ if(space) *space = '\0';
+
+ // Try to create user
+ if( CreateUser(username) == -1 ) {
+ sendf(Client->Socket, "404 User exists\n");
+ return ;
+ }
+
+ sendf(Client->Socket, "200 User Added\n");
+}
+
+void Server_Cmd_USERFLAGS(tClient *Client, char *Args)
+{
+ char *username, *flags;
+ char *space;
+
+ // Check permissions
+ if( (GetFlags(Client->UID) & USER_FLAG_TYPEMASK) < USER_TYPE_WHEEL ) {
+ sendf(Client->Socket, "403 Not Wheel\n");
+ return ;
+ }
+
+ // Read arguments
+ // - Username
+ username = Args;
+ while( *username == ' ' ) username ++;
+ space = strchr(username, ' ');
+ if(!space) {
+ sendf(Client->Socket, "407 USER_FLAGS requires 2 arguments, 1 given\n");
+ return ;
+ }
+ // - Flags
+ flags = space + 1;
+ while( *flags == ' ' ) flags ++;
+ space = strchr(flags, ' ');
+ if(space) *space = '\0';
+
+ printf("Username = '%s', flags = '%s'\n", username, flags);
+
+ sendf(Client->Socket, "200 User Updated\n");
+}
+
/**
* \brief Authenticate a user
* \return User ID, or -1 if authentication failed
return GetUserID("tpg");
#endif
#if HACK_ROOT_NOAUTH
- if( strcmp(Username, "root") == 0 )
- return GetUserID("root");
+ if( strcmp(Username, "root") == 0 ) {
+ int ret = GetUserID("root");
+ if( ret == -1 )
+ return CreateUser("root");
+ return ret;
+ }
#endif
#if 0