ncohafmuta-1.4.2/bot/
ncohafmuta-1.4.2/helpfiles/
ncohafmuta-1.4.2/lib/emailver/
ncohafmuta-1.4.2/tzinfo/Atlantic/
ncohafmuta-1.4.2/tzinfo/Brazil/
ncohafmuta-1.4.2/tzinfo/Chile/
ncohafmuta-1.4.2/tzinfo/Indian/
ncohafmuta-1.4.2/tzinfo/Mexico/
ncohafmuta-1.4.2/tzinfo/Mideast/
ncohafmuta-1.4.2/tzinfo/SystemV/
ncohafmuta-1.4.2/utils/
ncohafmuta-1.4.2/utils/code_fragments/new_config/
#if defined(HAVE_CONFIG_H)
#include "../hdrfiles/config.h"
#endif

#include "../hdrfiles/includes.h"

/*--------------------------------------------------------*/
/* Talker-related include files                           */ 
/*--------------------------------------------------------*/
#include "../hdrfiles/osdefs.h"
/*
#include "../hdrfiles/authuser.h"
#include "../hdrfiles/text.h"
*/
#include "../hdrfiles/constants.h"
#include "../hdrfiles/protos.h"

extern struct command_struct sys[];


/* Reset all user auto-forward limits to nill               */
/* Also check abbreviations to see if any have been deleted */
/* added, or changed                                        */
void reset_userfors(int startup)
{
int c=0;
int i=0;
int b=1;
int a=0;
int j=0;
int fixed=0;
int matched=0;
int add=0;
int changed=0;
int ret=0;
char small_buffer[FILE_NAME_LEN];
char filerid[FILE_NAME_LEN];
char z_mess[ARR_SIZE];
struct dirent *dp;
DIR *dirp;
 
 sprintf(z_mess,"%s",USERDIR);
 strncpy(filerid,z_mess,FILE_NAME_LEN);
 
 dirp=opendir((char *)filerid);

 if (dirp == NULL)
   {
	sprintf(z_mess,"USERFORS: Can't open directory \"%s\" for reset_userfors! %s\n",filerid,get_error());

        write_log(ERRLOG,YESTIME,z_mess);

	if (startup)
	 printf("%s",z_mess);
      return;
   }

 while ((dp = readdir(dirp)) != NULL) 
   { 

    sprintf(small_buffer,"%s",dp->d_name);
        if (small_buffer[0] == '.')
         continue;
        else {
         strtolower(small_buffer);
         ret=read_user(small_buffer);
         if (ret==0) {
          sprintf(z_mess,"USERFORS: Can't open userfile \"%s\" Permission problem probably\n",small_buffer);
          write_log(ERRLOG,YESTIME,z_mess);

          if (startup)
           printf("%s",z_mess);
          continue;
         }
         else if (ret==-1) {
          sprintf(z_mess,"USERFORS: Can't open userfile \"%s\" 0 length file! Removed. Continuing..\n",small_buffer);
          write_log(ERRLOG,YESTIME,z_mess);

          if (startup)
           printf("%s",z_mess);
          continue;
         }
 
         t_ustr.automsgs = 0;
	 /* Check to make sure granted/revoked commands still exist */
	 for (j=0;j<MAX_GRAVOKES;++j) {
		if (strlen(t_ustr.revokes[j])) {
		  for (i=0;sys[i].jump_vector != -1;++i) {
			if (strip_com(t_ustr.revokes[j]) == sys[i].jump_vector) {
				changed=1; break;
				}
		     }
		if (!changed) t_ustr.revokes[j][0]=0;
		changed=0; i=0;
		}
	    }
	 j=0;
	 i=0;
	 changed=0;

          /* Check if abbreviations have changed */
         for (j=0;j<NUM_ABBRS;++j) {
         if (strlen(t_ustr.custAbbrs[j].abbr) > 1) {
          t_ustr.custAbbrs[j].abbr[0]=0;
          t_ustr.custAbbrs[j].com[0]=0;
          }
         else if (t_ustr.custAbbrs[j].com[0]!='.') {
          t_ustr.custAbbrs[j].abbr[0]=0;
          t_ustr.custAbbrs[j].com[0]=0;
          }
         } /* end of for */

    /*-----------------------------------------------------------------*/
    /* PART 1 - Check if number of abbreviations defined has decreased */
    /*-----------------------------------------------------------------*/
    i = NUM_ABBRS;
    if (strlen(t_ustr.custAbbrs[i].com) > 1 ) {
       i=0;
        while (strlen(t_ustr.custAbbrs[i].com)) {
          for (c=0; sys[c].su_com != -1 ;++c) {
             if (!strcmp(t_ustr.custAbbrs[i].com,sys[c].command)) {
                if (!strlen(sys[c].cabbr)) {
while (strlen(t_ustr.custAbbrs[i+b].com) > 0) {
 strcpy(t_ustr.custAbbrs[i+a].com,t_ustr.custAbbrs[i+b].com);
 strcpy(t_ustr.custAbbrs[i+a].abbr,t_ustr.custAbbrs[i+b].abbr);
 a++;
 b++;
 }
 
/* Make sure last lingering copy is cleared out */
t_ustr.custAbbrs[i+a].com[0]=0;
t_ustr.custAbbrs[i+a].abbr[0]=0;
a=0;
b=1;
                  fixed=1;
                  changed=1;
                  break;
                  }
                else { fixed=0; break; }
               }
            } /* end of for */
          c=0;
          if (!fixed) i++;
         } /* end of while */
      } /* end of main if */

 c=0;
 i=0;
 fixed=0;

    /*---------------------------------------------------------*/
    /* PART 2 - Check if these were any abbreviation additions */
    /*---------------------------------------------------------*/
    for (i=0;i<NUM_ABBRS;++i) {
        if (strlen(t_ustr.custAbbrs[i].com) <= 1) add++;
       }
    /* Get number of current abbreviations */
    i = NUM_ABBRS - add;

    for (c=0; sys[c].su_com != -1 ;++c) {
       if (strlen(sys[c].cabbr) > 0) {
          for (a=0;a<i;++a) {
             if (!strcmp(sys[c].command,t_ustr.custAbbrs[a].com)) {
               matched=1;
               break;
               }
             } /* end of abbr for */
          if (!matched) {
            strcpy(t_ustr.custAbbrs[i].com,sys[c].command);
            strcpy(t_ustr.custAbbrs[i].abbr,sys[c].cabbr);
            changed=1;
            i++;
            }
          matched=0;
          a=0;
         } /* end of sys abbr if */
      } /* end of command for */

i=0;
b=1;
c=0;
a=0;
fixed=0;
matched=0;
add=0;

    /* Check if admin or coder changed the name of a command */
    for (i=0;i<NUM_ABBRS;++i) {
     for (c=0; sys[c].su_com != -1 ;++c) {
        if (!strcmp(t_ustr.custAbbrs[i].abbr,sys[c].cabbr) ) {
          if (strcmp(t_ustr.custAbbrs[i].com,sys[c].command)) {
             strcpy(t_ustr.custAbbrs[i].com,sys[c].command);
             changed=1;
            } /* end of sub strcmp if */
          } /* end of main strcmp if */
       } /* end of sys[] for */
      } /* end of num_abbrs for */

i=0;
a=0;
    /*---------------------------------------------------------*/
    /* PART 3 - Save data                                      */
    /*---------------------------------------------------------*/
        if ((a = get_user_num_exact(t_ustr.name,-1)) != -1) {
                write_log(DEBUGLOG,YESTIME,"USERFORS: Reset %s's automsgs to 0 (online)\n",ustr[a].name);
                ustr[a].automsgs = t_ustr.automsgs;
                while (strlen(t_ustr.custAbbrs[i].com) > 1) {
                        strcpy(ustr[a].custAbbrs[i].abbr,t_ustr.custAbbrs[i].abbr);
                        strcpy(ustr[a].custAbbrs[i].com,t_ustr.custAbbrs[i].com);
                        i++;
                }
                i=0;
                a=0;
        }

        write_user(small_buffer);
        } /* end of else */
   } /* while */

if (changed)
 write_log(SYSTEMLOG,YESTIME,"Re-evaluated user abbreviations\n");
 
 (void) closedir(dirp);

}


