#include <unistd.h> #include "kernel.h" #include "pflags.h" #include "bprintf.h" #include "parse.h" #include "log.h" #include "mud.h" void banlistcom (void) { bprintf("The following hosts have been banned:\n\n"); bprintf("\001f%s\003", BAN_HOSTS); bprintf("\n\nThe following hots have been user/who banned:\n\n"); bprintf("\001f%s\003", BAN_WHOS); bprintf("\n\nThe following accounts have been banned:\n\n"); bprintf("\001f%s\003", BAN_ACCTS); bprintf("\n\nThe following characters have been banned:\n\n"); bprintf("\001f%s\003", BAN_CHARS); } void bancom (char filename[100], int type) { static char *log[] = { "BANHOST", "BANCHAR", "BANACCT", "BANWHO" }; static char *info[] = { "host", "user", "account", "login checks from" }; int val; char text[80], orig[80]; if (!ptstflg (mynum, PFL_BAN)) { erreval (); return; } getreinput (text); if (EMPTY (text)) { bprintf ("Ban/Unban who or what?\n"); return; } sprintf (orig, "%s", text); if (type == BANCHAR) orig[0] = toupper (orig[0]); val = addordel (filename, text); if (val == 0) { bprintf ("Error has occured in ban.\n"); mudlog ("%s: Error has occured!", log[type]); return; } if (val == ADDED) { bprintf ("You have banned %s %s.\n", info[type], orig); mudlog ("%s: %s banned %s.", log[type], pname (mynum), orig); return; } if (val == DELETED) { bprintf ("You have unbanned %s %s.\n", info[type], orig); mudlog ("%s: %s unbanned %s.", log[type], pname (mynum), orig); return; } } Boolean check_host_bans (void) { if (is_host_who_banned(hostname(mynum))) cur_player->user_ban = True; else if (is_host_who_banned(ip_addr(mynum))) cur_player->user_ban = True; if (is_host_banned(hostname(mynum))) { sock_msg ("&+RHostname banned: %s", hostname(mynum)); bprintf ("\001f%s\003", HOST_BANNED); } else if (is_host_banned(ip_addr(mynum))) { sock_msg ("&+RIP banned: %s", ip_addr(mynum)); bprintf ("\001f%s\003", IP_BANNED); } else if (is_host_username_banned(username(mynum))) { sock_msg ("&+RUser@host banned: %s", username(mynum)); bprintf ("\001f%s\003", USERNAME_BANNED); } else return False; quit_player(False); return(True); } int addordel (char file_name[80], char check[80]) { FILE *fl; if ((fl = FOPEN(file_name, "r")) != NULL) if (infile (file_name, check)) { FCLOSE(fl); return delname (file_name, check); } else { FCLOSE(fl); return addname (file_name, check); } else return 0; } int addname (char file_name[80], char name[80]) { FILE *fl; if ((fl = (FOPEN(file_name, "a"))) == NULL) { return 0; } fprintf (fl, name); fprintf (fl, "\n"); FCLOSE(fl); return ADDED; } int delname (char file_name[80], char name[80]) { FILE *a, *b; char name_in_file[80]; if ((a = FOPEN(file_name, "r")) == NULL) return 0; if ((b = FOPEN("TMP_FILE", "w")) == NULL) { FCLOSE(a); return 0; } strcat (name, "\n"); while (fgets (name_in_file, sizeof name_in_file, a)) if (!EQ (name, name_in_file)) fprintf (b, "%s", name_in_file); FCLOSE(a); FCLOSE(b); unlink (file_name); rename ("TMP_FILE", file_name); return DELETED; } Boolean infile (char *file, const char *line) { FILE *fl; char buff[80]; if ((fl = FOPEN(file, "r")) == NULL) return False; while(1) { fgets(buff, 80, fl); if (feof(fl)) break; else if (match (buff, line)) { FCLOSE(fl); return(True); } } FCLOSE(fl); return(False); }