Atrinik Server  4.0
ban.c
Go to the documentation of this file.
1 /*************************************************************************
2  * Atrinik, a Multiplayer Online Role Playing Game *
3  * *
4  * Copyright (C) 2009-2014 Alex Tokar and Atrinik Development Team *
5  * *
6  * Fork from Crossfire (Multiplayer game for X-windows). *
7  * *
8  * This program is free software; you can redistribute it and/or modify *
9  * it under the terms of the GNU General Public License as published by *
10  * the Free Software Foundation; either version 2 of the License, or *
11  * (at your option) any later version. *
12  * *
13  * This program is distributed in the hope that it will be useful, *
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16  * GNU General Public License for more details. *
17  * *
18  * You should have received a copy of the GNU General Public License *
19  * along with this program; if not, write to the Free Software *
20  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
21  * *
22  * The author can be reached at admin@atrinik.org *
23  ************************************************************************/
24 
32 #include <global.h>
33 #include <toolkit/string.h>
34 #include <ban.h>
35 #include <player.h>
36 #include <object.h>
37 
39 void command_ban(object *op, const char *command, char *params)
40 {
41  size_t pos = 0;
42  char word[MAX_BUF];
43  if (!string_get_word(params, &pos, ' ', VS(word), '"')) {
44  return;
45  }
46 
47  params = player_sanitize_input(params + pos);
48 
49  if (strcmp(word, "add") == 0) {
50  if (params == NULL) {
51  return;
52  }
53 
54  ban_error_t rc = ban_add(params);
55  if (rc == BAN_OK) {
56  draw_info(COLOR_GREEN, op, "Added new ban successfully.");
57  } else {
58  draw_info_format(COLOR_RED, op, "Failed to add new ban: %s",
59  ban_strerror(rc));
60  }
61  } else if (strcmp(word, "remove") == 0) {
62  if (params == NULL) {
63  return;
64  }
65 
66  ban_error_t rc = ban_remove(params);
67  if (rc == BAN_OK) {
68  draw_info(COLOR_GREEN, op, "Removed ban successfully.");
69  } else {
70  draw_info_format(COLOR_RED, op, "Failed to remove ban: %s",
71  ban_strerror(rc));
72  }
73  } else if (strcmp(word, "list") == 0) {
74  ban_list(op);
75  } else if (strcmp(word, "kick") == 0) {
76  for (player *pl = first_player; pl != NULL; pl = pl->next) {
77  if (ban_check(pl->cs, pl->ob->name)) {
78  LOG(SYSTEM, "Ban: Kicking player due to a ban. [%s, %s]",
79  pl->ob->name, socket_get_addr(pl->cs->sc));
80  draw_info_type(CHAT_TYPE_GAME, NULL, COLOR_RED, pl->ob,
81  "You have been banned.");
82  pl->cs->state = ST_ZOMBIE;
83  }
84  }
85  }
86 }
void ban_list(object *op)
Definition: ban.c:479
const char * ban_strerror(ban_error_t errnum)
Definition: ban.c:515
void command_ban(object *op, const char *command, char *params)
Definition: ban.c:39
char * player_sanitize_input(char *str)
Definition: player.c:1311
enum ban_error ban_error_t
ban_error_t ban_remove(const char *str)
Definition: ban.c:393
ban_error_t ban_add(const char *str)
Definition: ban.c:363
Success.
Definition: ban.h:41
player * first_player
Definition: main.c:57
bool ban_check(socket_struct *ns, const char *name)
Definition: ban.c:441
struct pl_player * next
Definition: player.h:145