summaryrefslogtreecommitdiff
path: root/src/hostserv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/hostserv.c')
-rw-r--r--src/hostserv.c523
1 files changed, 17 insertions, 506 deletions
diff --git a/src/hostserv.c b/src/hostserv.c
index e6cf50f86..3fde7ba3a 100644
--- a/src/hostserv.c
+++ b/src/hostserv.c
@@ -32,51 +32,20 @@ HostCore *insertHostCore(HostCore * head, HostCore * prev, char *nick,
HostCore *deleteHostCore(HostCore * head, HostCore * prev);
void delHostCore(char *nick);
-int is_host_setter(User * u);
-int is_host_remover(User * u);
-
-static int do_help(User * u);
-static int do_set(User * u);
-static int do_on(User * u);
-int do_on_id(User * u);
-static void set_lastmask(User * u);
-static int do_off(User * u);
-static int do_del(User * u);
-static int do_group(User * u);
-static int listOut(User * u);
-int do_hs_sync(NickCore * nc, char *vIdent, char *hostmask, char *creator,
- time_t time);
-int do_setall(User * u);
-int do_delall(User * u);
-void moduleAddHostServCmds(void);
+E int is_host_setter(User * u);
+E int is_host_remover(User * u);
+
+E int do_on_id(User * u);
+E void set_lastmask(User * u);
+
+E int do_hs_sync(NickCore * nc, char *vIdent, char *hostmask,
+ char *creator, time_t time);
+
+E void moduleAddHostServCmds(void);
/*************************************************************************/
void moduleAddHostServCmds(void)
{
- Command *c;
- c = createCommand("HELP", do_help, NULL, -1, -1, -1, -1, -1);
- addCoreCommand(HOSTSERV, c);
- c = createCommand("SET", do_set, is_host_setter, HOST_HELP_SET, -1, -1,
- -1, -1);
- addCoreCommand(HOSTSERV, c);
- c = createCommand("GROUP", do_group, NULL, HOST_HELP_GROUP, -1, -1, -1,
- -1);
- addCoreCommand(HOSTSERV, c);
- c = createCommand("SETALL", do_setall, is_host_setter,
- HOST_HELP_SETALL, -1, -1, -1, -1);
- addCoreCommand(HOSTSERV, c);
- c = createCommand("DELALL", do_delall, is_host_remover,
- HOST_HELP_DELALL, -1, -1, -1, -1);
- addCoreCommand(HOSTSERV, c);
- c = createCommand("ON", do_on, NULL, HOST_HELP_ON, -1, -1, -1, -1);
- addCoreCommand(HOSTSERV, c);
- c = createCommand("OFF", do_off, NULL, HOST_HELP_OFF, -1, -1, -1, -1);
- addCoreCommand(HOSTSERV, c);
- c = createCommand("DEL", do_del, is_host_remover, HOST_HELP_DEL, -1,
- -1, -1, -1);
- addCoreCommand(HOSTSERV, c);
- c = createCommand("LIST", listOut, is_services_oper, -1,
- -1, HOST_HELP_LIST, HOST_HELP_LIST, HOST_HELP_LIST);
- addCoreCommand(HOSTSERV, c);
+ modules_core_init(HostServCoreNumber, HostServCoreModules);
}
/*************************************************************************/
@@ -88,6 +57,7 @@ void moduleAddHostServCmds(void)
void hostserv_init(void)
{
moduleAddHostServCmds();
+
}
/*************************************************************************/
@@ -126,6 +96,11 @@ void hostserv(User * u, char *buf)
/* Start of Linked List routines */
/*************************************************************************/
+HostCore *hostCoreListHead()
+{
+ return head;
+}
+
/**
* Create HostCore list member
* @param next HostCore next slot
@@ -177,7 +152,6 @@ HostCore *createHostCorelist(HostCore * next, char *nick, char *vIdent,
}
/*************************************************************************/
-
/**
* Returns either NULL for the head, or the location of the *PREVIOUS*
* record, this is where we need to insert etc..
@@ -188,7 +162,6 @@ HostCore *createHostCorelist(HostCore * next, char *nick, char *vIdent,
*/
HostCore *findHostCore(HostCore * head, char *nick, boolean * found)
{
-
HostCore *previous, *current;
*found = false;
@@ -352,117 +325,6 @@ char *getvIdent(char *nick)
}
/*************************************************************************/
-int listOut(User * u)
-{
- char *key = strtok(NULL, "");
- struct tm *tm;
- char buf[BUFSIZE];
- int counter = 1;
- int from = 0, to = 0;
- char *tmp = NULL;
- char *s = NULL;
- int display_counter = 0;
-
- HostCore *current;
-
- current = head;
- if (current == NULL)
- notice_lang(s_HostServ, u, HOST_EMPTY);
- else {
- /**
- * Do a check for a range here, then in the next loop
- * we'll only display what has been requested..
- **/
- if (key) {
- if (key[0] == '#') {
- tmp = myStrGetOnlyToken((key + 1), '-', 0); /* Read FROM out */
- if (!tmp) {
- return MOD_CONT;
- }
- for (s = tmp; *s; s++) {
- if (!isdigit(*s)) {
- return MOD_CONT;
- }
- }
- from = atoi(tmp);
- tmp = myStrGetTokenRemainder(key, '-', 1); /* Read TO out */
- if (!tmp) {
- return MOD_CONT;
- }
- for (s = tmp; *s; s++) {
- if (!isdigit(*s)) {
- return MOD_CONT;
- }
- }
- to = atoi(tmp);
- key = NULL;
- }
- }
-
- while (current != NULL) {
- if (key) {
- if (((match_wild_nocase(key, current->nick))
- || (match_wild_nocase(key, current->vHost)))
- && (display_counter < NSListMax)) {
- display_counter++;
- tm = localtime(&current->time);
- strftime_lang(buf, sizeof(buf), u,
- STRFTIME_DATE_TIME_FORMAT, tm);
- if (current->vIdent) {
- notice_lang(s_HostServ, u, HOST_IDENT_ENTRY,
- counter, current->nick,
- current->vIdent, current->vHost,
- current->creator, buf);
- } else {
- notice_lang(s_HostServ, u, HOST_ENTRY, counter,
- current->nick, current->vHost,
- current->creator, buf);
- }
- }
- } else {
- /**
- * List the host if its in the display range, and not more
- * than NSListMax records have been displayed...
- **/
- if ((((counter >= from) && (counter <= to))
- || ((from == 0) && (to == 0)))
- && (display_counter < NSListMax)) {
- display_counter++;
- tm = localtime(&current->time);
- strftime_lang(buf, sizeof(buf), u,
- STRFTIME_DATE_TIME_FORMAT, tm);
- if (current->vIdent) {
- notice_lang(s_HostServ, u, HOST_IDENT_ENTRY,
- counter, current->nick,
- current->vIdent, current->vHost,
- current->creator, buf);
- } else {
- notice_lang(s_HostServ, u, HOST_ENTRY, counter,
- current->nick, current->vHost,
- current->creator, buf);
- }
- }
- }
- counter++;
- current = current->next;
- }
- if (key) {
- notice_lang(s_HostServ, u, HOST_LIST_KEY_FOOTER, key,
- display_counter);
- } else {
- if (from != 0) {
- notice_lang(s_HostServ, u, HOST_LIST_RANGE_FOOTER, from,
- to);
- } else {
- notice_lang(s_HostServ, u, HOST_LIST_FOOTER,
- display_counter);
- }
- }
- }
- return MOD_CONT;
-}
-
-/*************************************************************************/
void delHostCore(char *nick)
{
#ifdef USE_RDB
@@ -670,116 +532,6 @@ void save_hs_rdb_dbase(void)
/*************************************************************************/
/* Start of Generic Functions */
/*************************************************************************/
-int do_setall(User * u)
-{
-
- char *nick = strtok(NULL, " ");
- char *rawhostmask = strtok(NULL, " ");
- char *hostmask = smalloc(HOSTMAX);
-
- NickAlias *na;
- int32 tmp_time;
- char *s;
-
- char *vIdent = NULL;
-
- if (!nick || !rawhostmask) {
- notice_lang(s_HostServ, u, HOST_SETALL_SYNTAX, s_HostServ);
- return MOD_CONT;
- }
-
- vIdent = myStrGetOnlyToken(rawhostmask, '@', 0); /* Get the first substring, @ as delimiter */
- if (vIdent) {
- rawhostmask = myStrGetTokenRemainder(rawhostmask, '@', 1); /* get the remaining string */
- if (!rawhostmask) {
- notice_lang(s_HostServ, u, HOST_SETALL_SYNTAX, s_HostServ);
- return MOD_CONT;
- }
- if (strlen(vIdent) > USERMAX - 1) {
- notice_lang(s_HostServ, u, HOST_SET_IDENTTOOLONG, USERMAX);
- return MOD_CONT;
- } else {
- for (s = vIdent; *s; s++) {
- if (!isvalidchar(*s)) {
- notice_lang(s_HostServ, u, HOST_SET_IDENT_ERROR);
- return MOD_CONT;
- }
- }
- }
- if (!ircd->vident) {
- notice_lang(s_HostServ, u, HOST_NO_VIDENT);
- return MOD_CONT;
- }
- }
-
- if (strlen(rawhostmask) < HOSTMAX - 1)
- snprintf(hostmask, HOSTMAX - 1, "%s", rawhostmask);
- else {
- notice_lang(s_HostServ, u, HOST_SET_TOOLONG, HOSTMAX);
- return MOD_CONT;
- }
-
- if (!isValidHost(hostmask, 3)) {
- notice_lang(s_HostServ, u, HOST_SET_ERROR);
- free(hostmask);
- return MOD_CONT;
- }
-
- tmp_time = time(NULL);
-
- if ((na = findnick(nick))) {
- if (na->status & NS_VERBOTEN) {
- notice_lang(s_HostServ, u, NICK_X_FORBIDDEN, nick);
- free(hostmask);
- return MOD_CONT;
- }
- if (vIdent && ircd->vident) {
- alog("vHost for all nicks in group \002%s\002 set to \002%s@%s\002 by oper \002%s\002", nick, vIdent, hostmask, u->nick);
- } else {
- alog("vHost for all nicks in group \002%s\002 set to \002%s\002 by oper \002%s\002", nick, hostmask, u->nick);
- }
- do_hs_sync(na->nc, vIdent, hostmask, u->nick, tmp_time);
- if (vIdent) {
- notice_lang(s_HostServ, u, HOST_IDENT_SETALL, nick, vIdent,
- hostmask);
- } else {
- notice_lang(s_HostServ, u, HOST_SETALL, nick, hostmask);
- }
- } else {
- notice_lang(s_HostServ, u, HOST_NOREG, nick);
- }
-
- free(hostmask);
- return MOD_CONT;
-}
-
-int do_delall(User * u)
-{
- int i;
- char *nick = strtok(NULL, " ");
- NickAlias *na;
- NickCore *nc;
- if (!nick) {
- notice_lang(s_HostServ, u, HOST_DELALL_SYNTAX, s_HostServ);
- return MOD_CONT;
- }
- if ((na = findnick(nick))) {
- if (na->status & NS_VERBOTEN) {
- notice_lang(s_HostServ, u, NICK_X_FORBIDDEN, nick);
- return MOD_CONT;
- }
- nc = na->nc;
- for (i = 0; i < nc->aliases.count; i++) {
- na = nc->aliases.list[i];
- delHostCore(na->nick);
- }
- alog("vHosts for all nicks in group \002%s\002 deleted by oper \002%s\002", nc->display, u->nick);
- notice_lang(s_HostServ, u, HOST_DELALL, nc->display);
- } else {
- notice_lang(s_HostServ, u, HOST_NOREG, nick);
- }
- return MOD_CONT;
-}
int do_hs_sync(NickCore * nc, char *vIdent, char *hostmask, char *creator,
time_t time)
@@ -794,193 +546,6 @@ int do_hs_sync(NickCore * nc, char *vIdent, char *hostmask, char *creator,
return MOD_CONT;
}
-static int do_group(User * u)
-{
- NickAlias *na;
- HostCore *tmp;
- char *vHost = NULL;
- char *vIdent = NULL;
- char *creator = NULL;
- time_t time;
- boolean found = false;
-
- if ((na = findnick(u->nick))) {
- if (na->status & NS_IDENTIFIED) {
- tmp = findHostCore(head, u->nick, &found);
- if (found) {
- if (tmp == NULL) {
- tmp = head; /* incase first in list */
- } else if (tmp->next) { /* we dont want the previous entry were not inserting! */
- tmp = tmp->next; /* jump to the next */
- }
-
- vHost = sstrdup(tmp->vHost);
- if (tmp->vIdent)
- vIdent = sstrdup(tmp->vIdent);
- creator = sstrdup(tmp->creator);
- time = tmp->time;
-
- do_hs_sync(na->nc, vIdent, vHost, creator, time);
- if (tmp->vIdent) {
- notice_lang(s_HostServ, u, HOST_IDENT_GROUP,
- na->nc->display, vIdent, vHost);
- } else {
- notice_lang(s_HostServ, u, HOST_GROUP, na->nc->display,
- vHost);
- }
- free(vHost);
- if (vIdent)
- free(vIdent);
- free(creator);
-
- } else {
- notice_lang(s_HostServ, u, HOST_NOT_ASSIGNED);
- }
- } else {
- notice_lang(s_HostServ, u, HOST_ID);
- }
- } else {
- notice_lang(s_HostServ, u, HOST_NOT_REGED);
- }
- return MOD_CONT;
-}
-
-static int do_help(User * u)
-{
- char *cmd = strtok(NULL, "");
-
- if (!cmd) {
- notice_help(s_HostServ, u, HOST_HELP, s_HostServ);
- if ((is_services_oper(u)) || (is_host_setter(u)))
- notice_help(s_HostServ, u, HOST_OPER_HELP);
- /* Removed as atm, there is no admin only help */
-/* if (is_services_admin(u))
- notice_help(s_HostServ, u, HOST_ADMIN_HELP);*/
- moduleDisplayHelp(6, u);
- } else {
- mod_help_cmd(s_HostServ, u, HOSTSERV, cmd);
- }
- return MOD_CONT;
-}
-
-/*************************************************************************/
-int do_set(User * u)
-{
- char *nick = strtok(NULL, " ");
- char *rawhostmask = strtok(NULL, " ");
- char *hostmask = smalloc(HOSTMAX);
-
- NickAlias *na;
- int32 tmp_time;
- char *s;
-
- char *vIdent = NULL;
-
- if (!nick || !rawhostmask) {
- notice_lang(s_HostServ, u, HOST_SET_SYNTAX, s_HostServ);
- return MOD_CONT;
- }
-
- vIdent = myStrGetOnlyToken(rawhostmask, '@', 0); /* Get the first substring, @ as delimiter */
- if (vIdent) {
- rawhostmask = myStrGetTokenRemainder(rawhostmask, '@', 1); /* get the remaining string */
- if (!rawhostmask) {
- notice_lang(s_HostServ, u, HOST_SET_SYNTAX, s_HostServ);
- return MOD_CONT;
- }
- if (strlen(vIdent) > USERMAX - 1) {
- notice_lang(s_HostServ, u, HOST_SET_IDENTTOOLONG, USERMAX);
- return MOD_CONT;
- } else {
- for (s = vIdent; *s; s++) {
- if (!isvalidchar(*s)) {
- notice_lang(s_HostServ, u, HOST_SET_IDENT_ERROR);
- return MOD_CONT;
- }
- }
- }
- if (!ircd->vident) {
- notice_lang(s_HostServ, u, HOST_NO_VIDENT);
- return MOD_CONT;
- }
- }
- if (strlen(rawhostmask) < HOSTMAX - 1)
- snprintf(hostmask, HOSTMAX - 1, "%s", rawhostmask);
- else {
- notice_lang(s_HostServ, u, HOST_SET_TOOLONG, HOSTMAX);
- return MOD_CONT;
- }
-
- if (!isValidHost(hostmask, 3)) {
- notice_lang(s_HostServ, u, HOST_SET_ERROR);
- return MOD_CONT;
- }
-
-
- tmp_time = time(NULL);
-
- if ((na = findnick(nick))) {
- if (na->status & NS_VERBOTEN) {
- notice_lang(s_HostServ, u, NICK_X_FORBIDDEN, nick);
- return MOD_CONT;
- }
- if (vIdent && ircd->vident) {
- alog("vHost for user \002%s\002 set to \002%s@%s\002 by oper \002%s\002", nick, vIdent, hostmask, u->nick);
- } else {
- alog("vHost for user \002%s\002 set to \002%s\002 by oper \002%s\002", nick, hostmask, u->nick);
- }
- addHostCore(nick, vIdent, hostmask, u->nick, tmp_time);
- if (vIdent) {
- notice_lang(s_HostServ, u, HOST_IDENT_SET, nick, vIdent,
- hostmask);
- } else {
- notice_lang(s_HostServ, u, HOST_SET, nick, hostmask);
- }
- } else {
- notice_lang(s_HostServ, u, HOST_NOREG, nick);
- }
- free(hostmask);
- return MOD_CONT;
-}
-
-/*************************************************************************/
-int do_on(User * u)
-{
- NickAlias *na;
- char *vHost;
- char *vIdent = NULL;
- if ((na = findnick(u->nick))) {
- if (na->status & NS_IDENTIFIED) {
- vHost = getvHost(u->nick);
- vIdent = getvIdent(u->nick);
- if (vHost == NULL) {
- notice_lang(s_HostServ, u, HOST_NOT_ASSIGNED);
- } else {
- if (vIdent) {
- notice_lang(s_HostServ, u, HOST_IDENT_ACTIVATED,
- vIdent, vHost);
- } else {
- notice_lang(s_HostServ, u, HOST_ACTIVATED, vHost);
- }
- anope_cmd_vhost_on(u->nick, vIdent, vHost);
- if (ircd->vhost) {
- u->vhost = sstrdup(vHost);
- }
- if (ircd->vident) {
- if (vIdent)
- u->vident = sstrdup(vIdent);
- }
- set_lastmask(u);
- }
- } else {
- notice_lang(s_HostServ, u, HOST_ID);
- }
- } else {
- notice_lang(s_HostServ, u, HOST_NOT_REGED);
- }
- return MOD_CONT;
-}
-
/*************************************************************************/
int do_on_id(User * u)
{ /* we've assumed that the user exists etc.. */
@@ -1009,52 +574,6 @@ int do_on_id(User * u)
}
/*************************************************************************/
-int do_del(User * u)
-{
- NickAlias *na;
- char *nick = strtok(NULL, " ");
- if (nick) {
- if ((na = findnick(nick))) {
- if (na->status & NS_VERBOTEN) {
- notice_lang(s_HostServ, u, NICK_X_FORBIDDEN, nick);
- return MOD_CONT;
- }
- alog("vHost for user \002%s\002 deleted by oper \002%s\002",
- nick, u->nick);
- delHostCore(nick);
- notice_lang(s_HostServ, u, HOST_DEL, nick);
- } else {
- notice_lang(s_HostServ, u, HOST_NOREG, nick);
- }
- } else {
- notice_lang(s_HostServ, u, HOST_DEL_SYNTAX, s_HostServ);
- }
- return MOD_CONT;
-}
-
-/*************************************************************************/
-int do_off(User * u)
-{
- NickAlias *na;
- char *vhost;
- char *vident = NULL;
- if ((na = findnick(u->nick))) {
- if (na->status & NS_IDENTIFIED) {
- vhost = getvHost(u->nick);
- vident = getvIdent(u->nick);
- if (vhost == NULL && vident == NULL)
- notice_lang(s_HostServ, u, HOST_NOT_ASSIGNED);
- else
- anope_cmd_vhost_off(u);
- } else {
- notice_lang(s_HostServ, u, HOST_ID);
- }
- } else {
- notice_lang(s_HostServ, u, HOST_NOT_REGED);
- }
- return MOD_CONT;
-}
-
int is_host_setter(User * u)
{
int i, j;
@@ -1100,11 +619,3 @@ void set_lastmask(User * u)
common_get_vhost(u));
}
-
-/*************************************************************************/
-/* End of Generic Functions */
-/*************************************************************************/
-
-/*************************************************************************/
-/* End of Server Functions */
-/*************************************************************************/