hs_request.c

Go to the documentation of this file.
00001 /* hs_request.c - Add request and activate functionality to HostServ,
00002  *                along with adding +req as optional param to HostServ list.
00003  *
00004  * (C) 2003-2008 Anope Team
00005  * Contact us at info@anope.org
00006  *
00007  * Based on the original module by Rob <rob@anope.org>
00008  * Included in the Anope module pack since Anope 1.7.11
00009  * Anope Coder: GeniusDex <geniusdex@anope.org>
00010  *
00011  * Please read COPYING and README for further details.
00012  *
00013  * Send bug reports to the Anope Coder instead of the module
00014  * author, because any changes since the inclusion into anope
00015  * are not supported by the original author.
00016  */
00017 
00018 #include "module.h"
00019 
00020 #define AUTHOR "Rob"
00021 #define VERSION "$Id: hs_request.c 1397 2008-06-03 18:44:54Z geniusdex $"
00022 
00023 /* Configuration variables */
00024 int HSRequestMemoUser = 0;
00025 int HSRequestMemoOper = 0;
00026 int HSRequestMemoSetters = 0;
00027 char *HSRequestDBName = NULL;
00028 
00029 #define HSREQ_DEFAULT_DBNAME "hs_request.db"
00030 
00031 /* Language defines */
00032 #define LNG_NUM_STRINGS 21
00033 
00034 #define LNG_REQUEST_SYNTAX              0
00035 #define LNG_REQUESTED                   1
00036 #define LNG_REQUEST_WAIT                2
00037 #define LNG_REQUEST_MEMO                3
00038 #define LNG_ACTIVATE_SYNTAX             4
00039 #define LNG_ACTIVATED                   5
00040 #define LNG_ACTIVATE_MEMO               6
00041 #define LNG_REJECT_SYNTAX               7
00042 #define LNG_REJECTED                    8
00043 #define LNG_REJECT_MEMO                 9
00044 #define LNG_REJECT_MEMO_REASON  10
00045 #define LNG_NO_REQUEST                  11
00046 #define LNG_HELP                                12
00047 #define LNG_HELP_SETTER                 13
00048 #define LNG_HELP_REQUEST                14
00049 #define LNG_HELP_ACTIVATE               15
00050 #define LNG_HELP_ACTIVATE_MEMO  16
00051 #define LNG_HELP_REJECT                 17
00052 #define LNG_HELP_REJECT_MEMO    18
00053 #define LNG_WAITING_SYNTAX              19
00054 #define LNG_HELP_WAITING                20
00055 
00056 int hs_do_request(User * u);
00057 int hs_do_activate(User * u);
00058 int hs_do_reject(User * u);
00059 int hs_do_list_out(User * u);
00060 
00061 int hs_help_request(User * u);
00062 int hs_help_activate(User * u);
00063 int hs_help_reject(User * u);
00064 int hs_help_waiting(User * u);
00065 void hs_help(User * u);
00066 
00067 void my_add_host_request(char *nick, char *vIdent, char *vhost,
00068                          char *creator, int32 tmp_time);
00069 int my_isvalidchar(const char c);
00070 void my_memo_lang(User * u, char *name, int z, int number, ...);
00071 void req_send_memos(User * u, char *vHost);
00072 void show_list(User * u);
00073 int hs_do_waiting(User * u);
00074 int ns_do_drop(User * u);
00075 
00076 void hsreq_save_db(void);
00077 void hsreq_load_db(void);
00078 int hsreqevt_db_saving(int argc, char **argv);
00079 int hsreqevt_db_backup(int argc, char **argv);
00080 
00081 void my_load_config(void);
00082 void my_add_languages(void);
00083 
00084 HostCore *hs_request_head;
00085 
00086 int AnopeInit(int argc, char **argv)
00087 {
00088     Command *c;
00089     EvtHook *hook;
00090 
00091     c = createCommand("request", hs_do_request, nick_identified, -1, -1,
00092                       -1, -1, -1);
00093     moduleAddHelp(c, hs_help_request);
00094     moduleAddCommand(HOSTSERV, c, MOD_HEAD);
00095 
00096     c = createCommand("activate", hs_do_activate, is_host_setter, -1, -1,
00097                       -1, -1, -1);
00098     moduleAddHelp(c, hs_help_activate);
00099     moduleAddCommand(HOSTSERV, c, MOD_HEAD);
00100 
00101     c = createCommand("reject", hs_do_reject, is_host_setter, -1, -1, -1,
00102                       -1, -1);
00103     moduleAddHelp(c, hs_help_reject);
00104     moduleAddCommand(HOSTSERV, c, MOD_HEAD);
00105 
00106     c = createCommand("waiting", hs_do_waiting, is_host_setter, -1, -1, -1,
00107                       -1, -1);
00108     moduleAddHelp(c, hs_help_waiting);
00109     moduleAddCommand(HOSTSERV, c, MOD_HEAD);
00110 
00111     c = createCommand("list", hs_do_list_out, is_services_oper, -1, -1, -1,
00112                       -1, -1);
00113     moduleAddCommand(HOSTSERV, c, MOD_HEAD);
00114 
00115     c = createCommand("drop", ns_do_drop, NULL, -1, -1, -1, -1, -1);
00116     moduleAddCommand(NICKSERV, c, MOD_HEAD);
00117 
00118     hook = createEventHook(EVENT_DB_SAVING, hsreqevt_db_saving);
00119     moduleAddEventHook(hook);
00120 
00121     hook = createEventHook(EVENT_DB_BACKUP, hsreqevt_db_backup);
00122     moduleAddEventHook(hook);
00123 
00124     moduleSetHostHelp(hs_help);
00125     moduleAddAuthor(AUTHOR);
00126     moduleAddVersion(VERSION);
00127     moduleSetType(SUPPORTED);
00128 
00129     my_load_config();
00130     my_add_languages();
00131     hs_request_head = NULL;
00132 
00133     if (debug)
00134         alog("[hs_request] Loading database...");
00135     hsreq_load_db();
00136     alog("hs_request loaded");
00137     return MOD_CONT;
00138 }
00139 
00140 void AnopeFini(void)
00141 {
00142     if (debug)
00143         alog("[hs_request] Saving database...");
00144     hsreq_save_db();
00145 
00146     /* Clean up all open host requests */
00147     while (hs_request_head)
00148         hs_request_head = deleteHostCore(hs_request_head, NULL);
00149 
00150     free(HSRequestDBName);
00151     alog("hs_request un-loaded");
00152 }
00153 
00154 int hs_do_request(User * u)
00155 {
00156     char *cur_buffer;
00157     char *nick;
00158     char *rawhostmask;
00159     char hostmask[HOSTMAX];
00160     NickAlias *na;
00161     int32 tmp_time;
00162     char *s;
00163     char *vIdent = NULL;
00164     time_t now = time(NULL);
00165 
00166     cur_buffer = moduleGetLastBuffer();
00167     nick = u->nick;
00168     rawhostmask = myStrGetToken(cur_buffer, ' ', 0);
00169 
00170     if (!nick || !rawhostmask) {
00171         if (rawhostmask)
00172             free(rawhostmask);
00173         moduleNoticeLang(s_HostServ, u, LNG_REQUEST_SYNTAX);
00174         return MOD_CONT;
00175     }
00176 
00177     vIdent = myStrGetOnlyToken(rawhostmask, '@', 0);    /* Get the first substring, @ as delimiter */
00178     if (vIdent) {
00179         rawhostmask = myStrGetTokenRemainder(rawhostmask, '@', 1);      /* get the remaining string */
00180         if (!rawhostmask) {
00181             moduleNoticeLang(s_HostServ, u, LNG_REQUEST_SYNTAX);
00182             free(vIdent);
00183             return MOD_CONT;
00184         }
00185         if (strlen(vIdent) > USERMAX - 1) {
00186             notice_lang(s_HostServ, u, HOST_SET_IDENTTOOLONG, USERMAX);
00187             free(vIdent);
00188             free(rawhostmask);
00189             return MOD_CONT;
00190         } else {
00191             for (s = vIdent; *s; s++) {
00192                 if (!my_isvalidchar(*s)) {
00193                     notice_lang(s_HostServ, u, HOST_SET_IDENT_ERROR);
00194                     free(vIdent);
00195                     free(rawhostmask);
00196                     return MOD_CONT;
00197                 }
00198             }
00199         }
00200         if (!ircd->vident) {
00201             notice_lang(s_HostServ, u, HOST_NO_VIDENT);
00202             free(vIdent);
00203             free(rawhostmask);
00204             return MOD_CONT;
00205         }
00206     }
00207     if (strlen(rawhostmask) < HOSTMAX - 1) {
00208         snprintf(hostmask, HOSTMAX, "%s", rawhostmask);
00209     } else {
00210         notice_lang(s_HostServ, u, HOST_SET_TOOLONG, HOSTMAX);
00211         if (vIdent)
00212             free(vIdent);
00213         free(rawhostmask);
00214         return MOD_CONT;
00215     }
00216 
00217     if (!isValidHost(hostmask, 3)) {
00218         notice_lang(s_HostServ, u, HOST_SET_ERROR);
00219         if (vIdent)
00220             free(vIdent);
00221         free(rawhostmask);
00222         return MOD_CONT;
00223     }
00224 
00225     tmp_time = time(NULL);
00226     if ((na = findnick(nick))) {
00227         if (HSRequestMemoOper || HSRequestMemoSetters) {
00228             if (MSSendDelay > 0 && u
00229                 && u->lastmemosend + MSSendDelay > now) {
00230                 moduleNoticeLang(s_HostServ, u, LNG_REQUEST_WAIT,
00231                                  MSSendDelay);
00232                 u->lastmemosend = now;
00233                 if (vIdent)
00234                     free(vIdent);
00235                 free(rawhostmask);
00236                 return MOD_CONT;
00237             }
00238         }
00239         my_add_host_request(nick, vIdent, hostmask, u->nick, tmp_time);
00240 
00241         moduleNoticeLang(s_HostServ, u, LNG_REQUESTED);
00242         req_send_memos(u, hostmask);
00243         alog("New vHost Requested by %s", nick);
00244     } else {
00245         notice_lang(s_HostServ, u, HOST_NOREG, nick);
00246     }
00247 
00248     if (vIdent)
00249         free(vIdent);
00250     free(rawhostmask);
00251 
00252     return MOD_CONT;
00253 }
00254 
00255 void my_memo_lang(User * u, char *name, int z, int number, ...)
00256 {
00257     va_list va;
00258     char buffer[4096], outbuf[4096];
00259     char *fmt = NULL;
00260     int lang = LANG_EN_US;
00261     char *s, *t, *buf;
00262     User *u2;
00263 
00264     if ((mod_current_module_name)
00265         && (!mod_current_module
00266             || strcmp(mod_current_module_name, mod_current_module->name)))
00267         mod_current_module = findModule(mod_current_module_name);
00268 
00269     u2 = finduser(name);
00270     /* Find the users lang, and use it if we cant */
00271     if (u2 && u2->na && u2->na->nc)
00272         lang = u2->na->nc->language;
00273 
00274     /* If the users lang isnt supported, drop back to enlgish */
00275     if (mod_current_module->lang[lang].argc == 0)
00276         lang = LANG_EN_US;
00277 
00278     /* If the requested lang string exists for the language */
00279     if (mod_current_module->lang[lang].argc > number) {
00280         fmt = mod_current_module->lang[lang].argv[number];
00281 
00282         buf = sstrdup(fmt);
00283         s = buf;
00284         while (*s) {
00285             t = s;
00286             s += strcspn(s, "\n");
00287             if (*s)
00288                 *s++ = '\0';
00289             strscpy(outbuf, t, sizeof(outbuf));
00290 
00291             va_start(va, number);
00292             vsnprintf(buffer, 4095, outbuf, va);
00293             va_end(va);
00294             memo_send(u, name, buffer, z);
00295         }
00296         free(buf);
00297     } else {
00298         alog("%s: INVALID language string call, language: [%d], String [%d]", mod_current_module->name, lang, number);
00299     }
00300 }
00301 
00302 
00303 void req_send_memos(User * u, char *vHost)
00304 {
00305     int i;
00306     int z = 2;
00307 
00308     if (checkDefCon(DEFCON_NO_NEW_MEMOS))
00309         return;
00310 
00311     if (HSRequestMemoOper == 1) {
00312         for (i = 0; i < servopers.count; i++) {
00313             my_memo_lang(u, (((NickCore *) servopers.list[i])->display), z,
00314                          LNG_REQUEST_MEMO, vHost);
00315         }
00316         for (i = 0; i < servadmins.count; i++) {
00317             my_memo_lang(u, (((NickCore *) servadmins.list[i])->display),
00318                          z, LNG_REQUEST_MEMO, vHost);
00319         }
00320         for (i = 0; i < RootNumber; i++) {
00321             my_memo_lang(u, ServicesRoots[i], z, LNG_REQUEST_MEMO, vHost);
00322         }
00323     }
00324     if (HSRequestMemoSetters == 1) {
00325         for (i = 0; i < HostNumber; i++) {
00326             my_memo_lang(u, HostSetters[i], z, LNG_REQUEST_MEMO, vHost);
00327         }
00328     }
00329 }
00330 
00331 int ns_do_drop(User * u)
00332 {
00333     HostCore *tmp;
00334     boolean found = false;
00335     NickAlias *na;
00336 
00337     na = findnick(u->nick);
00338     tmp = findHostCore(hs_request_head, u->nick, &found);
00339 
00340     if (found && na)
00341         hs_request_head = deleteHostCore(hs_request_head, tmp);
00342 
00343     return MOD_CONT;
00344 }
00345 
00346 int hs_do_reject(User * u)
00347 {
00348     char *cur_buffer;
00349     char *nick;
00350     char *reason;
00351     HostCore *tmp, *hc;
00352     boolean found = false;
00353 
00354     cur_buffer = moduleGetLastBuffer();
00355     nick = myStrGetToken(cur_buffer, ' ', 0);
00356     reason = myStrGetTokenRemainder(cur_buffer, ' ', 1);
00357 
00358     if (!nick) {
00359         moduleNoticeLang(s_HostServ, u, LNG_REJECT_SYNTAX);
00360         if (reason)
00361             free(reason);
00362         return MOD_CONT;
00363     }
00364 
00365     tmp = findHostCore(hs_request_head, nick, &found);
00366     if (found) {
00367         if (!tmp)
00368             hc = hs_request_head;
00369         else
00370             hc = tmp->next;
00371 
00372         if (HSRequestMemoUser) {
00373             if (reason)
00374                 my_memo_lang(u, hc->nick, 2, LNG_REJECT_MEMO_REASON,
00375                              reason);
00376             else
00377                 my_memo_lang(u, hc->nick, 2, LNG_REJECT_MEMO);
00378         }
00379 
00380         hs_request_head = deleteHostCore(hs_request_head, tmp);
00381         moduleNoticeLang(s_HostServ, u, LNG_REJECTED, nick);
00382         alog("Host Request for %s rejected by %s (%s)", nick, u->nick,
00383              reason ? reason : "");
00384     } else {
00385         moduleNoticeLang(s_HostServ, u, LNG_NO_REQUEST, nick);
00386     }
00387 
00388     free(nick);
00389     if (reason)
00390         free(reason);
00391 
00392     return MOD_CONT;
00393 }
00394 
00395 int hs_do_activate(User * u)
00396 {
00397     char *cur_buffer;
00398     char *nick;
00399     NickAlias *na;
00400     HostCore *tmp, *hc;
00401     boolean found = false;
00402 
00403     cur_buffer = moduleGetLastBuffer();
00404     nick = myStrGetToken(cur_buffer, ' ', 0);
00405 
00406     if (!nick) {
00407         moduleNoticeLang(s_HostServ, u, LNG_ACTIVATE_SYNTAX);
00408         return MOD_CONT;
00409     }
00410 
00411     if ((na = findnick(nick))) {
00412         tmp = findHostCore(hs_request_head, nick, &found);
00413         if (found) {
00414             if (!tmp)
00415                 hc = hs_request_head;
00416             else
00417                 hc = tmp->next;
00418 
00419             addHostCore(hc->nick, hc->vIdent, hc->vHost, u->nick,
00420                         time(NULL));
00421 
00422             if (HSRequestMemoUser)
00423                 my_memo_lang(u, hc->nick, 2, LNG_ACTIVATE_MEMO);
00424 
00425             hs_request_head = deleteHostCore(hs_request_head, tmp);
00426             moduleNoticeLang(s_HostServ, u, LNG_ACTIVATED, nick);
00427             alog("Host Request for %s activated by %s", nick, u->nick);
00428         } else {
00429             moduleNoticeLang(s_HostServ, u, LNG_NO_REQUEST, nick);
00430         }
00431     } else {
00432         /* Should be "User Not Found" instead */
00433         moduleNoticeLang(s_HostServ, u, LNG_ACTIVATE_SYNTAX);
00434     }
00435 
00436     free(nick);
00437     return MOD_CONT;
00438 }
00439 
00440 
00441 void my_add_host_request(char *nick, char *vIdent, char *vhost,
00442                          char *creator, int32 tmp_time)
00443 {
00444     HostCore *tmp;
00445     boolean found = false;
00446 
00447     if (!hs_request_head) {
00448         hs_request_head =
00449             createHostCorelist(hs_request_head, nick, vIdent, vhost,
00450                                creator, tmp_time);
00451     } else {
00452         tmp = findHostCore(hs_request_head, nick, &found);
00453         if (!found) {
00454             hs_request_head =
00455                 insertHostCore(hs_request_head, tmp, nick, vIdent, vhost,
00456                                creator, tmp_time);
00457         } else {
00458             hs_request_head = deleteHostCore(hs_request_head, tmp);     /* delete the old entry */
00459             my_add_host_request(nick, vIdent, vhost, creator, tmp_time);        /* recursive call to add new entry */
00460         }
00461     }
00462 }
00463 
00464 int my_isvalidchar(const char c)
00465 {
00466     if (((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z'))
00467         || ((c >= '0') && (c <= '9')) || (c == '.') || (c == '-'))
00468         return 1;
00469     else
00470         return 0;
00471 }
00472 
00473 int hs_do_list_out(User * u)
00474 {
00475     char *key;
00476 
00477     key = moduleGetLastBuffer();
00478     if (!key)
00479         return MOD_CONT;
00480 
00481     if (stricmp(key, "+req") != 0)
00482         return MOD_CONT;
00483 
00484     show_list(u);
00485 
00486     return MOD_CONT;
00487 }
00488 
00489 int hs_do_waiting(User * u)
00490 {
00491     show_list(u);
00492 
00493     return MOD_CONT;
00494 }
00495 
00496 void show_list(User * u)
00497 {
00498     struct tm *tm;
00499     char buf[BUFSIZE];
00500     int counter = 1;
00501     int from = 0, to = 0;
00502     int display_counter = 0;
00503     HostCore *current;
00504 
00505     current = hs_request_head;
00506     while (current) {
00507         if ((((counter >= from) && (counter <= to))
00508              || ((from == 0) && (to == 0)))
00509             && (display_counter < NSListMax)) {
00510             display_counter++;
00511             tm = localtime(&current->time);
00512             strftime(buf, sizeof(buf),
00513                      getstring(NULL, STRFTIME_DATE_TIME_FORMAT), tm);
00514             if (current->vIdent)
00515                 notice_lang(s_HostServ, u, HOST_IDENT_ENTRY, counter,
00516                             current->nick, current->vIdent, current->vHost,
00517                             current->creator, buf);
00518             else
00519                 notice_lang(s_HostServ, u, HOST_ENTRY, counter,
00520                             current->nick, current->vHost,
00521                             current->creator, buf);
00522         }
00523         counter++;
00524         current = current->next;
00525     }
00526     notice_lang(s_HostServ, u, HOST_LIST_FOOTER, display_counter);
00527 }
00528 
00529 int hs_help_request(User * u)
00530 {
00531     moduleNoticeLang(s_HostServ, u, LNG_REQUEST_SYNTAX);
00532     notice(s_HostServ, u->nick, " ");
00533     moduleNoticeLang(s_HostServ, u, LNG_HELP_REQUEST);
00534 
00535     return MOD_CONT;
00536 }
00537 
00538 int hs_help_activate(User * u)
00539 {
00540     if (is_host_setter(u)) {
00541         moduleNoticeLang(s_HostServ, u, LNG_ACTIVATE_SYNTAX);
00542         notice(s_HostServ, u->nick, " ");
00543         moduleNoticeLang(s_HostServ, u, LNG_HELP_ACTIVATE);
00544         if (HSRequestMemoUser)
00545             moduleNoticeLang(s_HostServ, u, LNG_HELP_ACTIVATE_MEMO);
00546     } else {
00547         notice_lang(s_HostServ, u, NO_HELP_AVAILABLE, "ACTIVATE");
00548     }
00549 
00550     return MOD_CONT;
00551 }
00552 
00553 int hs_help_reject(User * u)
00554 {
00555     if (is_host_setter(u)) {
00556         moduleNoticeLang(s_HostServ, u, LNG_REJECT_SYNTAX);
00557         notice(s_HostServ, u->nick, " ");
00558         moduleNoticeLang(s_HostServ, u, LNG_HELP_REJECT);
00559         if (HSRequestMemoUser)
00560             moduleNoticeLang(s_HostServ, u, LNG_HELP_REJECT_MEMO);
00561     } else {
00562         notice_lang(s_HostServ, u, NO_HELP_AVAILABLE, "REJECT");
00563     }
00564 
00565     return MOD_CONT;
00566 }
00567 
00568 int hs_help_waiting(User * u)
00569 {
00570     if (is_host_setter(u)) {
00571         moduleNoticeLang(s_HostServ, u, LNG_WAITING_SYNTAX);
00572         notice(s_HostServ, u->nick, " ");
00573         moduleNoticeLang(s_HostServ, u, LNG_HELP_WAITING);
00574     } else {
00575         notice_lang(s_HostServ, u, NO_HELP_AVAILABLE, "WAITING");
00576     }
00577 
00578     return MOD_CONT;
00579 }
00580 
00581 void hs_help(User * u)
00582 {
00583     moduleNoticeLang(s_HostServ, u, LNG_HELP);
00584     if (is_host_setter(u))
00585         moduleNoticeLang(s_HostServ, u, LNG_HELP_SETTER);
00586 }
00587 void hsreq_load_db(void)
00588 {
00589     FILE *fp;
00590     char *filename;
00591     char readbuf[1024];
00592     char *nick, *vident, *vhost, *creator, *tmp;
00593     int32 tmp_time;
00594     char *buf;
00595 
00596     if (HSRequestDBName)
00597         filename = HSRequestDBName;
00598     else
00599         filename = HSREQ_DEFAULT_DBNAME;
00600 
00601     fp = fopen(filename, "r");
00602     if (!fp) {
00603         alog("[hs_request] Unable to open database ('%s') for reading",
00604              filename);
00605         return;
00606     }
00607 
00608     while (fgets(readbuf, 1024, fp)) {
00609         buf = normalizeBuffer(readbuf);
00610         if (buf || *buf) {
00611             nick = myStrGetToken(buf, ':', 0);
00612             vident = myStrGetToken(buf, ':', 1);
00613             vhost = myStrGetToken(buf, ':', 2);
00614             tmp = myStrGetToken(buf, ':', 3);
00615             if (tmp) {
00616                 tmp_time = strtol(tmp, (char **) NULL, 16);
00617                 free(tmp);
00618             } else {
00619                 tmp_time = 0;
00620             }
00621             creator = myStrGetToken(buf, ':', 4);
00622             if (!nick || !vident || !vhost || !creator) {
00623                 alog("[hs_request] Error while reading database, skipping record");
00624                 continue;
00625             }
00626             if (stricmp(vident, "(null)") == 0) {
00627                 free(vident);
00628                 vident = NULL;
00629             }
00630             my_add_host_request(nick, vident, vhost, creator, tmp_time);
00631             free(nick);
00632             free(vhost);
00633             free(creator);
00634             if (vident)
00635                 free(vident);
00636         }
00637         free(buf);
00638     }
00639 
00640     fclose(fp);
00641 
00642     if (debug)
00643         alog("[hs_request] Succesfully loaded database");
00644 }
00645 
00646 void hsreq_save_db(void)
00647 {
00648     FILE *fp;
00649     char *filename;
00650     char *vident;
00651     HostCore *current;
00652 
00653     if (HSRequestDBName)
00654         filename = HSRequestDBName;
00655     else
00656         filename = HSREQ_DEFAULT_DBNAME;
00657 
00658     fp = fopen(filename, "w");
00659     if (!fp) {
00660         alog("[hs_request] Unable to open database ('%s') for writing",
00661              filename);
00662         return;
00663     }
00664 
00665     current = hs_request_head;
00666     while (current) {
00667         vident = (current->vIdent ? current->vIdent : "(null)");
00668         fprintf(fp, "%s:%s:%s:%X:%s\n", current->nick, vident,
00669                 current->vHost, (uint32) current->time, current->creator);
00670         current = current->next;
00671     }
00672 
00673     fclose(fp);
00674 
00675     if (debug)
00676         alog("[hs_request] Succesfully saved database");
00677 }
00678 
00679 int hsreqevt_db_saving(int argc, char **argv)
00680 {
00681     if ((argc >= 1) && (stricmp(argv[0], EVENT_START) == 0))
00682         hsreq_save_db();
00683 
00684     return MOD_CONT;
00685 }
00686 
00687 int hsreqevt_db_backup(int argc, char **argv)
00688 {
00689     if ((argc >= 1) && (stricmp(argv[0], EVENT_START) == 0)) {
00690             if (HSRequestDBName)
00691             ModuleDatabaseBackup(HSRequestDBName);
00692             else
00693             ModuleDatabaseBackup(HSREQ_DEFAULT_DBNAME);
00694         }
00695         
00696     return MOD_CONT;
00697 }
00698 
00699 void my_load_config(void)
00700 {
00701     int i;
00702     char *tmp = NULL;
00703 
00704     Directive confvalues[][1] = {
00705         {{"HSRequestMemoUser",
00706           {{PARAM_SET, PARAM_RELOAD, &HSRequestMemoUser}}}},
00707         {{"HSRequestMemoOper",
00708           {{PARAM_SET, PARAM_RELOAD, &HSRequestMemoOper}}}},
00709         {{"HSRequestMemoSetters",
00710           {{PARAM_SET, PARAM_RELOAD, &HSRequestMemoSetters}}}},
00711         {{"HSRequestDBName", {{PARAM_STRING, PARAM_RELOAD, &tmp}}}}
00712     };
00713 
00714     for (i = 0; i < 4; i++)
00715         moduleGetConfigDirective(confvalues[i]);
00716 
00717     if (tmp) {
00718         if (HSRequestDBName)
00719             free(HSRequestDBName);
00720         HSRequestDBName = sstrdup(tmp);
00721     } else {
00722         HSRequestDBName = sstrdup(HSREQ_DEFAULT_DBNAME);
00723     }
00724 
00725     if (debug)
00726         alog("debug: [hs_request] Set config vars: MemoUser=%d MemoOper=%d MemoSetters=%d DBName='%s'", HSRequestMemoUser, HSRequestMemoOper, HSRequestMemoSetters, HSRequestDBName);
00727 }
00728 
00729 void my_add_languages(void)
00730 {
00731     char *langtable_en_us[] = {
00732         /* LNG_REQUEST_SYNTAX */
00733         "Syntax: \002REQUEST \037vhost\037\002",
00734         /* LNG_REQUESTED */
00735         "Your vHost has been requested",
00736         /* LNG_REQUEST_WAIT */
00737         "Please wait %d seconds before requesting a new vHost",
00738         /* LNG_REQUEST_MEMO */
00739         "[auto memo] vHost \002%s\002 has been requested.",
00740         /* LNG_ACTIVATE_SYNTAX */
00741         "Syntax: \002ACTIVATE \037nick\037\002",
00742         /* LNG_ACTIVATED */
00743         "vHost for %s has been activated",
00744         /* LNG_ACTIVATE_MEMO */
00745         "[auto memo] Your requested vHost has been approved.",
00746         /* LNG_REJECT_SYNTAX */
00747         "Syntax: \002REJECT \037nick\037\002",
00748         /* LNG_REJECTED */
00749         "vHost for %s has been rejected",
00750         /* LNG_REJECT_MEMO */
00751         "[auto memo] Your requested vHost has been rejected.",
00752         /* LNG_REJECT_MEMO_REASON */
00753         "[auto memo] Your requested vHost has been rejected. Reason: %s",
00754         /* LNG_NO_REQUEST */
00755         "No request for nick %s found.",
00756         /* LNG_HELP */
00757         "    REQUEST     Request a vHost for your nick",
00758         /* LNG_HELP_SETTER */
00759         "    ACTIVATE    Approve the requested vHost of a user\n"
00760             "    REJECT      Reject the requested vHost of a user\n"
00761             "    WAITING     Convenience command for LIST +req",
00762         /* LNG_HELP_REQUEST */
00763         "Request the given vHost to be actived for your nick by the\n"
00764             "network administrators. Please be patient while your request\n"
00765             "is being considered.",
00766         /* LNG_HELP_ACTIVATE */
00767         "Activate the requested vHost for the given nick.",
00768         /* LNG_HELP_ACTIVATE_MEMO */
00769         "A memo informing the user will also be sent.",
00770         /* LNG_HELP_REJECT */
00771         "Reject the requested vHost for the given nick.",
00772         /* LNG_HELP_REJECT_MEMO */
00773         "A memo informing the user will also be sent.",
00774         /* LNG_WAITING_SYNTAX */
00775         "Syntax: \002WAITING\002",
00776         /* LNG_HELP_WAITING */
00777         "This command is provided for convenience. It is essentially\n"
00778             "the same as performing a LIST +req ."
00779     };
00780 
00781     char *langtable_nl[] = {
00782         /* LNG_REQUEST_SYNTAX */
00783         "Gebruik: \002REQUEST \037vhost\037\002",
00784         /* LNG_REQUESTED */
00785         "Je vHost is aangevraagd",
00786         /* LNG_REQUEST_WAIT */
00787         "Wacht %d seconden voor je een nieuwe vHost aanvraagt",
00788         /* LNG_REQUEST_MEMO */
00789         "[auto memo] vHost \002%s\002 is aangevraagd.",
00790         /* LNG_ACTIVATE_SYNTAX */
00791         "Gebruik: \002ACTIVATE \037nick\037\002",
00792         /* LNG_ACTIVATED */
00793         "vHost voor %s is geactiveerd",
00794         /* LNG_ACTIVATE_MEMO */
00795         "[auto memo] Je aangevraagde vHost is geaccepteerd.",
00796         /* LNG_REJECT_SYNTAX */
00797         "Gebruik: \002REJECT \037nick\037\002",
00798         /* LNG_REJECTED */
00799         "vHost voor %s is afgekeurd",
00800         /* LNG_REJECT_MEMO */
00801         "[auto memo] Je aangevraagde vHost is afgekeurd.",
00802         /* LNG_REJECT_MEMO_REASON */
00803         "[auto memo] Je aangevraagde vHost is afgekeurd. Reden: %s",
00804         /* LNG_NO_REQUEST */
00805         "Geen aanvraag voor nick %s gevonden.",
00806         /* LNG_HELP */
00807         "    REQUEST     Vraag een vHost aan voor je nick",
00808         /* LNG_HELP_SETTER */
00809         "    ACTIVATE    Activeer de aangevraagde vHost voor een gebruiker\n"
00810             "    REJECT      Keur de aangevraagde vHost voor een gebruiker af\n"
00811             "    WAITING     Snelkoppeling naar LIST +req",
00812         /* LNG_HELP_REQUEST */
00813         "Verzoek de gegeven vHost te activeren voor jouw nick bij de\n"
00814             "netwerk beheerders. Het kan even duren voordat je aanvraag\n"
00815             "afgehandeld wordt.",
00816         /* LNG_HELP_ACTIVATE */
00817         "Activeer de aangevraagde vHost voor de gegeven nick.",
00818         /* LNG_HELP_ACTIVATE_MEMO */
00819         "Een memo die de gebruiker op de hoogste stelt zal ook worden verstuurd.",
00820         /* LNG_HELP_REJECT */
00821         "Keur de aangevraagde vHost voor de gegeven nick af.",
00822         /* LNG_HELP_REJECT_MEMO */
00823         "Een memo die de gebruiker op de hoogste stelt zal ook worden verstuurd.",
00824         /* LNG_WAITING_SYNTAX */
00825         "Gebruik: \002WAITING\002",
00826         /* LNG_HELP_WAITING */
00827         "Dit commando is beschikbaar als handigheid. Het is simpelweg\n"
00828             "hetzelfde als LIST +req ."
00829     };
00830 
00831     char *langtable_pt[] = {
00832         /* LNG_REQUEST_SYNTAX */
00833         "Sintaxe: \002REQUEST \037vhost\037\002",
00834         /* LNG_REQUESTED */
00835         "Seu pedido de vHost foi encaminhado",
00836         /* LNG_REQUEST_WAIT */
00837         "Por favor, espere %d segundos antes de fazer um novo pedido de vHost",
00838         /* LNG_REQUEST_MEMO */
00839         "[Auto Memo] O vHost \002%s\002 foi solicitado.",
00840         /* LNG_ACTIVATE_SYNTAX */
00841         "Sintaxe: \002ACTIVATE \037nick\037\002",
00842         /* LNG_ACTIVATED */
00843         "O vHost para %s foi ativado",
00844         /* LNG_ACTIVATE_MEMO */
00845         "[Auto Memo] Seu pedido de vHost foi aprovado.",
00846         /* LNG_REJECT_SYNTAX */
00847         "Sintaxe: \002REJECT \037nick\037\002",
00848         /* LNG_REJECTED */
00849         "O vHost de %s foi recusado",
00850         /* LNG_REJECT_MEMO */
00851         "[Auto Memo] Seu pedido de vHost foi recusado.",
00852         /* LNG_REJECT_MEMO_REASON */
00853         "[Auto Memo] Seu pedido de vHost foi recusado. Motivo: %s",
00854         /* LNG_NO_REQUEST */
00855         "Nenhum pedido encontrado para o nick %s.",
00856         /* LNG_HELP */
00857         "    REQUEST     Request a vHost for your nick",
00858         /* LNG_HELP_SETTER */
00859         "    ACTIVATE    Aprova o pedido de vHost de um usuбrio\n"
00860             "    REJECT      Recusa o pedido de vHost de um usuбrio\n"
00861             "    WAITING     Comando para LISTAR +req",
00862         /* LNG_HELP_REQUEST */
00863         "Solicita a ativaзгo do vHost fornecido em seu nick pelos\n"
00864             "administradores da rede. Por favor, tenha paciкncia\n"
00865             "enquanto seu pedido й analisado.",
00866         /* LNG_HELP_ACTIVATE */
00867         "Ativa o vHost solicitado para o nick fornecido.",
00868         /* LNG_HELP_ACTIVATE_MEMO */
00869         "Um memo informando o usuбrio tambйm serб enviado.",
00870         /* LNG_HELP_REJECT */
00871         "Recusa o pedido de vHost para o nick fornecido.",
00872         /* LNG_HELP_REJECT_MEMO */
00873         "Um memo informando o usuбrio tambйm serб enviado.",
00874         /* LNG_WAITING_SYNTAX */
00875         "Sintaxe: \002WAITING\002",
00876         /* LNG_HELP_WAITING */
00877         "Este comando й usado por conveniкncia. Й essencialmente\n"
00878             "o mesmo que fazer um LIST +req"
00879     };
00880 
00881     char *langtable_ru[] = {
00882         /* LNG_REQUEST_SYNTAX */
00883         "Синтаксис: \002REQUEST \037vHost\037\002",
00884         /* LNG_REQUESTED */
00885         "Ваш запрос на vHost отправлен.",
00886         /* LNG_REQUEST_WAIT */
00887         "Пожалуйста, подождите %d секунд, прежде чем запрашивать новый vHost",
00888         /* LNG_REQUEST_MEMO */
00889         "[авто-сообщение] Был запрошен vHost \002%s\002",
00890         /* LNG_ACTIVATE_SYNTAX */
00891         "Синтаксис: \002ACTIVATE \037ник\037\002",
00892         /* LNG_ACTIVATED */
00893         "vHost для %s успешно активирован",
00894         /* LNG_ACTIVATE_MEMO */
00895         "[авто-сообщение] Запрашиваемый вами vHost утвержден и активирован.",
00896         /* LNG_REJECT_SYNTAX */
00897         "Синтаксис: \002REJECT \037ник\037\002",
00898         /* LNG_REJECTED */
00899         "vHost для %s отклонен.",
00900         /* LNG_REJECT_MEMO */
00901         "[авто-сообщение] Запрашиваемый вами vHost отклонен.",
00902         /* LNG_REJECT_MEMO_REASON */
00903         "[авто-сообщение] Запрашиваемый вами vHost отклонен. Причина: %s",
00904         /* LNG_NO_REQUEST */
00905         "Запрос на vHost для ника %s не найден.",
00906         /* LNG_HELP */
00907         "    REQUEST     Запрос на vHost для вашего текущего ника",
00908         /* LNG_HELP_SETTER */
00909         "    ACTIVATE    Утвердить запрашиваемый пользователем  vHost\n"
00910             "    REJECT      Отклонить запрашиваемый пользователем  vHost\n"
00911             "    WAITING     Список запросов ожидающих обработки (аналог LIST +req)",
00912         /* LNG_HELP_REQUEST */
00913         "Отправляет запрос на активацию vHost, который будет рассмотрен одним из\n"
00914             "администраторов сети. Просьба проявить терпение, пока запрос\n"
00915             "рассматривается администрацией.",
00916         /* LNG_HELP_ACTIVATE */
00917         "Утвердить запрашиваемый vHost для указанного ника.",
00918         /* LNG_HELP_ACTIVATE_MEMO */
00919         "Пользователю будет послано авто-уведомление об активации его запроса.",
00920         /* LNG_HELP_REJECT */
00921         "Отклонить запрашиваемый vHost для указанного ника.",
00922         /* LNG_HELP_REJECT_MEMO */
00923         "Пользователю будет послано авто-уведомление об отклонении его запроса.",
00924         /* LNG_WAITING_SYNTAX */
00925         "Синтаксис: \002WAITING\002",
00926         /* LNG_HELP_WAITING */
00927         "Данная команда создана для удобства использования и выводит список запросов,\n"
00928             "ожидающих обработки. Аналогичная команда: LIST +req ."
00929     };
00930 
00931     char *langtable_it[] = {
00932         /* LNG_REQUEST_SYNTAX */
00933         "Sintassi: \002REQUEST \037vhost\037\002",
00934         /* LNG_REQUESTED */
00935         "Il tuo vHost и stato richiesto",
00936         /* LNG_REQUEST_WAIT */
00937         "Prego attendere %d secondi prima di richiedere un nuovo vHost",
00938         /* LNG_REQUEST_MEMO */
00939         "[auto memo] и stato richiesto il vHost \002%s\002.",
00940         /* LNG_ACTIVATE_SYNTAX */
00941         "Sintassi: \002ACTIVATE \037nick\037\002",
00942         /* LNG_ACTIVATED */
00943         "Il vHost per %s и stato attivato",
00944         /* LNG_ACTIVATE_MEMO */
00945         "[auto memo] Il vHost da te richiesto и stato approvato.",
00946         /* LNG_REJECT_SYNTAX */
00947         "Sintassi: \002REJECT \037nick\037\002",
00948         /* LNG_REJECTED */
00949         "Il vHost per %s и stato rifiutato",
00950         /* LNG_REJECT_MEMO */
00951         "[auto memo] Il vHost da te richiesto и stato rifiutato.",
00952         /* LNG_REJECT_MEMO_REASON */
00953         "[auto memo] Il vHost da te richiesto и stato rifiutato. Motivo: %s",
00954         /* LNG_NO_REQUEST */
00955         "Nessuna richiesta trovata per il nick %s.",
00956         /* LNG_HELP */
00957         "    REQUEST     Richiede un vHost per il tuo nick",
00958         /* LNG_HELP_SETTER */
00959         "    ACTIVATE    Approva il vHost richiesto di un utente\n"
00960             "    REJECT      Rifiuta il vHost richiesto di un utente\n"
00961             "    WAITING     Comando per LIST +req",
00962         /* LNG_HELP_REQUEST */
00963         "Richiede l'attivazione del vHost specificato per il tuo nick da parte\n"
00964             "degli amministratori di rete. Sei pregato di pazientare finchи la tua\n"
00965             "richiesta viene elaborata.",
00966         /* LNG_HELP_ACTIVATE */
00967         "Attiva il vHost richiesto per il nick specificato.",
00968         /* LNG_HELP_ACTIVATE_MEMO */
00969         "Viene inviato un memo per informare l'utente.",
00970         /* LNG_HELP_REJECT */
00971         "Rifiuta il vHost richiesto per il nick specificato.",
00972         /* LNG_HELP_REJECT_MEMO */
00973         "Viene inviato un memo per informare l'utente.",
00974         /* LNG_WAITING_SYNTAX */
00975         "Sintassi: \002WAITING\002",
00976         /* LNG_HELP_WAITING */
00977         "Questo comando и per comoditа. Praticamente и la stessa cosa che\n"
00978             "eseguire un LIST +req ."
00979     };
00980     moduleInsertLanguage(LANG_EN_US, LNG_NUM_STRINGS, langtable_en_us);
00981     moduleInsertLanguage(LANG_NL, LNG_NUM_STRINGS, langtable_nl);
00982     moduleInsertLanguage(LANG_PT, LNG_NUM_STRINGS, langtable_pt);
00983     moduleInsertLanguage(LANG_RU, LNG_NUM_STRINGS, langtable_ru);
00984     moduleInsertLanguage(LANG_IT, LNG_NUM_STRINGS, langtable_it);
00985 }
00986 
00987 /* EOF */

Generated on Sun Oct 5 09:06:56 2008 for Anope by  doxygen 1.5.7.1