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 "$Id: hs_request.c 1397 2008-06-03 18:44:54Z geniusdex $"
00022
00023
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
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
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);
00178 if (vIdent) {
00179 rawhostmask = myStrGetTokenRemainder(rawhostmask, '@', 1);
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
00271 if (u2 && u2->na && u2->na->nc)
00272 lang = u2->na->nc->language;
00273
00274
00275 if (mod_current_module->lang[lang].argc == 0)
00276 lang = LANG_EN_US;
00277
00278
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
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);
00459 my_add_host_request(nick, vIdent, vhost, creator, tmp_time);
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(¤t->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
00733 "Syntax: \002REQUEST \037vhost\037\002",
00734
00735 "Your vHost has been requested",
00736
00737 "Please wait %d seconds before requesting a new vHost",
00738
00739 "[auto memo] vHost \002%s\002 has been requested.",
00740
00741 "Syntax: \002ACTIVATE \037nick\037\002",
00742
00743 "vHost for %s has been activated",
00744
00745 "[auto memo] Your requested vHost has been approved.",
00746
00747 "Syntax: \002REJECT \037nick\037\002",
00748
00749 "vHost for %s has been rejected",
00750
00751 "[auto memo] Your requested vHost has been rejected.",
00752
00753 "[auto memo] Your requested vHost has been rejected. Reason: %s",
00754
00755 "No request for nick %s found.",
00756
00757 " REQUEST Request a vHost for your nick",
00758
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
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
00767 "Activate the requested vHost for the given nick.",
00768
00769 "A memo informing the user will also be sent.",
00770
00771 "Reject the requested vHost for the given nick.",
00772
00773 "A memo informing the user will also be sent.",
00774
00775 "Syntax: \002WAITING\002",
00776
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
00783 "Gebruik: \002REQUEST \037vhost\037\002",
00784
00785 "Je vHost is aangevraagd",
00786
00787 "Wacht %d seconden voor je een nieuwe vHost aanvraagt",
00788
00789 "[auto memo] vHost \002%s\002 is aangevraagd.",
00790
00791 "Gebruik: \002ACTIVATE \037nick\037\002",
00792
00793 "vHost voor %s is geactiveerd",
00794
00795 "[auto memo] Je aangevraagde vHost is geaccepteerd.",
00796
00797 "Gebruik: \002REJECT \037nick\037\002",
00798
00799 "vHost voor %s is afgekeurd",
00800
00801 "[auto memo] Je aangevraagde vHost is afgekeurd.",
00802
00803 "[auto memo] Je aangevraagde vHost is afgekeurd. Reden: %s",
00804
00805 "Geen aanvraag voor nick %s gevonden.",
00806
00807 " REQUEST Vraag een vHost aan voor je nick",
00808
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
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
00817 "Activeer de aangevraagde vHost voor de gegeven nick.",
00818
00819 "Een memo die de gebruiker op de hoogste stelt zal ook worden verstuurd.",
00820
00821 "Keur de aangevraagde vHost voor de gegeven nick af.",
00822
00823 "Een memo die de gebruiker op de hoogste stelt zal ook worden verstuurd.",
00824
00825 "Gebruik: \002WAITING\002",
00826
00827 "Dit commando is beschikbaar als handigheid. Het is simpelweg\n"
00828 "hetzelfde als LIST +req ."
00829 };
00830
00831 char *langtable_pt[] = {
00832
00833 "Sintaxe: \002REQUEST \037vhost\037\002",
00834
00835 "Seu pedido de vHost foi encaminhado",
00836
00837 "Por favor, espere %d segundos antes de fazer um novo pedido de vHost",
00838
00839 "[Auto Memo] O vHost \002%s\002 foi solicitado.",
00840
00841 "Sintaxe: \002ACTIVATE \037nick\037\002",
00842
00843 "O vHost para %s foi ativado",
00844
00845 "[Auto Memo] Seu pedido de vHost foi aprovado.",
00846
00847 "Sintaxe: \002REJECT \037nick\037\002",
00848
00849 "O vHost de %s foi recusado",
00850
00851 "[Auto Memo] Seu pedido de vHost foi recusado.",
00852
00853 "[Auto Memo] Seu pedido de vHost foi recusado. Motivo: %s",
00854
00855 "Nenhum pedido encontrado para o nick %s.",
00856
00857 " REQUEST Request a vHost for your nick",
00858
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
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
00867 "Ativa o vHost solicitado para o nick fornecido.",
00868
00869 "Um memo informando o usuбrio tambйm serб enviado.",
00870
00871 "Recusa o pedido de vHost para o nick fornecido.",
00872
00873 "Um memo informando o usuбrio tambйm serб enviado.",
00874
00875 "Sintaxe: \002WAITING\002",
00876
00877 "Este comando й usado por conveniкncia. Й essencialmente\n"
00878 "o mesmo que fazer um LIST +req"
00879 };
00880
00881 char *langtable_ru[] = {
00882
00883 "Синтаксис: \002REQUEST \037vHost\037\002",
00884
00885 "Ваш запрос на vHost отправлен.",
00886
00887 "Пожалуйста, подождите %d секунд, прежде чем запрашивать новый vHost",
00888
00889 "[авто-сообщение] Был запрошен vHost \002%s\002",
00890
00891 "Синтаксис: \002ACTIVATE \037ник\037\002",
00892
00893 "vHost для %s успешно активирован",
00894
00895 "[авто-сообщение] Запрашиваемый вами vHost утвержден и активирован.",
00896
00897 "Синтаксис: \002REJECT \037ник\037\002",
00898
00899 "vHost для %s отклонен.",
00900
00901 "[авто-сообщение] Запрашиваемый вами vHost отклонен.",
00902
00903 "[авто-сообщение] Запрашиваемый вами vHost отклонен. Причина: %s",
00904
00905 "Запрос на vHost для ника %s не найден.",
00906
00907 " REQUEST Запрос на vHost для вашего текущего ника",
00908
00909 " ACTIVATE Утвердить запрашиваемый пользователем vHost\n"
00910 " REJECT Отклонить запрашиваемый пользователем vHost\n"
00911 " WAITING Список запросов ожидающих обработки (аналог LIST +req)",
00912
00913 "Отправляет запрос на активацию vHost, который будет рассмотрен одним из\n"
00914 "администраторов сети. Просьба проявить терпение, пока запрос\n"
00915 "рассматривается администрацией.",
00916
00917 "Утвердить запрашиваемый vHost для указанного ника.",
00918
00919 "Пользователю будет послано авто-уведомление об активации его запроса.",
00920
00921 "Отклонить запрашиваемый vHost для указанного ника.",
00922
00923 "Пользователю будет послано авто-уведомление об отклонении его запроса.",
00924
00925 "Синтаксис: \002WAITING\002",
00926
00927 "Данная команда создана для удобства использования и выводит список запросов,\n"
00928 "ожидающих обработки. Аналогичная команда: LIST +req ."
00929 };
00930
00931 char *langtable_it[] = {
00932
00933 "Sintassi: \002REQUEST \037vhost\037\002",
00934
00935 "Il tuo vHost и stato richiesto",
00936
00937 "Prego attendere %d secondi prima di richiedere un nuovo vHost",
00938
00939 "[auto memo] и stato richiesto il vHost \002%s\002.",
00940
00941 "Sintassi: \002ACTIVATE \037nick\037\002",
00942
00943 "Il vHost per %s и stato attivato",
00944
00945 "[auto memo] Il vHost da te richiesto и stato approvato.",
00946
00947 "Sintassi: \002REJECT \037nick\037\002",
00948
00949 "Il vHost per %s и stato rifiutato",
00950
00951 "[auto memo] Il vHost da te richiesto и stato rifiutato.",
00952
00953 "[auto memo] Il vHost da te richiesto и stato rifiutato. Motivo: %s",
00954
00955 "Nessuna richiesta trovata per il nick %s.",
00956
00957 " REQUEST Richiede un vHost per il tuo nick",
00958
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
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
00967 "Attiva il vHost richiesto per il nick specificato.",
00968
00969 "Viene inviato un memo per informare l'utente.",
00970
00971 "Rifiuta il vHost richiesto per il nick specificato.",
00972
00973 "Viene inviato un memo per informare l'utente.",
00974
00975 "Sintassi: \002WAITING\002",
00976
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