/*------------------------------------------------------*/
/* Compare NUM_ABBRS to abbr count in sys[] on startup  */
/*------------------------------------------------------*/
void abbrcount()
{
int c=0;
int count=0;

    for (c=0; sys[c].su_com != -1; ++c) {
      if (strlen(sys[c].cabbr) > 0) count++;
    }

    if (count != NUM_ABBRS) {
      write_log(ERRLOG,YESTIME,"BOOT: Abbreviation count in sys[] structure does not match that of NUM_ABBRS\n");
      printf("\nAbbreviation count in sys[] structure does not match that of NUM_ABBRS\n");
      printf("Aborting startup!\n");
#if defined(_WIN32) && !defined(__CYGWIN32__)
WSACleanup();
#endif
      exit(0);
      }
}


/*-----------------------------------------*/
/* Set up the default abbrevation keys     */
/*-----------------------------------------*/
void initabbrs(int user)
{
int c=0;
int i;
	
	for (i=0;i<NUM_ABBRS;++i)
	{
		ustr[user].custAbbrs[i].abbr[0] = 0;
		ustr[user].custAbbrs[i].com[0] = 0;
	}

        i=0;

        for (i=0;i<NUM_ABBRS;++i)
        {

         REDO:
          if (strlen(sys[c].cabbr) > 0) {
            strcpy(ustr[user].custAbbrs[i].com,sys[c].command);
            strcpy(ustr[user].custAbbrs[i].abbr,sys[c].cabbr);
            c++;
           }
          else {
            c++;
            goto REDO;
           }

        }	

}


