00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "module.h"
00019
00020 #define AUTHOR "Rob"
00021 #define VERSION VERSION_STRING
00022
00023
00024 static int HSRequestMemoUser = 0;
00025 static int HSRequestMemoOper = 0;
00026 static int HSRequestMemoSetters = 0;
00027 char *HSRequestDBName = NULL;
00028
00029 #define HSREQ_DEFAULT_DBNAME "hs_request.db"
00030
00031
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 static int hs_do_request(User * u);
00057 static int hs_do_activate(User * u);
00058 static int hs_do_reject(User * u);
00059 static int hs_do_list_out(User * u);
00060
00061 static int hs_help_request(User * u);
00062 static int hs_help_activate(User * u);
00063 static int hs_help_reject(User * u);
00064 static int hs_help_waiting(User * u);
00065 static void hs_help(User * u);
00066
00067 static void my_add_host_request(char *nick, char *vIdent, char *vhost,
00068 char *creator, int32 tmp_time);
00069 static int my_isvalidchar(const char c);
00070 static void my_memo_lang(User * u, char *name, int z, char *source, int number, ...);
00071 static void req_send_memos(User * u, char *vHost);
00072 static void show_list(User * u);
00073 static int hs_do_waiting(User * u);
00074 static int hsreqevt_nick_dropped(int argc, char **argv);
00075
00076 static void hsreq_save_db(void);
00077 static void hsreq_load_db(void);
00078 static int hsreqevt_db_saving(int argc, char **argv);
00079 static int hsreqevt_db_backup(int argc, char **argv);
00080
00081 static void my_load_config(void);
00082 static 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 hook = createEventHook(EVENT_NICK_DROPPED, hsreqevt_nick_dropped);
00116 moduleAddEventHook(hook);
00117
00118 hook = createEventHook(EVENT_NICK_EXPIRE, hsreqevt_nick_dropped);
00119 moduleAddEventHook(hook);
00120
00121 hook = createEventHook(EVENT_DB_SAVING, hsreqevt_db_saving);
00122 moduleAddEventHook(hook);
00123
00124 hook = createEventHook(EVENT_DB_BACKUP, hsreqevt_db_backup);
00125 moduleAddEventHook(hook);
00126
00127 moduleSetHostHelp(hs_help);
00128 moduleAddAuthor(AUTHOR);
00129 moduleAddVersion(VERSION);
00130 moduleSetType(SUPPORTED);
00131
00132 my_load_config();
00133 my_add_languages();
00134 hs_request_head = NULL;
00135
00136 if (debug)
00137 alog("[hs_request] Loading database...");
00138 hsreq_load_db();
00139 alog("hs_request loaded");
00140 return MOD_CONT;
00141 }
00142
00143 void AnopeFini(void)
00144 {
00145 if (debug)
00146 alog("[hs_request] Saving database...");
00147 hsreq_save_db();
00148
00149
00150 while (hs_request_head)
00151 hs_request_head = deleteHostCore(hs_request_head, NULL);
00152
00153 free(HSRequestDBName);
00154 alog("hs_request un-loaded");
00155 }
00156
00157 static int hs_do_request(User * u)
00158 {
00159 char *cur_buffer;
00160 char *nick;
00161 char *rawhostmask;
00162 char hostmask[HOSTMAX];
00163 NickAlias *na;
00164 int32 tmp_time;
00165 char *s;
00166 char *vIdent = NULL;
00167 time_t now = time(NULL);
00168
00169 cur_buffer = moduleGetLastBuffer();
00170 nick = u->nick;
00171 rawhostmask = myStrGetToken(cur_buffer, ' ', 0);
00172
00173 if (!nick || !rawhostmask) {
00174 if (rawhostmask)
00175 free(rawhostmask);
00176 moduleNoticeLang(s_HostServ, u, LNG_REQUEST_SYNTAX);
00177 return MOD_CONT;
00178 }
00179
00180 vIdent = myStrGetOnlyToken(rawhostmask, '@', 0);
00181 if (vIdent) {
00182 rawhostmask = myStrGetTokenRemainder(rawhostmask, '@', 1);
00183 if (!rawhostmask) {
00184 moduleNoticeLang(s_HostServ, u, LNG_REQUEST_SYNTAX);
00185 free(vIdent);
00186 return MOD_CONT;
00187 }
00188 if (strlen(vIdent) > USERMAX - 1) {
00189 notice_lang(s_HostServ, u, HOST_SET_IDENTTOOLONG, USERMAX);
00190 free(vIdent);
00191 free(rawhostmask);
00192 return MOD_CONT;
00193 } else {
00194 for (s = vIdent; *s; s++) {
00195 if (!my_isvalidchar(*s)) {
00196 notice_lang(s_HostServ, u, HOST_SET_IDENT_ERROR);
00197 free(vIdent);
00198 free(rawhostmask);
00199 return MOD_CONT;
00200 }
00201 }
00202 }
00203 if (!ircd->vident) {
00204 notice_lang(s_HostServ, u, HOST_NO_VIDENT);
00205 free(vIdent);
00206 free(rawhostmask);
00207 return MOD_CONT;
00208 }
00209 }
00210 if (strlen(rawhostmask) < HOSTMAX) {
00211 snprintf(hostmask, HOSTMAX, "%s", rawhostmask);
00212 } else {
00213 notice_lang(s_HostServ, u, HOST_SET_TOOLONG, HOSTMAX);
00214 if (vIdent)
00215 free(vIdent);
00216 free(rawhostmask);
00217 return MOD_CONT;
00218 }
00219
00220 if (!isValidHost(hostmask, 3)) {
00221 notice_lang(s_HostServ, u, HOST_SET_ERROR);
00222 if (vIdent)
00223 free(vIdent);
00224 free(rawhostmask);
00225 return MOD_CONT;
00226 }
00227
00228 tmp_time = time(NULL);
00229 if ((na = findnick(nick))) {
00230 if (HSRequestMemoOper || HSRequestMemoSetters) {
00231 if (MSSendDelay > 0 && u
00232 && u->lastmemosend + MSSendDelay > now) {
00233 moduleNoticeLang(s_HostServ, u, LNG_REQUEST_WAIT,
00234 MSSendDelay);
00235 u->lastmemosend = now;
00236 if (vIdent)
00237 free(vIdent);
00238 free(rawhostmask);
00239 return MOD_CONT;
00240 }
00241 }
00242 my_add_host_request(nick, vIdent, hostmask, u->nick, tmp_time);
00243
00244 moduleNoticeLang(s_HostServ, u, LNG_REQUESTED);
00245 req_send_memos(u, hostmask);
00246 alog("New vHost Requested by %s", nick);
00247 } else {
00248 notice_lang(s_HostServ, u, HOST_NOREG, nick);
00249 }
00250
00251 if (vIdent)
00252 free(vIdent);
00253 free(rawhostmask);
00254
00255 return MOD_CONT;
00256 }
00257
00258 static void my_memo_lang(User * u, char *name, int z, char *source, int number, ...)
00259 {
00260 va_list va;
00261 char buffer[4096], outbuf[4096];
00262 char *fmt = NULL;
00263 int lang = LANG_EN_US;
00264 char *s, *t, *buf;
00265 User *u2;
00266
00267 if ((mod_current_module_name)
00268 && (!mod_current_module
00269 || strcmp(mod_current_module_name, mod_current_module->name)))
00270 mod_current_module = findModule(mod_current_module_name);
00271
00272 u2 = finduser(name);
00273
00274 if (u2 && u2->na && u2->na->nc)
00275 lang = u2->na->nc->language;
00276
00277
00278 if (mod_current_module->lang[lang].argc == 0)
00279 lang = LANG_EN_US;
00280
00281
00282 if (mod_current_module->lang[lang].argc > number) {
00283 fmt = mod_current_module->lang[lang].argv[number];
00284
00285 buf = sstrdup(fmt);
00286 s = buf;
00287 while (*s) {
00288 t = s;
00289 s += strcspn(s, "\n");
00290 if (*s)
00291 *s++ = '\0';
00292 strscpy(outbuf, t, sizeof(outbuf));
00293
00294 va_start(va, number);
00295 vsnprintf(buffer, 4095, outbuf, va);
00296 va_end(va);
00297 if (source)
00298 memo_send_from(u, name, buffer, z, source);
00299 else
00300 memo_send(u, name, buffer, z);
00301 }
00302 free(buf);
00303 } else {
00304 alog("%s: INVALID language string call, language: [%d], String [%d]", mod_current_module->name, lang, number);
00305 }
00306 }
00307
00308
00309 static void req_send_memos(User * u, char *vHost)
00310 {
00311 int i;
00312 int z = 2;
00313
00314 if (checkDefCon(DEFCON_NO_NEW_MEMOS))
00315 return;
00316
00317 if (HSRequestMemoOper == 1) {
00318 for (i = 0; i < servopers.count; i++) {
00319 my_memo_lang(u, (((NickCore *) servopers.list[i])->display), z,
00320 u->na->nick, LNG_REQUEST_MEMO, vHost);
00321 }
00322 for (i = 0; i < servadmins.count; i++) {
00323 my_memo_lang(u, (((NickCore *) servadmins.list[i])->display),
00324 z, u->na->nick, LNG_REQUEST_MEMO, vHost);
00325 }
00326 for (i = 0; i < RootNumber; i++) {
00327 my_memo_lang(u, ServicesRoots[i], z, u->na->nick, LNG_REQUEST_MEMO, vHost);
00328 }
00329 }
00330 if (HSRequestMemoSetters == 1) {
00331 for (i = 0; i < HostNumber; i++) {
00332 my_memo_lang(u, HostSetters[i], z, u->na->nick, LNG_REQUEST_MEMO, vHost);
00333 }
00334 }
00335 }
00336
00337 static int hsreqevt_nick_dropped(int argc, char **argv)
00338 {
00339 HostCore *tmp;
00340 boolean found = false;
00341
00342 if (!argc)
00343 return MOD_CONT;
00344
00345 tmp = findHostCore(hs_request_head, argv[0], &found);
00346 if (found)
00347 hs_request_head = deleteHostCore(hs_request_head, tmp);
00348
00349 return MOD_CONT;
00350 }
00351
00352 static int hs_do_reject(User * u)
00353 {
00354 char *cur_buffer;
00355 char *nick;
00356 char *reason;
00357 HostCore *tmp, *hc;
00358 boolean found = false;
00359
00360 cur_buffer = moduleGetLastBuffer();
00361 nick = myStrGetToken(cur_buffer, ' ', 0);
00362 reason = myStrGetTokenRemainder(cur_buffer, ' ', 1);
00363
00364 if (!nick) {
00365 moduleNoticeLang(s_HostServ, u, LNG_REJECT_SYNTAX);
00366 if (reason)
00367 free(reason);
00368 return MOD_CONT;
00369 }
00370
00371 tmp = findHostCore(hs_request_head, nick, &found);
00372 if (found) {
00373 if (!tmp)
00374 hc = hs_request_head;
00375 else
00376 hc = tmp->next;
00377
00378 if (HSRequestMemoUser) {
00379 if (reason)
00380 my_memo_lang(u, hc->nick, 2, NULL, LNG_REJECT_MEMO_REASON,
00381 reason);
00382 else
00383 my_memo_lang(u, hc->nick, 2, NULL, LNG_REJECT_MEMO);
00384 }
00385
00386 hs_request_head = deleteHostCore(hs_request_head, tmp);
00387 moduleNoticeLang(s_HostServ, u, LNG_REJECTED, nick);
00388 alog("Host Request for %s rejected by %s (%s)", nick, u->nick,
00389 reason ? reason : "");
00390 } else {
00391 moduleNoticeLang(s_HostServ, u, LNG_NO_REQUEST, nick);
00392 }
00393
00394 free(nick);
00395 if (reason)
00396 free(reason);
00397
00398 return MOD_CONT;
00399 }
00400
00401 static int hs_do_activate(User * u)
00402 {
00403 char *cur_buffer;
00404 char *nick;
00405 NickAlias *na;
00406 HostCore *tmp, *hc;
00407 boolean found = false;
00408
00409 cur_buffer = moduleGetLastBuffer();
00410 nick = myStrGetToken(cur_buffer, ' ', 0);
00411
00412 if (!nick) {
00413 moduleNoticeLang(s_HostServ, u, LNG_ACTIVATE_SYNTAX);
00414 return MOD_CONT;
00415 }
00416
00417 if ((na = findnick(nick))) {
00418 tmp = findHostCore(hs_request_head, nick, &found);
00419 if (found) {
00420 if (!tmp)
00421 hc = hs_request_head;
00422 else
00423 hc = tmp->next;
00424
00425 addHostCore(hc->nick, hc->vIdent, hc->vHost, u->nick,
00426 time(NULL));
00427
00428 if (HSRequestMemoUser)
00429 my_memo_lang(u, hc->nick, 2, NULL, LNG_ACTIVATE_MEMO);
00430
00431 hs_request_head = deleteHostCore(hs_request_head, tmp);
00432 moduleNoticeLang(s_HostServ, u, LNG_ACTIVATED, nick);
00433 alog("Host Request for %s activated by %s", nick, u->nick);
00434 } else {
00435 moduleNoticeLang(s_HostServ, u, LNG_NO_REQUEST, nick);
00436 }
00437 } else {
00438 notice_lang(s_HostServ, u, NICK_X_NOT_REGISTERED, nick);
00439 }
00440
00441 free(nick);
00442 return MOD_CONT;
00443 }
00444
00445
00446 static void my_add_host_request(char *nick, char *vIdent, char *vhost,
00447 char *creator, int32 tmp_time)
00448 {
00449 HostCore *tmp;
00450 boolean found = false;
00451
00452 if (!hs_request_head) {
00453 hs_request_head =
00454 createHostCorelist(hs_request_head, nick, vIdent, vhost,
00455 creator, tmp_time);
00456 } else {
00457 tmp = findHostCore(hs_request_head, nick, &found);
00458 if (!found) {
00459 hs_request_head =
00460 insertHostCore(hs_request_head, tmp, nick, vIdent, vhost,
00461 creator, tmp_time);
00462 } else {
00463 hs_request_head = deleteHostCore(hs_request_head, tmp);
00464 my_add_host_request(nick, vIdent, vhost, creator, tmp_time);
00465 }
00466 }
00467 }
00468
00469 static int my_isvalidchar(const char c)
00470 {
00471 if (((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z'))
00472 || ((c >= '0') && (c <= '9')) || (c == '.') || (c == '-'))
00473 return 1;
00474 else
00475 return 0;
00476 }
00477
00478 static int hs_do_list_out(User * u)
00479 {
00480 char *key;
00481
00482 key = moduleGetLastBuffer();
00483 if (!key)
00484 return MOD_CONT;
00485
00486 if (stricmp(key, "+req") != 0)
00487 return MOD_CONT;
00488
00489 show_list(u);
00490
00491 return MOD_CONT;
00492 }
00493
00494 static int hs_do_waiting(User * u)
00495 {
00496 show_list(u);
00497
00498 return MOD_CONT;
00499 }
00500
00501 static void show_list(User * u)
00502 {
00503 struct tm *tm;
00504 char buf[BUFSIZE];
00505 int counter = 1;
00506 int from = 0, to = 0;
00507 int display_counter = 0;
00508 HostCore *current;
00509
00510 current = hs_request_head;
00511 while (current) {
00512 if ((((counter >= from) && (counter <= to))
00513 || ((from == 0) && (to == 0)))
00514 && (display_counter < NSListMax)) {
00515 display_counter++;
00516 tm = localtime(¤t->time);
00517 strftime(buf, sizeof(buf),
00518 getstring(NULL, STRFTIME_DATE_TIME_FORMAT), tm);
00519 if (current->vIdent)
00520 notice_lang(s_HostServ, u, HOST_IDENT_ENTRY, counter,
00521 current->nick, current->vIdent, current->vHost,
00522 current->creator, buf);
00523 else
00524 notice_lang(s_HostServ, u, HOST_ENTRY, counter,
00525 current->nick, current->vHost,
00526 current->creator, buf);
00527 }
00528 counter++;
00529 current = current->next;
00530 }
00531 notice_lang(s_HostServ, u, HOST_LIST_FOOTER, display_counter);
00532 }
00533
00534 static int hs_help_request(User * u)
00535 {
00536 moduleNoticeLang(s_HostServ, u, LNG_REQUEST_SYNTAX);
00537 notice(s_HostServ, u->nick, " ");
00538 moduleNoticeLang(s_HostServ, u, LNG_HELP_REQUEST);
00539
00540 return MOD_CONT;
00541 }
00542
00543 static int hs_help_activate(User * u)
00544 {
00545 if (is_host_setter(u)) {
00546 moduleNoticeLang(s_HostServ, u, LNG_ACTIVATE_SYNTAX);
00547 notice(s_HostServ, u->nick, " ");
00548 moduleNoticeLang(s_HostServ, u, LNG_HELP_ACTIVATE);
00549 if (HSRequestMemoUser)
00550 moduleNoticeLang(s_HostServ, u, LNG_HELP_ACTIVATE_MEMO);
00551 } else {
00552 notice_lang(s_HostServ, u, NO_HELP_AVAILABLE, "ACTIVATE");
00553 }
00554
00555 return MOD_CONT;
00556 }
00557
00558 static int hs_help_reject(User * u)
00559 {
00560 if (is_host_setter(u)) {
00561 moduleNoticeLang(s_HostServ, u, LNG_REJECT_SYNTAX);
00562 notice(s_HostServ, u->nick, " ");
00563 moduleNoticeLang(s_HostServ, u, LNG_HELP_REJECT);
00564 if (HSRequestMemoUser)
00565 moduleNoticeLang(s_HostServ, u, LNG_HELP_REJECT_MEMO);
00566 } else {
00567 notice_lang(s_HostServ, u, NO_HELP_AVAILABLE, "REJECT");
00568 }
00569
00570 return MOD_CONT;
00571 }
00572
00573 static int hs_help_waiting(User * u)
00574 {
00575 if (is_host_setter(u)) {
00576 moduleNoticeLang(s_HostServ, u, LNG_WAITING_SYNTAX);
00577 notice(s_HostServ, u->nick, " ");
00578 moduleNoticeLang(s_HostServ, u, LNG_HELP_WAITING);
00579 } else {
00580 notice_lang(s_HostServ, u, NO_HELP_AVAILABLE, "WAITING");
00581 }
00582
00583 return MOD_CONT;
00584 }
00585
00586 static void hs_help(User * u)
00587 {
00588 moduleNoticeLang(s_HostServ, u, LNG_HELP);
00589 if (is_host_setter(u))
00590 moduleNoticeLang(s_HostServ, u, LNG_HELP_SETTER);
00591 }
00592 static void hsreq_load_db(void)
00593 {
00594 FILE *fp;
00595 char *filename;
00596 char readbuf[1024];
00597 char *nick, *vident, *vhost, *creator, *tmp;
00598 int32 tmp_time;
00599 char *buf;
00600
00601 if (HSRequestDBName)
00602 filename = HSRequestDBName;
00603 else
00604 filename = HSREQ_DEFAULT_DBNAME;
00605
00606 fp = fopen(filename, "r");
00607 if (!fp) {
00608 alog("[hs_request] Unable to open database ('%s') for reading",
00609 filename);
00610 return;
00611 }
00612
00613 while (fgets(readbuf, 1024, fp)) {
00614 buf = normalizeBuffer(readbuf);
00615 if (buf || *buf) {
00616 nick = myStrGetToken(buf, ':', 0);
00617 vident = myStrGetToken(buf, ':', 1);
00618 vhost = myStrGetToken(buf, ':', 2);
00619 tmp = myStrGetToken(buf, ':', 3);
00620 if (tmp) {
00621 tmp_time = strtol(tmp, (char **) NULL, 16);
00622 free(tmp);
00623 } else {
00624 tmp_time = 0;
00625 }
00626 creator = myStrGetToken(buf, ':', 4);
00627 if (!nick || !vident || !vhost || !creator) {
00628 alog("[hs_request] Error while reading database, skipping record");
00629 continue;
00630 }
00631 if (stricmp(vident, "(null)") == 0) {
00632 free(vident);
00633 vident = NULL;
00634 }
00635 my_add_host_request(nick, vident, vhost, creator, tmp_time);
00636 free(nick);
00637 free(vhost);
00638 free(creator);
00639 if (vident)
00640 free(vident);
00641 }
00642 free(buf);
00643 }
00644
00645 fclose(fp);
00646
00647 if (debug)
00648 alog("[hs_request] Succesfully loaded database");
00649 }
00650
00651 static void hsreq_save_db(void)
00652 {
00653 FILE *fp;
00654 char *filename;
00655 char *vident;
00656 HostCore *current;
00657
00658 if (HSRequestDBName)
00659 filename = HSRequestDBName;
00660 else
00661 filename = HSREQ_DEFAULT_DBNAME;
00662
00663 fp = fopen(filename, "w");
00664 if (!fp) {
00665 alog("[hs_request] Unable to open database ('%s') for writing",
00666 filename);
00667 return;
00668 }
00669
00670 current = hs_request_head;
00671 while (current) {
00672 vident = (current->vIdent ? current->vIdent : "(null)");
00673 fprintf(fp, "%s:%s:%s:%X:%s\n", current->nick, vident,
00674 current->vHost, (uint32) current->time, current->creator);
00675 current = current->next;
00676 }
00677
00678 fclose(fp);
00679
00680 if (debug)
00681 alog("[hs_request] Succesfully saved database");
00682 }
00683
00684 static int hsreqevt_db_saving(int argc, char **argv)
00685 {
00686 if ((argc >= 1) && (stricmp(argv[0], EVENT_START) == 0))
00687 hsreq_save_db();
00688
00689 return MOD_CONT;
00690 }
00691
00692 static int hsreqevt_db_backup(int argc, char **argv)
00693 {
00694 if ((argc >= 1) && (stricmp(argv[0], EVENT_START) == 0)) {
00695 if (HSRequestDBName)
00696 ModuleDatabaseBackup(HSRequestDBName);
00697 else
00698 ModuleDatabaseBackup(HSREQ_DEFAULT_DBNAME);
00699 }
00700
00701 return MOD_CONT;
00702 }
00703
00704 static void my_load_config(void)
00705 {
00706 int i;
00707 char *tmp = NULL;
00708
00709 Directive confvalues[][1] = {
00710 {{"HSRequestMemoUser",
00711 {{PARAM_SET, PARAM_RELOAD, &HSRequestMemoUser}}}},
00712 {{"HSRequestMemoOper",
00713 {{PARAM_SET, PARAM_RELOAD, &HSRequestMemoOper}}}},
00714 {{"HSRequestMemoSetters",
00715 {{PARAM_SET, PARAM_RELOAD, &HSRequestMemoSetters}}}},
00716 {{"HSRequestDBName", {{PARAM_STRING, PARAM_RELOAD, &tmp}}}}
00717 };
00718
00719 for (i = 0; i < 4; i++)
00720 moduleGetConfigDirective(confvalues[i]);
00721
00722 if (tmp) {
00723 if (HSRequestDBName)
00724 free(HSRequestDBName);
00725 HSRequestDBName = sstrdup(tmp);
00726 } else {
00727 HSRequestDBName = sstrdup(HSREQ_DEFAULT_DBNAME);
00728 }
00729
00730 if (debug)
00731 alog("debug: [hs_request] Set config vars: MemoUser=%d MemoOper=%d MemoSetters=%d DBName='%s'", HSRequestMemoUser, HSRequestMemoOper, HSRequestMemoSetters, HSRequestDBName);
00732 }
00733
00734 static void my_add_languages(void)
00735 {
00736 char *langtable_en_us[] = {
00737
00738 "Syntax: \002REQUEST \037vhost\037\002",
00739
00740 "Your vHost has been requested",
00741
00742 "Please wait %d seconds before requesting a new vHost",
00743
00744 "[auto memo] vHost \002%s\002 has been requested.",
00745
00746 "Syntax: \002ACTIVATE \037nick\037\002",
00747
00748 "vHost for %s has been activated",
00749
00750 "[auto memo] Your requested vHost has been approved.",
00751
00752 "Syntax: \002REJECT \037nick\037\002",
00753
00754 "vHost for %s has been rejected",
00755
00756 "[auto memo] Your requested vHost has been rejected.",
00757
00758 "[auto memo] Your requested vHost has been rejected. Reason: %s",
00759
00760 "No request for nick %s found.",
00761
00762 " REQUEST Request a vHost for your nick",
00763
00764 " ACTIVATE Approve the requested vHost of a user\n"
00765 " REJECT Reject the requested vHost of a user\n"
00766 " WAITING Convenience command for LIST +req",
00767
00768 "Request the given vHost to be actived for your nick by the\n"
00769 "network administrators. Please be patient while your request\n"
00770 "is being considered.",
00771
00772 "Activate the requested vHost for the given nick.",
00773
00774 "A memo informing the user will also be sent.",
00775
00776 "Reject the requested vHost for the given nick.",
00777
00778 "A memo informing the user will also be sent.",
00779
00780 "Syntax: \002WAITING\002",
00781
00782 "This command is provided for convenience. It is essentially\n"
00783 "the same as performing a LIST +req ."
00784 };
00785
00786 char *langtable_nl[] = {
00787
00788 "Gebruik: \002REQUEST \037vhost\037\002",
00789
00790 "Je vHost is aangevraagd",
00791
00792 "Wacht %d seconden voor je een nieuwe vHost aanvraagt",
00793
00794 "[auto memo] vHost \002%s\002 is aangevraagd.",
00795
00796 "Gebruik: \002ACTIVATE \037nick\037\002",
00797
00798 "vHost voor %s is geactiveerd",
00799
00800 "[auto memo] Je aangevraagde vHost is geaccepteerd.",
00801
00802 "Gebruik: \002REJECT \037nick\037\002",
00803
00804 "vHost voor %s is afgekeurd",
00805
00806 "[auto memo] Je aangevraagde vHost is afgekeurd.",
00807
00808 "[auto memo] Je aangevraagde vHost is afgekeurd. Reden: %s",
00809
00810 "Geen aanvraag voor nick %s gevonden.",
00811
00812 " REQUEST Vraag een vHost aan voor je nick",
00813
00814 " ACTIVATE Activeer de aangevraagde vHost voor een gebruiker\n"
00815 " REJECT Keur de aangevraagde vHost voor een gebruiker af\n"
00816 " WAITING Snelkoppeling naar LIST +req",
00817
00818 "Verzoek de gegeven vHost te activeren voor jouw nick bij de\n"
00819 "netwerk beheerders. Het kan even duren voordat je aanvraag\n"
00820 "afgehandeld wordt.",
00821
00822 "Activeer de aangevraagde vHost voor de gegeven nick.",
00823
00824 "Een memo die de gebruiker op de hoogste stelt zal ook worden verstuurd.",
00825
00826 "Keur de aangevraagde vHost voor de gegeven nick af.",
00827
00828 "Een memo die de gebruiker op de hoogste stelt zal ook worden verstuurd.",
00829
00830 "Gebruik: \002WAITING\002",
00831
00832 "Dit commando is beschikbaar als handigheid. Het is simpelweg\n"
00833 "hetzelfde als LIST +req ."
00834 };
00835
00836 char *langtable_pt[] = {
00837
00838 "Sintaxe: \002REQUEST \037vhost\037\002",
00839
00840 "Seu pedido de vHost foi encaminhado",
00841
00842 "Por favor, espere %d segundos antes de fazer um novo pedido de vHost",
00843
00844 "[Auto Memo] O vHost \002%s\002 foi solicitado.",
00845
00846 "Sintaxe: \002ACTIVATE \037nick\037\002",
00847
00848 "O vHost para %s foi ativado",
00849
00850 "[Auto Memo] Seu pedido de vHost foi aprovado.",
00851
00852 "Sintaxe: \002REJECT \037nick\037\002",
00853
00854 "O vHost de %s foi recusado",
00855
00856 "[Auto Memo] Seu pedido de vHost foi recusado.",
00857
00858 "[Auto Memo] Seu pedido de vHost foi recusado. Motivo: %s",
00859
00860 "Nenhum pedido encontrado para o nick %s.",
00861
00862 " REQUEST Request a vHost for your nick",
00863
00864 " ACTIVATE Aprova o pedido de vHost de um usuбrio\n"
00865 " REJECT Recusa o pedido de vHost de um usuбrio\n"
00866 " WAITING Comando para LISTAR +req",
00867
00868 "Solicita a ativaзгo do vHost fornecido em seu nick pelos\n"
00869 "administradores da rede. Por favor, tenha paciкncia\n"
00870 "enquanto seu pedido й analisado.",
00871
00872 "Ativa o vHost solicitado para o nick fornecido.",
00873
00874 "Um memo informando o usuбrio tambйm serб enviado.",
00875
00876 "Recusa o pedido de vHost para o nick fornecido.",
00877
00878 "Um memo informando o usuбrio tambйm serб enviado.",
00879
00880 "Sintaxe: \002WAITING\002",
00881
00882 "Este comando й usado por conveniкncia. Й essencialmente\n"
00883 "o mesmo que fazer um LIST +req"
00884 };
00885
00886 char *langtable_ru[] = {
00887
00888 "Синтаксис: \002REQUEST \037vHost\037\002",
00889
00890 "Ваш запрос на vHost отправлен.",
00891
00892 "Пожалуйста, подождите %d секунд, прежде чем запрашивать новый vHost",
00893
00894 "[авто-сообщение] Был запрошен vHost \002%s\002",
00895
00896 "Синтаксис: \002ACTIVATE \037ник\037\002",
00897
00898 "vHost для %s успешно активирован",
00899
00900 "[авто-сообщение] Запрашиваемый вами vHost утвержден и активирован.",
00901
00902 "Синтаксис: \002REJECT \037ник\037\002",
00903
00904 "vHost для %s отклонен.",
00905
00906 "[авто-сообщение] Запрашиваемый вами vHost отклонен.",
00907
00908 "[авто-сообщение] Запрашиваемый вами vHost отклонен. Причина: %s",
00909
00910 "Запрос на vHost для ника %s не найден.",
00911
00912 " REQUEST Запрос на vHost для вашего текущего ника",
00913
00914 " ACTIVATE Утвердить запрашиваемый пользователем vHost\n"
00915 " REJECT Отклонить запрашиваемый пользователем vHost\n"
00916 " WAITING Список запросов ожидающих обработки (аналог LIST +req)",
00917
00918 "Отправляет запрос на активацию vHost, который будет рассмотрен одним из\n"
00919 "администраторов сети. Просьба проявить терпение, пока запрос\n"
00920 "рассматривается администрацией.",
00921
00922 "Утвердить запрашиваемый vHost для указанного ника.",
00923
00924 "Пользователю будет послано авто-уведомление об активации его запроса.",
00925
00926 "Отклонить запрашиваемый vHost для указанного ника.",
00927
00928 "Пользователю будет послано авто-уведомление об отклонении его запроса.",
00929
00930 "Синтаксис: \002WAITING\002",
00931
00932 "Данная команда создана для удобства использования и выводит список запросов,\n"
00933 "ожидающих обработки. Аналогичная команда: LIST +req ."
00934 };
00935
00936 char *langtable_it[] = {
00937
00938 "Sintassi: \002REQUEST \037vhost\037\002",
00939
00940 "Il tuo vHost и stato richiesto",
00941
00942 "Prego attendere %d secondi prima di richiedere un nuovo vHost",
00943
00944 "[auto memo] и stato richiesto il vHost \002%s\002.",
00945
00946 "Sintassi: \002ACTIVATE \037nick\037\002",
00947
00948 "Il vHost per %s и stato attivato",
00949
00950 "[auto memo] Il vHost da te richiesto и stato approvato.",
00951
00952 "Sintassi: \002REJECT \037nick\037\002",
00953
00954 "Il vHost per %s и stato rifiutato",
00955
00956 "[auto memo] Il vHost da te richiesto и stato rifiutato.",
00957
00958 "[auto memo] Il vHost da te richiesto и stato rifiutato. Motivo: %s",
00959
00960 "Nessuna richiesta trovata per il nick %s.",
00961
00962 " REQUEST Richiede un vHost per il tuo nick",
00963
00964 " ACTIVATE Approva il vHost richiesto di un utente\n"
00965 " REJECT Rifiuta il vHost richiesto di un utente\n"
00966 " WAITING Comando per LIST +req",
00967
00968 "Richiede l'attivazione del vHost specificato per il tuo nick da parte\n"
00969 "degli amministratori di rete. Sei pregato di pazientare finchи la tua\n"
00970 "richiesta viene elaborata.",
00971
00972 "Attiva il vHost richiesto per il nick specificato.",
00973
00974 "Viene inviato un memo per informare l'utente.",
00975
00976 "Rifiuta il vHost richiesto per il nick specificato.",
00977
00978 "Viene inviato un memo per informare l'utente.",
00979
00980 "Sintassi: \002WAITING\002",
00981
00982 "Questo comando и per comoditа. Praticamente и la stessa cosa che\n"
00983 "eseguire un LIST +req ."
00984 };
00985
00986 char *langtable_de[] = {
00987
00988 "Syntax: \002REQUEST \037vhost\037\002",
00989
00990 "Dein vHost wurde beantragt",
00991
00992 "Bitte warte %d Sekunden bevor Du einen neuen vHost beantragst",
00993
00994 "[auto memo] vHost \002%s\002 wurde beantragt.",
00995
00996 "Syntax: \002ACTIVATE \037nick\037\002",
00997
00998 "vHost fьr %s wurde aktiviert",
00999
01000 "[auto memo] Dein beantragter vHost wurde freigegeben.",
01001
01002 "Syntax: \002REJECT \037nick\037\002",
01003
01004 "vHost fьr %s wurde abgelehnt",
01005
01006 "[auto memo] Dein beantragter vHost wurde abgelehnt.",
01007
01008 "[auto memo] Dein beantragter vHost wurde abgelehnt. Begrьndung: %s",
01009
01010 "Keine vHost Beantragung fьr Nick %s gefunden.",
01011
01012 " REQUEST Beantrage einen vHost fьr Deinen Nick",
01013
01014 " ACTIVATE Freigeben eines beantragten vHostes von einem User\n"
01015 " REJECT Ablehnen eines beantragten vHostes von einem User\n"
01016 " WAITING Vereinfachter Befehl fьr LIST +req",
01017
01018 "Beantragt den angegebenen vHost fьr Deinen Nick, um von den\n"
01019 "Network Administratoren aktiviert zu werden. Bitte gedulde Dich eine Weile,\n"
01020 "bis ьber Deine Anfrage entschieden wurde.",
01021
01022 "Aktivert den beantragten vHost fьr den angegebenen Nick.",
01023
01024 "Eine Memo wird an den User gesendet, um ihn zu informieren.",
01025
01026 "Lehnt den beantragten vHost fьr den genannten Nick ab.",
01027
01028 "Eine Memo wird an den User gesendet, um ihn zu informieren.",
01029
01030 "Syntax: \002WAITING\002",
01031
01032 "Dieser Befehl ist Benutzerfreundlicher. Es ist genau derselbe\n"
01033 "als wenn man LIST +req benutzt."
01034 };
01035
01036 char *langtable_fr[] = {
01037
01038 "Syntaxe: \002REQUEST \037vhost\037\002",
01039
01040 "Votre demande de vHost a йtй envoyйe",
01041
01042 "Merci d'attendre %d secondes avant de demander un autre vHost",
01043
01044 "[auto memo] Le vHost \002%s\002 a йtй demandй.",
01045
01046 "Syntaxe: \002ACTIVATE \037pseudo\037\002",
01047
01048 "Le vHost de %s est activй",
01049
01050 "[auto memo] Votre demande de vHost a йtй approuvйe.",
01051
01052 "Syntaxe: \002REJECT \037pseudo\037\002",
01053
01054 "Le vHost de %s a йtй refusй",
01055
01056 "[auto memo] Votre demande de vHost a йtй refusйe.",
01057
01058 "[auto memo] Votre demande de vHost a йtй refusйe pour le motif suivant : %s",
01059
01060 "Aucune demande faite pour %s.",
01061
01062 " REQUEST Demander un vHost pour votre pseudo",
01063
01064 " ACTIVATE Approuver la demande de vHost d'un utilisateur\n"
01065 " REJECT Refuser la demande de vHost d'un utilisateur\n"
01066 " WAITING Raccourci de la commande LIST +req",
01067
01068 "Demande le vHost spйcifiй а кtre activй pour votre pseudo par les\n"
01069 "administrateurs du rйseau. Merci d'кtre patient le temps que votre demande\n"
01070 "soit prise en compte.",
01071
01072 "Active le vHost demandй pour un pseudo spйcifiй.",
01073
01074 "Un mйmo informant l'utilisateur de l'activation sera envoyй йgalement.",
01075
01076 "Refuse le vHost demandй pour un pseudo spйcifiй.",
01077
01078 "Un mйmo informant l'utilisateur du refus sera envoyй йgalement.",
01079
01080 "Syntaxe: \002WAITING\002",
01081
01082 "Cette commande est fournie par commoditй. C'est essentiellement\n"
01083 "la mкme que LIST +req ."
01084 };
01085
01086 moduleInsertLanguage(LANG_EN_US, LNG_NUM_STRINGS, langtable_en_us);
01087 moduleInsertLanguage(LANG_NL, LNG_NUM_STRINGS, langtable_nl);
01088 moduleInsertLanguage(LANG_PT, LNG_NUM_STRINGS, langtable_pt);
01089 moduleInsertLanguage(LANG_RU, LNG_NUM_STRINGS, langtable_ru);
01090 moduleInsertLanguage(LANG_IT, LNG_NUM_STRINGS, langtable_it);
01091 moduleInsertLanguage(LANG_DE, LNG_NUM_STRINGS, langtable_de);
01092 moduleInsertLanguage(LANG_FR, LNG_NUM_STRINGS, langtable_fr);
01093 }
01094
01095