/* ============ Cmd_RemoteUnsetAdmin_f ============ */ void SV_RemoteCmdUnsetAdmin(int uid, char* guid) { adminPower_t *admin, **this; if(uid < 1){ Com_Printf("No such player\n"); return; } NV_ProcessBegin(); for(this = &adminpower, admin = *this; admin ; admin = *this) { if(admin->uid == uid){ *this = admin->next; Z_Free(admin); NV_ProcessEnd(); Com_Printf( "User removed: uid: %i\n", uid); SV_PrintAdministrativeLog( "removed admin with uid: %i", uid); return; } this = &admin->next; } Com_Printf( "Error: No such user in database\n"); NV_ProcessEnd(); }
/* ============ Cmd_RemoteUnsetAdmin_f ============ */ void SV_RemoteCmdUnsetAdmin(int uid, char* guid) { adminPower_t *admin, **this; if(SV_UseUids()){ if(uid < 1){ Com_Printf("No such player\n"); return; } NV_ProcessBegin(); for(this = &adminpower, admin = *this; admin ; admin = *this) { if(admin->uid == uid){ *this = admin->next; Z_Free(admin); NV_ProcessEnd(); Com_Printf( "User removed: uid: %i\n", uid); SV_PrintAdministrativeLog( "removed admin with uid: %i", uid); return; } this = &admin->next; } }else{ if(guid && strlen(guid) == 32) { guid += 24; } if(!guid || strlen(guid) != 8) { Com_Printf("Error: No such player\n"); return; } NV_ProcessBegin(); for(this = &adminpower, admin = *this; admin ; admin = *this) { if(!Q_stricmp(admin->guid, guid)){ *this = admin->next; Z_Free(admin); NV_ProcessEnd(); Com_Printf( "User removed: guid: %s\n", guid); SV_PrintAdministrativeLog( "removed admin with guid: %s", guid); return; } this = &admin->next; } } Com_Printf( "Error: No such user in database\n"); NV_ProcessEnd(); }
void Auth_UnsetAdmin_f( void ) { const char* username; int i; authData_admin_t* user; if(Cmd_Argc() != 2) { Com_Printf("Usage: %s < username >\n"); return; } username = Cmd_Argv(1); NV_ProcessBegin(); for(i = 0, user = auth_admins.admins; i < MAX_AUTH_ADMINS; i++, user++) { if(!Q_stricmp(user->username, username)) { Com_Printf("Removed %s from the list of admins\n", user->username); Com_Memset(user, 0, sizeof(authData_admin_t)); NV_ProcessEnd(); return; } } Com_Printf("No such admin: %s\n", username); }
/* ============ Cmd_RemoteSetPermission Changes minimum-PowerLevel of a command ============ */ void SV_RemoteCmdSetPermission(char* command, int power) { NV_ProcessBegin(); if(Cmd_SetPower(command, power)) { SV_PrintAdministrativeLog("changed required power of cmd: %s to new power: %i", command, power); Com_Printf("changed required power of cmd: %s to new power: %i\n", command, power); }else{ Com_Printf("Failed to change power of cmd: %s Maybe this is not a valid command.\n", command); } NV_ProcessEnd(); }
void SV_RemoteCmdSetAdmin(int uid, char* guid, int power) { adminPower_t *admin; adminPower_t *this; if(SV_UseUids()){ if(uid < 1){ Com_Printf("No such player\n"); return; } NV_ProcessBegin(); for(admin = adminpower ; admin ; admin = admin->next){ if(admin->uid == uid){ if(admin->power != power){ admin->power = power; Com_Printf( "Admin power changed for: uid: %i to level: %i\n", uid, power); SV_PrintAdministrativeLog( "changed power of admin with uid: %i to new power: %i", uid, power); } NV_ProcessEnd(); return; } } this = Z_Malloc(sizeof(adminPower_t)); if(this){ this->uid = uid; this->power = power; this->next = adminpower; adminpower = this; Com_Printf( "Admin added: uid: %i level: %i\n", uid, power); SV_PrintAdministrativeLog( "added a new admin with uid: %i and power: %i", uid, power); } }else{ if(guid && strlen(guid) == 32) { guid += 24; } if(!guid || strlen(guid) != 8) { Com_Printf("Error: No such player\n"); return; } NV_ProcessBegin(); for(admin = adminpower ; admin ; admin = admin->next) { if(!Q_stricmp(admin->guid, guid)){ if(admin->power != power){ admin->power = power; Com_Printf( "Admin power changed for: guid: %s to level: %i\n", guid, power); SV_PrintAdministrativeLog( "changed power of admin with guid: %s to new power: %i", guid, power); } NV_ProcessEnd(); return; } } this = Z_Malloc(sizeof(adminPower_t)); if(this) { Q_strncpyz(this->guid, guid, sizeof(this->guid)); this->power = power; this->next = adminpower; adminpower = this; Com_Printf( "Admin added: guid: %s level: %i\n", guid, power); SV_PrintAdministrativeLog( "added a new admin with guid: %s and power: %i", guid, power); } } NV_ProcessEnd(); }
void Auth_SetAdmin_f( void ) { const char* username; const char* password; const char* sha256; byte buff[129]; char salt[65]; unsigned long size = sizeof(salt); int power, i,uid; authData_admin_t* user; authData_admin_t* free = NULL; mvabuf; if(Cmd_Argc() != 4) { Com_Printf("Usage: %s <username> <password> <power>\n", Cmd_Argv(0)); Com_Printf( "Where username is loginname for this user\n" ); Com_Printf( "Where password is the initial 6 characters long or longer password for this user which should get changed by the user on first login\n" ); Com_Printf( "Where power is one of the following: Any number between 1 and 100\n" ); return; } username = Cmd_Argv(1); password = Cmd_Argv(2); power = atoi(Cmd_Argv(3)); if(!username || !*username || !password || strlen(password) < 6 || power < 1 || power > 100) { Com_Printf("Usage: %s <username> <password> <power>\n", Cmd_Argv(0)); Com_Printf( "Where username is loginname for this user\n" ); Com_Printf( "Where password is the initial 6 characters long or longer password for this user which should get changed by the user on first login\n" ); Com_Printf( "Where power is one of the following: Any number between 1 and 100\n" ); return; } NV_ProcessBegin(); uid = ++auth_admins.maxUID; for(i = 0, user = auth_admins.admins; i < MAX_AUTH_ADMINS; i++, user++) { if(!Q_stricmp(user->username, username)) { Com_Printf("An admin with this username is already registered\n"); return; } if(!free && !*user->username ) free = user; } if(!free) { Com_Printf("Too many registered admins. Limit is: %d\n", MAX_AUTH_ADMINS); return; } Com_RandomBytes(buff, sizeof(buff)); //Sec_BinaryToHex((char *)buff,sizeof(buff),salt,&size); Sec_HashMemory(SEC_HASH_SHA256,buff,sizeof(buff),salt,&size,qfalse); /*for(i = 0; i < sizeof(salt) -1; i++){ if(salt[i] > 126){ salt[i] -= 125; } if(salt[i] < ' '){ salt[i] += ' '; } if(salt[i] == ';') salt[i]++; if(salt[i] == '\\') salt[i]++; if(salt[i] == '%') salt[i]++; if(salt[i] == '"') salt[i]++; } salt[sizeof(salt) -1] = 0;*/ sha256 = Com_SHA256(va("%s.%s", password, salt)); Q_strncpyz(free->username, username, sizeof(free->username)); Com_Printf("Debug: 1:%s 2:%s\n", username, free->username); Q_strncpyz(free->sha256, sha256, sizeof(free->sha256)); Q_strncpyz(free->salt, (char*)salt, sizeof(free->salt)); //free->power = power; Instead: SV_RemoteCmdSetAdmin(uid, NULL, power); free->uid = uid; Com_Printf("Registered user with Name: %s Power: %d UID: %d\n", free->username, power, uid); NV_ProcessEnd(); }
void Auth_ChangeAdminPassword( int uid,const char* oldPassword,const char* password ) { const char* sha256; byte buff[129]; char salt[65]; unsigned long size = sizeof(salt); authData_admin_t *user, *user2; int i; //int uid = -1; mvabuf; if(!password || strlen(password) < 6) { Com_Printf("Error: the new password must have at least 6 characters\n"); return; } NV_ProcessBegin(); for(i = 0, user2 = auth_admins.admins; i < MAX_AUTH_ADMINS; i++, user2++) { if(*user2->username && user2->uid == uid) { user = user2; } } if(user == NULL) { Com_Printf("Error: unknown admin @%d!\n",uid); return; } Com_RandomBytes(buff, sizeof(buff)); Sec_HashMemory(SEC_HASH_SHA256,buff,sizeof(buff),salt,&size,qfalse); /*salt[sizeof(salt) -1] = 0; // Not needed for(i = 0; i < sizeof(salt) -1; i++){ if(salt[i] > 126){ salt[i] -= 125; } if(salt[i] < ' '){ salt[i] += ' '; } if(salt[i] == ';') salt[i]++; if(salt[i] == '\\') salt[i]++; if(salt[i] == '%') salt[i]++; if(salt[i] == '"') salt[i]++; }*/ sha256 = Com_SHA256(va("%s.%s", password, salt)); Q_strncpyz(user->sha256, sha256, sizeof(user->sha256)); Q_strncpyz(user->salt, (char *)salt, sizeof(user->salt)); NV_ProcessEnd(); Com_Printf("Password changed to: %s\n", password); }