/*-------------------------------------------------------------------*/
/* Copy abbreviation commands and marks under a blank field into the */
/* field so it isn't blank anymore                                   */
/*-------------------------------------------------------------------*/
void copy_abbrs(int user, int ref)
{
int a=0;
int b=1;

while (strlen(ustr[user].custAbbrs[ref+b].com) > 0) {
 strcpy(ustr[user].custAbbrs[ref+a].com,ustr[user].custAbbrs[ref+b].com);
 strcpy(ustr[user].custAbbrs[ref+a].abbr,ustr[user].custAbbrs[ref+b].abbr);
 a++;
 b++;
 }

/* Make sure last lingering copy is cleared out */
ustr[user].custAbbrs[ref+a].com[0]=0;
ustr[user].custAbbrs[ref+a].abbr[0]=0;
}

/*-----------------------------------------------------------------*/
/* Add new abbreviation fields to the end of the users abbr struct */
/*-----------------------------------------------------------------*/
void add_abbrs(int user, int ref, int num)
{

strcpy(ustr[user].custAbbrs[num].com,sys[ref].command);
strcpy(ustr[user].custAbbrs[num].com,sys[ref].cabbr);

}


/* see if user wants to quit from talker addition */
int is_quit(int user, char *str)
{

if (!strcmp(str,"q") || !strcmp(str,"Q")) {
    ustr[user].t_ent=0;
    ustr[user].t_num        = 0;
    ustr[user].t_name[0]    = 0;
    ustr[user].t_host[0]    = 0;
    ustr[user].t_ip[0]      = 0;
    ustr[user].t_port[0]    = 0;
    write_str(user,"Talker addition aborted!");
    return 1;
    }
return 0;
}


/* is this command revoked */
int is_revoke(char *str)
{
char junkmain[NAME_LEN];
char junk[2];

if (!strlen(str)) {
	/* no command in this slot */
	return 0;
	}

junk[0]=0;
junkmain[0]=0;
strcpy(junkmain,str);
remove_first(junkmain);
sscanf(junkmain,"%s ",junk);
if (!strcmp(junk,"-")) return 1;
else return 0;
}

