Main Page | Alphabetical List | Data Structures | File List | Data Fields | Globals

ban.c File Reference

#include <sys/types.h>
#include <sys/time.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "merc.h"
#include "recycle.h"

Include dependency graph for ban.c:

Go to the source code of this file.

Functions

void ban_site (CHAR_DATA *ch, char *argument, bool fPerm)
bool check_ban (char *site, int type)
void do_allow (CHAR_DATA *ch, char *argument)
void do_ban (CHAR_DATA *ch, char *argument)
void do_permban (CHAR_DATA *ch, char *argument)
void load_bans (void)
void save_bans (void)

Variables

BAN_DATAban_list


Function Documentation

void ban_site CHAR_DATA ch,
char *  argument,
bool  fPerm
 

Definition at line 137 of file ban.c.

References add_buf(), BAN_ALL, ban_data::ban_flags, ban_list, BAN_NEWBIES, BAN_PERMANENT, BAN_PERMIT, BAN_PREFIX, BAN_SUFFIX, buf_string(), FALSE, free_ban(), free_buf(), get_trust(), IS_SET, ban_data::level, MAX_INPUT_LENGTH, MAX_STRING_LENGTH, ban_data::name, new_ban(), new_buf(), ban_data::next, one_argument(), page_to_char(), save_bans(), send_to_char(), SET_BIT, str_cmp(), str_dup(), str_prefix(), and TRUE.

Referenced by do_ban(), and do_permban().

00138 {
00139     char buf[MAX_STRING_LENGTH], buf2[MAX_STRING_LENGTH];
00140     char arg1[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH];
00141     char *name;
00142     BUFFER *buffer;
00143     BAN_DATA *pban, *prev;
00144     bool prefix = FALSE, suffix = FALSE;
00145     int type;
00146 
00147     argument = one_argument (argument, arg1);
00148     argument = one_argument (argument, arg2);
00149     
00150     if (arg1[0] == '\0')
00151     {
00152         if (ban_list == NULL)
00153         {
00154             send_to_char ("No sites banned at this time.\n\r", ch);
00155             return;
00156         }
00157         buffer = new_buf ();
00158 
00159         sprintf(buf, "%-40s %-5s %-5s %-7s\n\r", "Banned Sites", "Level", "Type", "Status");
00160     add_buf(buffer, buf);
00161     //add_buf (buffer, "Banned sites level  type     status\n\r");
00162         for (pban = ban_list; pban != NULL; pban = pban->next)
00163         {
00164             sprintf (buf2, "%s%s%s",
00165                      IS_SET (pban->ban_flags, BAN_PREFIX) ? "*" : "",
00166                      pban->name,
00167                      IS_SET (pban->ban_flags, BAN_SUFFIX) ? "*" : "");
00168             sprintf (buf, "%-40s %-5d %-7s %s\n\r",
00169                      buf2, pban->level,
00170                      IS_SET (pban->ban_flags, BAN_NEWBIES) ? "newbies" :
00171                      IS_SET (pban->ban_flags, BAN_PERMIT) ? "permit" :
00172                      IS_SET (pban->ban_flags, BAN_ALL) ? "all" : "",
00173                      IS_SET (pban->ban_flags,
00174                              BAN_PERMANENT) ? "perm" : "temp");
00175             add_buf (buffer, buf);
00176         }
00177 
00178         page_to_char (buf_string (buffer), ch);
00179         free_buf (buffer);
00180         return;
00181     }
00182 
00183     /* find out what type of ban */
00184     if (arg2[0] == '\0' || !str_prefix (arg2, "all"))
00185         type = BAN_ALL;
00186     else if (!str_prefix (arg2, "newbies"))
00187         type = BAN_NEWBIES;
00188     else if (!str_prefix (arg2, "permit"))
00189         type = BAN_PERMIT;
00190     else
00191     {
00192         send_to_char
00193             ("Acceptable ban types are all, newbies, and permit.\n\r", ch);
00194         return;
00195     }
00196 
00197     name = arg1;
00198 
00199     if (name[0] == '*')
00200     {
00201         prefix = TRUE;
00202         name++;
00203     }
00204 
00205     if (name[strlen (name) - 1] == '*')
00206     {
00207         suffix = TRUE;
00208         name[strlen (name) - 1] = '\0';
00209     }
00210 
00211     if (strlen (name) == 0)
00212     {
00213         send_to_char ("You have to ban SOMETHING.\n\r", ch);
00214         return;
00215     }
00216 
00217     prev = NULL;
00218     for (pban = ban_list; pban != NULL; prev = pban, pban = pban->next)
00219     {
00220         if (!str_cmp (name, pban->name))
00221         {
00222             if (pban->level > get_trust (ch))
00223             {
00224                 send_to_char ("That ban was set by a higher power.\n\r", ch);
00225                 return;
00226             }
00227             else
00228             {
00229                 if (prev == NULL)
00230                     ban_list = pban->next;
00231                 else
00232                     prev->next = pban->next;
00233                 free_ban (pban);
00234             }
00235         }
00236     }
00237 
00238     pban = new_ban ();
00239     pban->name = str_dup (name);
00240     pban->level = get_trust (ch);
00241 
00242     /* set ban type */
00243     pban->ban_flags = type;
00244 
00245     if (prefix)
00246         SET_BIT (pban->ban_flags, BAN_PREFIX);
00247     if (suffix)
00248         SET_BIT (pban->ban_flags, BAN_SUFFIX);
00249     if (fPerm)
00250         SET_BIT (pban->ban_flags, BAN_PERMANENT);
00251 
00252     pban->next = ban_list;
00253     ban_list = pban;
00254     save_bans ();
00255     sprintf (buf, "%s has been banned.\n\r", pban->name);
00256     send_to_char (buf, ch);
00257     return;
00258 }

