From 4440a86cfa359b8e40a484a2cd46d33db5455d8a Mon Sep 17 00:00:00 2001 From: Jonas Gunz Date: Mon, 25 May 2020 20:09:04 +0200 Subject: Initial --- irc/ignore.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 irc/ignore.c (limited to 'irc/ignore.c') diff --git a/irc/ignore.c b/irc/ignore.c new file mode 100644 index 0000000..23bc5db --- /dev/null +++ b/irc/ignore.c @@ -0,0 +1,141 @@ +/************************************************************************ + * IRC - Internet Relay Chat, irc/ignore.c + * Copyright (C) 1990 Jarkko Oikarinen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 1, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef lint +static char rcsid[] = "@(#)$Id: ignore.c,v 1.2 1997/09/03 17:45:39 kalt Exp $"; +#endif + +#include "os.h" +#include "c_defines.h" +#define IGNORE_C +#include "c_externs.h" +#undef IGNORE_C + +anIgnore *ignore = (anIgnore *) 0; +char ibuf[80]; + +void do_ignore(user, temp) +char *user, *temp; +{ + char *ch, *wild = "*"; + anIgnore *iptr; + char *apu = user, *uh; + int status; + if ((user == (char *) 0) || (*user == '\0')) { + + putline("*** Current ignore list entries:"); + for (iptr = ignore; iptr; iptr = iptr->next) { + sprintf(ibuf," Ignoring %s messages from user %s!%s", + (iptr->flags == IGNORE_TOTAL) ? "all" : + (iptr->flags == IGNORE_PRIVATE) ? "private" : "public", + iptr->user, iptr->from); + putline(ibuf); + } + putline("*** End of ignore list entries"); + return; + } + while (apu && *apu) { + ch = apu; + if (*ch == '+') { + ch++; + status = IGNORE_PUBLIC; + } + else if (*ch == '-') { + ch++; + status = IGNORE_PRIVATE; + } + else + status = IGNORE_TOTAL; + if ((apu = index(ch, ','))) + *(apu++) = '\0'; + if ((uh = index(ch, '!'))) + *uh++ = '\0'; + else if ((uh = index(ch, '@'))) + *uh++ = '\0'; + else + uh = wild; + if (!*ch) + ch = wild; + if ((iptr = find_ignore(ch, (anIgnore *)NULL, uh))) { + sprintf(ibuf,"*** Ignore removed: user %s!%s", + iptr->user, iptr->from); + putline(ibuf); + kill_ignore(iptr); + } else { + if (strlen(ch) > (size_t) NICKLEN) + ch[NICKLEN] = '\0'; + if (add_ignore(ch, status, uh) >= 0) { + sprintf(ibuf,"*** Ignore %s messages from user %s!%s", + (status == IGNORE_TOTAL) ? "all" : + (status == IGNORE_PRIVATE) ? "private" : "public", ch, uh); + putline(ibuf); + } else + putline("Fatal Error: Cannot allocate memory for ignore buffer"); + } + } +} + +anIgnore *find_ignore(user, para, fromhost) +char *user, *fromhost; +anIgnore *para; +{ + anIgnore *iptr; + for (iptr = ignore; iptr; iptr=iptr->next) + if ((match(iptr->user, user) == 0) && + (match(iptr->from, fromhost)==0)) + break; + + return iptr ? iptr : para; +} + +int kill_ignore(iptr) +anIgnore *iptr; +{ + anIgnore *i2ptr, *i3ptr = (anIgnore *) 0; + for (i2ptr = ignore; i2ptr; i2ptr = i2ptr->next) { + if (i2ptr == iptr) + break; + i3ptr = i2ptr; + } + if (i2ptr) { + if (i3ptr) + i3ptr->next = i2ptr->next; + else + ignore = i2ptr->next; + free(i2ptr); + return (1); + } + return (-1); +} + +int add_ignore(ch, status, fromhost) +char *ch, *fromhost; +int status; +{ + anIgnore *iptr; + iptr = (anIgnore *) malloc(sizeof (anIgnore)); + if (iptr == (anIgnore *) 0) + return(-1); + strncpyzt(iptr->user, ch, sizeof(iptr->user)); + strncpyzt(iptr->from, fromhost, sizeof(iptr->from)); + iptr->next = ignore; + ignore = iptr; + iptr->flags = status; + return(1); +} -- cgit v1.2.3