/* is this command granted */
int is_grant(char *str)
{
char junkmain[NAME_LEN];
char junk[2];

if (!strlen(str)) {
	/* no command in this slot */
	return 0;
	}

junk[0]=0;
junkmain[0]=0;
strcpy(junkmain,str);
remove_first(junkmain);
sscanf(junkmain,"%s ",junk);
if (!strcmp(junk,"+")) return 1;
else return 0;
}


/*** get user number using name ***/
int how_many_users(char *name)
{
int u;
int num=0;

strtolower(name);

for (u=0;u<MAX_USERS;++u)
        if (!strcmp(ustr[u].name,name) && ustr[u].area != -1) num++;

return num;
}


/*** Finds number or users in given area ***/
int find_num_in_area(int area)
{
int u,num=0;
for (u=0;u<MAX_USERS;++u)
        if (ustr[u].area==area) ++num;
return num;
}


/* dynamically create the staff list file for .wlist     */
/* this will be called whenever a promote/demote is done */
void do_stafflist(void) {
int ret=0;
char filename[FILE_NAME_LEN];
char small_buffer[FILE_NAME_LEN];
char z_mess[ARR_SIZE];
char filerid[FILE_NAME_LEN];
char tempranks[MAX_LEVEL+1][1000];
int temprankscount[MAX_LEVEL+1];
struct dirent *dp;
FILE *fp;
DIR *dirp;
char *lineprefix = "             ";
char *linespacer = "  ";

for (ret=0;ret<MAX_LEVEL+1;++ret) {
 tempranks[ret][0]=0;
 temprankscount[ret]=0;
}

sprintf(z_mess,"%s",USERDIR);
strncpy(filerid,z_mess,FILE_NAME_LEN);

dirp=opendir((char *)filerid);

if (dirp == NULL) {
 write_log(ERRLOG,YESTIME,"Can't open directory \"%s\" for do_stafflist! %s\n",filerid,get_error());
 return;
}

sprintf(filename,"%s",WIZFILE);

if (!(fp=fopen(filename,"w"))) {
 (void) closedir(dirp);
 return;
}

while ((dp = readdir(dirp)) != NULL)
   {            
    sprintf(small_buffer,"%s",dp->d_name);
        if (small_buffer[0] == '.')
         continue;

         strtolower(small_buffer);
         ret=read_user(small_buffer);
         if (ret==0) {
          write_log(ERRLOG,YESTIME,"Can't open userfile \"%s\" in do_stafflist. Permission problem probably\n",small_buffer);
          continue;
         }
         else if (ret==-1) {
          write_log(ERRLOG,YESTIME,"Can't open userfile \"%s\" 0 length file! Removed. Continuing..\n",small_buffer);
          continue;
         }

	if (t_ustr.super >= WIZ_LEVEL) {

	 if (!temprankscount[t_ustr.super]) strcat(tempranks[t_ustr.super], lineprefix);
	 else if (temprankscount[t_ustr.super]==3) {
	  strcat(tempranks[t_ustr.super], lineprefix);
	  temprankscount[t_ustr.super]=0;
	 }
	 else strcat(tempranks[t_ustr.super], linespacer);
	 sprintf(z_mess,"%-*s",NAME_LEN+count_color(t_ustr.say_name,0),t_ustr.say_name);
	 strcat(tempranks[t_ustr.super],z_mess);
	 temprankscount[t_ustr.super]++;
	 if (temprankscount[t_ustr.super]==3) strcat(tempranks[t_ustr.super],"\n");

	} /* if staff */

   } /* while */

(void) closedir(dirp);

/* write out list to file */
fputs("\n",fp);

for (ret=0;ret<MAX_LEVEL+1;++ret) {
 if (!strlen(tempranks[ret])) continue;
 fprintf(fp,STAFF_FILE_HEADER,ranks[ret].sname);
 fputs("\n\n",fp);
 fputs(tempranks[ret],fp);
 fputs("\n",fp);
 if (temprankscount[ret] < 3) fputs("\n",fp);
}

FCLOSE(fp);

}