wolfpaw4.0-release/area/
wolfpaw4.0-release/backup/
wolfpaw4.0-release/bin/
wolfpaw4.0-release/boards/
wolfpaw4.0-release/clans/
wolfpaw4.0-release/councils/
wolfpaw4.0-release/deity/
wolfpaw4.0-release/finger/
wolfpaw4.0-release/gods/
wolfpaw4.0-release/guilds/
wolfpaw4.0-release/lockers/
wolfpaw4.0-release/log/
wolfpaw4.0-release/log/Clean/
wolfpaw4.0-release/maps/
wolfpaw4.0-release/offline_data/
wolfpaw4.0-release/player-obj/
wolfpaw4.0-release/player-obj/a/
wolfpaw4.0-release/player/
wolfpaw4.0-release/player/a/
wolfpaw4.0-release/plog/
wolfpaw4.0-release/save-rooms/
wolfpaw4.0-release/secure/
wolfpaw4.0-release/source/
wolfpaw4.0-release/source/betasrc/system/
wolfpaw4.0-release/source/betasrc/util/
wolfpaw4.0-release/system/clean-source/
wolfpaw4.0-release/system/clean-source/grux/
/*--------------------------------------------------------------------------*
 *                         ** WolfPaw 1.0 **                                *
 *--------------------------------------------------------------------------*
 *               WolfPaw 1.0 (c) 1997,1998 by Dale Corse                    *
 *--------------------------------------------------------------------------*
 *            The WolfPaw Coding Team is headed by: Greywolf                *
 *  With the Assitance from: Callinon, Dhamon, Sentra, Wyverns, Altrag      *
 *  Scryn, Thoric, Justice, Tricops and Mask.                               *
 *--------------------------------------------------------------------------*
 *			Host Restriction Module				    *
 *--------------------------------------------------------------------------*/
#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/dir.h>
#include "mud.h"

/* 
 * Check the players lists to see if they are allowed. --GW
 */
bool check_hosts( CHAR_DATA *ch, char *site )
{
HOST_DATA *host, *next_host;
char buf[MSL];
bool fMatch = FALSE;

if ( !IS_SET(ch->pcdata->flagstwo, MOREPC_SITE_LOCK) )
{
  send_to_char("\n\rSITE_LOCK: Not Active, We Suggest you read help SITELOCK\n\r",ch);
  return TRUE;
}

for( host = ch->pcdata->first_host; host; host = next_host )
{
  next_host = host->next;
  if ( !str_prefix( host->site, site ) )
   fMatch=TRUE;
  if ( !str_suffix( host->site, site ) )
   fMatch=TRUE;
  if ( !str_cmp( host->site, site ) )
   fMatch=TRUE;

}

if ( !fMatch )
{
      send_to_char("\n\rSITE_LOCK: Host authentication failed! GoodBye!\n\r",ch);
      sprintf(buf,"[SECURITY NOTICE] %s attempted login from an invalid host!\n\r",capitalize(ch->name));
      echo_to_all(AT_PLAIN,buf,ECHOTAR_IMM);
      log_string(buf);
      do_quit2(ch,"");
      return FALSE;
}

send_to_char("\n\rSITE_LOCK: Host authenticated.\n\r",ch);
return TRUE;
}

/*
 * User Interface --GW
 */
void do_host( CHAR_DATA *ch, char *argument )
{
char arg1[MSL];
char arg2[MSL];

argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );

if ( IS_NPC(ch) )
return;

if ( arg1[0] == '\0' )
{
  send_to_char("Invalid: Read Help SITELOCK\n\r",ch);
  return;
}

if ( !str_cmp( arg1, "set" ) )
{
HOST_DATA *host=NULL;

if ( arg2[0] == '\0' )
{
  send_to_char("SITE_LOCK: Invalid: Read Help SITELOCK!\n\r",ch);
  return;
}

CREATE(host,HOST_DATA,1);
host->site=STRALLOC(arg2);
LINK(host,ch->pcdata->first_host,ch->pcdata->last_host,next,prev);
send_to_char("SITE_LOCK: Lock added.\n\r",ch);
SET_BIT(ch->pcdata->flagstwo, MOREPC_SITE_LOCK);
return;
}

if ( !str_cmp( arg1, "list" ) )
{
HOST_DATA *host, *next_host;

if ( !IS_SET(ch->pcdata->flagstwo, MOREPC_SITE_LOCK) )
{
  send_to_char("Your character is not SITELOCK'd\n\r",ch);
  return;
}

send_to_char("SITE_LOCK: Site List\n\r",ch);
send_to_char("====================\n\r",ch);
for( host = ch->pcdata->first_host; host; host = next_host )
{
  next_host = host->next;
  ch_printf(ch,"SITE_LOCK: %s\n\r",host->site);
}

return;
}

if ( !str_cmp( arg1, "delete" ) )
{
HOST_DATA *host, *next_host;
bool fMatch = FALSE;

if ( !IS_SET(ch->pcdata->flagstwo, MOREPC_SITE_LOCK) )
{
  send_to_char("Your character is not SITELOCK'd\n\r",ch);
  return;
}

for( host = ch->pcdata->first_host; host; host = next_host )
{
  next_host = host->next;
  if ( !str_cmp( host->site, arg2 ) )
  {
   STRFREE(host->site);
   UNLINK(host,ch->pcdata->first_host,ch->pcdata->last_host,next,prev);
   DISPOSE(host);
   send_to_char("SITE_LOCK: Site lock deleted.\n\r",ch);
   fMatch = TRUE;
   if ( ch->pcdata->first_host == NULL )
   REMOVE_BIT( ch->pcdata->flagstwo, MOREPC_SITE_LOCK);
   }
}

if ( !fMatch )
send_to_char("SITE_LOCK: Delete failed: Site not found.\n\r",ch);

return;
}

if ( !str_cmp( arg1, "mysite" ) )
{
ch_printf(ch,"SITE_LOCK: Your current site is: %s\n\r",ch->desc->host);
return;
}

send_to_char("Invalid: Read Help SITELOCK\n\r",ch);
return;
}

/*
 * Load a SITE_LOCK --GW
 */
void load_host( CHAR_DATA *ch, char *line )
{
HOST_DATA *host=NULL;

CREATE( host, HOST_DATA, 1 );
host->site = STRALLOC(line);
LINK(host,ch->pcdata->first_host,ch->pcdata->last_host,next,prev);
return;
}

/*
 * Save a players' Host locks --GW
 */
void save_hosts( CHAR_DATA *ch, FILE *fp )
{
HOST_DATA *host, *next_host;

if ( !IS_SET(ch->pcdata->flagstwo, MOREPC_SITE_LOCK) )
return;

for( host=ch->pcdata->first_host; host; host = next_host )
{
  next_host = host->next;
  smash_tilde(host->site);
  fprintf(fp,"SLOCK %s~\n",host->site);
}
return;
}

/* Setup the linked lists --GW */
void host_setup( CHAR_DATA *ch )
{
ch->pcdata->first_host = NULL;
ch->pcdata->last_host = NULL;
return;
}

/* Free the data --GW */
void free_hosts( CHAR_DATA *ch )
{
HOST_DATA *host, *next_host;

for( host = ch->pcdata->first_host; host; host = next_host )
{
  next_host = host->next;
  STRFREE(host->site);
  UNLINK(host,ch->pcdata->first_host, ch->pcdata->last_host, next, prev);
  DISPOSE(host);
}

return;
}