Here is the call graph for this function:

bool check_ban char *  site,
int  type
 

Definition at line 105 of file ban.c.

References ban_data::ban_flags, ban_list, BAN_PREFIX, BAN_SUFFIX, capitalize(), FALSE, IS_SET, LOWER, MAX_STRING_LENGTH, ban_data::name, ban_data::next, str_prefix(), str_suffix(), and TRUE.

Referenced by nanny().

00106 {
00107     //return FALSE;
00108     BAN_DATA *pban;
00109     char host[MAX_STRING_LENGTH];
00110 
00111     strcpy (host, capitalize (site));
00112     host[0] = LOWER (host[0]);
00113 
00114     for (pban = ban_list; pban != NULL; pban = pban->next)
00115     {
00116         if (!IS_SET (pban->ban_flags, type))
00117             continue;
00118 
00119         if (IS_SET (pban->ban_flags, BAN_PREFIX)
00120             && IS_SET (pban->ban_flags, BAN_SUFFIX)
00121             && strstr (pban->name, host) != NULL)
00122             return TRUE;
00123 
00124         if (IS_SET (pban->ban_flags, BAN_PREFIX)
00125             && !str_suffix (pban->name, host))
00126             return TRUE;
00127 
00128         if (IS_SET (pban->ban_flags, BAN_SUFFIX)
00129             && !str_prefix (pban->name, host))
00130             return TRUE;
00131     }
00132 
00133     return FALSE;
00134 }

Here is the call graph for this function:

void do_allow CHAR_DATA ch,
char *  argument
 

Definition at line 270 of file ban.c.

References ban_list, free_ban(), get_trust(), ban_data::level, MAX_INPUT_LENGTH, MAX_STRING_LENGTH, ban_data::name, ban_data::next, one_argument(), save_bans(), send_to_char(), and str_cmp().

