From c91b804c1e3f4f79ca59bb1dd6a285d1ab2b2076 Mon Sep 17 00:00:00 2001 From: TimeServ Date: Mon, 29 May 2006 16:12:21 +0000 Subject: [PATCH] added writeip back, writes all bans and filters to listip.cfg git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2307 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/server/sv_ccmds.c | 55 ++++++++++++++++++++++++++++++++++++++-- engine/server/sv_main.c | 37 --------------------------- 2 files changed, 53 insertions(+), 39 deletions(-) diff --git a/engine/server/sv_ccmds.c b/engine/server/sv_ccmds.c index e757aa541..cea74d5fe 100644 --- a/engine/server/sv_ccmds.c +++ b/engine/server/sv_ccmds.c @@ -847,13 +847,14 @@ void SV_Unban_f (void) while (nb) { nbnext = nb->next; - if (all || NET_CompareAdrMasked(nb->adr, unbanadr, unbanmask)) + if (all || (NET_CompareAdr(nb->adr, unbanadr) && NET_CompareAdr(nb->adrmask, unbanmask))) { if (!all) Con_Printf("unbanned %s\n", NET_AdrToStringMasked(nb->adr, nb->adrmask)); if (svs.bannedips == nb) svs.bannedips = nbnext; Z_Free(nb); + break; } nb = nbnext; @@ -885,19 +886,68 @@ void SV_Unfilter_f (void) while (nb) { nbnext = nb->next; - if (all || NET_CompareAdrMasked(nb->adr, unbanadr, unbanmask)) + if (all || (NET_CompareAdr(nb->adr, unbanadr) && NET_CompareAdr(nb->adrmask, unbanmask))) { if (!all) Con_Printf("unfiltered %s\n", NET_AdrToStringMasked(nb->adr, nb->adrmask)); if (svs.filteredips == nb) svs.filteredips = nbnext; Z_Free(nb); + break; } nb = nbnext; } } +void SV_WriteIP_f (void) +{ + vfsfile_t *f; + char name[MAX_OSPATH]; + bannedips_t *bi; + filteredips_t *fi; + char *s; + + strcpy (name, "listip.cfg"); + + Con_Printf ("Writing %s.\n", name); + + f = FS_OpenVFS(name, "wb", FS_GAME); + if (!f) + { + Con_Printf ("Couldn't open %s\n", name); + return; + } + + s = "// banned ip addresses\n"; + VFS_WRITE(f, s, strlen(s)); + + bi = svs.bannedips; + while (bi) + { + if (bi->reason[0]) + s = va("banip %s \"%s\"\n", NET_AdrToStringMasked(bi->adr, bi->adrmask), bi->reason); + else + s = va("banip %s\n", NET_AdrToStringMasked(bi->adr, bi->adrmask)); + VFS_WRITE(f, s, strlen(s)); + bi = bi->next; + } + + s = "\n// filtered ip addresses\n"; + VFS_WRITE(f, s, strlen(s)); + + fi = svs.filteredips; + while (fi) + { + s = va("addip %s\n", NET_AdrToStringMasked(fi->adr, fi->adrmask)); + VFS_WRITE(f, s, strlen(s)); + fi = fi->next; + } + + VFS_CLOSE (f); +} + + void SV_ForceName_f (void) { client_t *cl; @@ -1870,6 +1920,7 @@ void SV_InitOperatorCommands (void) Cmd_AddCommand ("addip", SV_FilterIP_f); Cmd_AddCommand ("removeip", SV_Unfilter_f); Cmd_AddCommand ("listip", SV_FilterList_f); + Cmd_AddCommand ("writeip", SV_WriteIP_f); // Cmd_AddCommand ("filterip", SV_FilterIP_f); // Cmd_AddCommand ("unfilter", SV_Unfilter_f); diff --git a/engine/server/sv_main.c b/engine/server/sv_main.c index 7d5e73b99..9e329edfe 100644 --- a/engine/server/sv_main.c +++ b/engine/server/sv_main.c @@ -2371,43 +2371,6 @@ If 0, then only addresses matching the list will be allowed. This lets you easi cvar_t filterban = SCVAR("filterban", "1"); -/* -================= -SV_WriteIP_f -================= -*/ -void SV_WriteIP_f (void) -{ -// TODO: function needs to be rewritten to handle new banning and filtering logic -/* - vfsfile_t *f; - char name[MAX_OSPATH]; - qbyte b[4]; - int i; - char *s; - - strcpy (name, "listip.cfg"); - - Con_Printf ("Writing %s.\n", name); - - f = FS_OpenVFS(name, "wb", FS_GAME); - if (!f) - { - Con_Printf ("Couldn't open %s\n", name); - return; - } - - for (i=0 ; i