This repository has been archived on 2025-02-12. You can view files and clone it, but cannot push or open issues or pull requests.
NeoStats-services/servicescore.c

231 lines
5.2 KiB
C

/* NeoStats - IRC Statistical Services Copryight (c) 1999-2001 NeoStats Group.
*
** Module: LoveServ
** Version: 1.0
*/
/* TODO STUFF
** Delete or add as u do stuff
*/
#include <stdio.h>
#include <db.h>
#include "dl.h"
#include "stats.h"
#include "services.h"
const char servicesversion_date[] = __DATE__;
const char servicesversion_time[] = __TIME__;
Module_Info my_info[] = { {
"Services",
"Services for Neostats",
"0.1.4A"
} };
int new_m_version(char *origin, char **av, char *tmp) {
snumeric_cmd(351, origin, "Module NickServ Loaded, Version %s %s %s",my_info[0].module_version,servicesversion_date,servicesversion_time);
return 0;
}
Functions my_fn_list[] = {
{ "MSG_VERSION", new_m_version, 1 },
{ "TOK_VERSION", new_m_version, 1 },
{ NULL, NULL, 0 }
};
int __Bot_Message(char *origin, char **av, int ac)
{
if (!strcasecmp(av[0], s_NickServ)) {
NS_Bot_Message(origin, av, ac);
}
if (!strcasecmp(av[0], s_MemoServ)) {
MS_Bot_Message(origin, av, ac);
}
}
int Online(Server *data) {
if (init_bot(s_NickServ,"nick",me.name,"Network Nick Service", "+xd", my_info[0].module_name) == -1 ) {
/* Nick was in use!!!! */
s_NickServ = strcat(s_NickServ, "_");
init_bot(s_NickServ,"nick",me.name,"Network Nick Service", "+xd", my_info[0].module_name);
}
if (init_bot(s_MemoServ, "memo", me.name, "Network Memo Service", "+xd", my_info[0].module_name) == -1) {
/* Nick was in use!!!! */
s_MemoServ = strcat(s_MemoServ, "_");
init_bot(s_MemoServ,"memo",me.name,"Network Memo Service", "+xd", my_info[0].module_name);
}
/* TODO: don't use constants here */
add_mod_timer("runsvstimers", "Services", "Services", 1);
add_mod_timer("sync_changed_nicks_to_db", "DB_Sync", "Services", DB_SYNC_TIME);
return 1;
};
EventFnList my_event_list[] = {
{ "ONLINE", (void *)Online},
{ "SIGNON", (void *)ns_new_user},
{ "SIGNOFF", (void *)ns_bye_user},
{ "KILL", (void *)ns_bye_user},
{ "NICK_CHANGE", (void *)ns_nickchange_user},
{ NULL, NULL}
};
Module_Info *__module_get_info() {
return my_info;
};
Functions *__module_get_functions() {
return my_fn_list;
};
EventFnList *__module_get_events() {
return my_event_list;
};
void _init() {
int ret;
s_NickServ = "NS";
s_MemoServ = "MS";
ret = db_create(&dbp, NULL,0);
if (ret != 0) {
log("nickserv dbcreate error");
return;
}
ret = db_create(&mdbp, NULL,0);
if (ret != 0) {
log("memoserv dbcreate error");
return;
}
ret = dbp->open(dbp, NSDBASE, "NICKSERV", DB_HASH, 0, 0644);
if (ret == ENOENT) {
/* db doesn't exist */
log("nickserv Database Doesn't Exist, Creating it!");
ret = dbp->open(dbp, NSDBASE, "NICKSERV", DB_HASH, DB_CREATE, 0644);
}
if (ret != 0) {
log("nickserv dbopen error %s", db_strerror(ret));
return;
}
ret = mdbp->open(mdbp, NSDBASE, "MEMOSERV", DB_HASH, 0, 0644);
if (ret == ENOENT) {
/* db doesn't exist */
log("memoserv Database Doesn't Exist, Creating it!");
ret = mdbp->open(mdbp, NSDBASE, "MEMOSERV", DB_HASH, DB_CREATE, 0644);
}
if (ret != 0) {
log("memoserv dbopen error %s", db_strerror(ret));
return;
}
log("NickServ Loaded");
log("MemoServ Loaded");
init_regnick_hash();
/* load the nickserv forbidden list */
init_nick_forbid_list();
lang_init();
}
void _fini() {
int ret;
if (dbp != NULL) {
if ((ret = dbp->close(dbp, 0) != 0)) {
globops("NickServ DB Close Error: %s", db_strerror(ret));
};
}
if (mdbp != NULL) {
if ((ret = mdbp->close(mdbp, 0) != 0)) {
globops("MemoServ DB Close Error: %s", db_strerror(ret));
}
}
log("NickServ Unloaded");
};
char *makemask(User *u, int vhost) {
char userid[15], hostmask[255], *temp;
int i,j=0;
bzero(userid, 15);
bzero(hostmask, 255);
strncpy(userid, u->username, strlen(u->username));
if ((strncmp(userid, "~", 1) ==0)) {
userid[0] = '*';
}
/* TODO: handle IP address and hostnames */
/* this only does hostnames... */
if (vhost == 1) {
for (i=0; i<strlen(u->vhost); i++) {
if (!j && u->vhost[i] == '.') {
j = i+1;
} else if (j) {
hostmask[i-j+1] = u->vhost[i];
}
}
} else {
for (i=0; i<strlen(u->hostname); i++) {
if (!j && u->hostname[i] == '.') {
j = i+1;
} else if (j) {
hostmask[i-j+1] = u->hostname[i];
}
}
}
hostmask[0] = '*';
temp = malloc(sizeof(userid) + sizeof(hostmask) +1);
snprintf(temp, strlen(userid) + strlen(hostmask) +2 , "%s@%s", userid, hostmask);
return (char *)temp;
}
/*************************************************************************/
/* strnrepl: Replace occurrences of `old' with `new' in string `s'. Stop
* replacing if a replacement would cause the string to exceed
* `size' bytes (including the null terminator). Return the
* string.
*/
char *strnrepl(char *s, int size, const char *old, const char *new)
{
char *ptr = s;
int left = strlen(s);
int avail = size - (left+1);
int oldlen = strlen(old);
int newlen = strlen(new);
int diff = newlen - oldlen;
while (left >= oldlen) {
if (strncmp(ptr, old, oldlen) != 0) {
left--;
ptr++;
continue;
}
if (diff > avail)
break;
if (diff != 0)
memmove(ptr+oldlen+diff, ptr+oldlen, left+1);
strncpy(ptr, new, newlen);
ptr += newlen;
left -= oldlen;
}
return s;
}