00271 {
00272     char arg[MAX_INPUT_LENGTH];
00273     char buf[MAX_STRING_LENGTH];
00274     BAN_DATA *prev;
00275     BAN_DATA *curr;
00276 
00277     one_argument (argument, arg);
00278 
00279     if (arg[0] == '\0')
00280     {
00281         send_to_char ("Remove which site from the ban list?\n\r", ch);
00282         return;
00283     }
00284 
00285     prev = NULL;
00286     for (curr = ban_list; curr != NULL; prev = curr, curr = curr->next)
00287     {
00288         if (!str_cmp (arg, curr->name))
00289         {
00290             if (curr->level > get_trust (ch))
00291             {
00292                 send_to_char
00293                     ("You are not powerful enough to lift that ban.\n\r", ch);
00294                 return;
00295             }
00296             if (prev == NULL)
00297                 ban_list = ban_list->next;
00298             else
00299                 prev->next = curr->next;
00300 
00301             free_ban (curr);
00302             sprintf (buf, "Ban on %s lifted.\n\r", arg);
00303             send_to_char (buf, ch);
00304             save_bans ();
00305             return;
00306         }
00307     }
00308 
00309     send_to_char ("Site is not banned.\n\r", ch);
00310     return;
00311 }

Here is the call graph for this function:

void do_ban CHAR_DATA ch,
char *  argument
 

Definition at line 260 of file ban.c.

References ban_site(), and FALSE.

00261 {
00262     ban_site (ch, argument, FALSE);
00263 }

Here is the call graph for this function:

void do_permban CHAR_DATA ch,
char *  argument
 

Definition at line 265 of file ban.c.

References ban_site(), and TRUE.

00266 {
00267     ban_site (ch, argument, TRUE);
00268 }

Here is the call graph for this function:

void load_bans void   ) 
 

Definition at line 71 of file ban.c.

References BAN_FILE, ban_data::ban_flags, ban_list, fread_flag(), fread_number(), fread_to_eol(), fread_word(), ban_data::level, ban_data::name, new_ban(), ban_data::next, str_dup(), and twiddle().

Referenced by boot_db().

00072 {
00073     FILE *fp;
00074     BAN_DATA *ban_last;
00075 
00076     if ((fp = fopen (BAN_FILE, "r")) == NULL)
00077         return;
00078 
00079     ban_last = NULL;
00080     for (;;)
00081     {
00082         twiddle();
00083     BAN_DATA *pban;
00084         if (feof (fp))
00085         {
00086             fclose (fp);
00087             return;
00088         }
00089 
00090         pban = new_ban ();
00091 
00092         pban->name = str_dup (fread_word (fp));
00093         pban->level = fread_number (fp);
00094         pban->ban_flags = fread_flag (fp);
00095         fread_to_eol (fp);
00096 
00097         if (ban_list == NULL)
00098             ban_list = pban;
00099         else
00100             ban_last->next = pban;
00101         ban_last = pban;
00102     }
00103 }

Here is the call graph for this function:

void save_bans void   ) 
 

Definition at line 43 of file ban.c.

References BAN_FILE, ban_data::ban_flags, ban_list, BAN_PERMANENT, FALSE, fpReserve, IS_SET, ban_data::level, ban_data::name, ban_data::next, print_flags(), TRUE, and unlink().

Referenced by ban_site(), and do_allow().

00044 {
00045     BAN_DATA *pban;
00046     FILE *fp;
00047     bool found = FALSE;
00048 
00049     fclose (fpReserve);
00050     if ((fp = fopen (BAN_FILE, "w")) == NULL)
00051     {
00052         perror (BAN_FILE);
00053     }
00054 
00055     for (pban = ban_list; pban != NULL; pban = pban->next)
00056     {
00057         if (IS_SET (pban->ban_flags, BAN_PERMANENT))
00058         {
00059             found = TRUE;
00060             fprintf (fp, "%-20s %-2d %s\n", pban->name, pban->level,
00061                      print_flags (pban->ban_flags));
00062         }
00063     }
00064 
00065     fclose (fp);
00066     fpReserve = fopen (NULL_FILE, "r");
00067     if (!found)
00068         unlink (BAN_FILE);
00069 }

Here is the call graph for this function:


Variable Documentation

BAN_DATA* ban_list
 

Definition at line 41 of file ban.c.

Referenced by ban_site(), check_ban(), do_allow(), load_bans(), and save_bans().


Generated on Thu Jan 13 21:54:49 2005 for Beyond the Shadows by  doxygen 1.4.0